Discover the power of Snapp, your self-hostable URL shortening service. Effortlessly shorten links, and with Snapp's self-hosting capability, you have complete control. Create concise, shareable links on your terms with Snapp's user-friendly platform.

Our Features

User-Friendly Interface

Snapp provides a user-friendly interface for seamless link shortening. Read how to get started!

Secure Authentication

Enjoy a secure experience with authentication sessions and hashed passwords. Your information is in safe hands.

Custom Short Codes

Create personalized short codes for your links to make them memorable and easy to share.


Control the lifespan of your links with expiration dates. Set expiry dates for added security or let them stay active indefinitely.

Secret Links

Add an extra layer of protection with secret links. Choose to share links with a selected audience using unique secrets.

Usage Analytics

Empower yourself with detailed analytics for every link you create. Snapp gathers metrics anonymously, providing insights into link engagements.

Getting started


Snapp is a self-hostable open source platform.


You need to have Node.js.

  • Clone the repository or download the latest zip.
  • Copy .example.env to .env and fill it properly.
  • Install dependencies: npm install --legacy-peer-deps
  • Run for development: npx prisma db push
  • Run for development: npm run dev
  • Run for production: npm run build then node dotenv/config build


Most requested feature, the ability to create and retrieve Snapps via REST API.
Read more here. (Generated with Redoc)


As simple as typing this in your terminal

docker run -p 3000:3000 uraniadev/snapp:latest

If you ran into CORS, set ORIGIN and PUBLIC_URL

docker run \
-p 3000:3000 \
-e ORIGIN= \

CORS and non HTTPS Instances

Snapp uses Lucia Auth, and requires to be hosted behind a Secure HTTPS Protocol.

If self-hosting without a Secure HTTPS Protocol set NODE_ENV=development to allow Lucia handle sessions.

Let's say for example that you want to host Snapp on an old salvaged homelab with hostname: refurbished on port 8000

docker run \
-p 8000:3000 \
-e ORIGIN=http://refurbished:8000 \
-e PUBLIC_URL=http://refurbished:8000 \
-e NODE_ENV=development \

Be aware that this setting will disable secure cookies.


This demo is set as a multi users instance of Snapp.

The demo DB will be reset every 24H.

Link to the demo


Enable user signup

By default Snapp is set as a private service. It can be set as a multi users instance with variable ENABLE_MULTIUSER set to true.

Disable Homepage

With variable DISABLE_HOME set to true Snapp will redirect to /dashboard or /auth/login.

Persist DB with Docker

Mount docker volume at /app/prisma/db.sqlite.
You can generate a DB Compliant to Prisma Client with schema in repository.

Admin credentials

By default the app will not create any admin user, you should setup your own by signin up on the front-end. First user registered get marked as Admin.

You can set up variables to create admin if not already existing by the same username at platform launch.

  • ADMIN_PASSWORD=password

SMTP Transporter

You can setup email for your account, and so recover password if forgotten

Here a resend / generic smtp example of using the SMTP for password recovery. It checks username and email before sending.

  • SMTP_USER=resend

Enable Umami Integration

If you want to use Umami Self-hosted analytics on your Snapps, you can set UMAMI_URL and the provided WEBSITE_ID.

Virus Total API Domain Scan

If you want to use VirusTotal API protection on your redirection, you can set VIRUSTOTAL_API_KEY variable.

Disclaimer: the public instance of and track anonymous analytics with This happens only on this domain, public docker image and github repository of Snapp don't include any active Umami trackers by default.