Push HTML files and get a shareable URL at https://sub.domain.com/<slug>.
- linkdrop-server — HTTP API + static HTML serving (Flappy Bird at
/) - linkdrop CLI —
push,delete,listfor agents and humans
| Variable | Example | Required |
|---|---|---|
LINKDROP_TOKEN |
random secret | yes |
LINKDROP_URL |
https://sub.domain.com |
yes |
LINKDROP_DATA_DIR |
/data |
no (default /data) |
PORT |
8080 |
no |
Mount a persistent volume at /data, or set LINKDROP_DATA_DIR to another
stable absolute path that survives VPS reboots and service restarts.
Dokploy: deploy from this repo's Dockerfile, set domain sub.domain.com, expose port 8080, mount volume /data.
Create ~/.config/linkdrop/config.toml:
url = "https://sub.domain.com"
token = "your-token-here"Or set environment variables (they override the config file):
export LINKDROP_URL=https://sub.domain.com
export LINKDROP_TOKEN=your-token-hereOne-liner; downloads the right binary for your platform from GitHub Releases
and installs it to ~/.local/bin/linkdrop (no sudo required):
curl -fsSL https://raw.githubusercontent.com/ddroid/linkdrop/main/install.sh | shIf ~/.local/bin isn't on your PATH, the script prints the exact export
line to add to your shell rc.
Install to a system directory or pin a version:
# system-wide install to /usr/bin (run under sudo, or pass --system)
sudo sh -c "$(curl -fsSL https://raw.githubusercontent.com/ddroid/linkdrop/main/install.sh)"
# or:
curl -fsSL https://raw.githubusercontent.com/ddroid/linkdrop/main/install.sh | sudo sh
# custom install dir
curl -fsSL https://raw.githubusercontent.com/ddroid/linkdrop/main/install.sh | sh -s -- --bindir /usr/local/bin
# specific release tag
curl -fsSL https://raw.githubusercontent.com/ddroid/linkdrop/main/install.sh | sh -s -- --tag v0.1.0Running under sudo defaults the binary to /usr/bin. The agent skill
always goes to the invoking user's ~/.agents/skills/linkdrop/ (not root's),
and is written as that user so the files aren't root-owned.
The installer also offers to install the linkdrop agent skill to
~/.agents/skills/linkdrop/ (it prompts Y/n when run interactively). To do it
non-interactively, pass --skill (or --no-skill to skip):
curl -fsSL https://raw.githubusercontent.com/ddroid/linkdrop/main/install.sh | sh -s -- --skillPrebuilt binaries are published for:
| Platform | Asset |
|---|---|
| Linux x86_64 | linkdrop-x86_64-unknown-linux-gnu.tar.gz |
| Linux arm64 | linkdrop-aarch64-unknown-linux-gnu.tar.gz |
| macOS Apple Silicon | linkdrop-aarch64-apple-darwin.tar.gz |
The Linux binaries use rustls-tls and depend only on glibc (no OpenSSL), so
they run on most modern glibc-based distros. Intel Macs are not built
explicitly — Apple Silicon Macs can run x86_64 builds via Rosetta 2 if needed.
Downloads are verified against a published sha256sums.txt.
Uninstall: remove the binary (rm ~/.local/bin/linkdrop or sudo rm /usr/bin/linkdrop)
and, if installed, the skill dir (rm -rf ~/.agents/skills/linkdrop).
From the repo root:
# Build the release binary as your normal user (do NOT use sudo here —
# rustup toolchains live in your home dir and sudo runs as root)
make build
# Install to /usr/bin/linkdrop — only this step needs root
sudo make install
# Uninstall
sudo make uninstallInstall prefix is configurable:
make install PREFIX=/opt/linkdropThis uses standard PREFIX/BINDIR/DESTDIR variables, so packagers can
override them. After install, linkdrop is on PATH and available as
/usr/bin/linkdrop.
Maintainers: push a tag to trigger the release workflow, which builds all platforms and publishes a GitHub Release with tarballs + checksums.
git tag v0.1.0
git push origin v0.1.0# Push a file (random ID in URL)
linkdrop push report.html
# Push with a readable slug
linkdrop push report.html --slug my-report
# Push from stdin
echo '<h1>hi</h1>' | linkdrop push --stdin --slug quick-preview
# Overwrite existing slug
linkdrop push report.html --slug my-report --force
# Temporary preview (24h TTL)
linkdrop push report.html --slug temp-demo --ttl 24h
# List / delete
linkdrop list
linkdrop delete my-reportpush prints the public URL on success.
- Single HTML file per push (max 5 MB)
- Slugs:
a-z,0-9,-only; 1–64 chars; no leading/trailing hyphen - Default slug collision → error; use
--forceto overwrite - Expired pages removed by a daily sweeper
cargo build --release
LINKDROP_TOKEN=test LINKDROP_URL=http://localhost:8080 LINKDROP_DATA_DIR=./data \
cargo run -p linkdrop-server| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/ |
no | Flappy Bird landing |
GET |
/{slug} |
no | Serve HTML |
POST |
/api/pages |
Bearer token | Upload HTML JSON body |
GET |
/api/pages |
Bearer token | List pages |
DELETE |
/api/pages/{slug} |
Bearer token | Delete page |