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 76623724a6 Merge pull request '🚚 Separate DB and data mounts' (#6) from feature-separate-db-data into main 1 week ago
cmd/shortpaste 🚀 Heroku build 3 months ago
images 📝 Update README.md ! 3 months ago
templates 🚸 Prevent linking the URL 3 months ago
ui Add hit count tracking! 3 months ago
.dockerignore 👷 Docker build for Vue, serve static from Go! 3 months ago
.drone.yml Remove Heroku autobuild 3 months ago
.gitignore 🙈 Ignore static folder 3 months ago
Dockerfile 🐛 Fix entrypoint 3 months ago
LICENSE 📄 Add MIT License 3 months ago
README.md 📝 Add Docker Compose example 3 months ago
api_file.go 🚚 Separate DB and data mounts if needed 1 week ago
api_link.go Add landing page for links 3 months ago
api_text.go 🚚 Separate DB and data mounts if needed 1 week ago
app.go 🚚 Separate DB and data mounts if needed 1 week ago
go.mod Implement Files! 3 months ago
go.sum Implement Files! 3 months ago
server.go Add option to skip auth 3 months ago
types.go Add option to skip auth 3 months ago
utils.go ♻️ Refactor to include all admin actions under /api/ 3 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