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.
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.
- Access logging to stdout and a log file.
- Reverse-proxy support through
--trust-proxy. - Optional redirect from
/to a configured main page. - URL management through
shortener-urlCLI. - User and API key management through
shortener-keyCLI.
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 to track releases, andmainto track the latest commit on the main branch.See Run with Docker for usage instructions with Docker.
Usage
shortener comes with three executables:
shortener: the HTTP server.shortener-url: a CLI for creating and managing short URLs directly.shortener-key: a CLI for user and API key management.
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 shortener --help.
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.
Managing short URLs
shortener-url provides a CLI for managing short URLs directly through the
database:
# Create a short URL with an auto-generated code
# Create a short URL with a custom code
# List all short URLs
# List all short URLs in JSON format (also supported: CSV and table)
# Get details of a short URL by code
# Delete a short URL by code
Some other options are also available.
See shortener-url --help for full usage instructions.
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 shortener-key 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>
See shortener-key --help for full usage instructions.
Run with Docker
Run the server and persist the database and logs in a local directory:
You can also run shortener-url or shortener-key inside the same image by
overriding the entrypoint:
Shell completions
Shell completions are available for shortener and shortener-key.
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.