
# Slugy — Open-Source URL Shortener & Link Analytics
**Open-source link management that tracks clicks, leads, and revenue.**
Create branded short links, manage custom domains, generate QR codes, and see
which campaigns generate signups and sales — not just clicks. Free to start,
with lead conversion tracking on Pro and revenue attribution on Growth.
Website: https://slugy.co
Try Slugy: https://app.slugy.co/signup
## See Slugy in Action
Live demo: https://slugy.co · App: https://app.slugy.co/signup
> Product screenshots live here once captured from a real running instance —
> see [`docs/screenshots.md`](./docs/screenshots.md) for the required captures
> (link creation; clicks, leads, and revenue dashboard). No mockups.
[](./LICENSE)
[](https://nextjs.org)
[](https://www.typescriptlang.org)
[](https://github.com/slugylink/slugy/pulls)



[Live Demo](https://slugy.co) · [App](https://app.slugy.co) · [Report Bug](https://github.com/slugylink/slugy/issues) · [Request Feature](https://github.com/slugylink/slugy/issues)
---
## Why Slugy?
| Feature | Slugy (Open Source) | Dub.co | Bitly |
| :---------------------- | :------------------------------------------------ | :-------------------------------- | :--------------------- |
| **License** | **MIT** | AGPLv3 / Commercial | Proprietary |
| **Self-hosting** | Yes, documented ([guide](./docs/self-hosting.md)) | Complex | No |
| **Free tier** | 10 links/mo, 1k clicks, 1 domain | 25 links/mo, 1K events, 3 domains | 5 links/mo, 2 QR/mo |
| **Custom domains** | Included from free | 3 on free | Growth ($29/mo) and up |
| **Lead tracking** | Pro ($8/mo) | Business ($90/mo) and up | Not offered |
| **Revenue attribution** | Growth ($29/mo) | Business ($90/mo) and up | Not offered |
| **Entry price** | **$0 / $8 / $29** | $0 / $30 / $90+ | $0 / $10 / $29+ |
Competitor figures from public pricing pages, checked 9 October 2026 — verify before deciding.
---
## ✨ Features
| Feature | Description |
| -------------------------- | ------------------------------------------------------------------------- |
| 🔗 **Link shortening** | Short, branded links with custom slugs, expiration & password protection |
| 🌍 **Custom domains** | Connect your own domain for fully branded links |
| 📱 **QR codes** | Generate and customize QR codes for any link |
| 📊 **Click analytics** | Clicks, referrers, countries, devices & more |
| 🎯 **Lead tracking** | Attribute signups to the short link that drove them (Pro) |
| 💰 **Revenue attribution** | Attribute Shopify orders/sales back to the click that drove them (Growth) |
| 🌐 **Bio links** | One personalized page for all your links (`bio.slugy.co`) |
| 📦 **Browser extension** | Shorten links without leaving the page |
| 💳 **Subscriptions** | Plans and billing powered by Polar |
---
## 🛠 Tech Stack

| Category | Tool |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Framework |  (App Router, React 19) |
| Language |  |
| Styling |  |
| Auth |  |
| ORM |  |
| Database |  |
| Cache / Queue |   |
| Background jobs |  |
| Analytics |  |
| Email |  |
| Storage |  |
| Billing |  |
| Monitoring |  |
| Hosting |  |
---
## 🚀 Getting Started
### Prerequisites
- Node.js 20+
- A Postgres database ([Neon](https://neon.tech) recommended)
- Upstash Redis account (for caching / rate limits)
- Optional: Tinybird, Resend, Polar, Cloudflare R2, Vercel accounts for full functionality
> **Self-hosting scope:** `docker-compose.yml` provisions local Postgres +
> a Neon-compatible proxy for development only — it is not a complete
> single-command production deployment of Slugy. The app itself (`npm run dev`)
> still needs the env vars in `.env.example`. See
> [`docs/self-hosting.md`](./docs/self-hosting.md) for mandatory vs optional
> dependencies, limitations, and support boundaries.
### 1. Clone and install
```bash
git clone https://github.com/slugylink/slugy.git
cd slugy
npm install
```
### 2. Configure environment
```bash
cp .env.example .env.local
```
Fill in `.env.local` — at minimum:
- `DATABASE_URL`
- `BETTER_AUTH_SECRET`
- `UPSTASH_REDIS_REST_URL` / `UPSTASH_REDIS_REST_TOKEN`
- `NEXT_PUBLIC_ROOT_DOMAIN`, `NEXT_PUBLIC_APP_URL`
See `.env.example` for the full list.
### 3. Set up the database
```bash
npx prisma generate
npm run db:push
# or, for migrations:
npm run db:migrate
```
Optional seed:
```bash
npm run seed
```
### 4. Run locally
```bash
npm run dev
```
Open:
- Marketing site:
- App:
> Local subdomains (`app.localhost`) require custom-domain routing configured in `next.config.ts`. If `app.localhost:3000` does not resolve, add `127.0.0.1 app.localhost` to your hosts file.
### Useful scripts
```bash
npm run dev # start dev server
npm run build # production build
npm run start # start production server
npm run lint # run ESLint
npm run db:studio # open Prisma Studio
```
---
## 📁 Project Structure
```text
src/
app/ # Next.js App Router routes (root, app, api)
components/ # Reusable UI components
lib/ # Helpers, clients, utils
content/ # Blog / marketing content
prisma/ # Schema and migrations
extension/ # Browser extension source
scripts/ # Maintenance scripts
tinybird/ # Analytics pipes and datasources
```
---
## 🤝 Contributing
Contributions are welcome. To contribute:
1. Fork the repo
2. Create a branch: `git checkout -b feat/my-change`
3. Make your changes with Prettier / ESLint passing (`npm run lint`)
4. Commit and push
5. Open a pull request against `main`
Please open an issue first for large changes so we can discuss the approach.
---
## 💖 Sponsor
If Slugy helps you, consider sponsoring:
[](https://github.com/sponsors/slugylink)
Supported by:
---
## 🔗 Connect
[](https://slugy.co)
[](https://x.com/slugydotco)
[](https://x.com/sandip_dev_07)
[](https://github.com/slugylink/slugy)
---
## 📄 License
MIT © Slugy — see [LICENSE](./LICENSE).
Built with 🐌 by the Slugy team