{"id":31177838,"url":"https://github.com/varunv003/linko","last_synced_at":"2026-04-09T12:04:39.275Z","repository":{"id":314156866,"uuid":"1054383579","full_name":"Varunv003/Linko","owner":"Varunv003","description":"Linko is a fast, secure, and self-hosted URL shortener built with Java Spring Boot, MySQL, and Redis. Easily create, manage, and track branded short links with full analytics, user authentication, and rate limiting. Deploy in minutes with Docker Compose and take control of your link data, no ads, no tracking, just privacy and performance.","archived":false,"fork":false,"pushed_at":"2025-09-10T19:59:06.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-10T23:41:36.926Z","etag":null,"topics":["backend-api","bucket4j","docker","docker-compose","java-21","jwt","jwt-authentication","maven","mysql-database","postman-collection","redis-cache","shortner","shortner-urls","spring-security","springboot3","springjpa","url","urlshortener-api"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Varunv003.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-10T18:53:48.000Z","updated_at":"2025-09-10T19:59:09.000Z","dependencies_parsed_at":"2025-09-10T23:41:39.258Z","dependency_job_id":"0369ce63-caaa-4073-b956-c45268a3fa92","html_url":"https://github.com/Varunv003/Linko","commit_stats":null,"previous_names":["varunv003/linko"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Varunv003/Linko","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Varunv003%2FLinko","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Varunv003%2FLinko/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Varunv003%2FLinko/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Varunv003%2FLinko/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Varunv003","download_url":"https://codeload.github.com/Varunv003/Linko/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Varunv003%2FLinko/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275952274,"owners_count":25558671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-19T02:00:09.700Z","response_time":108,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend-api","bucket4j","docker","docker-compose","java-21","jwt","jwt-authentication","maven","mysql-database","postman-collection","redis-cache","shortner","shortner-urls","spring-security","springboot3","springjpa","url","urlshortener-api"],"created_at":"2025-09-19T14:30:37.108Z","updated_at":"2025-09-19T14:30:42.695Z","avatar_url":"https://github.com/Varunv003.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Linko: Your Self-Hosted, High-Performance URL Shortener 🚀\n\n## Problem Statement\n\nLong, messy URLs are everywhere—making links hard to share, remember, and track. Public URL shorteners solve this, but at a cost: you lose control over your data, risk broken links, and can't build your own brand.  \n**Linko** is the solution: an open-source, self-hosted URL shortener that gives you privacy, speed, and total control.\n\n---\n\n## ✨ Features\n\n- **Secure User Authentication:** Multi-user support with JWT-based registration and login.\n- **Blazing Fast Redirects:** Redis caching for instant link resolution and reduced database load.\n- **Robust Rate Limiting:** Bucket4j integration protects your API from abuse.\n- **Containerized Deployment:** One-command setup with Docker \u0026 Docker Compose.\n- **Developer-Friendly REST API:** Clean, documented endpoints for easy integration.\n- **Full Analytics:** Track clicks and user engagement.\n\n---\n\n## 🛠️ Tech Stack\n\n- **Backend:** Java 21, Spring Boot 3\n- **Database:** MySQL 8.0\n- **Cache:** Redis\n- **Security:** Spring Security \u0026 JWT\n- **Rate Limiting:** Bucket4j\n- **Build Tool:** Maven\n- **Containerization:** Docker \u0026 Docker Compose\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- [Docker Desktop](https://www.docker.com/products/docker-desktop) (includes Docker Compose)\n\n### 1. Clone the Repository\n\n```sh\ngit clone https://github.com/Varunv003/linko.git\ncd linko\n```\n\n### 2. Configure Your Environment\n\nCopy the example environment file and edit your secrets:\n\n```sh\ncp .env.example .env\n```\n\nEdit `.env` and set strong passwords for `MYSQL_PASSWORD` and `MYSQL_ROOT_PASSWORD`.\n\n### 3. Run the Application\n\nBuild and start the entire stack:\n\n```sh\ndocker-compose up --build\n```\n\nThe first run may take a few minutes to download images and build the app.  \nOnce complete, access Linko at: [http://localhost:8080](http://localhost:8080)\n\n---\n\n## 🧪 API Testing with Postman\n\nTest all endpoints with our ready-to-use Postman collection!\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://www.postman.com/varun1-1613/workspace/linko-public/collection/32840967-98c252be-4ac2-46e0-baad-43b4d677de8e?action=share\u0026creator=32840967)\n\n\u003e **Tip:** Use the Postman Desktop App for best results.  \n\u003e If using the web UI, you may need to install the [Postman Agent](https://www.postman.com/downloads/postman-agent/) to access localhost.\n\n### Manual Import Method\n\nIf you prefer, you can manually import the Postman collection:\n\n1. Open Postman and click **File \u003e Import**.\n2. Import the collection file located at:  \n   ```\n   postman/linko-api.postman_collection.json\n   ```\n3. (Optional) Import the environment file if present:  \n   ```\n   postman/linko-local.postman_environment.json\n   ```\n4. In the top-right corner of Postman, select the \"Linko Local Dev\" environment from the dropdown to activate it.\n5. You are now ready to send requests to the running application!\n\n---\n\n## 🛑 Stopping the Application\n\nTo stop all running containers:\n\n```sh\ndocker-compose down\n```\n\n---\n\n## 📚 Documentation \u0026 Support\n\n- **API Docs:** See the Postman collection above for full endpoint documentation.\n- **Issues:** [Open an issue](https://github.com/Varunv003/linko/issues) for bugs or feature requests.\n\n---\n\n## 💡 Why Self-Host Linko?\n\n- **Own your data:** No third-party tracking or analytics.\n- **Brand your links:** Use your own domain for trust and recognition.\n- **Unlimited usage:** No quotas, no ads, no hidden fees.\n\n---\n\n**Linko** — Shorten, share, and track your links with confidence\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvarunv003%2Flinko","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvarunv003%2Flinko","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvarunv003%2Flinko/lists"}