{"id":46123190,"url":"https://github.com/mouette03/filyo","last_synced_at":"2026-04-07T00:01:49.645Z","repository":{"id":341193700,"uuid":"1168816053","full_name":"Mouette03/Filyo","owner":"Mouette03","description":"file transfer","archived":false,"fork":false,"pushed_at":"2026-04-01T21:40:27.000Z","size":3412,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-02T02:46:21.142Z","etag":null,"topics":["docker","fastify","file-sharing","file-transfer","french","french-language","mariadb","nodejs","prisma","react","self-hosted","sqlite","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mouette03.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-27T20:40:57.000Z","updated_at":"2026-04-01T21:40:30.000Z","dependencies_parsed_at":"2026-03-07T02:02:14.783Z","dependency_job_id":null,"html_url":"https://github.com/Mouette03/Filyo","commit_stats":null,"previous_names":["mouette03/filyo"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/Mouette03/Filyo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mouette03%2FFilyo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mouette03%2FFilyo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mouette03%2FFilyo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mouette03%2FFilyo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mouette03","download_url":"https://codeload.github.com/Mouette03/Filyo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mouette03%2FFilyo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31494177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","fastify","file-sharing","file-transfer","french","french-language","mariadb","nodejs","prisma","react","self-hosted","sqlite","typescript"],"created_at":"2026-03-02T01:02:04.024Z","updated_at":"2026-04-07T00:01:49.632Z","avatar_url":"https://github.com/Mouette03.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Filyo — Private \u0026 Local File Transfer / Transfert de fichiers local \u0026 privé\n\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPLv3-blue.svg)](LICENSE)\n[![Version](https://img.shields.io/github/v/release/Mouette03/Filyo?include_prereleases)](https://github.com/Mouette03/Filyo/releases)\n[![Docker](https://img.shields.io/badge/Docker-multi--arch-2496ED?logo=docker\u0026logoColor=white)](https://ghcr.io/mouette03/filyo)\n[![Node.js](https://img.shields.io/badge/Node.js-24-339933?logo=node.js\u0026logoColor=white)](https://nodejs.org)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org)\n[![Self-hosted](https://img.shields.io/badge/self--hosted-✓-success)](https://github.com/Mouette03/Filyo)\n![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/Mouette03/Filyo?utm_source=oss\u0026utm_medium=github\u0026utm_campaign=Mouette03%2FFilyo\u0026labelColor=171717\u0026color=FF570A\u0026link=https%3A%2F%2Fcoderabbit.ai\u0026label=CodeRabbit+Reviews)\n\n---\n\n\u003e [!WARNING]\n\u003e **🇬🇧 Pre-release software** — This project is currently in pre-release. The database schema may change between versions without a migration path. If you encounter database errors or startup failures after updating, **a clean reinstall is required**: stop the containers, delete the data volume, and restart.\n\u003e\n\u003e **🇫🇷 Logiciel en pré-version** — Ce projet est actuellement en pré-release. Le schéma de base de données peut changer entre les versions sans chemin de migration. Si vous rencontrez des erreurs de base de données ou des échecs au démarrage après une mise à jour, **une réinstallation propre est nécessaire** : arrêtez les conteneurs, supprimez le volume de données et redémarrez.\n\n---\n\n\u003cdetails open\u003e\n\u003csummary\u003e🇬🇧 English\u003c/summary\u003e\n\n**Self-hosted** file-sharing app, no S3 storage. Dark glassmorphism design, bilingual interface (FR/EN), and **reverse sharing** feature.\n\n---\n\n## 📸 Screenshots\n\n| Upload page | Dashboard |\n|:---:|:---:|\n| ![Upload page](docs/screenshots/home.png) | ![Dashboard](docs/screenshots/dashboard.png) |\n\n| Reverse sharing | User profile |\n|:---:|:---:|\n| ![Reverse sharing](docs/screenshots/reverse-share.png) | ![Profile](docs/screenshots/profile.png) |\n\n---\n\n## ✨ Features\n\n| Feature | Description |\n|---|---|\n| **File upload** | Multi-file upload with progress bar and drag \u0026 drop |\n| **Protection** | Optional password per file/link |\n| **Rate limiting** | Brute-force protection on login, password reset and file deposit |\n| **Expiration** | 1h / 24h / 7d / 30d / never |\n| **Max downloads** | Configurable limit per link |\n| **Email sharing** | Send share link by email |\n| **Reverse sharing** | Create a link to receive files from others |\n| **Reverse share email** | Send deposit link by email to one or more recipients |\n| **Sender info** | Name, email, message attached to deposit |\n| **Dashboard** | Stats, sent \u0026 received files, deposit requests |\n| **Multi-user** | Admin/User roles, admin panel management |\n| **Open registration** | Optionally enable public signup from settings |\n| **Profile** | Avatar, display name, password change |\n| **Settings** | App name, logo, SMTP, registration, appearance |\n| **Themes** | Dark/Light/Auto + customizable accent colors |\n| **i18n** | Fully translated in French and English |\n| **Docker** | Multi-arch images (amd64 + arm64), SQLite and MariaDB variants |\n| **Per-user storage quota** | Admin can set a storage limit per user (MB/GB); enforced on upload to prevent disk saturation |\n| **Encrypted SMTP password** | SMTP password stored encrypted in the database (AES-256-GCM, key derived from `JWT_SECRET`) |\n\n---\n\n## 🚀 Quick Start\n\n### SQLite (recommended)\n\n```bash\ncp .env.example .env\ndocker compose up -d\n```\n\n### MariaDB (prod/multi-user)\n\n```bash\ncp .env.example .env\ndocker compose -f docker-compose.mariadb.yml up -d\n```\n\n**http://localhost:3001** → Create your admin account on first launch.\n\n---\n\n## 🌐 Reverse proxy (Traefik/Nginx)\n\nRelative API paths → **zero config needed** !\n\n**Traefik** :\n```yaml\nlabels:\n  - \"traefik.enable=true\"\n  - \"traefik.http.routers.filyo.rule=Host(`filyo.yourdomain.com`)\"\n  - \"traefik.http.services.filyo.loadbalancer.server.port=3001\"\n```\n\n---\n\n## 🔧 Environment variables\n\n| Variable | Default | Description |\n|---|---|---|\n| `JWT_SECRET` | *required, no default* | **Required — must be set before first launch.** Also used as the AES-256-GCM encryption key for the SMTP password stored in the database. |\n| `PORT` | `3001` | Host port exposed by the container (internal port is always 3001) |\n| `DATA_PATH` | `./data` | Data folder (database + uploads) |\n| `LOG_LEVEL` | `info` | Minimum log level (Pino). The app emits `debug`, `info`, `warn`, `error`. Use `debug` for verbose output, `warn` for quiet, `silent` to disable all logs. |\n| `UPLOAD_TIMEOUT_MS` | `1800000` | Upload timeout in ms (default 30 min, min 1 min, max 2 h) |\n\n\u003e [!NOTE]\n\u003e Any SMTP password saved through the settings form is stored **encrypted** in the database (AES-256-GCM, key derived from `JWT_SECRET`). Passwords imported before this feature was introduced may still be stored in plaintext and will be migrated automatically on next save. **Rotating `JWT_SECRET` breaks existing encrypted passwords — you must re-enter the SMTP password in the settings after any key rotation.**\n\n**SQLite** : `DATABASE_URL=file:/data/filyo.db`\n**MariaDB** : `DB_HOST`, `DB_USER`, `DB_PASSWORD`, etc.\n\n---\n\n## 🗄️ SQLite vs MariaDB\n\n| | SQLite | MariaDB |\n|---|---|---|\n| **Setup** | ✅ Zero dependency | ⚠️ Separate container |\n| **Use case** | Personal/family | Multi-user/production |\n| **Docker image** | `:latest` | `:latest-mariadb` |\n| **Backup** | Copy `filyo.db` | `mysqldump` |\n\n---\n\n## 📦 CI/CD GitHub Actions\n\n- **Lint + type-check** (push/PR)\n- **Multi-arch build** → `ghcr.io/mouette03/filyo`\n- Tags: `latest`, `sha-xxxx`, `v1.0.3(-mariadb)`\n\n```bash\ndocker pull ghcr.io/mouette03/filyo:v1.0.3\n```\n\n---\n\n## 📜 Licenses \u0026 Credits\n\n### Filyo License\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPLv3-blue.svg)](LICENSE)\n\n### Main dependencies\n\n| Project | License | Role |\n|--------|---------|------|\n| **Backend** | | |\n| [Fastify](https://github.com/fastify/fastify) | MIT | API Framework |\n| [Prisma](https://github.com/prisma/prisma) | Apache-2.0 | Database |\n| [bcryptjs](https://github.com/dcodeIO/bcrypt.js) | MIT | Authentication |\n| **Frontend** | | |\n| [React](https://github.com/facebook/react) | MIT | UI |\n| [TailwindCSS](https://github.com/tailwindlabs/tailwindcss) | MIT | Design |\n| [Vite](https://github.com/vitejs/vite) | MIT | Build tool |\n| [Zustand](https://github.com/pmndrs/zustand) | MIT | State management |\n\n**Full inventory**:\n- [Backend](backend/licenses.csv) — API (100+ dependencies)\n- [Frontend](frontend/licenses.csv) — UI (150+ dependencies)\n\n**100% MIT/Apache/ISC** — permissive licenses, AGPL compatible.\n\n### 🙏 Thanks to\n- **Fastify Team** — Blazing fast API ⚡\n- **Prisma Team** — Magic ORM ✨\n- **React Team** — Modern UI\n- **Tailwind Labs** — Glassmorphism design\n- **100+ open-source maintainers** !\n\n*licenses.csv auto-updated via GitHub Actions*\n\n\u003c/details\u003e\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003e🇫🇷 Français\u003c/summary\u003e\n\nApplication de partage de fichiers **auto-hébergée**, sans stockage S3. Design glassmorphism sombre, interface bilingue (FR/EN), et fonctionnalité de **partage inversé**.\n\n---\n\n## 📸 Captures d'écran\n\n| Page d'envoi | Tableau de bord |\n|:---:|:---:|\n| ![Page d'envoi](docs/screenshots/home.png) | ![Dashboard](docs/screenshots/dashboard.png) |\n\n| Partage inversé | Profil utilisateur |\n|:---:|:---:|\n| ![Partage inversé](docs/screenshots/reverse-share.png) | ![Profil](docs/screenshots/profile.png) |\n\n---\n\n## ✨ Fonctionnalités\n\n| Fonctionnalité | Description |\n|---|---|\n| **Envoi de fichiers** | Upload multi-fichiers avec barre de progression et glisser-déposer |\n| **Protection** | Mot de passe optionnel par fichier/lien |\n| **Limitation de débit** | Protection brute-force sur login, reset mot de passe et dépôt de fichiers |\n| **Expiration** | 1h / 24h / 7j / 30j / jamais |\n| **Max téléchargements** | Limite configurable par lien |\n| **Envoi par email** | Envoi du lien de partage par email |\n| **Partage inversé** | Créer un lien pour recevoir des fichiers d'un tiers |\n| **Email partage inversé** | Envoi du lien de dépôt par email à un ou plusieurs destinataires |\n| **Info déposant** | Nom, email, message joint au dépôt |\n| **Dashboard** | Statistiques, fichiers envoyés \u0026 reçus, demandes de dépôt |\n| **Multi-utilisateurs** | Rôles Admin/Utilisateur, gestion panneau admin |\n| **Inscription libre** | Activation optionnelle depuis réglages |\n| **Profil** | Avatar, nom, changement mot de passe |\n| **Réglages** | Nom app, logo, SMTP, inscription, apparence |\n| **Thèmes** | Sombre/Clair/Auto + couleurs personnalisables |\n| **i18n** | Français + Anglais |\n| **Docker** | Multi-arch (amd64/arm64), SQLite + MariaDB |\n| **Quota stockage par utilisateur** | L'administrateur peut définir une limite de stockage par utilisateur (MB/GB) ; appliquée lors des uploads pour éviter la saturation du disque |\n| **Chiffrement mot de passe SMTP** | Mot de passe SMTP chiffré en base (AES-256-GCM, clé dérivée de `JWT_SECRET`) |\n\n---\n\n## 🚀 Lancement rapide\n\n### SQLite (recommandé)\n\n```bash\ncp .env.example .env\ndocker compose up -d\n```\n\n### MariaDB (prod/multi-users)\n\n```bash\ncp .env.example .env\ndocker compose -f docker-compose.mariadb.yml up -d\n```\n\n**http://localhost:3001** → Crée ton compte admin au 1er lancement.\n\n---\n\n## 🌐 Reverse proxy (Traefik/Nginx)\n\nChemins relatifs → **zéro config** !\n\n**Traefik** :\n```yaml\nlabels:\n  - \"traefik.enable=true\"\n  - \"traefik.http.routers.filyo.rule=Host(`filyo.mondomaine.fr`)\"\n  - \"traefik.http.services.filyo.loadbalancer.server.port=3001\"\n```\n\n---\n\n## 🔧 Variables d'environnement\n\n| Variable | Défaut | Description |\n|---|---|---|\n| `JWT_SECRET` | *obligatoire, aucun défaut* | **Obligatoire — à renseigner avant le premier lancement.** Sert aussi de clé AES-256-GCM pour chiffrer le mot de passe SMTP stocké en base. |\n| `PORT` | `3001` | Port exposé sur l'hôte (le conteneur interne tourne toujours sur 3001) |\n| `DATA_PATH` | `./data` | Dossier données (base de données + uploads) |\n| `LOG_LEVEL` | `info` | Seuil minimum de log (Pino). Le code émet `debug`, `info`, `warn`, `error`. Utiliser `debug` pour plus de verbosité, `warn` pour le silence relatif, `silent` pour tout désactiver. |\n| `UPLOAD_TIMEOUT_MS` | `1800000` | Délai d'attente des uploads (ms — défaut 30 min, min 1 min, max 2 h) |\n\n\u003e [!NOTE]\n\u003e Tout mot de passe SMTP enregistré via le formulaire de réglages est stocké **chiffré** en base de données (AES-256-GCM, clé dérivée de `JWT_SECRET`). Les mots de passe importés avant l'introduction de cette fonctionnalité peuvent encore être en clair et seront migrés automatiquement à la prochaine sauvegarde. **Une rotation de `JWT_SECRET` invalide les mots de passe chiffrés existants — vous devez ressaisir le mot de passe SMTP dans les réglages après tout changement de clé.**\n\n**SQLite** : `DATABASE_URL=file:/data/filyo.db`\n**MariaDB** : `DB_HOST`, `DB_USER`, `DB_PASSWORD`, etc.\n\n---\n\n## 🗄️ SQLite vs MariaDB\n\n| | SQLite | MariaDB |\n|---|---|---|\n| **Setup** | ✅ Zéro dépendance | ⚠️ Conteneur DB |\n| **Usage** | Personnel/familial | Prod/multi-users |\n| **Image** | `:latest` | `:latest-mariadb` |\n| **Backup** | Copier `filyo.db` | `mysqldump` |\n\n---\n\n## 📦 CI/CD GitHub Actions\n\n- **Lint + type-check** (push/PR)\n- **Build multi-arch** → `ghcr.io/mouette03/filyo`\n- Tags : `latest`, `sha-xxxx`, `v1.0.3(-mariadb)`\n\n```bash\ndocker pull ghcr.io/mouette03/filyo:v1.0.3\n```\n\n---\n\n## 📜 Licences \u0026 Remerciements\n\n### Licence Filyo\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPLv3-blue.svg)](LICENSE)\n\n### Dépendances principales\n\n| Projet | Licence | Rôle |\n|--------|---------|------|\n| **Backend** | | |\n| [Fastify](https://github.com/fastify/fastify) | MIT | API Framework |\n| [Prisma](https://github.com/prisma/prisma) | Apache-2.0 | Base de données |\n| [bcryptjs](https://github.com/dcodeIO/bcrypt.js) | MIT | Authentification |\n| **Frontend** | | |\n| [React](https://github.com/facebook/react) | MIT | Interface |\n| [TailwindCSS](https://github.com/tailwindlabs/tailwindcss) | MIT | Design |\n| [Vite](https://github.com/vitejs/vite) | MIT | Build tool |\n| [Zustand](https://github.com/pmndrs/zustand) | MIT | State |\n\n**Inventaire complet** :\n- [Backend](backend/licenses.csv) — API (100+ dépendances)\n- [Frontend](frontend/licenses.csv) — UI (150+ dépendances)\n\n**100% MIT/Apache/ISC** — licences permissives et compatibles AGPL.\n\n### 🙏 Remerciements\n- **Fastify Team** — API ultra-performante ⚡\n- **Prisma Team** — ORM magique ✨\n- **React Team** — Interface moderne\n- **Tailwind Labs** — Design glassmorphism\n- **100+ mainteneurs** open source !\n\n*licenses.csv auto-mis à jour via GitHub Actions*\n\n\u003c/details\u003e \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmouette03%2Ffilyo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmouette03%2Ffilyo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmouette03%2Ffilyo/lists"}