Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
Paste a long URL, get a short link, and see how many people click it. Free, with no sign-up.
Developer toolsGitHub @kiethuynhvn333OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
A very good alternative of bitly. Link shortener with click tracking. No sign-up needed
Translation pending
Loading the full README.
Read the full README ↗A very good alternative to bitly. Shorten a link, share it, and see how many people clicked. No sign-up: your links are tied to your browser.
Live: https://linki.ing
Built on Cloudflare Workers and D1, in plain JavaScript with no runtime dependencies. workers_dev = true in wrangler.toml keeps the workers.dev hostname on as a fallback.
Google Analytics loads on Linki's own pages from GA_ID at the top of src/index.js. Set GA_ID to '' to remove it. The page after a successful create also sends a link_created event. Short-link redirects are never tracked.
linki/hello, a small chart, and 128 clicks). Creating a link replaces it with the real result card.http:// and www. addresses redirect to the https:// bare domain.LOGO_SVG in src/index.js), served at /favicon.svg and /favicon.ico.prefers-reduced-motion.USPS in src/index.js).On Your links, copy the connector URL the page shows. On the public site that is https://linki.ing/mcp/<token>. In Claude: Settings → Connectors → Add custom connector → paste this URL. Cursor and other MCP clients use the same URL.
The connector is read-only and only sees this browser's links. Its tools are list_links, link_report (daily clicks for one link; days defaults to 30, max 365), and clicks_summary (totals over a date range; days defaults to 7, max 365). Reset on that page rotates the URL, and the old one stops working.
Linki stores a SHA-256 hash of the token. This browser keeps the raw token in a cookie so the page can show the URL again. The connector URL is created the first time you open Your links after making a link.
npm install
cp .dev.vars.example .dev.vars
npm run db:local # applies migrations/ to the local database
npm run dev # http://localhost:8787
npm test
The tests run the real Worker in Miniflare against an in-memory database built from migrations/. GitHub runs them on every pull request (.github/workflows/ci.yml).
npx wrangler login
npx wrangler d1 create linki # put the printed database_id in wrangler.toml
npx wrangler d1 migrations apply linki --remote
openssl rand -hex 32 | npx wrangler secret put HASH_SECRET
npx wrangler deploy
For later releases, npm run release runs the tests, applies any new migrations, and deploys. Apply migrations before deploying: new code expects the new columns. Without HASH_SECRET the Worker still runs, but it logs an error and visitor hashes use a public fallback.
Self-hosters get their own <name>.<subdomain>.workers.dev URL from that deploy. To add a custom domain, put this in wrangler.toml:
routes = [{ pattern = "example.com", custom_domain = true }]
wrangler.toml has a staging environment: a separate Worker (linki-staging) with its own database, no custom domain, and NOINDEX set so it stays out of search engines. Use it to try a change on a real URL before releasing.
npm run release:staging # tests, staging migrations, deploy to linki-staging.<subdomain>.workers.dev
Set its secret once: openssl rand -hex 32 | npx wrangler secret put HASH_SECRET --env staging.
src/index.js: the whole app (routes, HTML, CSS, favicon, read-only MCP).migrations/: the D1 tables, applied in order by wrangler d1 migrations apply.test/app.test.js: end-to-end tests.wrangler.toml: Worker, custom domains, daily cron, logs, and database config.CHANGES.md: notes on the current design.MIT