Quasi tutti, quando scoprono Syncthing, lo usano nello stesso modo, ovvero due computer, una cartella condivisa e i file che compaiono di qua e di là come per magia. È un buon punto di partenza, ma è anche il motivo per cui molti lo archiviano mentalmente come un Dropbox che gira in casa.
In realtà, una volta capita la logica peer-to-peer su cui si fonda, Syncthing diventa qualcosa di diverso, cioè l’ossatura su cui far passare backup, sincronizzazioni selettive tra decine di dispositivi e perfino automazioni che reagiscono ai file in tempo reale. Il punto di forza resta lo stesso da sempre, ovvero che i tuoi dati viaggiano cifrati direttamente tra i tuoi dispositivi, senza passare da un server centrale di proprietà altrui.
Non c’è un account, non c’è un piano a pagamento e non c’è un limite di spazio che non sia quello dei tuoi dischi. Con la versione 2.0, arrivata nell’agosto 2025, il progetto ha riscritto il proprio motore interno passando da LevelDB a SQLite, mentre la 2.1.1 di giugno 2026 ha consolidato il lavoro aggiungendo i raggruppamenti nella GUI e il supporto ai proxy HTTP.
In questa guida lascio da parte l’installazione base e mi concentro su ciò che rende Syncthing uno strumento valido, ovvero sincronizzazione selettiva, versioning configurato come si deve, integrazione con script di backup e gestione su Android e su server senza interfaccia grafica.
Cosa cambia con la versione 2
Per anni Syncthing ha conservato l’indice dei file in un database LevelDB, una soluzione che funzionava ma che, con grandi quantità di file, tendeva a gonfiarsi e a comportarsi in modo difficile da prevedere. La versione 2.0 ha sostituito quel motore con SQLite, un database molto più diffuso, leggibile e facile da mantenere.
Il vantaggio è doppio, perché l’indice occupa meno spazio ed è più semplice da diagnosticare quando qualcosa non torna. C’è però un dettaglio da non sottovalutare, ovvero che al primo avvio della 2.0 viene eseguita una migrazione una tantum del vecchio database, che su installazioni con centinaia di migliaia di file può richiedere parecchio tempo.
Insieme al nuovo motore sono arrivati altri cambiamenti che incidono sul comportamento di tutti i giorni. Gli elementi cancellati non vengono più conservati per sempre nell’indice, ma dimenticati dopo sei mesi, il che mantiene il database più snello. Tra due dispositivi che girano entrambi sulla versione 2 vengono ora aperte più connessioni in parallelo per impostazione predefinita, con un guadagno di velocità sui trasferimenti grandi.
Inoltre, all’avvio non viene più creata la classica cartella default, una scelta che evita confusione a chi installa il programma e si ritrova condivisioni mai chieste. Va segnalato anche il rovescio della medaglia, ovvero che alcune piattaforme come Windows su ARM, NetBSD e Solaris hanno perso i binari precompilati ufficiali, a causa delle complicazioni nella compilazione incrociata con SQLite. Se usi una di queste, dovrai compilare da sorgente oppure restare sul ramo 1.x.
Sincronizzazione selettiva: decidere cosa sincronizzare e dove
Il cuore di un uso avanzato di Syncthing è smettere di pensare in termini di sincronizzare tutta la cartella su tutti i dispositivi. Quasi mai è quello che ti serve. Sul portatile vuoi i documenti di lavoro ma non l’archivio fotografico da 200 GB, sul telefono vuoi solo le ricevute scansionate e sul server di casa, invece, vuoi tutto. Syncthing offre due meccanismi distinti per ottenere questo controllo fine.
Il primo è il file .stignore, che funziona in modo simile al .gitignore di Git. Lo metti nella radice della cartella condivisa e dentro elenchi i pattern di ciò che non vuoi sincronizzare su quel dispositivo. La cosa importante è che .stignore è locale a ciascun dispositivo, quindi puoi avere regole diverse sullo stesso folder a seconda di dove ti trovi. Ecco un esempio pratico per escludere file temporanei, cache e una sottocartella pesante.
// Cartelle pesanti che non voglio sul portatile
RAW_fotografici
Video/Originali
// File temporanei e di sistema
(?d).DS_Store
(?d)Thumbs.db
*.tmp
~*
// Eccezione, questo lo voglio comunque
!Video/Originali/da_montare
Il prefisso (?d) dice a Syncthing che quel file può essere cancellato se sta bloccando l’eliminazione di una cartella, mentre il punto esclamativo crea un’eccezione che reintroduce qualcosa escluso in precedenza. L’ordine conta, perché le regole vengono valutate dall’alto verso il basso e la prima che corrisponde vince.
Il secondo meccanismo riguarda il tipo di cartella, e qui entra in gioco una delle funzioni più sottovalutate del programma. Ogni folder può essere impostato come Send & Receive, cioè il comportamento normale e bidirezionale, oppure come Send Only o Receive Only.
Una cartella Send Only invia le proprie modifiche agli altri dispositivi ma ignora quelle in arrivo, perciò è perfetta per un server che deve distribuire file senza che nessuno possa alterarli a monte. Una cartella Receive Only, al contrario, accetta tutto ma non propaga mai i propri cambiamenti, ed è esattamente ciò che vuoi sulla destinazione di un backup, dove un file modificato per errore non deve tornare indietro a sovrascrivere l’originale. Combinando i tipi di cartella con i .stignore ottieni un controllo granulare che nessun servizio cloud commerciale ti concede con altrettanta libertà.
Versioning, la rete di sicurezza che ti salva dagli errori
La sincronizzazione, da sola, è un’arma a doppio taglio, perché se cancelli o rovini un file su un dispositivo quella modifica si propaga ovunque in pochi secondi. È qui che il versioning di Syncthing diventa indispensabile. Il programma offre quattro strategie, e sceglierla bene fa la differenza tra un sistema robusto e un incidente che aspetta solo di succedere.
La modalità più semplice è il Trash Can, cioè il cestino. Quando un file viene cancellato o sostituito, la versione precedente finisce in una cartella nascosta .stversions invece di sparire, e puoi impostare per quanti giorni conservarla prima della pulizia automatica. È la scelta giusta per la maggior parte di chi vuole solo una protezione contro le cancellazioni accidentali.
Un gradino sopra c’è lo Staggered, il versioning scaglionato, che è la mia raccomandazione per i dati a cui tieni davvero. Anziché conservare ogni singola versione, mantiene una densità decrescente nel tempo, ovvero tante versioni nell’ultima ora, una all’ora per il primo giorno, una al giorno per il primo mese e una a settimana fino al limite massimo che imposti. In questo modo recuperi facilmente un file modificato cinque minuti fa senza accumulare gigabyte di copie inutili dei mesi passati.
Le altre due opzioni includono il Simple File Versioning che tiene semplicemente un numero fisso di versioni per file, e l’External Versioning che delega tutto a un comando esterno che scrivi tu. In quest’ultimo caso Syncthing ti passa il percorso del file che sta per essere sostituito e sei tu a decidere cosa farne, magari spostandolo in un archivio compresso o caricandolo altrove.
Un consiglio pratico che vale per tutte le modalità, ovvero attivare il versioning soprattutto sui dispositivi sicuri, come il server di casa, e tenerlo più leggero o disattivato su quelli con poco spazio. Il bello è che, come per i .stignore, la configurazione del versioning è locale, quindi puoi avere uno Staggered generoso sul NAS e nessun versioning sul telefono.
Integrare Syncthing con i tuoi script di backup
Qui Syncthing rivela la sua natura di strumento per smanettoni. Sotto la GUI gira infatti un’API REST completa, esposta sulla stessa porta dell’interfaccia web (di default la 8384), che ti permette di pilotare e interrogare il demone da qualsiasi script. La chiave d’accesso la trovi nel file di configurazione oppure nella sezione Actions e poi Advanced della GUI, ed è obbligatoria per ogni chiamata.
Un primo uso immediato è verificare lo stato di sincronizzazione di una cartella prima di lanciare un backup, così da non archiviare dati incompleti. Con curl diventa una sola riga.
API_KEY="la-tua-chiave-api"
curl -s -H "X-API-Key: $API_KEY" \
"http://localhost:8384/rest/db/status?folder=documenti" \
| jq '.state, .needFiles'
Se state è idle e needFiles è zero, la cartella è allineata e puoi procedere in sicurezza. Questo controllo è perfetto da incollare in testa a uno script che poi passa la palla a uno strumento di backup vero e proprio come restic o Borg, i quali si occupano di deduplica, cifratura e cronologia su una destinazione remota.
La filosofia da adottare è semplice, ovvero Syncthing tiene i tuoi dispositivi allineati in tempo reale, mentre il software di backup crea i punti di ripristino storici.
L’integrazione più elegante, però, sfrutta il sistema di eventi. Syncthing emette un flusso di eventi a cui puoi abbonarti per reagire a ciò che accade, ad esempio lanciare uno script ogni volta che una cartella completa la sincronizzazione. Ecco un piccolo watcher in Bash che attende il completamento e poi esegue un comando.
#!/usr/bin/env bash
API_KEY="la-tua-chiave-api"
BASE="http://localhost:8384/rest"
last=0
while true; do
events=$(curl -s -H "X-API-Key: $API_KEY" \
"$BASE/events?since=$last&events=FolderSummary")
last=$(echo "$events" | jq 'last.id // 0')
if echo "$events" | jq -e \
'.[] | select(.data.summary.needTotalItems == 0)' >/dev/null; then
echo "Sincronizzazione completata, avvio il backup..."
restic backup /percorso/della/cartella
fi
sleep 5
done
In alternativa, ricordati dell’External Versioning visto prima, perché collegando un tuo script alla sostituzione dei file ottieni di fatto un hook che si attiva a ogni modifica, senza dover scrivere alcun loop di polling. Con questi mattoni puoi costruire pipeline, dove i file prodotti su un dispositivo finiscono automaticamente elaborati, compressi e archiviati su un altro.
Far girare Syncthing su un server headless
Su un server senza monitor né interfaccia grafica, la sfida principale è raggiungere la GUI di amministrazione, che di default ascolta solo sull’indirizzo locale 127.0.0.1 per ragioni di sicurezza. Hai due strade pulite. La prima, più sicura, è non aprire affatto la GUI verso l’esterno e raggiungerla tramite un tunnel SSH dal tuo computer.
ssh -L 8384:localhost:8384 tuonome@tuo-server
A questo punto apri http://localhost:8384 sul tuo browser locale e parli con il server come se fossi davanti ad esso, con tutto il traffico cifrato dentro SSH. La seconda strada, se preferisci un accesso permanente, è cambiare l’indirizzo di ascolto della GUI in 0.0.0.0:8384 e proteggerlo con nome e password (più, idealmente, un reverse proxy con HTTPS davanti). Il primo metodo resta preferibile per chi non vuole esporre nulla.
Per l’avvio automatico, su una distribuzione Linux con systemd la via maestra è il servizio legato al tuo account, che fa partire Syncthing con i tuoi permessi anziché come root.
sudo systemctl enable --now [email protected]
Se invece il server gira senza una sessione personale persistente, conviene attivare il lingering, così che il servizio parta al boot anche senza login.
sudo loginctl enable-linger nomeutente
Quando avvii Syncthing manualmente su una macchina remota, infine, ricordati di usare i flag giusti per evitare che tenti di aprire un browser inesistente e per indicargli la cartella di configurazione corretta.
syncthing serve --no-browser --gui-address=0.0.0.0:8384 \
--home=/home/nomeutente/.local/state/syncthing
Una nota sui container. Far girare Syncthing in Docker è una scelta diffusa e comoda per un homelab, ma presta attenzione alla mappatura dei volumi e degli UID, perché i problemi di permessi sui file sincronizzati sono la causa numero uno di grattacapi in questo scenario. Vale la pena dedicare cinque minuti a impostare correttamente le variabili PUID e PGID fin da subito.
La situazione su Android
L’app Android ufficiale ha attraversato un periodo difficile a causa delle restrizioni di Google sulle pubblicazioni, ma l’ecosistema non si è mai fermato, dato che lo sviluppo prosegue tramite fork mantenuti attivamente dalla community e disponibili sia su F-Droid sia sul Play Store.
Se cerchi Syncthing su F-Droid, lo store di software libero per Android, trovi la versione consigliata e ricevi gli aggiornamenti senza dipendere dalle decisioni di Google. L’app non è altro che un’interfaccia comoda attorno allo stesso identico motore che gira sul desktop, quindi tutto ciò che hai imparato finora vale anche qui.
Sul telefono, però, due aspetti meritano attenzione particolare. Il primo è la batteria, perché una sincronizzazione costante in background consuma. Per questo l’app ti permette di definire condizioni precise su quando lavorare, ad esempio solo in carica, solo sotto Wi-Fi, oppure solo su certe reti identificate per nome. Configurare queste condizioni è il primo gesto da fare dopo l’installazione, altrimenti rischi di trovare il telefono scarico e caldo.
Il secondo aspetto è il tipo di cartella, perché su Android la modalità Send Only è una manna per il backup automatico delle foto. Imposti la cartella della fotocamera come Send Only, la condividi con il server di casa che la riceve in Receive Only, e ottieni un backup fotografico continuo che nessuno può cancellare per errore a ritroso, dal server verso il telefono. È una delle configurazioni più utili in assoluto e da sola giustifica l’installazione dell’app. L’accesso allo storage su Android è diventato più macchinoso con le versioni recenti del sistema operativo, quindi metti in conto qualche passaggio in più per concedere i permessi sulle cartelle giuste.
Conclusioni, uno strumento che cresce con te
Finché usi Syncthing come una semplice cartella condivisa, resta un buon programma tra tanti. Quando invece inizi a trattarlo come l’infrastruttura su cui far girare backup, automazioni e flussi selettivi tra molti dispositivi, diventa difficile farne a meno. La combinazione di sincronizzazione selettiva con i .stignore, tipi di cartella ben scelti, un versioning Staggered sui dati importanti e qualche script appeso all’API REST ti dà un sistema che molti servizi a pagamento faticano a eguagliare, con la differenza che i dati restano tuoi e cifrati tra i tuoi soli dispositivi.
Va detto che questa libertà ha un prezzo in termini di configurazione iniziale. Syncthing non ti tiene per mano come un’app commerciale, e i concetti di tipo di cartella, ignore pattern e gestione dei conflitti richiedono un po’ di studio. Non è uno strumento per chi cerca il risultato immediato senza leggere nulla, ma è proprio questa profondità a renderlo interessante per chi è disposto a investirci del tempo.
Il mio consiglio, se parti adesso, è di non configurare tutto in una volta, ma di impostare prima una cartella con versioning e tipi sensati, prendere confidenza, e solo dopo aggiungere gli script. La solidità si costruisce un pezzo alla volta, ed è esattamente ciò che questo strumento ti permette di fare.













