Repository navigation
Releases
v0.3.0
Install as a package, for amd64 (tested on Fedora 44 and Debian stable) or arm64
(built, not yet tested):
# Fedora
sudo dnf install https://github.com/fqazzazee/shuttle/releases/download/v0.3.0/shuttle_0.3.0_linux_amd64.rpm
# Debian, Ubuntu
curl -LO https://github.com/fqazzazee/shuttle/releases/download/v0.3.0/shuttle_0.3.0_linux_amd64.deb
sudo apt install ./shuttle_0.3.0_linux_amd64.debThen enable the service and, on GNOME 50, the extension: see the
README.
On Android 11 or later (arm64): download shuttle_0.3.0_android_arm64.apk on the
phone and open it. It installs over an earlier release, keeping its setup; see the
README.
On Windows 10 or 11: download shuttle_0.3.0_windows_amd64.zip (or _arm64),
unzip it into a folder of its own, and run shuttle autostart on there: the daemon and its
icon then start when you sign in. Windows warns once that the programs are not signed; see the
README.
checksums.txt has every file's SHA-256, and every file is attested as built by this
repository's release workflow: gh attestation verify <file> --repo fqazzazee/shuttle.
shuttle is source-available under PolyForm Noncommercial 1.0.0 or PolyForm Internal Use
1.0.0; its GNOME extension is GPL-2.0-or-later. See
LICENSE.
Changelog
Features
- feat(bus): the daemon on a named pipe on Windows (#207)
- feat(bus): the daemon's notifications over the pipe on Windows (#213)
- feat(daemon): Windows' folders for the config and the state (#203)
- feat(fsys): local folders on Windows fold case and refuse names as NTFS does (#196)
- feat(network): follow metered connections on Windows (#211)
- feat(secrets): share passwords in Windows' Credential Manager (#204)
- feat(shares): on Windows, an NFS share names its uid and gid (#205)
- feat(tray): shuttle's icon in Windows' notification area (#212)
- feat(tray): toasts on Windows (#214)
- feat(tui): pick a local folder on Windows (#209)
- feat: start the daemon at sign-in on Windows (#210)
Bug fixes
- fix(activity): trim the log on Windows (#189)
- fix(config): catch overlapping local folders on Windows (#190)
- fix(config): local folders overlap in any case on Windows (#199)
- fix(core): build on Windows: free space, "Open shuttle", the tests' kills (#185)
- fix(daemon): a folder's own write event on Windows is no change (#208)
- fix(engine): move a record to a name's new spelling in the same run (#200)
- fix(fsys): on Windows, a file that cannot be opened no longer fails the scan (#202)
- fix(nfs3): try another reserved port on Windows when one is taken (#201)
Other changes
v0.2.0
Install as a package, for amd64 (tested on Fedora 44 and Debian stable) or arm64
(built, not yet tested):
# Fedora
sudo dnf install https://github.com/fqazzazee/shuttle/releases/download/v0.2.0/shuttle_0.2.0_linux_amd64.rpm
# Debian, Ubuntu
curl -LO https://github.com/fqazzazee/shuttle/releases/download/v0.2.0/shuttle_0.2.0_linux_amd64.deb
sudo apt install ./shuttle_0.2.0_linux_amd64.debThen enable the service and, on GNOME 50, the extension: see the
README.
On Android 11 or later (arm64): download shuttle_0.2.0_android_arm64.apk on the
phone and open it. It installs over an earlier release, keeping its setup; see the
README.
checksums.txt has every file's SHA-256.
shuttle is source-available under PolyForm Noncommercial 1.0.0 or PolyForm Internal Use
1.0.0; its GNOME extension is GPL-2.0-or-later. See
LICENSE.
Changelog
Features
- feat(android): About links to the license; the notices on a page of their own (#183)
- feat(android): About links to the source, the releases and Buy me a coffee, and checks this copy (#178)
- feat(android): Help: how to use the app, as questions (#179)
- feat(android): a new folder on the share, from the wizard (#166)
- feat(android): a shuttle's settings, every row, set and reset (#145)
- feat(android): add a share and a shuttle on the phone (#140)
- feat(android): an App tab for Help, Backup, About and the app's colours (#182)
- feat(android): ask for the three permissions, and wait without them (#130)
- feat(android): back up and restore the app's setup (#180)
- feat(android): edit a shuttle in the wizard (#164)
- feat(android): enable, disable and delete a shuttle (#165)
- feat(android): examples under the share editor's fields (#174)
- feat(android): held deletions in the Conflicts tab, and Allow them (#147)
- feat(android): keep share passwords under an Android Keystore key (#131)
- feat(android): notifications in a channel per kind, worded as the desktop's (#139)
- feat(android): one daemon per process, and a service for real time (#132)
- feat(android): run scheduled and share-available shuttles with WorkManager (#133)
- feat(android): say so when the app was force-stopped, and sync again (#134)
- feat(android): shrink the release APK, 35 MB to 13 (#169)
- feat(android): shuttle's palette, and a switch for the wallpaper's colours (#177)
- feat(android): the Activity tab, by shuttle and problems only (#148)
- feat(android): the Conflicts tab: keep the phone's, the share's, or both (#146)
- feat(android): the Profiles tab: each profile and who uses it (#153)
- feat(android): the Shares tab: each share, its users, its state, its room (#150)
- feat(android): the TUI's logo, the bus and the wordmark, atop the Shuttles tab and About (#181)
- feat(android): the TUI's tabs, and a notice's tap opens its tab (#142)
- feat(android): the app's skeleton, built on the Go core in CI (#129)
- feat(android): the launcher icon, the bus in shuttle's colours on ink (#175)
- feat(android): the profile editor: new, its settings, duplicate, delete (#155)
- feat(android): the selected shuttle in full, as the TUI's panel (#144)
- feat(android): the share editor: add, edit, test, password, delete (#152)
- feat(android): the shuttle list, with Sync now, pause and pause all (#136)
- feat(android): the wizard replaces the minimal form; the flow test runs through it (#167)
- feat(android): the wizard's first step: the share, and its folder, browsed (#157)
- feat(android): the wizard's last steps: name, profile, settings, saved (#163)
- feat(android): the wizard's second step: what to sync of the folder, marked (#159)
- feat(android): the wizard's third step: the folder on the phone, browsed or made (#162)
- feat(android): third-party notices in the APK, and an About screen (#170)
- feat(config): a profile's settings as rows, set one at a time (#154)
- feat(config): a shuttle as its editor has it before it is saved (#160)
- feat(daemon): name this side in conflict copies by a given device name (#126)
- feat(daemon): read and set a shuttle's settings over D-Bus (#118)
- feat(daemon): shuttles pause on a metered connection, by default (#114)
- feat(engine): a local side that ignores case, as the phone's storage does (#124)
- feat(engine): leave out names the other side cannot hold, never delete them (#125)
- feat(extension): a preferences window for each shuttle's settings (#119)
- feat(extension): the dropdown says when a metered connection holds a shuttle (#116)
- feat(fsys): a local folder says whether it folds case and which names it refuses (#123)
- feat(mobile): the Android app's binding to the daemon (#127)
- feat(release): pin the release key's certificate (#172)
- feat(release): the signed arm64 APK in each release (#168)
- feat(tui): a Metered row in the settings of profiles and shuttles (#115)
Bug fixes
- fix(android): follow config reloads: the service, the jobs, removed shuttles (#135)
- fix(android): no freeze when the app opens while it is updated (#176)
- fix(core): name this side as the phone or the computer it runs on (#161)
- fix(daemon): no share notices from shuttles waiting for a permission (#138)
- fix(fsys): read a share 1 MB at a time, not 32 KB (#121)
- fix(release): read the APK's certificate as newer build tools print it (#173)
Other changes
- refactor(config): the settings form's rows, shared by every editor (#117)
- refactor(notice): word the daemon's events in a portable package (#137)
- refactor(pick): what a shuttle syncs of its folder, marked for the TUI and the phone (#158)
- refactor(present): say where a share is, for the TUI and the phone (#149)
- refactor(present): the shuttle panel's words, for the TUI and the phone (#143)
- refactor(secrets): keep the Secret Service apart from the Store (#122)
- refactor(shares): keep a share's password in one place, for the TUI and the phone (#151)
- refactor(shares): list a share's folder as the wizard shows it, for the TUI and the phone (#156)
v0.1.0
Install as a package, for amd64 (tested on Fedora 44 and Debian stable) or arm64
(built, not yet tested):
# Fedora
sudo dnf install https://github.com/fqazzazee/shuttle/releases/download/v0.1.0/shuttle_0.1.0_linux_amd64.rpm
# Debian, Ubuntu
curl -LO https://github.com/fqazzazee/shuttle/releases/download/v0.1.0/shuttle_0.1.0_linux_amd64.deb
sudo apt install ./shuttle_0.1.0_linux_amd64.debThen enable the service and, on GNOME 50, the extension: see the
README. checksums.txt has every
file's SHA-256.
shuttle is source-available under PolyForm Noncommercial 1.0.0 or PolyForm Internal Use
1.0.0; its GNOME extension is GPL-2.0-or-later. See
LICENSE.
Changelog
Features
- feat(bus): serve the daemon over D-Bus (#21)
- feat(cli): shuttle status, sync, pause and resume (#22)
- feat(config): a shuttle syncs only what it includes, or all but what it excludes (#76)
- feat(config): edit config.toml in place, keeping comments and layout (#27)
- feat(config): load shares, profiles and shuttles from TOML (#5)
- feat(daemon): desktop notifications for errors, conflicts, completed runs and shares (#25)
- feat(daemon): follow config.toml as it changes, without a restart (#30)
- feat(daemon): run every shuttle on its own with shuttle daemon (#17)
- feat(daemon): run shuttles on a schedule and when their share comes online (#18)
- feat(daemon): sync real-time shuttles when local files change (#19)
- feat(daemon): the status says when a scheduled shuttle runs next (#88)
- feat(engine): apply conflict policies and guard against mass deletion (#8)
- feat(engine): honour ignore patterns and bandwidth limits (#10)
- feat(engine): keep replaced and deleted files as versions (#9)
- feat(engine): scan, plan and execute push, pull and sync runs (#7)
- feat(engine): stop a run that would not fit, before it copies (#81)
- feat(extension): a Quick Settings toggle that pauses and resumes the shuttles (#63)
- feat(extension): a dropdown of the shuttles (#61)
- feat(extension): a top-bar indicator that follows the daemon (#59)
- feat(extension): the bus in the top bar, with the state's mark beside it (#75)
- feat(extension): the icon pulses while syncing, with the transfer rate beside it (#60)
- feat(extension): the top bar's menu has the Quick Settings controls (#82)
- feat(fsys): NFSv3 backend over internal/nfs3 (#53)
- feat(fsys): add filesystem interface and local backend (#3)
- feat(fsys): reach SMB shares directly with go-smb2 (#12)
- feat(nfs): say how much room an NFS share has (#80)
- feat(nfs3): a small NFSv3 client (#51)
- feat(secrets): keep share passwords in the Secret Service (#15)
- feat(shares): open a shuttle's share with its password from the keyring (#16)
- feat(state): store each shuttle's last synced file state in bbolt (#6)
- feat(tui): a SHARE column on the dashboard, offline in red (#86)
- feat(tui): a panel under the dashboard with the selected shuttle in full (#89)
- feat(tui): a progress bar while a run copies, a spinner while it scans (#87)
- feat(tui): a tree with marks on this computer too, sharing the share's marks (#83)
- feat(tui): add, edit and delete shuttles (#46)
- feat(tui): fit narrow terminals: columns that give way, wrapped keys, a help that scrolls (#90)
- feat(tui): grey out settings that do not apply (#72)
- feat(tui): help and questions as overlays on the dimmed screen (#97)
- feat(tui): shuttle's own palette, vivid, for dark and light terminals (#91)
- feat(tui): the Activity tab (#42)
- feat(tui): the Conflicts tab (#41)
- feat(tui): the Profiles tab: add, edit, copy and delete profiles (#45)
- feat(tui): the Shares tab: add, edit, test and delete shares (#44)
- feat(tui): the TUI skeleton, with a live Shuttles tab (#40)
- feat(tui): the bus and the wordmark in the header, giving way in small terminals (#92)
- feat(tui): the bus in the header takes the shuttles' state (#93)
- feat(tui): the bus on the empty screens in the app icon's colors (#95)
- feat(tui): the bus's lights take turns while a shuttle runs (#94)
- feat(tui): the panel draws a run's transfer rate as a sparkline (#98)
- feat(tui): the progress bar fills by eighths, along shuttle's gradient (#96)
- feat(tui): the shuttle bus, in text, on first-run screens and in help (#74)
- feat: NFS shares (#54)
- feat: Open shuttle, from the app grid and from notifications (#48)
- feat: a shuttle bus icon, for the app and the top bar (#73)
- feat: an activity log for every shuttle (#38)
- feat: describe both copies of a conflict on the bus (#39)
- feat: install shuttle as a systemd user service (#23)
- feat: live progress and transfer rates (#37)
- feat: show how much each shuttle syncs: its size and its files (#78)
- feat: show how much room each share and this computer have (#79)
- feat: turn shuttles on and off from the bus and the CLI (#32)
- feat: up and down arrows for push and pull, and a MODE column in shuttle status (#84)
Bug fixes
- fix(bus): update the properties before signalling a change (#34)
- fix(daemon): announce a lost share before the run that found it is over (#36)
- fix(daemon): apply the global bandwidth cap (#33)
- fix(daemon): run real-time shuttles at start even after a recent run (#26)
- fix(daemon): send each shuttle's status changes in the order they happened (#58)
- fix(daemon): show a run as over only once its notifications are sent (#31)
- fix(daemon): start with no shuttles when there is no config file yet (#71)
- fix(engine): handle names that differ only in case on SMB shares (#14)
- fix(engine): record a copy whose source changed mid-copy, so it is not a conflict (#35)
- fix(extension): Quick Settings switches follow the daemon when it refuses (#68)
- fix(nfs3): say to mount an NFSv4-only server when its mount service lacks v3 (#57)
- fix(state): start afresh when a shuttle's folders change (#29)
- fix(tui): the help lists the tree's keys for both steps, and t (#85)
Other changes
- Update README.md
- build(packages): third-party notices in the tarballs, RPM and DEB (#103)
- build: packages that carry what make install does, built and tested locally (#70)
- deps: bump eslint from 10.11.0 to 10.12.0 in the lint group (#66)
- deps: bump the go-minor-patch group with 3 updates (#65)
- perf(engine): scan with several folder listings in flight (#20)
- refactor(extension): one daemon client for the indicator and what comes next (#62)