Releases: diamonddigitaldev/Dropgate
3.0.3
Dropgate | Patch Update (v3.0.3)
- Server: Fixed DGUP bundle timer to update on chunk activity instead of file completion, change timeout from 10m -> 2m (matches chunk timer). This now prevents large files causing bundles to fail with a 410 Gone HTTP status.
Installation
Dropgate Client
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
Dropgate Server
The easiest way to host your own Dropgate Server is using Docker. Please read this part of the server docs for the installation guide.
Alternatively, you can also download the source code, install the required node modules and run the server manually. (Learn more)
A quick note:
So far, I (WillTDA) have been the sole developer of the Dropgate Project, I'm committed to seeing Dropgate become the go-to open-source solution for file transfer operations.
My programming skills are far from perfect. If you do happen to find any careless bugs, inconsistencies or features you'd like to see added, please don't hesitate to let me know ASAP. Every issue submitted makes Dropgate better for everyone :)
3.0.2
Dropgate | Patch Update (v3.0.2)
- Server: NEW! Docker image now supports
arm64. - Server: Fixed rate limiting issues on download/meta API endpoints when downloading large bundles. A new middleware function exempts valid requests from the rate limit.
- Dropgate Client/Web UI: Tweaked some CSS styling for the file list table. On smaller devices, the table would start to visually overlap if filenames were long.
Installation
Dropgate Client
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
Dropgate Server
The easiest way to host your own Dropgate Server is using Docker. Please read this part of the server docs for the installation guide.
Alternatively, you can also download the source code, install the required node modules and run the server manually. (Learn more)
A quick note:
So far, I (WillTDA) have been the sole developer of the Dropgate Project, I'm committed to seeing Dropgate become the go-to open-source solution for file transfer operations.
My programming skills are far from perfect. If you do happen to find any careless bugs, inconsistencies or features you'd like to see added, please don't hesitate to let me know ASAP. Every issue submitted makes Dropgate better for everyone :)
3.0.1
Dropgate | Security Update (v3.0.1)
Dropgate v3.0.1 is a critical security release addressing multiple vulnerabilities identified in the P2P transfer protocol and server-side upload handling. Upgrading is strongly recommended for all users.
🛡️ Security Hardening
This release focuses on "Defense in Depth," implementing strict validation and protocol guardrails to prevent Denial of Service (DoS), memory exhaustion, and data corruption attacks.
P2P Protocol (Core Library)
- Consent Enforcement: The P2P receiver now strictly rejects any binary data or chunk metadata received before the user has seen the file details and consented to the transfer. This prevents "forced" transfers from malicious senders.
- Chunk & Size Validation: Critical validation added to verify that received binary data matches the declared chunk size and that cumulative data does not exceed the total file size.
- Sequence Integrity: Chunks must now arrive in the exact expected sequence; out-of-order or duplicate chunks are rejected.
- Connection Rate Limiting: Protected senders from DoS attacks by implementing a sliding-window rate limiter for incoming P2P connections (max 10 attempts per 10 seconds).
- Memory Protection: Implemented a write-queue depth limit (max 100 pending writes) to prevent memory exhaustion if a sender floods a slow receiver with data.
- Connection Race Fix: Fixed a TOCTOU (Time-of-Check to Time-of-Use) vulnerability where a new connection could inappropriately reset a transfer initiated by a previous connection.
- Stall Detection: Added a 30-second timeout for unacknowledged chunks to automatically drop connections with stalled or malicious receivers.
Server-Side Uploads
- Atomic Quota Enforcement: Eliminated a critical TOCTOU race condition in storage quota checks. By implementing a promise-based mutex for file initialization, the server now serializes concurrent requests to strictly enforce the global storage limit.
- Resource Limits:
- Added a maximum limit of 100,000 chunks per file to prevent resource exhaustion.
- Added a maximum limit of 1,000 files per bundle to protect server memory and index performance.
- Filename Hardening: Comprehensive sanitization of filenames to prevent path traversal, null-byte injection, and control-character attacks. Now also blocks reserved Windows filenames (e.g.,
CON,PRN,AUX,NUL). - Data Integrity:
- Added chunk offset validation to ensure chunks cannot be written outside of the allocated file bounds.
- Fixed a race condition where concurrent duplicate chunk uploads could lead to file corruption; chunks are now marked as received atomically before the write operation begins.
- Integer Overflow Protection: Added safe integer checks for all file and bundle size calculations to prevent quota bypasses via integer wrapping on extremely large size values.
🛠️ Changes & Documentation
Troubleshooting
- New Guidance: Updated TROUBLESHOOTING.md with specific solutions for users who hit the new security limits (e.g., how to increase
UPLOAD_CHUNK_SIZE_BYTESfor extremely large files).
Core Library (@dropgate/core)
- Protocol Versioning: Internal protocol adjustments to support new sequence tracking and consent states.
- Watchdog Hardening: The connection watchdog now only resets on actual data progress, preventing "keep-alive" attacks using empty control messages.
✅ Fixed / Added
- Fixed a bug where a sender's connection replacement logic could cause a data-corrupting state reset during an active transfer.
- Fixed a potential memory leak in the sender when a receiver stopped acknowledging chunks.
- Fixed a race condition in storage quota checks.
- Added live progress percentage to standard download page's window title, ensuring consistency across all pages.
- Added "Show Changelog" option on Dropgate Client update modals.
🧩 Developer notes
- If you encounter a "Too many chunks" error on your server, advise users to increase their
UPLOAD_CHUNK_SIZE_BYTES. - The P2P protocol is now more sensitive to connection jitter; if you experience frequent disconnects, ensure your
P2P_STUN_SERVERSare reliable.
Installation
Dropgate Client
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
Dropgate Server
The easiest way to host your own Dropgate Server is using Docker. Please read this part of the server docs for the installation guide.
Alternatively, you can also download the source code, install the required node modules and run the server manually. (Learn more)
A quick note:
So far, I (WillTDA) have been the sole developer of the Dropgate Project, I'm committed to seeing Dropgate become the go-to open-source solution for file transfer operations.
My programming skills are far from perfect. If you do happen to find any careless bugs, inconsistencies or features you'd like to see added, please don't hesitate to let me know ASAP. Every issue submitted makes Dropgate better for everyone :)
3.0.0
Dropgate | Major Update (v3.0.0)
Dropgate v3 brings multi-file bundles, a redesigned P2P protocol, SQLite-backed storage, and major performance and security improvements.
🚀 Highlights
- Multi-file bundles: Upload multiple files in a single transfer with encrypted manifests (E2EE keeps bundle contents private from the server).
- Redesigned P2P protocol: Better connection handling, automatic reconnection on dropouts, and native progress tracking.
- SQLite storage backend: Improved performance and stability for active deployments (optional; in-memory mode still default).
- Smarter core library: Automatic server capability detection, optimized API calls, and metadata derivation (less stored data, better performance).
- Insecure context improvements: Plain HTTP uploads now work with pure-JS SHA-256 fallback (encryption still requires HTTPS/localhost).
- Configurable chunk sizes: Tune upload performance with
UPLOAD_CHUNK_SIZE_BYTES(64KB–unlimited).
🧨 Breaking changes / migration notes
1) Database schema changes
The file/bundle database has been restructured to remove redundant data that the core library can derive. If you use UPLOAD_PRESERVE_UPLOADS=true, your existing upload database may need migration or recreation.
2) ES module target updated
The core library now targets ES2022. Legacy environments may require additional transpilation.
3) Removed legacy code
Internal cleanup removed deprecated code paths. Custom integrations should verify compatibility with the new @dropgate/core API.
✅ Added
Bundles
- Multi-file uploads: Send multiple files in a single transfer via the Web UI and core library.
- Bundle metadata API: New
getBundleMetadata()method in@dropgate/core. - Bundle size modes: Control via
UPLOAD_BUNDLE_SIZE_MODE:total(default): enforces size limit against combined bundle sizeper-file: enforces limit against each file individually
- E2EE for bundles: Manifests are encrypted, so the server never sees which files belong together.
Server
- Configurable chunk sizes: Set
UPLOAD_CHUNK_SIZE_BYTES(minimum 64KB, default 5MB). Core library auto-detects and adapts. Smaller values increase overhead; larger values may require proxy body-size adjustments. - SQLite backend: Optional persistent database (default remains in-memory) for better long-term performance.
- Enhanced security headers:
Cross-Origin-Resource-Policy: same-origin(prevents Spectre-class leaks)Permissions-Policy(disables camera, microphone, geolocation)font-src: 'self',media-src: 'none'X-Permitted-Cross-Domain-Policies: 'none'(blocks Flash/PDF cross-domain policies)
- Improved sharing code resolution: Better logic for interpreting pasted codes/URLs.
Core Library (@dropgate/core)
- Automatic capability detection: Caches server info and adapts to enabled features.
- Optimized API calls: Reduced redundant requests and faster performance.
- New metadata methods:
getFileMetadata()andgetBundleMetadata()for programmatic access. - Storage unit formatting:
formatBytes()now supports all theoretical units up to YB (yottabytes).
Web UI
- Native progress tracking: Upload/download progress now updates browser tab/window titles.
- Consistent toast notifications: All toasts now have explicit info levels.
- Clipboard fallback: Copy-to-clipboard support for insecure contexts.
- Better insecure context handling: Clearer messaging and graceful degradation for HTTP deployments.
Developer Experience
- GitHub Issue Templates: Bug report and feature request templates added.
- Updated documentation:
PRIVACY.mdrefreshed with v3 changes. - Type improvements: Better TypeScript definitions in
@dropgate/core.
🔄 Changed
P2P Protocol
- Complete redesign with improved state management, dropout/reconnection handling, and conditional event guardrails to prevent misfires when transfers complete or stop.
Upload Flow
- Insecure context support: HTTP uploads now work via pure-JS SHA-256 fallback (when
crypto.subtleis unavailable). Encryption operations still require secure contexts. - Chunk integrity: Chunk hashing no longer requires Web Crypto API on insecure contexts.
Database
- Removed server-side storage of data the core library can derive independently (reduces database footprint, improves performance).
🛠️ Fixed
- Upload UI state: "Standard Upload" text no longer gets stuck if user declines the security modal.
- Server compatibility errors: Upload UI now properly disables when server compatibility issues are detected.
- File downloads: Better handling of downloads over insecure contexts in Web UI.
📦 Dependencies
- All dependencies updated to latest stable versions.
🧩 Developer notes
- If you're running a custom Dropgate server, review
UPLOAD_CHUNK_SIZE_BYTESandUPLOAD_BUNDLE_SIZE_MODEsettings for your deployment. - For production deployments with
UPLOAD_PRESERVE_UPLOADS=true, consider enabling SQLite for better performance. - Custom clients should call
GET /api/infoon startup to detect bundle support and other v3 capabilities.
Installation
Dropgate Client
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
Dropgate Server
The easiest way to host your own Dropgate Server is using Docker. Please read this part of the server docs for the installation guide.
Alternatively, you can also download the source code, install the required node modules and run the server manually. (Learn more)
A quick note:
So far, I (WillTDA) have been the sole developer of the Dropgate Project, I'm committed to seeing Dropgate become the go-to open-source solution for file transfer operations.
My programming skills are far from perfect. If you do happen to find any careless bugs, inconsistencies or features you'd like to see added, please don't hesitate to let me know ASAP. Every issue submitted makes Dropgate better for everyone :)
2.2.1
Dropgate | Patch Update (v2.2.1)
- Addressed an issue causing the max downloads setting to auto-set to 1 when choosing unlimited (yes i know, i'm a moron)
- Dropgate Client: Addressed some "Share with Dropgate" context menu issues.
- Dropgate Client: Addressed a validation issue which would let users press upload if max downloads was invalid.
- Dropgate Client: File drop now shows file size and server upload limit.
Installation
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
A quick note:
So far, I (WillTDA) have been the sole developer of the Dropgate Project, I'm committed to seeing Dropgate become the go-to open-source solution for file transfer operations.
My programming skills are far from perfect. If you do happen to find any careless bugs, inconsistencies or features you'd like to see added, please don't hesitate to let me know ASAP. Every issue submitted makes Dropgate better for everyone :)
2.2.0
Dropgate | Feature Update (v2.2.0)
NEW: Multi-use uploads (Expire on n downloads!)
- Files by default will wipe from the server after one download.
- Use
UPLOAD_MAX_FILE_DOWNLOADSon Dropgate Server to set the maximum number of times a file can be downloaded. - Max Downloads can be set from Dropgate Client or Web UI (within the server's defined limits).
NEW: Cancellable uploads and transfers
- About time Dropgate had this. If the user at any point during a transfer they would like to abort, a button is available to terminate the session and forget the file.
Dropgate Client
- Main window now responsive, allowing the user to make the window any size they wish.
- Upload UI is disabled if a server becomes unreachable or does not support standard uploads.
Security Improvements
- End-to-end encryption toggle has been removed. The client/web UI automatically enables encryption when available. A helpful badge will appear showing what security measures are available for the upload session.
- A warning alert now shows when uploading via HTTP or when E2EE is not enabled. Users have to explicitly acknowledge this warning before upload.
@dropgate/core@2.2.0:DropgateClient#uploadFile()encryptoption now defaults totrue. An error will be thrown if the supplied server does not support E2EE, so ensure this is accounted for in your implementation!
Installation
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
A quick note:
So far, I (WillTDA) have been the sole developer of the Dropgate Project, I'm committed to seeing Dropgate become the go-to open-source solution for file transfer operations.
My programming skills are far from perfect. If you do happen to find any careless bugs, inconsistencies or features you'd like to see added, please don't hesitate to let me know ASAP. Every issue submitted makes Dropgate better for everyone :)
2.1.0
Dropgate | Feature Update (v2.1.0)
NEW: @dropgate/core
- All of the upload protocol/download handling/P2P communication/server negotiation/handshake logic has been rolled into one, universal JavaScript library. This core module now drives the official Dropgate Client and Web UI.
@dropgate/corecan be installed from NPM, and can be used to create:- Automated scripts to talk to Dropgate servers/carry out P2P sessions
- Custom clients or Web UIs
- ...or something completely unique of your own!
- Open-sourced under the Apache License 2.0.
Dropgate Server
- NEW!
SERVER_PORTenvironment variable to allow custom port selection. - NEW! Web UI now runs on top of
@dropgate/corefor improved quality and stability. - Introduced a number of security improvements:
- Further secured file streaming/downloading:
StreamSaverscripts are now served from server dependencies (node_modules), and auto-injects custom self-hosted MITM page instead of relying onjimmywarting.github.io. With this improvement, the entire Dropgate ecosystem can operate entirely on LAN with no reliance on externally loaded pages/scripts. - Tightened the Content Security Policy (CSP) rulesets.
- Improved the wording on file download prompts.
- Further secured file streaming/downloading:
- Addressed several UI inconsistencies and UX edge cases.
- Refactored many parts of the Web UI and grouped common elements into EJS partials.
Dropgate Client
- NEW! Client now runs on top of
@dropgate/corefor improved quality and stability. - NEW!
electron-updaterdependency added, allowing Dropgate Client to automatically check for updates and install them if they are available in the GitHub releases.
Direct Transfer (P2P)
- NEW! To improve security/transparency, transfers no longer start automatically. When receiving a file, a prompt will appear containing metadata about the incoming file. A manual "Start Transfer" button must be pressed to complete the transfer. (#23)
- Significantly improved the handling of connections and transfer progress states.
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
2.0.0
Dropgate | Major Update (v2.0.0)
Dropgate is the next major version of Shadownloader with a new name, a built-in Web UI, and optional Direct Transfer (P2P) mode.
🚀 Highlights
- Rebrand: Shadownloader is now Dropgate (updated names, icons, and docs across client + server).
- Built-in Web UI: The server now ships with a browser UI for sending/receiving files (no separate frontend needed).
- Direct Transfer (P2P): Optional device-to-device transfer where the server only helps peers find each other (PeerJS/WebRTC).
- Shared “Dropgate Core” ES module: Common client logic extracted into a reusable module used by:
- the Electron client (
client/src/dropgate-core.js) - the Web UI (
server/public/js/dropgate-core.js)
- the Electron client (
- Clearer privacy stance + docs: New
docs/PRIVACY.mdanddocs/TROUBLESHOOTING.md.
🧨 Breaking changes / migration notes
1) Hosted uploads are now opt-in
If you want the classic “upload to server, share link” workflow, you must set:
ENABLE_UPLOAD=true2) Server environment variables were renamed & expanded
Older variables were split into an upload-specific namespace and new feature toggles were added.
Old → New
ENABLE_E2EE→UPLOAD_ENABLE_E2EEMAX_FILE_SIZE_MB→UPLOAD_MAX_FILE_SIZE_MBPRESERVE_UPLOADS→UPLOAD_PRESERVE_UPLOADSZOMBIE_CLEANUP_INTERVAL_MS→UPLOAD_ZOMBIE_CLEANUP_INTERVAL_MSRATE_LIMIT_WINDOW_MS/RATE_LIMIT_MAX_REQUESTS→ unchanged
New / notable
ENABLE_WEB_UI(default: enabled)ENABLE_P2P(default: enabled)SERVER_NAMELOG_LEVEL(NONE,ERROR,WARN,INFO,DEBUG)P2P_STUN_SERVERS(defaults to Cloudflare STUN)PEERJS_DEBUG- Upload lifecycle & storage controls:
UPLOAD_MAX_STORAGE_GBUPLOAD_MAX_FILE_LIFETIME_HOURS
3) HTTPS is required for the “modern” stuff
- If Upload E2EE is enabled, the server must be behind HTTPS (secure context) for browser-side decryption to work.
- P2P mode also expects HTTPS (secure context) for browser WebRTC.
The server now includes an “insecure context” Web UI page to make this failure mode obvious.
✅ Added
Server
- P2P signaling built-in via PeerJS server, mounted at
/peerjs(when enabled). - Capability discovery endpoint:
GET /api/inforeturns version + feature flags and P2P ICE configuration. - Sharing code resolver:
POST /api/resolvecan interpret a pasted value as:- a hosted file link/ID,
- a P2P code,
- or an external URL.
- New storage controls (caps + retention windows) for hosted uploads.
- More explicit privacy/logging controls (log levels + docs).
- Web UI refactor: moved from static HTML pages to EJS templates (cleaner routing + reusable layout).
Web UI
- New sender/receiver UX: classic upload + P2P flows in one place.
- QR code generation support for links/codes.
- Dedicated download pages for:
- hosted downloads (
download-standard) - P2P downloads (
download-p2p)
- hosted downloads (
Docs
docs/PRIVACY.md— what is / isn’t logged, and recommended defaults.docs/TROUBLESHOOTING.md— quick checks + common fixes (uploads, HTTPS/E2EE, P2P, rate limiting).
🔄 Changed
- Project identity updated everywhere (README titles, icons, images:
shadownloader.png→dropgate.png). - Upload configuration moved under
UPLOAD_*variables and guarded behindENABLE_UPLOAD. - Web UI assets reorganized into structured CSS/JS bundles (page-specific scripts/styles + shared helpers).
🛠️ Fixed / hardened
- Upload integrity: per-chunk SHA-256 verification via
X-Chunk-Hash(required in the v2 protocol). - Complete-time validation: server verifies final file size at
/upload/complete, rejects mismatches, and cleans up temp files. - Empty file protection: 0‑byte uploads are rejected early.
- Smarter rate limiting: invalid/unknown upload IDs are counted against rate limits to reduce abuse.
🧩 Developer notes
- Vendor assets are now served by the server (Bootstrap, PeerJS, QR code library) via
/vendor/*, reducing “missing static file” issues behind proxies. - If you’re building custom clients, target
GET /api/infofirst to adapt to what a server actually has enabled.
Download and run the executable to install Dropgate Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
1.0.2
Shadownloader Client | Patch Update (v1.0.2)
- Improves UX by clearing the upload status text when the test connection button is clicked or upload is started.
- Addresses an oversight which would cause external links in the Credits page not to open.
Download and run the executable to install Shadownloader Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.
1.0.1
Shadownloader Client | Patch Update (v1.0.1)
- Improves UX by addressing an oversight that would allow the user to set
0(unlimited) in the file lifetime value box. To avoid confusion, users are advised to selectUnlimitedfrom the dropdown.
Download and run the executable to install Shadownloader Client on your Windows computer.
Note: You may get a Windows SmartScreen popup when trying to run the installer. This is normal as the installer is not signed.