A simple, blazingly fast, selfhosted URL shortener with no unnecessary features; written in Rust.
Go to file
Przemek Dragańczuk 2ea966e492 Fixed styling
2020-02-16 14:37:52 +01:00
.settings Base api works 2020-02-13 23:52:33 +01:00
gradle/wrapper Random intellij fixes 2020-02-14 18:40:36 +01:00
src/main Fixed styling 2020-02-16 14:37:52 +01:00
.classpath Base api works 2020-02-13 23:52:33 +01:00
.gitattributes Base api works 2020-02-13 23:52:33 +01:00
.gitignore Cleanup 2020-02-14 18:41:56 +01:00
.project Base api works 2020-02-13 23:52:33 +01:00
build.gradle Small fixes 2020-02-14 20:11:02 +01:00
docker-compose.yml Added basic docker support 2020-02-14 20:17:56 +01:00
Dockerfile Added basic docker support 2020-02-14 20:17:56 +01:00
gradlew Base api works 2020-02-13 23:52:33 +01:00
gradlew.bat Base api works 2020-02-13 23:52:33 +01:00
LICENSE Create LICENSE 2020-02-14 22:37:43 +01:00
README.md Readme.md 2020-02-14 22:36:50 +01:00
settings.gradle Base api works 2020-02-13 23:52:33 +01:00

What is it?

A simple selfhosted URL shortener with no name because naming is hard

But why another URL shortener?

I've looked at a couple popular URL shorteners, however they either have unnecessary features, or they didn't have all the features I wanted.

Features

  • Shortens URLs of any length to a fixed length, randomly generated string
  • (Optional) Allows you to specify the shortened URL instead of the generated one (Missing in a surprising number of alternatives)
  • Opening the fixed length URL in your browser will instantly redirect you to the correct long URL (you'd think that's a standard feature, but apparently it's not)
  • Provides a simple API for adding new short links
  • Links are stored in a plaintext CSV file
  • Available as a Docker container (there is no image on docker hub yet)
  • Backend written in Java using Spark Java, frontend written in plain HTML and vanilla JS, using Pure CSS for styling

Planned features

  • An actual name
  • Deleting links using API and frontend
  • Code cleanup
  • Better deduplication
  • Official Docker Hub image

Usage

Clone this repository

git clone https://github.com/draganczukp/url

Building from source

Gradle 6.x.x and JDK 11 are required. Other versions are not tested

  1. Build the .jar file
gradle build --no-daemon

The --no-daemon option means that gradle should exit as soon as the build is finished. Without it, gradle would still be running in the background in order to speed up future builds.

  1. Run it
java -jar build/libs/url.jar
  1. Navigate to http://localhost:4567 in your browser, add links as you wish.

Running with docker

docker run method

  1. Build the image
docker build . -t url:1.0
  1. Run the image
docker run -p 4567:4567 -d url:1.0 

2.a Make the CSV file available to host

touch ./urls.csv
docker run -p 4567:4567 \
	-e file.location=/urls.csv \
	-v ./urls.csv:/urls.csv \
	-d url:1.0

docker-compose

There is a sample docker-compose.yml file in this repository. You can use it as a base, modifying it as needed. Run it with

docker-compose up -d --build