🔗 High-performance link shortener written in Rust
In addition to being easy to build from source (cargo build --release), shorty is available as a Docker image on both Docker Hub and GitHub Container Registry.
- Some sort of Docker or Rust-compatible hosting. clb.li runs on CapRover, for example, but Heroku is a good free option.
- A Postgres database (Heroku Postgres is your friend if you're running shorty on Heroku)
DATABASE_URL- a valid Postgres URL, e.g. postgres://user:password@localhost:5432/database (automatically set when using Heroku Postgres)TOKEN- your desired API token; only required if you're using the API (described below).PORT- Change the port the server listens on; defaults to8000
There's a page available at /links that displays all links with the public field set to true.
Check out clb.li/links for an example!
If you haven't set up a redirect for the root URL, it'll show this page as well.
You can use shorty's API to add/remove links. No UI is available quite yet, but will be soon!
Provide your TOKEN (described above) as a bearer token, so set the Authorization header to Bearer <token>. Example: curl -H "Authorization: Bearer token1234" http://localhost:8000/api/example/route
POST requests must all contain JSON payloads. x-www-form-urlencoded is not supported.
All responses are JSON, and follow this rough schema:
This method has no options.
Options:
url(string, required) - The URL the redirect to.name(string, optional) - The link's name. Leave blank to randomly generate a 5-character ID.public(bool, optional) - Whether or not to display this link on the public links page.description(string, optional) - This field is displayed on the public links page (ifpublicis set totrue)
ℹ️ Note:
/ and root are special values for <name> that create redirects for the root URL. You may use either.
Options:
This method takes the same parameters as POST /api/link, except they're all optional.
ℹ️ Note:
Please URL encode the <name> parameter if necessary; / will become %2F
example: curl -X DELETE http://localhost:8000/api/link/gh
ℹ️ Note:
Please URL encode the <name> parameter if necessary; / will become %2F
Check the issues page for more information on in-progress features!
{ // False if something went wrong "ok": true, // Will be a string if something went wrong "err": null, "data": { // Response data here... } }