lua.sh is a next-generation, scalable, and open-source URL shortener built with the modern stack of Laravel, Vue 3, and Inertia.js. Designed to be fast, flexible, and developer-friendly, lua.sh empowers you to create and manage your own professional URL shortening service with ease.
Whether you're an individual looking for branded, trackable links or a business aiming to scale with advanced analytics and custom domains, lua.sh is your perfect solution. It’s lightweight, fully customizable, and ready to grow with your needs.
- 🌐 Shorten URLs: Quickly shorten long URLs with an intuitive interface.
- 📊 Detailed Analytics: Track clicks, referers, devices, geolocation, and more with a comprehensive dashboard.
- ⚡ Custom Domains: Add and manage custom domains to create branded URLs.
- 🔗 Custom URL Slugs: Personalize your links with memorable, custom slugs.
- 📱 Responsive Design: Enjoy a mobile-friendly front end built with Vue 3 and TailwindCSS.
- 🔒 Authentication & Authorization: Protect the service with secure authentication and manage permissions for team-based usage.
- 💡 Link Expiration & Management: Set expiration dates for links and manage them effortlessly.
- 🔐 Secure by Design: Includes built-in CSRF protection, rate-limiting, and HTTPS support.
- Laravel: A robust PHP framework designed for high-performance, scalable applications.
- MySQL: Reliable relational database for storing and managing data.
- Vue 3: A progressive, reactive JavaScript framework for creating modern interfaces.
- Inertia.js: Seamlessly integrates server-side rendering with single-page app features.
- TailwindCSS: Utility-first CSS framework for designing clean and responsive UIs.
- Inertia.js: Combines Laravel and Vue into a smooth SPA-like experience.
composer install
npm install
cp .env.example .env
php artisan key:generate
# OAuth signing keys for the API and the MCP server. These are gitignored,
# so every environment generates its own — without them the api guard
# rejects every token.
php artisan passport:keys
php artisan migrate --seed
npm run devThe seeders create the plans and the Passport personal access client that
API keys are issued from. Both are idempotent, so php artisan db:seed is
safe to re-run on deploy.
Each of these stays off until its credentials are set, so a self-hosted install only shows what it can actually use:
| Environment variables | |
|---|---|
| Google sign-in | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET |
| GitHub sign-in | GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET |
| PostHog analytics | POSTHOG_ENABLED=true, POSTHOG_API_KEY |
The app ships an MCP server at /mcp, authenticated with OAuth. Connect an
assistant from Settings → Authentication, where the server URL and the
current connections are listed. A connection can only act on the workspace
it was authorised from.
lua.sh provide you access to an array of sleek and memorable domains for your shortened URLs:
- 🔗 lua.sh: The default, clean, and professional option.
For self-hosting or local development, please check the Self Hosting or Local Development guides.
Paulo Castellano 💻 |
Victor Gazotti 💻 |
Muhammad Saim 💻 |
Ibon Azkoitia 💻 |
|||
|
|
||||||
A big thanks to our sponsors and partners who make Lua possible. If you're interested in sponsoring Lua and supporting the project, please check out our profile on GitHub sponsors ❤️


