Releases: javi11/altmount
Dev Build
v0.2.0
What's Changed
- fix: update nntppool to v4.7.0 and expose keepalive config in UI by @javi11 in #443
- Disable segment cache options when cache is disabled by @javi11 in #444
- fix: extract applyNzbRename helper and add test for rename_to_nzb_name=false by @javi11 in #445
- fix: respect rename_to_nzb_name setting for single-file archive normalization by @javi11 in #446
- fix: respect skip_ping when testing and saving providers by @javi11 in #447
- feat: preserve internal folder structure when extracting RAR/7zip archives by @javi11 in #449
- fix: enable save button when skip_ping is true for new providers by @javi11 in #450
- feat: enhance Arrs integration, NZBDav performance, and provider metrics by @drondeseries in #442
- fix: add linux build tag to hanwen handle_test.go by @javi11 in #451
- fix: render toast notifications above modals by @javi11 in #453
- feat(health): improve streaming failure handling and dynamic ARR configuration by @drondeseries in #455
- fix: restore correct passwords after provider reorder by @javi11 in #456
- feat(importer): parallelize archive processing and add encryption-aware segment validation by @javi11 in #459
- fix(auth): re-evaluate auth state immediately after disabling login requirement by @javi11 in #460
- fix(importer): remove duplicate folder when nested RAR subfolder matches virtual dir name by @javi11 in #461
- fix(importer): read import config dynamically instead of caching at startup by @javi11 in #462
- perf(fuse): eliminate per-read goroutine churn by @javi11 in #463
- fix(health): improve relinking, library path tracking and blocklist logic by @drondeseries in #458
- feat(health): route symlink regeneration to correct path per trigger source by @javi11 in #464
- feat(config): add option to regenerate symlinks when mount path changes by @javi11 in #465
- feat(backup): cron-based backup scheduling with friendly UI picker by @javi11 in #466
- fix(stremio): align default categories with Newznab API convention by @javi11 in #467
- fix(ui): show full filenames without truncation by @javi11 in #468
Full Changelog: v0.1.0...v0.2.0
v0.1.0
What's Changed
- fix(import): enhance normalizeRarPartFilename to preserve padding width by @javi11 in #91
- feat(symlink): update symlinks on update the mount by @javi11 in #93
- feat(export): add par2 to the meta files to allow the export by @javi11 in #95
- feat(queue): add sorting functionality to queue items by @javi11 in #96
- refactor(health): remove dir cleanup from lib scan by @javi11 in #99
- Fix: Remove recursive parameter from vfs/forget call and enhance vfs/… by @drondeseries in #98
- fix(health): prevent scan error on NULL scheduled_check_at in health DB by @DrMxrcy in #106
- Alpha5 by @drondeseries in #111
- feat: add pause and other sabnzbd queue methods by @drondeseries in #119
- Fix: ARR repair paths to prefer symlink import dir when available over mount fallback by @sureshfizzy in #125
- feat(migration): add a tool to migrate nzbdav to altmount by @drondeseries in #122
- Fix docs for Windows rclone commands by @hansmok in #120
- fix(auth): add JWT cookie configuration options by @MythodeaLoL in #117
- feat: add speed test by @drondeseries in #126
- feat: dashboard and navigation improvements by @drondeseries in #129
- feat: display active streams on dashboard by @drondeseries in #130
- fix: prevent panic on par2 files parsing by @javi11 in #134
- fix: improve mount retry logic and import error handling by @javi11 in #136
- fix: prevent memory/CPU leaks in importer and nzbfilesystem by @javi11 in #143
- fix(import): correctly resolve nzb import root relative to mount by @MythodeaLoL in #141
- fix: add periodic cleanup for stale active streams by @javi11 in #149
- fix: prevent program hang from resource leaks and deadlocks by @javi11 in #153
- test: add comprehensive tests for database contention fixes by @javi11 in #155
- fix: prevent 'closed pipe' errors with thread-safe segment writer by @javi11 in #156
- fix: multiple fixes and features by @javi11 in #159
- fix: prevent use-after-free race condition in NZB parser by @javi11 in #160
- fix: resolve nil pointer dereference in triggerFileRepair by @drondeseries in #161
- fix: resolve AES-encrypted 7z file download blocking on last bytes by @javi11 in #162
- fix: resolve category dir path instead of using category name by @javi11 in #163
- fix: resolve memory leak in UsenetReader by replacing bufpipe with io.Pipe by @javi11 in #165
- fix: improve sample detection to handle underscore patterns by @javi11 in #164
- fix: resolve file descriptor leak in stream tracker by @javi11 in #167
- fix: remove redundant ARR scan triggers causing errors in v4+ by @drondeseries in #166
- feat: add SOCKS5 proxy support for NNTP providers by @javi11 in #170
- fix: cumulative updates and optimizations by @drondeseries in #169
- Fix Plex stability, improve import speed, and restore bulk queue actions by @drondeseries in #171
- fix(importer): fix context cancellation propagation to prevent stuck imports by @javi11 in #172
- fix: downgrade nntppool and simplify stale items reset by @javi11 in #173
- refactor: standardize API responses and add shared utilities by @javi11 in #174
- refactor(importer): decompose service into focused sub-packages by @javi11 in #175
- refactor(health): remove dead code and fix Go anti-patterns by @javi11 in #179
- feat(usenet): improve error propagation in UsenetReader by @javi11 in #180
- fix(health): ensure playback failures trigger immediate repair by @drondeseries in #176
- fix(importer): do not mark items as fallback if not configured by @drondeseries in #177
- fix(api): include DownloadClientBaseURL in SABnzbd config response by @drondeseries in #181
- fix(arrs): improve category handling for ARR auto-setup and connectivity tests by @drondeseries in #182
- fix: frontend build by @javi11 in #185
- fix(health/arrs): improve health check scheduling and arrs integration by @drondeseries in #188
- refactor(importer): remove unused code from importer package by @javi11 in #186
- feat(nzblnk): add NZBLNK link resolver with NZBKing and NZBIndex support by @javi11 in #202
- feat: Add symlink regeneration option for unlinked files by @javi11 in #201
- feat(importer): implement directory watcher for automated NZB imports by @drondeseries in #205
- feat(ui): add Directory Watcher configuration UI by @drondeseries in #208
- fix: API and UI Quality of Life improvements by @drondeseries in #210
- fix(api): return error if arrs disabled on sabnzbd auth by @drondeseries in #213
- fix(importer): remove ID prefix from NZB filenames and fix formatting by @javi11 in #215
- fix(usenet): prevent premature segment closure during streaming by @javi11 in #216
- fix(importer): NZB cleanup behavior and persistence improvements by @drondeseries in #207
- fix(importer): implement replace strategy for persistent NZB storage by @javi11 in #219
- feat(nzbdav): importer robustness and performance improvements by @drondeseries in #209
- fix(importer): ignore persistent .nzbs path in virtual directory calculation by @drondeseries in #220
- fix(importer): fix segment validation by @javi11 in #222
- fix(importer): use relative paths in directory watcher by @drondeseries in #232
- Clean pr 68 by @drondeseries in #228
- feat(health): Robust validation, self-repair, and protection by @drondeseries in #245
- fix(core): UI, Config, and Watcher stability improvements by @drondeseries in #243
- feat(importer): Enhanced NZB categorization and queue cleanup by @drondeseries in #244
- feat: Core stability, health check improvements, and config updates by @drondeseries in #247
- Fix health status not updating from checking to healthy by @firestaerter3 in #257
- fix(usenet): prevent memory leak by closing all segments in Clear() by @firestaerter3 in #254
- fix(api): prevent accidental metadata deletion via ARR webhooks by @drondeseries in #256
- fix(api): ignore EpisodeFileDelete webhook to prevent accidental library wipes by @drondeseries in #253
- feat(strm): add support for configuring host in generated .strm files by @drondeseries in #252
- fix(arrs): handle boolean deletedFiles and MovieDelete events in webhooks by @drondeseries in #251
- feat(health): add metadata integrity checks and zombie cleanup by @drondeseries in #265
- fix(api): improve SABnzbd category compatibility for Sonarr/Radarr by @drondeseries in #272
- feat(health): add hybrid data verification mode to detect corrupted files by @drondeseries in #263
- feat(metadata): add automatic metadata backup system by @drondeseries in #269
- feat(importer): add import deduplication and validation optimization by @drondeseries in #266
- feat(importer): enhance NZBDav import UI with progress and detailed status by @drondeseries in #264
- feat(arrs): improve path matching with filename and folder fallbacks by @drondeseries in #267
- feat(...
v0.0.1-alpha6
What's Changed
✨ New Features
Core & Architecture
- Internal FUSE mount with auto-start support (#275) — AltMount can now manage its own FUSE mount lifecycle, no external setup required
- Segment cache — persistent on-disk segment cache to dramatically reduce repeat download overhead (#309)
- Nested RAR extraction — full support for RAR-in-RAR and 7zip nested archives (#324, #343)
- ISO expansion inside RAR/7zip containers; keeps only the largest file (#366)
- SOCKS5 proxy support for NNTP providers (#170)
- Configurable nested RAR extraction toggle in UI and API (#348)
Importer & Queue
- Persistent import history with category support — survive restarts (#289)
- Manual queue priority control — PATCH
/api/queue/{id}/priority+ UI button (#361) - Directory Watcher — automatically imports NZBs dropped into a watched folder (#208)
- NZBLNK resolver — resolves NZBLNK links via NZBKing and NZBIndex (#202)
- Import deduplication & validation optimization (#266)
- Enhanced NZBDav import UI with progress and detailed status (#264)
- Sample file auto-ignore on import
- PAR2 files now exported to meta to enable proper exports (#95)
Health & Monitoring
- Advanced health monitoring with path recovery and data verification (#290)
- Hybrid data verification mode to detect corrupted files (#263)
- Metadata integrity checks and zombie cleanup (#265)
- Automatic metadata backup system (#269)
- Symlink regeneration for files without library association (#201)
Authentication & Security
- Simplified single admin user model — cleaner, more predictable auth (#332)
- JWT secret hardening — auto-generated cryptographically secure secrets (#329, #325)
- Path traversal, CORS, and auth hardening (#325)
- Secure unauthenticated NZBDav import endpoints (#317)
- JWT cookie configuration options (#117)
- Auto-redirect to login on 401 / expired JWT (#331)
- Admin password change from UI (#330)
Frontend & UI
- GitHub version check and in-app update mechanism (#322)
- DaisyUI theme selector — multiple built-in themes (#316)
- Dashboard overhaul with Activity Hub and real-time metrics (#288)
- Modern redesign of Queue, Health, Files, and Import pages (#287)
- Responsive mobile layouts for Queue and Health tables (#299)
- Active streams display on dashboard (#130)
- File format labels in FileExplorer cards and info modal (#368)
- Queue sorting functionality (#96)
- Speed test for NNTP providers
- Ping (ms) metric in NNTP provider status cards (#293)
ARR Integration
- Improved path matching with filename and folder fallbacks (#267)
- Fix SABnzbd category compatibility for Sonarr/Radarr (#272)
- Improved category handling for ARR auto-setup (#182)
- Pause and additional SABnzbd queue methods (#119)
--linksflag support for symlink mounts (#363)
Configuration
- All missing backend configuration parameters now exposed to frontend (#296)
- Exposed
allow_nested_rar_extractionin GET config response (#354) - Configurable host in generated
.strmfiles (#252)
⚡ Performance Improvements
- Raise default
max_download_prefetchfrom 3 → 10 for faster streaming (#359) - 6 targeted NZB import pipeline optimizations — significant throughput improvement (#345)
- 4 targeted NZB parser optimizations (#347)
- Lazy segment loading — segments loaded on first read instead of at file open (#319)
- FUSE Linux mount options optimized inspired by rclone (#308)
- FUSE metadata cache to reduce filesystem lookups (#276)
- Library sync optimization for large libraries (#333)
- NNTP connection pool upgraded to nntppool v4 (#282)
- Improved FUSE performance and unified mount configuration (#285)
🐛 Bug Fixes
Importer
- Prevent NZB filename collision from overwriting existing files (#353)
- Skip download when no NNTP providers configured (#355)
- Fix nested RAR extraction error handling (fail instead of fallback) (#346)
- Fix context cancellation propagation to prevent stuck imports (#172)
- Strip virtual path prefix correctly (#304)
- Prevent panic on NZB files with segment-less entries (#306)
- Fix fallback item not removed from queue after SABnzbd transfer (#350)
- Use
PackedSizefor RAR segment validation (#222) - Ignore persistent
.nzbspath in virtual directory calculation (#220) - Fix replace strategy for persistent NZB storage (#219)
- Use relative paths in directory watcher (#232)
- Remove ID prefix from NZB filenames (#215)
API & Backend
- Validate numeric prefix before stripping from queue
target_path(#356) - Add
User-Agentheader for NZB URL downloads to avoid 403 errors (#352) - Include
allow_nested_rar_extractionin GET config response (#354) - Prevent accidental metadata deletion via ARR webhooks (#256)
- Ignore
EpisodeFileDeletewebhook to prevent accidental library wipes (#253) - Handle boolean
deletedFilesandMovieDeleteevents in webhooks (#251) - Return error if ARRs disabled on SABnzbd auth (#213)
- Remove redundant ARR scan triggers causing errors in v4+ (#166)
- Fix SABnzbd category compatibility for Sonarr/Radarr (#272)
- Prevent file descriptor leak in stream tracker (#167)
Health
- Fix 4 DB-ordering and state-management bugs in health worker (#344)
- Reset stuck pending jobs on startup and add disable toggle (#335)
- Move metadata to corrupted only after ARR repair is confirmed (#334)
- Fix health check scheduling and ARR integration (#188)
- Fix library sync deleting files
- Ensure playback failures trigger immediate repair (#176)
- Fix health status not updating from checking to healthy (#257)
FUSE / Filesystem
- Resolve FUSE mount hanging on file reads with context propagation (#302)
- Resolve mount stuck state showing mounted when not ready (#292)
- Handle context cancellation as debug (not errors) (#291)
- Implement
Statfsto report filesystem size (#295) - Improve move/rename operations with atomic renames and proper cleanup (#297)
- Set
DiskSpaceTotalSizeto matchVFSCacheMaxSize(#351) - Reset
originalRangeEndon Seek to fix video playback (#277) - Skip rclone VFS notifications for FUSE/none mounts (#320)
Authentication
- Properly handle disabled auth state in UI (#261)
- Fix XSRF check and admin password change (#330)
- Auto-redirect to login on 401 (#331)
Usenet / Streaming
- Prevent memory leak by closing all segments in
Clear()(#254) - Prevent premature segment closure during streaming (#216)
- Resolve send on closed channel panic in
UsenetReader(#307) - Prevent use-after-free race condition in NZB parser (#160)
- Fix memory leak — replace bufpipe with
io.PipeinUsenetReader(#165) - Fix AES-encrypted 7z file download blocking on last bytes (#162)
- Resolve nil pointer dereference in
triggerFileRepair(#161)
Frontend
- Resolve sidebar always showing 0.0.0 version (#365)
- Fix import queue display, health % with pending, and auto-clear (#338)
- Ensure fresh playback data on tab switch (#342)
- Fix TypeScript build errors with missing type definitions (#301)
- Require save button for provider reorder and extend cache size range (#321)
🔐 Security
- JWT secrets hardened — auto-rotated if weak/missing (#325, #329)
- Path traversal protection added (#325)
- CORS policy tightened (#325)
- NZBDav import endpoints secured — require authentication (#317)
🔧 Refactoring & Internals
- Importer decomposed into focused sub-packages (#175)
- ARR module split into sub-packages with injected dependencies
- Config path validation extracted to separate package
- Standardized API responses with shared utilities (#174)
- NNTP connection pool upgraded to nntppool v4 (#282)
- cgofuse updated to v1.6.0 (#318)
- Go version updated to 1.25.1
- rardecode updated to v2.1.2
📚 Documentation
- Improved integration and import strategy documentation
- Added migration tool from NZBDav to AltMount
- Docker volume plugin documentation by @VEEC023
- Improved general documentation (#298)
🎉 New Contributors
- @drondeseries made their first contribution
Full Changelog: v0.0.1-alpha5...v0.0.1-alpha6
v0.0.1-alpha5
What's Changed
-
doc: add rshared flag to docker volume documentaion by @VEEC023 in #72
-
feat: lot of improvements and bug fixing
-
feat: rar/7zip passwored support
-
feat: strm support
-
fix: health check system
Breaking Changes migration steps
- Stop altmount
- Copy your config.yaml and make a backup
cp config.yaml config.backup.yaml - Copy the config.sample.yaml into the same config dir and rename it to config.yaml
cp config.sample.yaml config.yaml - Modify the new config file with your old configuration
- Run almount again
- End the configuration in altmount admin panel
New Contributors
Full Changelog: v0.0.1-alpha4...v0.0.1-alpha5
v0.0.1-alpha4
What's Changed
- feat(rclone): implement RClone connection testing functionality in API and frontend by @javi11 in #25
- docs: update some documentation by @randrini in #31
[!SUMMARY]
Adds built-in RClone RC mount service with API/UI, revamps config (streaming cache, RC/mount options), improves health/SABnzbd, WebDAV and importer, and updates Docker/runtime.
- Core/Backend:
- RClone RC & Mount Service: Introduces
internal/rclonewith RC-managed mounts; new API routes under/api/rclonefor status/start/stop; health checker usesRefreshDir.- Config Overhaul: Removes
streaming.max_range_sizeandstreaming.streaming_chunk_size; addsstreaming.max_cache_size_mb; majorrcloneconfig (RC, mount, VFS/cache, system options); adds root-levelmount_path; addsauth.login_required.- Health: Adds sorting, bulk restart endpoint, shorter default intervals; segment checks use timeouts; improved stats.
- Importer: Improves NZB parsing (yEnc headers, segment normalization), RAR handling with Usenet FS cache, retries; deobfuscation noise reduced.
- SABnzbd:
CompleteDirrespects mount path; auto-create category dirs; optional fallback to external SABnzbd with API key.- SABnzbd: Sabnzbd fallback in case of error.
- ARR Integration: Per-instance
root_folder; mount path handling clarified; repair paths fixed.- Pool/Infra: Pool manager simplified; go.mod deps updated.
- API/Frontend:
- UI: New RClone config/mount page (start/stop/status), auth config (login optional), enhanced health table (filters/sort/bulk), file actions (export NZB).
- Client: Adds endpoints for health sorting/bulk restart, NZB export, auth config, rclone mount control; WebDAV directory param for corrupted files.
- Docker/Deploy:
- Installs
rcloneand FUSE, adds capabilities (/dev/fuse,SYS_ADMIN,apparmor:unconfined), uses:rsharedmounts; dev compose added.- README/docs updated for new mount/RC workflows and configuration.
BREAKING CHANGE: removed max_range_size and streaming_chunk_size
BREAKING CHANGE: add it required config max_cache_size_mb defaults to 32mb
New Contributors
Full Changelog: v0.0.1-alpha3...v0.0.1-alpha4
v0.0.1-alpha3
What's Changed
- ci: lower-case GHCR image name for forks by @JeffreyBytes in #9
- fix: multiple fix and preparation for alpha3 by @javi11 in #11
fix(repair): show better message if arr instance not found for item
fix(validation): do not validate sabnzb dir
fix: reduce health check start period in Docker configuration
fix(config): update config fix
fix(server): improve error handling and graceful shutdown for Fiber s…
feat(queue): add bulk restart files
fix(api): remove hardcoded complete directory path of sabnzb
feat(queue): add clear failed queue functionality with API integration
fix: frontend path navigation
fix: healthcheck path resolver
fix: debug log level
BREAKING CHANGE:
- (config): moved mount_dir from arrs to root config
- (config): rename mount_dir to complete_dir in sabnzbs.complete_dir
- (auth): add COOKIE_DOMAIN env variable in case you use a domain different that localhost
New Contributors
- @JeffreyBytes made their first contribution in #9
Full Changelog: v0.0.1-alpha2...v0.0.1-alpha3
v0.0.1-alpha2
What's Changed
- fix: multiple fix for alpha2 by @javi11 in #8
fix(provider): test provider fixed
fix(frontend): api key copy
fix(frontend): queue stadistics
fix(config): update was triggering nnttp pool update always
fix(config): check if directories are writable on start up
fix(config): update default log file path and improve documentation f…
docs: improve getting started docs
fix(arrs): connection test
fix(importing): truncate large files on import
Full Changelog: v0.0.1-alpha1...v0.0.1-alpha2
v0.0.1-alpha1
v0.0.1-alpha0
Full Changelog: https://github.com/javi11/altmount/commits/v0.0.1-alpha0
init: first release