shortener
shortener is a small URL shortener written in Rust.
It serves HTTP redirects, stores mappings in SQLite, and optionally protects
URL creation with API keys.
The repository also includes shortenerkey, a companion CLI for managing users
and API keys.
Features
- Plain HTTP interface with no frontend dependency.
- SQLite-backed URL storage.
- Random alphanumeric codes with configurable length.
- Custom aliases using letters, digits, dashes (
-), and underscores (_). - Optional bearer-token authentication for URL creation.
- User and API key management through
shortenerkey. - Access logging to stdout and a log file.
- Reverse-proxy support through
--trust-proxy. - Optional redirect from
/to a configured main page.
Installation
All installation methods come with two executables:
shortener: the HTTP server.shortenerkey: the user and API key management CLI.
Homebrew
shortener can be installed on macOS and Linux with Homebrew:
Release binaries
shortener's GitHub releases come with pre-built binaries for Linux, macOS, and
Windows.
Download the binaries from
the latest release.
Cargo
Install shortener with Cargo as follows:
By default, shortener uses the system's SQLite library.
If you don't have it installed, or want to use the bundled version, add
--features bundled-sqlite to the cargo install command.
Docker
A Docker image is available on Docker Hub as
zhongruoyu/shortener,
and on GitHub Container Registry as
ghcr.io/zhongruoyu/shortener.
Use the latest tag or a specific version tag like v0.1.0 to track releases,
and main to track the latest commit on the main branch.
See "Run with Docker" for usage instructions with Docker.
Usage
Starting the server
Start a local instance:
Useful flags:
--auth: requireAuthorization: Bearer ...forPOSTrequests.--main-page URL: redirect/to a separate landing page.--code-length N: change generated code length. The default is6.--trust-proxy: use the firstX-Forwarded-Foraddress for logging.
See the full CLI help with:
Creating and using short URLs
Create a short URL by sending the target URL as the plain-text request body:
The response is the new shortened URL as plain text.
Create a custom alias by posting to /<code>:
Open the generated short URL and the server returns a 302 Found redirect to
the stored destination.
Authentication and API keys
When --auth is enabled, only authenticated POST requests can create short
URLs, though GET requests for URL redirection remain unauthenticated.
Use shortenerkey to manage users and API keys against the same SQLite database:
Then create a short URL with the returned key:
Other management commands include:
list-usersdelete-user <username>check-key <key-or-hash>list-keys <username>delete-key <key-or-hash>
Run with Docker
Run the server and persist the database and logs in a local directory:
You can also run shortenerkey inside the same image by overriding the
entrypoint:
License
This project is licensed under the MIT License. See LICENSE.