A Go and Vue based URL shortener, pastebin and file uploader
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Adyanth H 7c74c7c6d6 Add type for drone 3 months ago
cmd/shortpaste 🚀 Heroku build 10 months ago
images 📝 Update README.md ! 10 months ago
templates 🚸 Prevent linking the URL 10 months ago
ui Add hit count tracking! 10 months ago
.dockerignore 👷 Docker build for Vue, serve static from Go! 10 months ago
.drone.yml Add type for drone 3 months ago
.gitignore 🙈 Ignore static folder 10 months ago
Dockerfile 🐛 Fix entrypoint 10 months ago
LICENSE Update 'LICENSE' 4 months ago
README.md 📝 Add Docker Compose example 10 months ago
api_file.go 🚚 Separate DB and data mounts if needed 7 months ago
api_link.go Add landing page for links 10 months ago
api_text.go 🚚 Separate DB and data mounts if needed 7 months ago
app.go 🐛 Create DB folder before use 7 months ago
go.mod Implement Files! 10 months ago
go.sum Implement Files! 10 months ago
server.go Add option to skip auth 10 months ago
types.go Add option to skip auth 10 months ago
utils.go ♻️ Refactor to include all admin actions under /api/ 10 months ago



Drone Build Status Docker pulls Docker Compose Go Report Demo on Heroku

Short{Paste} is open-source software written in Go and VueJS. It is a minimalistic shortener that combines three things that need shortening: links, files, and text. It is a self-hosted alternative to many popular services like paste bin and using dropbox to send a file to someone quickly.

The Go backend handles saving files, links, and text in DB and filesystem as needed, while the Vue UI provides a pretty view for you to add and review content. Added bonus, it tracks hit counts too!


The whole backend packages to a single binary, and I bundled the app as a docker container based on alpine favored for its tiny size. To run this yourself, execute the command below.

docker run -d \
    -p 8080:8080 \
    -v ${PWD}/shortpaste/:/root/.shortpaste \

The command will publish the application on port 8080, making it available on http://localhost:8080/ and use the bind-mounted folder called shortpaste in your current working directory to save the SQLite DB, the files, and texts published.

If you prefer docker-compose, here is an example deployment.

Build it yourself

With docker, you can build this yourself. A Dockerfile is provided at the root of this repository.

It uses a multi-stage build consisting of three stages:

  • Go Build : Builds a statically linked Go binary containing the backend API server and the static server.
  • Vue Build : Builds the VueJS UI to generate a dist folder with resources.
  • Container : Alpine container where the binary and dist are copied and served.

Environment Variables

You can customize the behavior using environment variables. Here is a list of configurable parameters.

Environment Variable Default Value Behaviour
SP_BIND_ADDR ":8080" Sets the bind-address inside the container.
PORT If set, it overrides the SP_BIND_ADDR to use the given port on all interfaces (support for Heroku deployment)
SP_STORAGE_PATH "~/.shortpaste" Sets the location for saving data inside the container.
SP_307_REDIRECT Setting this to anything causes a 307 redirect to be sent instead of showing the landing page for shortened links.
SP_USERNAME admin Sets the username to login to the UI (only applies to creating resources, links will still work fine)
SP_PASSWORD admin Sets the password to login to the UI (only applies to creating resources, links will still work fine)
SP_NOAUTH Setting this to anything bypasses authentication for creating resources.


Here are some screenshots to get a taste of it, see the demo for more :)

Type Create View
Links Link Upload Link View
Text Text Upload Text View
Files File Upload File View