a simple url shortener for cloudflare workers
Go to file
2023-09-19 12:14:26 +10:00
.github/workflows aly broke the build 2023-09-17 12:52:18 +10:00
src Added upload type checking, default name/type, optional metrics, browser auth prompt 2023-09-19 12:01:56 +10:00
tools much better version of check-worker [skip ci] 2023-09-19 12:14:26 +10:00
.gitignore Initial 2023-09-17 04:52:02 +10:00
package.json Added upload type checking, default name/type, optional metrics, browser auth prompt 2023-09-19 12:01:56 +10:00
README.md officially removing support for sharex [skip ci] 2023-09-18 05:55:26 +10:00
test.py Added upload type checking, default name/type, optional metrics, browser auth prompt 2023-09-19 12:01:56 +10:00
wrangler.toml added metrics, logging request method and status code 2023-09-18 14:47:08 +10:00

linkie deploy and test

A simple url shortener. Largely adapting VandyHacks/vhl.ink with the aim of providing a more ptpb-like experience (i.e the fewest keystrokes from a cli possible while still being reasonably secure for private use)

Deploy to Cloudflare Workers

(I'm not sure how this button works, there's some setting up of KV namespaces necessary, I'd recommend following the below instructions)


  • Come up with a username and password. Write them to ~/.netrc for your target domain. e.g machine linkie.username.workers.dev username person password password1
  • Take your username and password as username:password, base64 encode that string and add "Basic " at the start, this is $AUTH_KEY
  • wrangler kv:namespace create KV
  • wrangler kv:namespace create AUTH
  • wrangler kv:key put --binding AUTH "$AUTH_KEY" 1 (or any truthy value you prefer)
  • wrangler r2 bucket create files
  • Update the namespace IDs in wrangler.toml per the two above namespaces. For test namespaces, pass --preview to the namespace create commands and update the preview IDs as well
  • also add the binding for the r2 bucket, { binding = "FILES", bucket_name = "files" }
  • While you're in wrangler.toml, update the custom domain in routes[0].pattern and the unauth redirect url in vars.REDIR_URL to your desired values
  • wrangler dev -r to test with provided preview namespaces, or wrangler deploy
  • Install python3 and python3-requests, then run DEPLOY_HOST=https://linkie.username.workers.dev AUTH_KEY=$AUTH_KEY python3 test.py to run tests to ensure linkie is functioning normally. If the script outputs nothing other than Running on $DEPLOY_HOST, the tests succeeded.
  • If you want Github Actions to handle deploying and testing, fork this repo, add AUTH_KEY as an Actions secret, also create an API token with access to Workers and add another Actions secret as CF_API_TOKEN, and finally add a normal Actions variable with DEPLOY_HOST as above so the test knows what to hit


sharex doesn't send files properly, linkie doesn't support it for file uploading. url shortening is fine though

curl -n -d u=http://example.com linkie/path will make http://linkie/path 302 redirect to the provided url. use .netrc to store the auth username/password (inspired by ix.io). Yes it supports emoji

curl -n -F "u=@filename.json" linkie/path now does file uploading to the connected R2 bucket, so that's neat. just don't forget the u=

curl -n -d u=http://example.com linkie/_, if you provide an underscore as the path linkie will generate a four character path from a-z0-9. if it has a collision five times in a row it'll return 500.. at that point i'd probably increase the length of the random ids in the function at the top of index.js to 5 or something, and also i should get off the internet because i've generated 36^4 short urls with this service and that's insane

See test.py for more usage and test cases