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"

Place in your project root. No more flags needed for droply deploy.

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