Client de synchronisation Windows vers backends de stockage prives — l'equivalent OneDrive pour votre NAS.
Aujourd'hui, un utilisateur Windows qui veut etendre son stockage est limite a Google Drive, OneDrive ou iDrive. Ces solutions :
- Sont vendor-locked — vos fichiers sont sur leurs serveurs
- Sont limitees en espace — payantes au-dela du quota gratuit
- Ne supportent pas les backends prives — NAS, CephFS, MooseFS, S3 auto-heberge
Pourtant, de nombreux utilisateurs disposent deja d'une infrastructure de stockage maison (NAS Synology, TrueNAS, serveur MooseFS...) qui reste inexploitee depuis Windows.
GhostDrive est un client Windows libre qui transforme n'importe quel backend de stockage prive en drive cloud, avec la meme experience qu'OneDrive :
- Placeholders Files On-Demand — les fichiers apparaissent dans l'explorateur sans occuper d'espace local
- Synchronisation bidirectionnelle — les modifications locales se propagent vers le backend, et vice-versa
- Cache local configurable — gardez vos fichiers les plus utilises disponibles hors ligne
- Architecture plugin — connectez n'importe quel backend via une interface standardisee
- Synchronisation bidirectionnelle de dossiers locaux vers backends distants
- Placeholders Windows (Cloud Filter API) — Files On-Demand
- Cache local activable par point de sync
- Plugins inclus : WebDAV et MooseFS
- Interface tray Windows avec menu natif — lancement au demarrage, fenetre cachee au lieu de quittee
- Configuration backends WebDAV et MooseFS avec validation et test de connexion en direct
- Points de synchronisation configurables (dossier local ↔ chemin distant) par backend
- Vue etat de synchronisation en temps reel — barres de progression par fichier, erreurs, historique
- VFS Foundation : architecture WinFsp unifiée, un seul drive GhD: pour tous les backends
- ReadAt() & ChunkSize() : lectures par plage optimisées pour hydratation progressive
- Breaking change : interface StorageBackend requiert ReadAt() et ChunkSize()
- Files On-Demand : Cloud Filter API foundation, placeholders non hydratés, hydratation progressive par chunks
- Cache chunks BoltDB : TTL configurable, invalidation ETag/mtime, éviction LRU
- Badges shell Windows : états CF natifs ☁️ ✓✓ ⟳ ⚡ via CfSetInSyncState/CfSetPinState
- 8 CF API bugs fixes : normalisation chemins, BaseDirectoryPath, ALREADY_EXISTS, CfConvertToPlaceholder
- V2.2 : Workflow Objets (rename/move natif, copier état complet, data-loss bugs, avertissement Conflict)
- V2.3 : Sync bidirectionnelle complète (badges complets avec sparse MSIX, UI conflits, cache états)
- V2.4 : Cache avancé & Offline (à détailler)
Pour la roadmap détaillée, voir docs/roadmap.md.
- Plusieurs machines synchronisées vers le même backend
- Chiffrement côté client (zero-knowledge)
- Versioning des fichiers
┌─────────────────────────────────────────────────────┐
│ Windows Explorer │
│ (placeholders via Cloud Filter API) │
└──────────────────────┬──────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────┐
│ GhostDrive (Wails App) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Sync Engine │ │ Cache Mgr │ │ Tray UI │ │
│ └──────┬──────┘ └─────────────┘ └─────────────┘ │
│ │ │
│ ┌──────▼──────────────────────────────────────┐ │
│ │ StorageBackend Interface (plugin) │ │
│ └──────┬──────────────────┬───────────────────┘ │
│ │ │ │
│ ┌──────▼──────┐ ┌────────▼────────┐ │
│ │ WebDAV │ │ MooseFS │ [+ plugins] │
│ └─────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────▼────┐ ┌─────▼────┐ ┌─────▼─────┐
│ NAS │ │ MooseFS │ │ S3/MinIO │
│ WebDAV │ │ Cluster │ │ (V2+) │
└─────────┘ └──────────┘ └───────────┘
| Composant | Technologie |
|---|---|
| Application | Go 1.21 + Wails v2 |
| UI | React + TypeScript |
| Placeholders Windows | Cloud Filter API + WinFsp |
| Architecture plugin | Interface Go (compile) |
| CI/CD | GitHub Actions |
| Distribution | Binaires GitHub Releases |
Pour comprendre les différents états des fichiers et les actions possibles selon l'état, consultez la matrice états × actions :
📖 Voir : docs/sync-states-actions.md — matrice complète (9 états × 10 actions)
Telecharger le dernier binaire depuis les Releases GitHub :
| Plateforme | Fichier |
|---|---|
| Windows (x64) | ghostdrive-vX.Y.Z-windows-amd64.exe |
Windows : executer le binaire, GhostDrive se lance automatiquement au demarrage.
Prerequis Windows : WinFsp 2.0+ doit etre installe pour les placeholders Files On-Demand et le drive virtuel GhD:
Prerequis :
- Go 1.21+
- Node.js 18+
- Wails v2 (
go install github.com/wailsapp/wails/v2/cmd/wails@latest) - WinFsp 2.0+ (Windows uniquement — requis pour placeholders Files On-Demand et drive GhD:)
git clone https://github.com/CCoupel/GhostDrive.git
cd GhostDrive
# Build Windows depuis WSL/Linux
wails build -platform windows/amd64GhostDrive se configure via l'interface tray :
- Cliquer sur l'icone GhostDrive dans la barre des taches
- Backends → Ajouter un backend (WebDAV ou MooseFS)
- Sync → Configurer les points de synchronisation (dossier local ↔ dossier distant)
- Cache → Activer le cache local si souhaite
URL : https://mon-nas.local/webdav
Username : mon_utilisateur
Password : ****
GhostDrive utilise une architecture plugin basee sur une interface Go.
Pour ajouter le support d'un nouveau backend, implementez l'interface StorageBackend :
type StorageBackend interface {
Name() string
Connect(config BackendConfig) error
Disconnect() error
Upload(ctx context.Context, local, remote string, progress ProgressCallback) error
Download(ctx context.Context, remote, local string, progress ProgressCallback) error
Delete(ctx context.Context, remote string) error
List(ctx context.Context, path string) ([]FileInfo, error)
Stat(ctx context.Context, path string) (*FileInfo, error)
Watch(ctx context.Context, path string) (<-chan FileEvent, error)
CreateDir(ctx context.Context, path string) error
}Consultez la documentation plugin pour le guide complet.
Les contributions sont les bienvenues !
- Fork le depot
- Creer une branche :
feat/<description>oubug/<description> - Implementer avec des tests
- Ouvrir une Pull Request
Les issues sont gerees sur GitHub Issues. Les features sont organisees en Epics avec des Milestones (V1, V2, V3).
| Solution | Backends prives | Libre | Files On-Demand | Multi-client |
|---|---|---|---|---|
| OneDrive | Non | Non | Oui | Oui |
| Google Drive | Non | Non | Oui | Oui |
| Rclone mount | Oui | Oui | Non | Non |
| Mountain Duck | Oui | Non | Partiel | Non |
| GhostDrive | Oui | Oui | Oui (V1) | V2 |
MIT — voir LICENSE