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.

Expiration

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.

Manual

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

REST API

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

Docker

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=https://example.com \
-e PUBLIC_URL=https://example.com \
uraniadev/snapp:latest

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 \
uraniadev/snapp:latest

Be aware that this setting will disable secure cookies.

Demo

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

The demo DB will be reset every 24H.

Link to the demo

Settings

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_USERNAME=admin
  • ADMIN_PASSWORD=password
  • ADMIN_EMAIL=admin@snapp.li

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_HOST=smtp.resend.com
  • SMTP_USER=resend
  • SMTP_PASSWORD=apiKey
  • SMTP_FROM=admin@snapp.li

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 https://snapp.li and https://demo.snapp.li track anonymous analytics with umami.is. This happens only on this domain, public docker image and github repository of Snapp don't include any active Umami trackers by default.