Open Source · Self-Hosted · Go

Deploy static sites
in seconds.

Multi-user static publishing with automatic subdomains,
wildcard HTTPS, and custom domains. One command to ship.

$ droply deploy ./dist --sub alice --project blog

Packaging ./dist...
Deploying to alice.droplydoc.com/blog...
Deployed! Version 1
URL: https://alice.droplydoc.com/blog

Everything you need, nothing you don't.

A focused toolkit for publishing static content. Fast, secure, self-hosted.

One-Command Deploy

Package and publish any directory with a single CLI command. Automatic versioning keeps every deployment tracked.

🌐

Automatic Subdomains

Each user gets their own subdomains. Create alice.droplydoc.com instantly, host multiple projects under it.

🔒

HTTPS Everywhere

Wildcard TLS certificates via Caddy. Every subdomain and custom domain gets HTTPS automatically.

🏠

Self-Hosted

Run on your own VPS. Your data, your rules. A single binary + Caddy is all you need.

🔗

Custom Domains

Bring your own domain. Add a CNAME record and Caddy handles certificate provisioning automatically.

🛡

Access Control

Protect sites with IP whitelists and passwords. Per-subdomain or per-project rules with configurable session TTL.

📦

Zero Dependencies

Pure Go binaries with embedded SQLite. No Docker, no Node.js, no external databases required.

How it works

Three steps from code to live site.

1

Create a subdomain

droply subdomain create alice

Claim your namespace. You can create multiple subdomains, each hosting different projects.

2

Deploy your site

droply deploy ./dist --sub alice --project blog

Your files are packaged, uploaded, and extracted. The project is created automatically on first deploy.

3

It's live

https://alice.droplydoc.com/blog

Caddy picks up the new route instantly. HTTPS is ready. Share the link.

Architecture

Simple, robust, easy to operate.

CLI Client
droply
Caddy
TLS + Reverse Proxy + File Server
:443 / :80
Browser
HTTPS
droply-server
Auth · Upload · Routing
:8080
SQLite
Users · Projects · Deployments

Tech Stack

Go chi cobra SQLite Caddy bcrypt TOML

Quick Start

Up and running in minutes.

Install CLI

curl -fsSL https://droplydoc.com/install.sh | bash

One command to install. Auto-detects your OS and architecture. Supports macOS (ARM/x64), Linux (x64), and Windows (x64).

Deploy Server

curl -fsSL https://droplydoc.com/setup.sh | sudo bash

Sets up a complete droply server on a fresh VPS. Installs droply-server, Caddy (with Cloudflare DNS), configures systemd, and starts everything. You'll be prompted for your domain and Cloudflare API token.

Build from source

git clone https://github.com/zhong/droply.git
cd droply
make build

Produces two binaries: bin/droply-server and bin/droply

Or install with Go

go install github.com/zhong/droply/cmd/droply@latest

Installs the CLI client directly into your $GOPATH/bin

Server flags reference

Flag Default Description
--addr:8080API listen address
--site-addr:8081Site server address (protected sites)
--data-dir/data/droplyData directory (DB + files)
--domaindroplydoc.comBase domain
--caddy-adminhttp://localhost:2019Caddy Admin API
--hmac-secretCookie signing key (auto-generated if empty)

CLI Reference

Simple commands, predictable behavior.

Authentication

droply register       # Create account
droply login          # Sign in
droply whoami         # Current user
droply logout         # Sign out

Subdomains

droply subdomain create alice
droply subdomain list
droply subdomain delete alice

Projects

droply project list --sub alice
droply project delete blog --sub alice

Deploying

# Deploy with flags
droply deploy ./dist --sub alice --project blog

# Or use .droply.toml config
droply deploy

Access Control

# Set rules (IP + password)
droply access set --subdomain alice \
  --ip 10.0.0.0/8 --password auto
https://alice.droplydoc.com | Password: a1b2... | IP: 10.0.0.0/8 | Expires: 1d

# Never-expire password
droply access set --subdomain alice \
  --password auto --expire never
https://alice.droplydoc.com | Password: xYz1... | Expires: never

# View rules
droply access get --subdomain alice

Custom Domains

droply domain add blog.example.com \
  --sub alice --project blog
droply domain verify blog.example.com \
  --sub alice --project blog
droply domain list --sub alice --project blog

Project config .droply.toml

subdomain = "alice"
project   = "blog"
exclude_paths = ["dist/private", "public/secret.txt"]
exclude_files = ["draft.html", "robots-local.txt"]

Place in your project root. No more flags needed for droply deploy, and you can exclude exact paths or file names from publishing.

API

RESTful JSON API at api.droplydoc.com. Auth via Bearer token.

Method Endpoint Description
POST/auth/registerRegister
POST/auth/loginLogin
POST/subdomainsCreate subdomain
GET/subdomainsList subdomains
DEL/subdomains/:nameDelete subdomain
POST/subdomains/:sub/projects/:name/deployDeploy (multipart)
GET/subdomains/:sub/projectsList projects
DEL/subdomains/:sub/projects/:nameDelete project
GET/subdomains/:sub/projects/:name/deploymentsDeployment history
POST/subdomains/:sub/projects/:name/domainsAdd custom domain
DEL/subdomains/:sub/projects/:name/domains/:domainRemove custom domain
PUT/subdomains/:sub/accessSet access control
GET/subdomains/:sub/accessGet access control
DEL/subdomains/:sub/accessRemove access control