IronDrop
IronDrop focuses on predictable behavior, simplicity, and low overhead. Use it to serve or share files locally or on your network.
Overview
Features
- File browsing and downloads with range requests and MIME detection
- Optional uploads with a drag-and-drop web UI (direct-to-disk streaming)
- Search (standard and ultra-compact modes for large directories)
- Monitoring dashboard at
/monitorand a JSON endpoint (/monitor?json=1) - Basic security features: rate limiting, optional Basic Auth, path safety checks
- Native SSL/TLS support via
--ssl-certand--ssl-key(built-in HTTPS, no reverse proxy required) - Single binary; templates and assets are embedded
- Core HTTP layer is implemented in-house (request parsing, routing, streaming) without an external HTTP framework
- Tokio is used for the async runtime and networking; standard production dependencies are used where practical (for example
clap,log/env_logger,tokio, andrustls/tokio-rustls) - Ultra-compact search index option for very large directory trees (tested up to ~10M entries)
- WebDAV (RFC 4918 Class 1 + Class 2 core):
OPTIONS,PROPFIND,PROPPATCH,MKCOL,PUT,DELETE,COPY,MOVE,LOCK,UNLOCK- Enabled only when
--enable-webdav true(or equivalent config setting) is provided
- Enabled only when
WebDAV RFC 4918 support
IronDrop includes an RFC 4918-focused implementation. The WebDAV core engine is implemented in-house and keeps critical request/response logic dependency-free.
- Supported methods:
OPTIONS,PROPFIND,PROPPATCH,MKCOL,PUT,DELETE,COPY,MOVE,LOCK,UNLOCK - WebDAV is feature-gated and disabled by default; enable explicitly with
--enable-webdav true - Capability headers:
DAV: 1,2,Allow,MS-Author-Via PROPFIND:allprop,propname, namedprop, per-propertypropstatgrouping (200/404), withDepth: 0,1, and recursiveinfinityPROPPATCH: dead-propertyset/removewith207 Multi-Statusresults- Locking: exclusive write locks, lock refresh,
Ifheader token evaluation (includingNotconditions), and token-gated write preconditions - Tree operations: lock-aware
DELETEmultistatus behavior (207with423/424where applicable)
Current RFC scope limits:
- ACL/versioning/bindings RFCs are out of scope (
RFC 3744,RFC 3253,RFC 5842) - Lock and dead-property storage is in-process (non-persistent across server restarts)
Performance
Designed to keep memory usage steady and to stream large files without buffering them in memory. The ultra-compact search mode reduces memory for very large directory trees.
- Ultra-compact search: approximately ~110 MB of RAM for around 10 million paths; search latency depends on CPU, disk, and query specifics.
- Dependency profile: the HTTP implementation is in-house; Tokio provides async scheduling and networking, and dependencies such as
clap,log/env_logger, andrustls/tokio-rustlsare used as stable standard building blocks.
Security
Includes native SSL/TLS (HTTPS), rate limiting, optional Basic Auth, basic input validation, and path traversal protection. See RFC & OWASP Compliance and Security Fixes for details.
📦 Installation
Getting started with IronDrop is simple.
From crates.io
Latest from Git
Verify Installation:
# Test that irondrop is available globally
# Now you can run from any directory:
Getting started
Quick start
Step 1: Install IronDrop
Step 2: Start sharing files immediately
# Share your current directory (safest - local access only)
# Share with your network (accessible to other devices)
Step 3: Open your browser and visit http://localhost:8080
📖 Common Use Cases
🏠 Home File Sharing
# Share your Downloads folder with family devices
💼 Work File Server
# Secure file server with uploads and authentication
🎬 Media Server
# Serve your media collection (videos, music, photos)
☁️ Cloud Storage Alternative
# Use a configuration file for consistent setup
🔒 HTTPS File Server
# Generate a self-signed certificate (for testing)
# Serve files over HTTPS
# HTTPS with authentication
🌐 Reverse Proxy (Nginx)
For production deployments, it is recommended to run IronDrop behind Nginx.
Root Domain Configuration:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0; # Enable large uploads
proxy_buffering off; # Enable streaming
}
Subpath Configuration (e.g., /webstorage/):
Start IronDrop with the --base-path flag:
Then configure Nginx to forward the full path (no stripping needed):
location /webstorage/ {
proxy_pass http://127.0.0.1:8080/webstorage/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
proxy_buffering off;
}
Note: No
sub_filterhacks or extra/_irondrop/location blocks are needed. The--base-pathflag makes IronDrop fully reverse-proxy aware — all generated URLs (HTML links, JavaScript API calls, WebDAV hrefs, HTTP redirects) are automatically prefixed with the configured base path.
See the Deployment Guide for full configuration examples and optimization settings.
🛠️ Configuration Options
Command Line Options
IronDrop offers extensive customization through command-line arguments:
| Option | Description | Example |
|---|---|---|
-d, --directory |
Required - Directory to serve | -d /home/user/files |
-l, --listen |
Listen address (default: 127.0.0.1) | -l 0.0.0.0 |
-p, --port |
Port number (default: 8080) | -p 3000 |
--enable-upload |
Enable file uploads | --enable-upload true |
--enable-webdav |
Enable WebDAV methods (OPTIONS, PROPFIND, PROPPATCH, MKCOL, PUT, DELETE, COPY, MOVE, LOCK, UNLOCK) |
--enable-webdav true |
--disable-rate-limit |
Disable rate limiting only when WebDAV is enabled | --enable-webdav true --disable-rate-limit true |
--base-path |
Base URL path prefix for reverse proxy sub-path deployments | --base-path /webstorage |
--username/--password |
Basic authentication | --username admin --password secret |
-a, --allowed-extensions |
Restrict file types | -a "*.pdf,*.doc,*.zip" |
-t, --threads |
Tokio runtime worker threads (default: 8) | -t 16 |
--config-file |
Use INI configuration file | --config-file prod.ini |
--ssl-cert |
SSL certificate file (PEM) for HTTPS | --ssl-cert cert.pem |
--ssl-key |
SSL private key file (PEM) for HTTPS | --ssl-key key.pem |
-v, --verbose |
Debug logging | -v true |
📄 Configuration File (Recommended for Production)
For consistent deployments, use an INI configuration file:
# Create your config file
# Edit it with your settings
# Then run:
The configuration file supports all command-line options and more! See the detailed example with comments explaining every option.
WebDAV can also be enabled in config:
[webdav]
enable_webdav = true
disable_rate_limit = false
Note: disable_rate_limit is ignored unless WebDAV is enabled.
Quick CLI example:
Configuration Priority (highest to lowest):
- Command line arguments
- Environment variables (
IRONDROP_*) - Configuration file
- Built-in defaults
Key endpoints
Once IronDrop is running, these endpoints are available:
| Endpoint | Purpose | Example |
|---|---|---|
/ |
📁 Directory listing and file browsing | http://localhost:8080/ |
/monitor |
📊 Real-time server monitoring dashboard | http://localhost:8080/monitor |
/search?q=term |
🔍 File search API | http://localhost:8080/search?q=document |
/_irondrop/upload |
⬆️ File upload endpoint (if enabled) | Used by the web interface |
Notes
- Use authentication (
--username/--password) when exposing to untrusted networks - Adjust
--threadsbased on workload - Use
--ssl-certand--ssl-keyfor native HTTPS without a reverse proxy
❓ Need Help?
# Get detailed help for all options
# Check your version
# Test with verbose logging
For comprehensive documentation, see our Complete Documentation Index.
Version notes
Recent releases include:
- v2.7.2: Major memory optimizations: WebDAV
Transfer-Encoding: chunkedbackground thread streaming (near-zero RAM usage for large tree traversals), Web UI 1,000-file pagination with lazy metadata loading, and a massive ~340MB reduction in default search index bootstrap footprint. - v2.7.1: Direct-to-disk uploads, ultra-compact search mode, and a
/monitorpage with a JSON endpoint.
Documentation
IronDrop has extensive documentation covering its architecture, API, and features.
📖 Core Documentation
- Complete Documentation Index - Central hub for all documentation
- Architecture Guide - System design and component overview
- API Reference - Complete HTTP API documentation
- Deployment Guide - Production deployment strategies
🔧 Feature Documentation
- Search Feature Deep Dive - Ultra-compact search system details
- WebDAV Implementation Guide - End-to-end flow and RFC 4918 behavior
- Upload Integration Guide - File upload system and UI
- Direct Upload System - Memory-efficient direct streaming architecture
- Configuration System - INI-based configuration guide
- Template System - Embedded template engine
🛡️ Security & Quality
- Security Fixes - Security enhancements and mitigations
- RFC & OWASP Compliance - Standards compliance details
- Testing Documentation - Comprehensive test suite overview
- Monitoring Guide - Real-time monitoring and metrics
Testing
IronDrop is rigorously tested with 325 automated tests:
- 44 unit tests in core source modules
- 281 integration/system tests across 30 test files (including WebDAV RFC suites)
Coverage Areas
- HTTP parser/request handling, auth, rate limiting, monitoring, uploads, search, and utilities
- WebDAV RFC-focused behavior (
PROPFIND,PROPPATCH,COPY/MOVE,LOCK/UNLOCK, error XML, edge preconditions) - Security and robustness paths (path traversal checks, symlink safeguards, malformed input handling)
# Run all tests
# Run specific test categories
# Run tests with output
For detailed testing information, see Testing Documentation.
License
IronDrop is licensed under the MIT License.