Desktop app for syncing files between one or more local watch folders and a remote SFTP, FTP, FTPS, Google Drive, or OneDrive location.
Current app version: 1.2
Use the AppImage:
gpkg_sync-1.2-x86_64.AppImage
Create or activate a virtual environment, then install the runtime dependencies:
python3 -m pip install -r requirements.txt-
Download or copy
gpkg_sync-1.2-x86_64.AppImageto your Linux machine. -
Make it executable:
chmod +x gpkg_sync-1.2-x86_64.AppImage
-
Run it:
./gpkg_sync-1.2-x86_64.AppImage
-
A desktop session is required. The app will not start from a headless shell with no GUI display.
-
On Debian/Ubuntu-based systems, install the Qt runtime dependency if needed:
sudo apt install libxcb-cursor0
-
If your Linux system cannot use FUSE for AppImage mounting, extract-and-run support may be needed depending on the distro setup.
The app stores local state under:
~/.gpkg_sync
That folder contains:
profiles.jsonfor non-secret profile settingsgpkg_sync.dbfor sync state and logs
Passwords are stored in the OS keychain, not in profiles.json.
OAuth token caches for Google Drive and OneDrive are stored in ~/.gpkg_sync after the first successful sign-in.
google-drive: choose Google Drive in the app, then sign in through your browser the first time the profile connects.- The app-level Google OAuth client can be provided in
~/.gpkg_sync/google_oauth_client.json, next togpkgSyncApp.exefor portable Windows builds, withGPKG_SYNC_GOOGLE_CLIENT_JSON, or in a.envfile withGPKG_SYNC_GOOGLE_CLIENT_IDandGPKG_SYNC_GOOGLE_CLIENT_SECRET. onedrive: provide an Azure appClient IDandTenant ID, then sign in with Microsoft when prompted.- For cloud profiles, use a path-like remote folder such as
/Apps/gpkg-sync.
- A profile can watch multiple local folders.
- When a profile has one watch folder, files sync directly into the configured remote folder.
- When a profile has multiple watch folders, each local folder is namespaced on the remote side by its folder name to avoid collisions.
- App-managed temporary and conflict artifacts such as
.part,.backup-*, and.conflict-*files are excluded from sync to prevent feedback loops. - Enable Run app when I sign in in the app to launch gpkg sync automatically after desktop login. Profile-level Start syncing when app opens still controls which profiles begin syncing after launch.
Use the Windows installer:
gpkg_sync_setup.exe
Use the portable ZIP if you do not want an installer:
gpkgSyncApp-1.2-windows-x64-portable.zip
Extract the ZIP to any writable folder, then run:
gpkgSyncApp\gpkgSyncApp.exe
- Run
gpkg_sync_setup.exe. - Accept the installer prompts.
- Choose the install folder if you do not want the default location.
- Optionally enable the desktop shortcut during setup.
- Launch gpkg sync from the Start menu or desktop shortcut.
The app stores profile settings and state in the user profile directory managed by the app at runtime.
Passwords are stored in the Windows credential/keychain backend through keyring, not in the JSON config file.
Run:
./cmdOutput:
gpkg_sync-1.2-x86_64.AppImage
Run on a Windows machine with:
- Python
pyinstaller- Inno Setup 6
Command:
.\build_windows.ps1If Inno Setup is installed in a non-standard location:
.\build_windows.ps1 -IsccPath "C:\Program Files (x86)\Inno Setup 6\ISCC.exe"Output:
dist\windows\gpkg_sync_setup.exe
Run on a Windows machine with:
- Python
pyinstaller
Command:
.\build_portable_windows.ps1If PowerShell blocks local scripts, run:
powershell -ExecutionPolicy Bypass -File .\build_portable_windows.ps1Output:
dist\portable\gpkgSyncApp-1.2-windows-x64-portable.zipdist\gpkgSyncApp\gpkgSyncApp.exe
If Python is not on PATH, pass its full path:
.\build_portable_windows.ps1 -Python "C:\Path\To\python.exe"If PyInstaller is missing:
python -m pip install pyinstallerImportant:
- Running the normal Linux build does not create a Windows
.exeinstaller. - If you build this project on Linux, you will only see Linux artifacts such as
gpkg_sync-1.2-x86_64.AppImageordist/gpkgSyncApp. - The Windows portable folder or ZIP is generated after running
build_portable_windows.ps1on a Windows machine with PyInstaller installed. - The Windows installer is only generated after running
build_windows.ps1on a Windows machine with PyInstaller and Inno Setup installed.
- Linux is currently the primary packaged target.
- The Windows installer assets are included in this repo, but the installer itself must be built on Windows.