This release includes 3 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+14 more
Summary
AI summaryBroad release touches chore, feat, retries.json, and install.sh.
Full changelog
What's Changed
- feat: complete Rust port of Mimick https://github.com/nicx17/mimick/pull/7
- Replace Python implementation with full Rust/GTK4/Libadwaita port
- Implement streaming multipart uploads via reqwest + tokio-util
- Add SHA-1 checksumming and file stability wait in monitor
- Add persistent retry queue (retries.json) in queue_manager
- Add album DropDown per watch folder (GTK4 compliant, no deprecated widgets)
- Add toggle validation preventing both URL switches being disabled
- Add unit tests: 11 tests across api_client, config, monitor, queue_manager, state_manager
- Add tempfile dev-dependency for filesystem-isolated tests
- Fix ConfigData::Default to correctly set boolean defaults
- Use gtk::AlertDialog (GTK 4.10+) for validation dialogs
-
chore: Add keyring_test to .gitignore.
-
docs: update all scripts and docs for Rust port
- install.sh: rewritten for cargo build --release, installs to ~/.local/bin
- uninstall.sh: removes binary, desktop entry, icons, config and cache
- build_appimage.sh: new AppImage build script using the Rust binary (replaces build_test_appimage.sh)
- README.md: replace Python/venv/pip with Rust/cargo, update feature list and install instructions
- docs/USER_GUIDE.md: update sync flow docs, add retry queue FAQ, add tray FAQ
- CONTRIBUTING.md: replace pytest/pip workflow with cargo test/clippy
- .gitignore: add keyring_test binary
- chore: update setup/ and AI_CONTEXT for Rust port
- setup/mimick.desktop: remove hardcoded Python paths, use plain binary name
- setup/mimick.service: remove Python comment, add journal logging
- setup/PKGBUILD: full rewrite — cargo build --release, correct Rust deps
- AI_CONTEXT.md: full rewrite — Rust architecture, modules, tech stack, AI agent context
-
chore: rename build_appimage.sh -> build_test_appimage.sh, remove old Python script
-
fix: desktop file spec violations breaking appimagetool
- Add missing Actions=Settings; key to [Desktop Entry] to match [Desktop Action Settings]
- Change Categories=Utility;Network; to Categories=Utility; (single main category)
- docs: rewrite roadmap.md for Rust port
- Mark all completed work (streaming uploads, retry queue, GTK4 Rust UI, unit tests)
- Remove obsolete Python migration tasks (already done via Rust port)
- Clearly separate completed from planned items
- Add future roadmap: Flatpak, two-way sync, AUR, backoff, dynamic tray states
-
docs: update roadmap.md with planned features for bug fixes and headless operation
-
refactor: architecture improvements, memory optimisations, tray and launcher fixes
-
Replace per-upload disk writes with in-memory Arc<Mutex> shared state
Workers now update AppState directly; disk is only read on startup and written
at graceful shutdown. Eliminates ~10 disk writes per file upload. -
In-memory retry list; flush to disk only on exit (QueueManager::flush_retries)
Removes per-failure disk writes. Persisted retries survive restarts. -
Settings window: build once, hide on close (set_visible + Propagation::Stop)
GTK CSS caches, GSlice pools, and GL state are allocated once per process.
Subsequent open/close cycles call win.present() on the hidden window only. -
Fix tray Settings action: replace child-process spawn with tokio::sync::watch
No new 'mimick --settings' process is ever created. The tray sends a signal
on a watch channel; a glib::timeout_add_local polls it every 250ms and calls
open_settings_if_needed directly in the GTK main loop. -
Fix app menu integration: clicking the Mimick launcher while the daemon runs
now opens the settings window (connect_command_line: is_remote() check). -
Fix app ID and desktop file name
application_id changed from com.github.nicx17.mimick to com.nickcardoso.mimick
(matches appdata XML). Desktop file installed as com.nickcardoso.mimick.desktop.
StartupWMClass corrected from 'mimick.desktop' to 'Mimick'. -
Share single ImmichApiClient across daemon and settings window (API_CLIENT_HANDLE
OnceLock). Settings window album fetch + test-connection button both reuse it.
No new reqwest connection pool per window open or per test click. -
Fix settings window album fetch: glib::WeakRef guard on window before spawn_local.
If the window is closed while the API call is in-flight the task returns early,
releasing all FolderRowData / GTK widget strong refs immediately. -
Fix full SHA-1 device_asset_id (was truncated to 8 chars, breaking Immich dedup)
-
Fix notify-send zombie processes: child.wait() reaps the process immediately
-
Fix open_settings_if_needed: use app.windows().first() instead of iterating
by is_visible() which returns false on minimised windows on some compositors -
Add serde(default) to ConfigData::album_sync
-
Narrow tokio features; add lean release profile (opt-level=z, lto, strip)
-
Update ARCHITECTURE.md to reflect current Rust/GTK4/Tokio design
(removed all Python-era references)
-
feat: migrate logging from
env_loggertoflexi_loggerand prevent duplicate file processing in the monitor -
docs: rewrite documentation and workflows for Rust architecture
- Update .github/workflows/release.yml to use rustc, cargo, and GTK4 deps instead of Python
- Rewrite APPIMAGE_CREATION.md for Cargo builds and native binaries
- Rewrite DEVELOPMENT.md and TESTING.md for Cargo, Rust idioms, and inline tests
- Update TROUBLESHOOTING.md to replace pystray and Python references with ksni and cargo run
- Confirmed README versions and details are up to date
- chore: standardize Application ID to io.github.nicx17.mimick
- Updated adw::Application ID in main.rs
- Renamed and updated metainfo.xml to match io.github.nicx17.mimick
- Added developer_name to metainfo.xml
- Renamed Desktop entries and updated their contents
- Updated install-appimage.sh, uninstall-appimage.sh, build_test_appimage.sh, and PKGBUILD
- build: Standardize AppImage icon naming in the install script and update the settings screenshot.
Full Changelog: https://github.com/nicx17/mimick/compare/v2.0.1...v3.0.0
What's Changed
- feat: complete Rust port of Mimick (v2.0.1) by @nicx17 in https://github.com/nicx17/mimick/pull/7
Full Changelog: https://github.com/nicx17/mimick/compare/v2.0.1...v3.0.0
Breaking Changes
- Replace Python implementation with full Rust/GTK4/Libadwaita port
- application_id changed from com.github.nicx17.mimick to io.github.nicx17.mimick (Desktop entry and StartupWMClass)
- Categories=Utility;Network; updated to Categories=Utility; in desktop file
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About nicx17/mimick
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]