Skip to content
This repository was archived by the owner on Nov 19, 2025. It is now read-only.

Latest commit

Β 

History

38 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Build Status License: MIT Platform Rust PRs Welcome

Logo

Quick-serve Enterprise Edition

Enterprise-hardened fork of quick-serve optimized for production deployment on Android/Termux with critical bug fixes, custom error pages, and comprehensive operational documentation.

No setup, zero-config, multi-platform, multi-protocol, standalone server for developers or whoever wants to promptly serve files over the network with production-grade reliability.


🏒 Enterprise Edition Features

✨ What Makes This "Enterprise"?

This fork extends the excellent upstream project with production-grade enhancements for real-world deployment:

πŸ› Critical Bug Fixes

  • HTTP directory crash fix - Server no longer crashes when accessing directories without index.html
  • Proper 403 Forbidden responses for directory access
  • Submitted to upstream as Issue #39

🧺 Human-Friendly DropBasket Interface

  • One-command installation - curl | bash for instant setup
  • ~/DropBasket/ folder - Human-friendly name (no technical jargon)
  • Desktop shortcuts - Click-to-start with purple gradient basket icon (Linux)
  • Termux widgets - Home screen widgets for Android (DropBasket-Start, DropBasket-Stop)
  • Simple commands - qs-start, qs-stop, qs-sync (no complex paths)
  • Auto-sync between devices - Share files across your network effortlessly
  • Non-standard ports - Port 50080 by default (no conflicts)
  • Installation error handling - Comprehensive troubleshooting guide

🎨 Professional Custom Error Pages

  • 403 Forbidden - Professional styled page with purple gradient
  • 404 Not Found - Professional styled page with pink gradient
  • 500 Internal Server Error - Professional styled page with orange gradient
  • All pages follow modern UI/UX principles

πŸ“± Android/Termux Production Optimizations

  • runit service integration - Automatic startup and management
  • noexec filesystem workarounds - Works on Android storage limitations
  • Optimized build scripts - Cross-compilation support via V2 pattern
  • Production-ready deployment - Battle-tested on ARM64 devices

πŸ“š Comprehensive Operational Documentation

πŸ”§ Enterprise Tooling

  • Simple commands (qs-start, qs-stop, qs-sync)
  • One-command installers (install.sh, install-android.sh)
  • Automated health checks
  • Log rotation configuration
  • Service monitoring scripts

πŸ†š Quick Comparison

Feature Upstream Enterprise Edition
One-command installer ❌ Manual build βœ… curl | bash instant setup
Human-friendly interface ❌ CLI only βœ… DropBasket folder + desktop shortcuts
Quick commands ❌ Full binary path βœ… qs-start, qs-stop, qs-sync
Custom error pages ❌ Generic βœ… Professional styled (403/404/500)
Directory crash bug ❌ Crashes βœ… Fixed & handles gracefully
Android/Termux docs ❌ Basic βœ… Complete production guides
Service management ❌ Manual βœ… runit integration + aliases
Monitoring tools ❌ None βœ… Health checks + dashboards
Disaster recovery ❌ None βœ… Complete documented procedures
Maintenance guides ❌ None βœ… Scheduled procedures (weekly/monthly)
Build workarounds ❌ Standard βœ… Android noexec handling

Upstream Project: joaofl/quick-serve v0.3.2


Table of Contents


πŸ—οΈ Architecture

System Overview

graph TB
    subgraph "Client Layer"
        A[HTTP Client] --> B[Request]
    end

    subgraph "Quick-Serve Enterprise Server"
        B --> C{Router}

        C -->|Static File| D[File Server]
        C -->|Directory| E[Directory Handler]
        C -->|Not Found| F[404 Handler]

        D --> G{File Exists?}
        G -->|Yes| H[Serve File]
        G -->|No| F

        E --> I{Has index.html?}
        I -->|Yes| H
        I -->|No| J[403 Handler]

        H --> K[Response 200]
        F --> L[Custom 404 Page]
        J --> M[Custom 403 Page]
    end

    subgraph "Response Layer"
        K --> N[Client Receives File]
        L --> O[Client Sees Styled Error]
        M --> O
    end

    style H fill:#28A745
    style L fill:#E83E8C
    style M fill:#7C3AED
Loading

Request Flow with Error Handling

sequenceDiagram
    participant Client
    participant Router
    participant FileSystem
    participant ErrorHandler

    Client->>Router: HTTP GET /path/file.html
    Router->>FileSystem: Check file exists

    alt File Exists
        FileSystem-->>Router: File found
        Router-->>Client: 200 OK + file content
    else File Not Found
        FileSystem-->>Router: Not found
        Router->>ErrorHandler: Trigger 404
        ErrorHandler-->>Client: 404 + Custom styled page
    else Directory Without Index
        FileSystem-->>Router: Directory found
        Router->>FileSystem: Check index.html
        FileSystem-->>Router: No index
        Router->>ErrorHandler: Trigger 403
        ErrorHandler-->>Client: 403 + Custom styled page
    end
Loading

Service Management (runit Integration)

graph LR
    subgraph "Startup"
        A[System Boot] --> B[runit Supervisor]
        B --> C[quick-serve Service]
    end

    subgraph "Monitoring"
        C --> D{Health Check}
        D -->|Healthy| E[Continue Running]
        D -->|Crashed| F[Auto Restart]
        F --> C
    end

    subgraph "Control"
        G[qs-start] --> B
        H[qs-stop] --> I[Stop Service]
        J[qs-sync] --> K[Sync Files]
    end

    E --> L[Serve Requests]

    style C fill:#00FF41
    style F fill:#FFC107
    style L fill:#28A745
Loading

Android/Termux Deployment

graph TB
    subgraph "Android Device"
        A[Termux App] --> B[Install Script]

        B --> C[Create ~/DropBasket/]
        B --> D[Install Binary]
        B --> E[Setup runit Service]
        B --> F[Create Widgets]

        C --> G[User Files]
        D --> H[quick-serve Binary]
        E --> I[Auto-start on Boot]
        F --> J[Home Screen Control]

        G --> K[Port 50080]
        H --> K
        I --> K

        K --> L[Network Access]
    end

    subgraph "Network"
        L --> M[Local: localhost:50080]
        L --> N[Network: 192.168.x.x:50080]
    end

    style C fill:#28A745
    style K fill:#00FF41
    style M fill:#17A2B8
Loading

Motivation

As an embedded software engineer, I routinely encounter the need for seamless file transfers between host and target devices in the course of various development tasks. Whether the objective is upgrading a system image, booting a Linux Kernel from the bootloader, retrieving packages from remote repositories, fetching a Git repository or sharing files with your colleague next desk, the constant requirement is a quick and straightforward file server. The capability to promptly set up an FTP, TFTP, or HTTP server proves to be a time-saving and efficient solution in navigating the most diverse file exchange scenarios.

This Enterprise Edition takes the original concept and adds production-ready features, comprehensive documentation, and battle-tested deployment procedures for Android/Termux environments.


Installation

πŸš€ Quick Install (Recommended)

One-command installation with DropBasket setup:

Linux / Ubuntu / Debian

curl -sSL https://raw.githubusercontent.com/hah23255/quick-serve-enterprise/main/install.sh | bash

Termux on Android

curl -sSL https://raw.githubusercontent.com/hah23255/quick-serve-enterprise/main/install-android.sh | bash

What gets installed:

  • βœ… Quick-serve binary (optimized, headless)
  • βœ… ~/DropBasket/ folder 🧺 (human-friendly name)
  • βœ… Desktop shortcut with icon (Linux)
  • βœ… Termux home screen widgets (Android)
  • βœ… Simple commands: qs-start, qs-stop, qs-sync
  • βœ… Auto-configured on port 50080 (non-standard)
  • βœ… Firewall auto-opened (Linux)

Installation time: 2-5 minutes | Disk space: ~100MB

πŸ“– Quick Start Guide: docs/SIMPLE_INSTALL.md πŸ”§ Error Handling: INSTALL_GUIDELINES.md


πŸ”§ Advanced: Manual Build (For Developers)

Click to expand manual build instructions

Option 1: Enterprise Edition Build

For production deployment with all enterprise features:

# Clone the Enterprise edition
git clone https://github.com/hah23255/quick-serve-enterprise.git
cd quick-serve-enterprise

# Build (headless, optimized for production)
cargo build --release --no-default-features --bin quick-serve

# Binary will be at: target/release/quick-serve

For Android/Termux with noexec workaround:

# Set build directory to exec-allowed location
export CARGO_TARGET_DIR=~/tmp/cargo-build
export TMPDIR=~/tmp

# Build
cargo build --release --no-default-features --bin quick-serve

# Deploy
cp ~/tmp/cargo-build/release/quick-serve ./bin/quick-serve

See DEPLOYMENT.md for complete production setup including service management.

Option 2: Upstream Version (Basic Features)

For quick testing without enterprise features:

# Install from crates.io (upstream version)
cargo install quick-serve

# Or build from upstream source
git clone https://github.com/joaofl/quick-serve.git
cd quick-serve
cargo run --release

Note: This installs the upstream version without:

  • Custom error pages
  • Directory crash fix
  • Enterprise documentation
  • Android/Termux optimizations
  • DropBasket human-friendly interface

Usage

🧺 Simple Commands (After Quick Install)

Start server (serves ~/DropBasket/ on port 50080):

qs-start
# Server running at http://YOUR_IP:50080
# Access from any device on your network

Stop server:

qs-stop

Sync files from another device:

qs-sync 192.168.1.120
# Downloads all files from another DropBasket server

Share files: Just copy to ~/DropBasket/ folder 🧺


πŸ–₯️ Advanced Usage

It can be used both headless or for an even more friendly experience, it can be used with a GUI:

Screenshot Screenshot

Command line options:

Options:
      --headless          Headless
  -b, --bind-ip=<IP>      Bind IP [default: 127.0.0.1]
  -d, --serve-dir=<PATH>  Directory to serve [default: /tmp/]
  -v, --verbose...        Verbose logging
      --http[=<PORT>]     Start the HTTP server [default port: 8080]
      --ftp[=<PORT>]      Start the FTP server [default port: 2121]
      --tftp[=<PORT>]     Start the TFTP server [default port: 6969]
      --dhcp[=<PORT>]     Start the DHCP server [default port: 6767]
  -h, --help              Print help (see more with '--help')
  -V, --version           Print version

Examples:

# Serve on different port
qs-start 51234

# Use different directory
quick-serve --headless --http=8080 -d ~/Documents

# Multiple protocols
quick-serve --headless --http --ftp --tftp -d ~/shared

πŸ“š Enterprise Documentation

This enterprise fork includes comprehensive operational documentation for production deployments:

Quick Reference Guides

Document Purpose Audience
DEPLOYMENT.md Production setup, service management, configuration DevOps, System Admins
MAINTENANCE.md Weekly/monthly maintenance procedures System Admins
TROUBLESHOOTING.md Common issues and solutions Everyone
DISASTER_RECOVERY.md Emergency recovery procedures System Admins, On-Call
MONITORING_SCHEDULE.md Health check schedules and procedures DevOps, SRE
BUG_REPORT.md Issue reporting template Developers

Production Deployment Checklist

  • Read DEPLOYMENT.md
  • Configure config/production.env
  • Set up service management (runit)
  • Configure log rotation
  • Set up convenience aliases
  • Test health checks
  • Review disaster recovery procedures
  • Schedule maintenance windows

Getting Started: Start with DEPLOYMENT.md for step-by-step production setup.


Build Dependencies

Fedora

sudo dnf install glibc2-devel atk-devel cairo-devel pango-devel gdk-pixbuf2-devel gtk3-devel gcc cmake clang clang-libs

Ubuntu

sudo apt install libatk1.0-dev libcairo2-dev libpango1.0-dev libgdk-pixbuf2.0-dev libgtk-3-dev build-essential

Note: The ui is optional and can be excluded from compilation with --no-default-features flag.


Using cross

  • Install Docker
  • Install Cross
cargo install cross --git https://github.com/cross-rs/cross
  • Build
./cross-build-all.sh

Test

sudo apt install wget tftp-hpa
cargo build
cargo test

Implementation Goals

Supported Protocols

  • FTP
  • HTTP
  • TFTP
  • DHCP
  • HTTPS
  • SFTP
  • NFS
  • SAMBA

Interface

  • Command line
  • Local interface
  • Web interface
  • Terminal interface

Functionalities

  • Serve n files and exit
  • Serve for t seconds and exit
  • Show number of files being served
  • Report transfer rate
  • Report transferred files
  • Show statistics when exit
  • Color-code logs according to protocol
  • Add log filtering options

Enterprise Additions (Completed)

  • Fix excessive CPU usage when using the UI
  • Custom error pages (403, 404, 500)
  • Production deployment documentation
  • Service management integration (runit)
  • Health check scripts
  • Maintenance procedures

Enterprise Additions (Planned)

  • Basic authentication support
  • HTTPS/TLS support
  • Styled directory listing (optional)
  • Rate limiting
  • Prometheus metrics endpoint
  • Health check endpoint (/health)

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Ways to contribute:

  • πŸ› Report bugs using docs/BUG_REPORT.md template
  • πŸ’‘ Suggest enterprise features (deployment, monitoring, operations)
  • πŸ”§ Submit bug fixes and improvements
  • πŸ“– Enhance documentation
  • πŸ§ͺ Add test cases for Android/Termux
  • 🌍 Platform-specific optimizations

Scope Note: This fork focuses on production deployment features. General feature requests should go to the upstream project.


πŸ“ž Contact & Support

Enterprise Edition

Maintainer: Hristo Hristov LinkedIn: linkedin.com/in/hristo-hristov-93868648 Website: www.ccvs.tech

Issues & Bug Reports: GitHub Issues - Please use docs/BUG_REPORT.md template

Contributing: See CONTRIBUTING.md for guidelines on:

  • Bug fixes and improvements
  • Documentation enhancements
  • Platform-specific optimizations

Upstream Project

Original Author: JoΓ£o Loureiro Repository: github.com/joaofl/quick-serve Version: Based on v0.3.2

Feature Requests: Please direct general feature requests to the upstream project. Bug Fixes: Critical bugs discovered here are submitted upstream (e.g., Issue #39).


πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

Enterprise modifications Copyright (c) 2025 Hristo Hristov Original project Copyright (c) 2024 JoΓ£o Loureiro


πŸ™ Acknowledgments

  • JoΓ£o Loureiro - Original quick-serve project and excellent foundation
  • Rust Community - Amazing ecosystem and tooling
  • Android/Termux Community - Platform support and testing

⭐ Star History

If this enterprise fork helped your production deployment, please star the repository!

Star History


Built with ❀️ for production deployments

Enterprise-grade file serving for embedded systems and mobile devices

About

Enterprise edition of quick-serve HTTP server with custom error pages and bug fixes for Android/Termux deployment

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages