Releases: elpideus/TeleVault
v1.5.0
Added
- Backend: Parallel chunk upload support � new
fast_upload_file/fast_upload_documentfunctions use a producer/consumer queue with a_ConcurrencyControllerthat adaptively scales concurrent Telegram connections. Configurable via the newPARALLEL_UPLOAD_CONNECTIONSsetting (default 8). - Frontend: Combined ETA tooltip on the Transfers tray header � shows estimated time remaining, total bytes remaining, and aggregated upload speed across all active transfers.
Improvements
- Backend: Connection locking in
ClientPool� per-accountasyncio.Lockprevents concurrentconnect()/get_me()calls from racing during initialization, reconnection, and health checks. - Backend:
UploadWorkerPoolnow emits an SSE error event when an unhandled exception occurs, preventing uploads from appearing stuck at 0% in the UI. - Backend:
upload_documentwrapssend_filein a try/except and logs the full exception before re-raising, improving diagnosability of Telethon failures. - Backend: Telethon internal logging silenced to
WARNING; high-frequency/upload/chunk/requests are filtered from uvicorn access logs. - Frontend: SSE reconnect logic proactively refreshes the access token before reconnecting to avoid silent 401 failures on expired tokens.
- Frontend: After SSE reconnects,
reconcileProcessingUploadsqueries the DB for uploads stuck inprocessing/stagedstate so events missed while SSE was down are recovered. - Frontend:
check-hashPOST is retried once on 401 (after the auth middleware has already stored a fresh token) so a token refresh mid-upload no longer blocks deduplication. - Frontend: Upload
createdAttimestamps are offset by insertion index so multiple simultaneous drops preserve their drop order in the tray. - Frontend: Speed display decays to zero after 10 s with no progress change; stale XHR speed is cleared when an upload is promoted to the Telegram phase.
- Frontend: Transfer item progress labels now show one decimal place for values below 1% for better granularity at the start of large uploads.
- Frontend: Transfers tray sort order updated �
uploadingranks highest among active items, Telegram-phase items (processing/staged) rank below hashing/queued; tie-breaker is oldest-first to match the original drop order. - Frontend: Tooltip z-index raised to 300 to ensure it renders above the Transfers tray.
Bug Fixes
- Backend: Fixed
_borrow_exported_senderfallback � operations now useclient._senderdirectly when the exported sender is unavailable, resolving upload failures on some Telethon versions.
Improvements
- Frontend: Upload semaphores (
hashSem/tvSem) are now global module-level singletons inuploadSemaphores.ts, preventing per-render recreation and ensuring the concurrency cap is truly global across upload batches. - Frontend:
UploadStategains acreatedAttimestamp field; the Transfers tray now sorts active items newest-first using this field instead of the non-deterministic ID string comparison. - Frontend:
PreviewPagemock uploads includecreatedAtvalues for realistic tray previews.
v1.4.0
Added
- Backend: Upload cancellation API �
DELETE /files/upload/{operation_id}cancels a single in-progress or queued upload, andDELETE /files/uploadcancels all uploads for the current user. The cancel flag is set immediately so Telegram workers abort between splits and roll back any partial messages. - Backend:
UploadWorkerPool.cancel_job()andcancel_all_jobs()� drain queued jobs from a user's worker queue before a worker picks them up, complementing the registry cancel flag for already-started jobs. - Backend:
OperationRegistry.emit_cancelled()� broadcasts acancelledSSE event to all listeners for a given operation, enabling real-time UI updates. - Frontend: Cancel button in the Transfers tray for individual uploads and a "Cancel all" action, wired to the new cancellation API endpoints.
Improvements
- Frontend: The
/previewdesign system page can now be enabled in production builds via theVITE_ENABLE_PREVIEW=trueenvironment variable, instead of being restricted to dev mode only. - Frontend:
PreviewPagenow uses a horizontal masonry-style layout (inspired by ShadCN's component preview) � fixed-widthSectionContainercards wrap into a horizontally-scrollable canvas. Vertical mouse wheel is redirected to horizontal page scroll, with smart fallback so inner scrollable elements (card bodies,.scrollable-horizontalzones) still consume their own scroll events first. - Frontend:
PreviewPagerestructured with a newSectionContainercomponent that gives each section a fixed-width scrollable card, removing sticky section headers and the unusedPlaceholdercomponent. - Frontend: Transfers tray and
TransferItemcomponents refactored for clearer state handling and improved layout consistency. - Frontend: Global progress hook updated to handle cancelled state.
- Backend: Progress service improvements for more accurate multi-split tracking.
Fixed
- Backend: API version is now read dynamically from
pyproject.tomlvia
importlib.metadatainstead of being hardcoded inmain.py. - Frontend: The "About" panel now displays the real app version at build
time via the__APP_VERSION__constant injected by Vite, replacing the
previously hardcoded version string.
Internal
- Frontend: Vite config now injects
__APP_VERSION__frompackage.json
at build time, making the version single-sourced across the entire project.
v1.3.3
Added
- Frontend: Added expandable "Location" (breadcrumb path) to transfer items in the Transfers tray for better context on where files are being uploaded.
- Frontend: Enhanced tooltips with glassmorphism effects (blur + semi-transparent background) and interactive content support.
- Frontend: Added
.tabular-numsCSS utility to prevent layout jitter in upload speed and progress readouts.
Fixed
- Backend: Resolved fluctuating progress bar during multi-split uploads (700 MB+ files) by tracking split progress independently.
- Frontend: Fixed
formatBytesutility to display integer byte values correctly (e.g. "123 B" instead of "123.0 B"). - Frontend: Improved
TransfersTrayresizing reliability and fixed layout jumps during entrance animations. - Cloudflare: Dramatically reduced upload time for large files through Cloudflare tunnel by increasing TUS chunk size from 2 MB to 100 MB.
- Backend: TUS PATCH handler now streams incoming data directly to disk instead of buffering in RAM.
- Auth: Handled 401 token expiry in TUS upload path with automatic refresh and retry.
- Auth: Fixed "body has already been consumed" error when cloning requests for retry in the TUS path.
v1.3.0
Added
- TUS resumable upload protocol for large files when behind Cloudflare: detected automatically via the
CF-Rayresponse header, no configuration required - On Cloudflare-proxied deployments, large file uploads (> 50 MB) now use sequential 2 MB TUS chunks instead of the parallel custom protocol; if Cloudflare drops a connection mid-chunk the client sends a
HEADrequest to retrieve the server's authoritative byte offset and resumes from exactly that point, eliminating the "Failed to construct Request" failures caused by mid-chunk 524 timeouts - New backend TUS endpoints:
POST /upload/tus(create),HEAD /upload/tus/{id}(offset probe),PATCH /upload/tus/{id}(append),POST /upload/tus/{id}/finalize(submit to Telegram worker pool) - The existing parallel chunked path is retained unchanged for non-Cloudflare deployments
Changed
- Extracted shared
_sanitize_filename()helper in the backend, removing three identical inline copies
v1.2.1
🚀 Key Highlights: WASM SHA-256 Hashing
TeleVault now uses a three-strategy hashing pipeline to ensure maximum speed and compatibility:
- NATIVE: Chrome 130+ streaming
crypto.subtle.digest(near-hardware speed). - WASM: Rust
sha2compiled to WebAssembly (~320 MB/s), replacing the slow pure-JS fallback for all modern browsers. - JS: Pure-JS fallback for legacy environments.
Performance Impact Example: 14 GB hash time reduced from ~6 minutes to under 2 minutes due to WASM and prefetch overlapping.
🛠️ Fixed & Improved
- Unstable Connection Support: Chunk uploads now retry up to 4 times with exponential backoff, preventing failures on Cloudflare 524 timeouts or flaky links.
- Hang Prevention: Telegram upload workers now enforce per-split timeouts. No more uploads hanging at 0% indefinitely due to dropped sessions.
- Concurrency Guarantees: Shared semaphores across all upload batches (drag-drop and file picker) ensure the concurrency-cap and sequential-hashing rules are always respected.
- Account-Aware Concurrency: File-level upload concurrency (
tvSem) is now correctly limited based on the number of connected Telegram accounts. - Leaner Docker Images: Multi-stage
wasm-builderstage injects compiled artifacts without bloating the final image.
v1.1.1
Added
- New "Queued" status for uploads waiting in the transfer manager to improve clarity during high-concurrency operations
Fixed
- SSE connection deadlock: consolidated multiple independent progress streams into a single global event source (
useGlobalProgresshook), preventing browsers from hitting the per-domain connection limit - Improved SSE heartbeat reliability: standardized ping events to prevent QUIC/TCP idle-timeout disconnects during long-running transfers
- Backend process/status stream merger: unified the event fan-out logic to reduce server load and simplify client-side event handling
Changed
- Refactored
FileExplorerto use the global progress hook, removing redundant connection logic and making completion detection more robust - UI polishing in the transfer manager: improved layout and state transitions for background hashing/uploading tasks
Removed
- Stale utility scripts (
reset-docker.ps1,reset-docker.sh) and temporary screenshots
v1.0.11 - First Stable Release
I'm pleased to announce v1.0.11 as the first stable release of TeleVault. This version represents the point where file upload reliability has reached a usable level after addressing core stability issues.
What Makes This Release Stable
This release culminates a series of fixes focused on making uploads reliable under real-world conditions:
Upload Pipeline Improvements
- Chunked upload architecture (v1.0.7): Broke large files into 5-90MB segments with automatic retry, preventing total failure from partial transfers
- Parallel processing controls (v1.0.10): Added configurable concurrency to balance speed with server/resource limitations
- Timeout elimination (v1.0.9, v1.0.10): Resolved 524 gateway errors during slow/large transfers by optimizing chunk sizing and backend threading
- Session persistence (v1.0.6, v1.0.8): Implemented automatic token refresh during long uploads to prevent mid-transfer authentication drops
System Reliability Fixes
- Database connection management (v1.0.9): Restructured upload handling to prevent connection pool exhaustion under load
- Progress tracking stability (v1.0.5): Fixed SSE/QUIC conflicts that caused upload progress to stall
- Duplicate prevention (v1.0.7): Added hash-based deduplication to avoid unnecessary re-uploads
v1.0.11 Specific Improvement
This release addresses a final UI consistency issue:
- Transfer list ordering: Fixed item reordering in the upload queue when files transition from manual upload initiation to Telegram processing, ensuring the display accurately reflects processing state throughout.
Ready for Regular Use
With v1.0.11, TeleVault offers:
- Dependable transfers for files of any size
- Stable performance during concurrent operations
- Consistent user experience from upload start to Telegram delivery
- Docker-based deployment that is stable enough for regular use
Special Thanks
A heartfelt thank you to Alessandro Zago for:
- Providing a Claude Code subscription that significantly accelerated development
- Generous donations that support the project's ongoing development
This release establishes the baseline for future stable versions. Whether you're using TeleVault for personal file management or sharing, v1.0.11 provides the reliability foundation needed for regular use.
See the detailed change history for all improvements leading to this stable release.