[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-70649":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},70649,"kutt","thedevs-network\u002Fkutt","thedevs-network","Free Modern URL Shortener.","https:\u002F\u002Fkutt.it",null,"JavaScript",10896,1469,76,73,0,8,33,156,24,112,"MIT License",false,"main",true,[27,28,29,30,31],"link-shortener","shorten-urls","shortener","url-shortener","urlshortener","2026-06-12 04:00:56","\u003Cp align=\"center\">\u003Ca href=\"https:\u002F\u002Fkutt.to\" title=\"kutt.to\">\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fthedevs-network\u002Fkutt\u002F9d1c873897c3f5b9a1bd0c74dc5d23f2ed01f2ec\u002Fstatic\u002Fimages\u002Flogo-github.png\" alt=\"Kutt.to\">\u003C\u002Fa>\u003C\u002Fp>\n\n# Kutt.to\n\n**Kutt** is a modern URL shortener with support for custom domains. Create and edit links, view statistics, manage users, and more.\n\n[https:\u002F\u002Fkutt.to](https:\u002F\u002Fkutt.to)\n\n> [!WARNING]\n> **[kutt.it](https:\u002F\u002Fkutt.it) is NOT OWNED BY US.** It could be a phishing site. We had the domain but it has been deactivated by the Italian TLD registrar due to the lack of identification documents, and now it's owned by someone else.\n\n\n>  Please use [kutt.to](https:\u002F\u002Fkutt.to), all the previous and the future links work with this domain as well.\n\n\n[![docker-build-release](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt\u002Factions\u002Fworkflows\u002Fdocker-build-release.yaml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt\u002Factions\u002Fworkflows\u002Fdocker-build-release.yaml)\n[![Uptime Status](https:\u002F\u002Fuptime.betterstack.com\u002Fstatus-badges\u002Fv2\u002Fmonitor\u002F1ogaa.svg)](https:\u002F\u002Fstatus.kutt.to)\n[![Contributions](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcontributions-welcome-brightgreen.svg)](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt\u002F#contributing)\n[![GitHub license](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fthedevs-network\u002Fkutt.svg)](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt\u002Fblob\u002Fdevelop\u002FLICENSE)\n\n## Table of contents\n\n- [Key features](#key-features)\n- [Donations and sponsors](#donations-and-sponsors)\n- [Setup](#setup)\n- [Docker](#docker)\n- [API](#api)\n- [Configuration](#configuration)\n- [Themes and customizations](#themes-and-customizations)\n- [Browser extensions](#browser-extensions)\n- [Videos](#videos)\n- [Integrations](#integrations)\n- [Contributing](#contributing)\n\n## Key features\n\n- Created with self-host in mind:\n  - Zero configuration needed\n  - Easy setup with no build step\n  - Supporting various databases (SQLite, Postgres, MySQL)\n  - Ability to disable registration and anonymous links\n  - OpenID Connect (OIDC) login\n- Custom domain support\n- Set custom URLs, password, description, and expiration time for links\n- View, edit, delete and manage your links\n- Private statistics for shortened URLs\n- Admin page to manage users and links\n- Customizability and themes\n- RESTful API\n\n## Donations and sponsors\n\nSupport the development of Kutt by making a donation or becoming an sponsor.\n\n[Donate or sponsor →](https:\u002F\u002Fbtcpay.kutt.to\u002Fapps\u002FL9Gc7PrnLykeRHkhsH2jHivBeEh\u002Fcrowdfund)\n\n## Setup\n\nThe only prerequisite is [Node.js](https:\u002F\u002Fnodejs.org\u002F) (version 20 or above). The default database is SQLite. You can optionally install Postgres or MySQL\u002FMariaDB for the database or Redis for the cache. \n\nWhen you first start the app, you're prompted to create an admin account.\n\n1. Clone this repository or [download the latest zip](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt\u002Freleases)\n2. Install dependencies: `npm install`\n3. Initialize database: `npm run migrate`\n5. Start the app for development `npm run dev` or production `npm start`\n\n## Docker\n\nMake sure Docker is installed, then you can start the app from the root directory:\n\n```sh\ndocker compose up\n```\n\nVarious docker-compose configurations are available. Use `docker compose -f \u003Cfile_name> up` to start the one you want:\n\n- [`docker-compose.yml`](.\u002Fdocker-compose.yml): Default Kutt setup. Uses SQLite for the database.\n- [`docker-compose.sqlite-redis.yml`](.\u002Fdocker-compose.sqlite-redis.yml): Starts Kutt with SQLite and Redis.\n  - Required environment variable: `REDIS_ENABLED`\n- [`docker-compose.postgres.yml`](.\u002Fdocker-compose.postgres.yml): Starts Kutt with Postgres and Redis.\n  - Required environment variables: `REDIS_ENABLED`, `DB_PASSWORD`, `DB_NAME`, `DB_USER`\n- [`docker-compose.mariadb.yml`](.\u002Fdocker-compose.mariadb.yml): Starts Kutt with MariaDB and Redis.\n  - Required environment variables: `REDIS_ENABLED`, `DB_PASSWORD`, `DB_NAME`, `DB_USER`, `DB_PORT`\n\nOfficial Kutt Docker image is available on [Docker Hub](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fkutt\u002Fkutt).\n\n## API\n\n[View API documentation →](https:\u002F\u002Fdocs.kutt.to)\n\n## Configuration\n\nThe app is configured via environment variables. You can pass environment variables directly or create a `.env` file. View [`.example.env`](.\u002F.example.env) file for the list of configurations.\n\nAll variables are optional except `JWT_SECRET` which is required on production. \n\nYou can use files for each of the variables by appending `_FILE` to the name of the variable. Example: `JWT_SECRET_FILE=\u002Fpath\u002Fto\u002Fsecret_file`.\n\n| Variable | Description | Default | Example |\n| -------- | ----------- | ------- | ------- |\n| `JWT_SECRET` | This is used to sign authentication tokens. Use a **long** **random** string. | - | - |\n| `PORT` |  The port to start the app on | `3000` | `8888` |\n| `SITE_NAME` |  Name of the website | `Kutt` | `Your Site` |\n| `DEFAULT_DOMAIN` |  The domain address that this app runs on | `localhost:3000` | `yoursite.com` |\n| `LINK_LENGTH` | The length of of shortened address | `6` | `5` |\n| `LINK_CUSTOM_ALPHABET` | Alphabet used to generate custom addresses. Default value omits o, O, 0, i, I, l, 1, and j to avoid confusion when reading the URL. | (abcd..789) | `abcABC^&*()@` |\n| `DISALLOW_REGISTRATION` | Disable registration. Note that if `MAIL_ENABLED` is set to false, then the registration would still be disabled since it relies on emails to sign up users. | `true` | `false` |\n| `DISALLOW_LOGIN_FORM` | Disable login with email and password. Only makes sense if OIDC is enabled. | `false` | `true` |\n| `DISALLOW_ANONYMOUS_LINKS` | Disable anonymous link creation | `true` | `false` |\n| `TRUST_PROXY` | If the app is running behind a proxy server like NGINX or Cloudflare and that it should get the IP address from that proxy server. If you're not using a proxy server then set this to false, otherwise users can override their IP address. | `true` | `false` |\n| `DB_CLIENT` |  Which database client to use. Supported clients: `pg` or `pg-native` for Postgres, `mysql2` for MySQL or MariaDB, `sqlite3` and `better-sqlite3` for SQLite. NOTE: `pg-native` and `sqlite3` are not installed by default, use `npm` to install them before use. | `better-sqlite3` | `pg` |\n| `DB_FILENAME` |  File path for the SQLite database. Only if you use SQLite. | `db\u002Fdata` | `\u002Fvar\u002Flib\u002Fdata` |\n| `DB_HOST` | Database connection host. Only if you use Postgres or MySQL. | `localhost` | `your-db-host.com` |\n| `DB_PORT` | Database port. Only if you use Postgres or MySQL. | `5432` (Postgres) | `3306` (MySQL) |\n| `DB_NAME` | Database name. Only if you use Postgres or MySQL. | `kutt` | `mydb` |\n| `DB_USER` | Database user. Only if you use Postgres or MySQL. | `postgres` | `myuser` |\n| `DB_PASSWORD` | Database password. Only if you use Postgres or MySQL. | - | `mypassword` |\n| `DB_SSL` | Whether use SSL for the database connection. Only if you use Postgres or MySQL. | `false` | `true` |\n| `DB_POOL_MIN` | Minimum number of database connection pools. Only if you use Postgres or MySQL. | `0` | `2` |\n| `DB_POOL_MAX` | Maximum number of database connection pools. Only if you use Postgres or MySQL. | `10` | `5` |\n| `REDIS_ENABLED` | Whether to use Redis for cache | `false` | `true` |\n| `REDIS_HOST` | Redis connection host | `127.0.0.1` | `your-redis-host.com` |\n| `REDIS_PORT` | Redis port | `6379` | `6379` |\n| `REDIS_PASSWORD` | Redis password | - | `mypassword` |\n| `REDIS_DB` | Redis database number, between 0 and 15. | `0` | `1` |\n| `SERVER_IP_ADDRESS` | The IP address shown to the user on the setting's page. It's only for display purposes and has no other use. | - | `1.2.3.4` |\n| `SERVER_CNAME_ADDRESS` | The subdomain shown to the user on the setting's page. It's only for display purposes and has no other use. | - | `custom.yoursite.com` |\n| `CUSTOM_DOMAIN_USE_HTTPS` | Use https for links with custom domain. It's on you to generate SSL certificates for those domains manually—at least on this version for now. | `false` | `true` |\n| `ENABLE_RATE_LIMIT` | Enable rate limiting for some API routes. If Redis is enabled uses Redis, otherwise, uses memory. | `false` | `true` |\n| `MAIL_ENABLED` | Enable emails, which are used for signup, verifying or changing email address, resetting password, and sending reports. If is disabled, all these functionalities will be disabled too. | `false` | `true` | \n| `MAIL_HOST` | Email server host | - | `your-mail-server.com` |\n| `MAIL_PORT` | Email server port | `587` | `465` (SSL) | \n| `MAIL_USER` | Email server user | - | `myuser` | \n| `MAIL_PASSWORD` | Email server password for the user | - | `mypassword` | \n| `MAIL_FROM` | Email address to send the user from | - | `example@yoursite.com` | \n| `MAIL_SECURE` | Whether use SSL for the email server connection | `false` | `true` | \n| `OIDC_ENABLED` | Enable OpenID Connect | `false` | `true` | \n| `OIDC_ISSUER` | OIDC issuer URL | - | `https:\u002F\u002Fexample.com\u002Fsome\u002Fpath` | \n| `OIDC_CLIENT_ID` | OIDC client id | - | `example-app` | \n| `OIDC_CLIENT_SECRET` | OIDC client secret | - | `some-secret` | \n| `OIDC_SCOPE` | OIDC Scope | `openid profile email` | `openid email` | \n| `OIDC_EMAIL_CLAIM` | Name of the field to get user's email from | `email` | `userEmail` | \n| `REPORT_EMAIL` | The email address that will receive submitted reports | - | `example@yoursite.com` | \n| `CONTACT_EMAIL` | The support email address to show on the app | - | `example@yoursite.com` | \n\n## Themes and customizations\n\nYou can add styles, change images, or render custom HTML. Place your content inside the [`\u002Fcustom`](.\u002Fcustom) folder according to below instructions.\n\n#### How it works:\n\nThe structure of the custom folder is like this:\n\n```\ncustom\u002F\n├─ css\u002F\n│  ├─ custom1.css\n│  ├─ custom2.css\n│  ├─ ...\n├─ images\u002F\n│  ├─ logo.png\n│  ├─ favicon.ico\n│  ├─ ...\n├─ views\u002F\n│  ├─ partials\u002F\n│  │  ├─ footer.hbs\n│  ├─ 404.hbs\n│  ├─ ...\n```\n\n- **css**: Put your CSS style files here. ([View example →](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt-customizations\u002Ftree\u002Fmain\u002Fthemes\u002Fcrimson\u002Fcss))\n  - You can put as many style files as you want: `custom1.css`, `custom2.css`, etc.\n  - If you name your style file `styles.css`, it will replace Kutt's original `styles.css` file.\n  - Each file will be accessible by `\u003Cyour-site.com>\u002Fcss\u002F\u003Cfile>.css`\n- **images**: Put your images here. ([View example →](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt-customizations\u002Ftree\u002Fmain\u002Fthemes\u002Fcrimson\u002Fimages))\n  - Name them just like the files inside the [`\u002Fstatic\u002Fimages\u002F`](.\u002Fstatic\u002Fimages) folder to replace Kutt's original images.\n  - Each image will be accessible by `\u003Cyour-site.com>\u002Fimages\u002F\u003Cimage>.\u003Cimage-format>`\n- **views**: Custom HTML templates to render. ([View example →](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt-customizations\u002Ftree\u002Fmain\u002Fthemes\u002Fcrimson\u002Fviews))\n  - It should follow the same file naming and folder structure as [`\u002Fserver\u002Fviews`](.\u002Fserver\u002Fviews)\n  - Although we try to keep the original file names unchanged, be aware that new changes on Kutt might break your custom views.\n \n#### Example theme: Crimson\n\nThis is an example and official theme. Crimson includes custom styles, images, and views.\n\n[Get Crimson theme →](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt-customizations\u002Ftree\u002Fmain\u002Fthemes\u002Fcrimson)\n\n[View list of themes and customizations →](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt-customizations)\n\n\n| Homepage | Admin page | Login\u002Fsignup |\n| -------- | ---------- | ------------ |\n| ![crimson-homepage](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fb74fab78-5e80-4f57-8425-f0cc73e9c68d) | ![crimson-admin](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fa75d2430-8074-4ce4-93ec-d8bdfd75d917) | ![crimson-login-signup ](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fb915eb77-3d66-4407-8e5d-b556f80ff453)\n\n#### Usage with Docker:\n\nIf you're building the image locally, then the `\u002Fcustom` folder should already be included in your app.\n\nIf you're pulling the official image, make sure `\u002Fkutt\u002Fcustom` volume is mounted or you have access to it. [View Docker compose example →](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt\u002Fblob\u002Fmain\u002Fdocker-compose.yml#L7)\n\nThen, move your files to that volume. You can do it with this Docker command:\n\n```sh\ndocker cp \u003Cpath-to-custom-folder> \u003Ckutt-container-name>:\u002Fkutt\n```\n\nFor example:\n\n```sh\ndocker cp custom kutt-server-1:\u002Fkutt\n```\n\nMake sure to restart the kutt server container after copying files or making changes.\n\n## Browser extensions\n\nDownload Kutt's extension for web browsers via below links.\n\n- [Chrome](https:\u002F\u002Fchrome.google.com\u002Fwebstore\u002Fdetail\u002Fkutt\u002Fpklakpjfiegjacoppcodencchehlfnpd)\n- [Firefox](https:\u002F\u002Faddons.mozilla.org\u002Fen-US\u002Ffirefox\u002Faddon\u002Fkutt\u002F)\n\n## Videos\n\n**Official videos**\n\n- [Next.js to htmx – A Real World Example](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=8RL4NvYZDT4)\n\n## Integrations\n\n- **ShareX** – You can use Kutt as your default URL shortener in [ShareX](https:\u002F\u002Fgetsharex.com\u002F). If you host your custom instance of Kutt, refer to [ShareX wiki](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Fkutt\u002Fwiki\u002FShareX) on how to setup.\n- **Alfred workflow** – Download Kutt's official workflow for [Alfred](https:\u002F\u002Fwww.alfredapp.com\u002F) app from [alfred-kutt](https:\u002F\u002Fgithub.com\u002Fthedevs-network\u002Falfred-kutt) repository.\n- **iOS shortcut** – [Kutt shortcut](https:\u002F\u002Fwww.icloud.com\u002Fshortcuts\u002Fa829856aea2c420e97c53437e68b752b) for your apple device which works from the iOS sharing context menu or on standalone mode. A courtesy of [@caneeeeee](https:\u002F\u002Fgithub.com\u002Fcaneeeeee).\n\n**Third-party packages**\n\n\n| Language        | Link                                                                              | Description                                          |\n| --------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------- |\n| C# (.NET)       | [KuttSharp](https:\u002F\u002Fgithub.com\u002F0xaryan\u002FKuttSharp)                                 | .NET package for Kutt.to url shortener               |\n| C# (.NET)       | [Kutt.NET](https:\u002F\u002Fgithub.com\u002FAlphaNecron\u002FKutt.NET)                               | C# API Wrapper for Kutt                              |\n| Python          | [kutt-cli](https:\u002F\u002Fgithub.com\u002FRealAmirali\u002Fkutt-cli)                               | Command-line client for Kutt written in Python       |\n| Ruby            | [kutt.rb](https:\u002F\u002Fgithub.com\u002FRealAmirali\u002Fkutt.rb)                                 | Kutt library written in Ruby                         |\n| Rust            | [urlshortener](https:\u002F\u002Fgithub.com\u002Fvityafx\u002Furlshortener-rs)                        | URL shortener library written in Rust                |\n| Rust            | [kutt-rs](https:\u002F\u002Fgithub.com\u002Frobatipoor\u002Fkutt-rs)                                  | Command line tool written in Rust                    |\n| Node.js         | [node-kutt](https:\u002F\u002Fgithub.com\u002Fardalanamini\u002Fnode-kutt)                            | Node.js client for Kutt.to url shortener             |\n| JavaScript      | [kutt-vscode](https:\u002F\u002Fgithub.com\u002Fmehrad77\u002Fkutt-vscode)                            | Visual Studio Code extension for Kutt                |\n| Java            | [kutt-desktop](https:\u002F\u002Fgithub.com\u002Fcipher812\u002Fkutt-desktop)                         | A Cross platform Java desktop application for Kutt   |\n| Go              | [kutt-go](https:\u002F\u002Fgithub.com\u002Fraahii\u002Fkutt-go)                                      | Go client for Kutt.to url shortener                  |\n| BASH            | [GitHub Gist](https:\u002F\u002Fgist.github.com\u002Fhashworks\u002F6d6e4eae8984a5018f7692a796d570b4) | Simple BASH function to access the API               |\n| BASH            | [url-shortener](https:\u002F\u002Fgit.tim-peters.org\u002FTim\u002Furl-shortener)                     | Simple BASH script with GUI                          |\n| Kubernetes\u002FHelm | [ArtifactHub](https:\u002F\u002Fartifacthub.io\u002Fpackages\u002Fhelm\u002Fchristianhuth\u002Fkutt)            | A Helm Chart to install Kutt on a Kubernetes cluster |\n\n## Contributing\n\nPull requests are welcome. Open a discussion for feedback, requesting features, or discussing ideas.\n\nSpecial thanks to [Thomas](https:\u002F\u002Fgithub.com\u002Ftrgwii) and [Muthu](https:\u002F\u002Fgithub.com\u002FMKRhere). Logo design by [Muthu](https:\u002F\u002Fgithub.com\u002FMKRhere).\n\n","Kutt 是一个现代化的网址缩短工具，支持自定义域名。其核心功能包括创建和编辑链接、查看统计信息、管理用户等，并且具备多种数据库支持（如 SQLite, Postgres, MySQL）以及 OpenID Connect 登录选项。此外，Kutt 提供了 RESTful API 和自定义主题的能力，使得用户可以根据需要进行个性化设置。该工具非常适合需要简化长链接分享过程、追踪链接访问情况或希望在自己的域名下提供短链接服务的个人及企业使用。",2,"2026-06-11 03:33:13","high_star"]