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
-
Cargo
By default,
shorteneruses the system's SQLite library. If you don't have it installed, or want to use the bundled version, add--features bundled-sqliteto thecargo installcommand. -
Homebrew
-
Release binaries
shortener's GitHub releases come with pre-built binaries for Linux, macOS, and Windows. Download the binaries from the latest release. -
Docker
A Docker image is available on Docker Hub as
zhongruoyu/shortener, and on GitHub Container Registry asghcr.io/zhongruoyu/shortener. Use thelatesttag or a specific version tag likev0.1.0to track releases, andmainto track the latest commit on the main branch.See "Run with Docker" for usage instructions with Docker.
Usage
shortener comes with two executables:
shortener: the HTTP server.shortenerkey: the user and API key management CLI.
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:
Shell completions
Shell completions are available for shortener and shortenerkey.
To enable them, add the relevant command to your shell's profile:
# Bash
# Zsh
# Fish
|
# PowerShell
| |
License
This project is licensed under the MIT License. See LICENSE.