Open Source
This page lists some of the open source packages and repositories I have published or contribute to.
Most of them are published under my company 47ng .
Frontend
My tech stack of choice for server-rendered React apps is Next.js
and TailwindCSS .
For client-heavy apps, I like to use Chakra-UI to
quickly build beautiful and accessible interfaces.
Because of its CSS-in-JS approach, it’s a bit awkward to use with the
new Next.js app router and server components, so I’m now letting Tailwind deal
with styling. ChatGPT makes a perfect companion for refactoring one into the other
anyway. 😄
NPM updated at: 2026-01-19T14:59:15.773Z GitHub updated at: 2026-01-19T14:59:15.868Z Type-safe search params state manager for React frameworks - Like useState, but stored in the URL query string.
$ pnpm add next-usequerystate $ yarn add next-usequerystate
$ npm install next-usequerystate
1,280 20 Dec 986 21 Dec 4,943 22 Dec 4,183 23 Dec 2,330 24 Dec 1,189 25 Dec 1,608 26 Dec 904 27 Dec 1,121 28 Dec 2,892 29 Dec 2,854 30 Dec 2,061 31 Dec 1,122 01 Jan 1,903 02 Jan 1,056 03 Jan 1,245 04 Jan 5,267 05 Jan 5,678 06 Jan 5,761 07 Jan 5,597 08 Jan 4,557 09 Jan 1,003 10 Jan 897 11 Jan 5,116 12 Jan 6,527 13 Jan 6,743 14 Jan 6,379 15 Jan 6,704 16 Jan 1,422 17 Jan 1,372 18 Jan 94,700 Last 30 days
NPM updated at: 2026-01-19T14:59:15.788Z GitHub updated at: 2026-01-19T14:59:15.847Z Type-safe search params state manager for React frameworks - Like useState, but stored in the URL query string.
$ pnpm add nuqs $ yarn add nuqs
$ npm install nuqs
64,001 20 Dec 52,769 21 Dec 172,814 22 Dec 174,373 23 Dec 116,930 24 Dec 59,422 25 Dec 81,946 26 Dec 49,572 27 Dec 49,159 28 Dec 131,654 29 Dec 133,318 30 Dec 109,015 31 Dec 61,460 01 Jan 114,630 02 Jan 58,959 03 Jan 60,982 04 Jan 217,148 05 Jan 229,714 06 Jan 241,393 07 Jan 252,138 08 Jan 226,722 09 Jan 76,319 10 Jan 69,775 11 Jan 241,476 12 Jan 273,189 13 Jan 274,971 14 Jan 274,530 15 Jan 247,372 16 Jan 76,766 17 Jan 73,466 18 Jan 4,265,983 Last 30 days
Backend
I like to use Fastify to build backend services in Node.js.
What I like about it:
More opinionated and structured than Express.js
Damn fast
Easy to write plugins
Good defaults out of the box
NPM updated at: 2026-01-19T14:59:15.791Z GitHub updated at: 2026-01-19T14:59:16.092Z Opinionated Node.js microservices framework built on Fastify ⚡️
$ pnpm add fastify-micro $ yarn add fastify-micro
$ npm install fastify-micro
0 20 Dec 0 21 Dec 1 22 Dec 0 23 Dec 1 24 Dec 1 25 Dec 1 26 Dec 0 27 Dec 0 28 Dec 0 29 Dec 1 30 Dec 0 31 Dec 0 01 Jan 0 02 Jan 1 03 Jan 3 04 Jan 1 05 Jan 1 06 Jan 0 07 Jan 0 08 Jan 0 09 Jan 0 10 Jan 0 11 Jan 0 12 Jan 0 13 Jan 1 14 Jan 0 15 Jan 1 16 Jan 0 17 Jan 0 18 Jan 13 Last 30 days
NPM updated at: 2026-01-19T14:59:15.793Z GitHub updated at: 2026-01-19T14:59:15.851Z Run cron jobs alongside your Fastify server 👷
$ pnpm add fastify-cron $ yarn add fastify-cron
$ npm install fastify-cron
171 20 Dec 62 21 Dec 830 22 Dec 800 23 Dec 482 24 Dec 175 25 Dec 280 26 Dec 211 27 Dec 198 28 Dec 786 29 Dec 621 30 Dec 399 31 Dec 59 01 Jan 606 02 Jan 73 03 Jan 135 04 Jan 875 05 Jan 848 06 Jan 1,022 07 Jan 1,065 08 Jan 1,002 09 Jan 276 10 Jan 193 11 Jan 1,082 12 Jan 1,274 13 Jan 1,392 14 Jan 1,181 15 Jan 1,243 16 Jan 191 17 Jan 377 18 Jan 17,909 Last 30 days
GitHub Action to deploy to Clever Cloud
Security & Encryption
NPM updated at: 2026-01-19T14:59:15.795Z GitHub updated at: 2026-01-19T14:59:15.969Z Secure cryptographic key storage in the browser and Node.js
$ pnpm add session-keystore $ yarn add session-keystore
$ npm install session-keystore
1 20 Dec 0 21 Dec 14 22 Dec 3 23 Dec 6 24 Dec 1 25 Dec 1 26 Dec 4 27 Dec 0 28 Dec 3 29 Dec 7 30 Dec 1 31 Dec 1 01 Jan 4 02 Jan 26 03 Jan 1 04 Jan 8 05 Jan 4 06 Jan 40 07 Jan 7 08 Jan 2 09 Jan 0 10 Jan 0 11 Jan 5 12 Jan 2 13 Jan 7 14 Jan 5 15 Jan 8 16 Jan 0 17 Jan 0 18 Jan 161 Last 30 days
I wrote an article about how I came to build session-keystore:
13 December 2019 • 4 min read e2ee security End-to-end encrypted applications use cryptographic keys that don't leave the client, so how do we store them securely in the browser ?
NPM updated at: 2026-01-19T14:59:15.796Z GitHub updated at: 2026-01-19T14:59:15.967Z Serialized AES-GCM 256 encryption, decryption and key management in the browser & Node.js
$ pnpm add @47ng/cloak $ yarn add @47ng/cloak
$ npm install @47ng/cloak
1,064 20 Dec 711 21 Dec 3,912 22 Dec 3,765 23 Dec 1,806 24 Dec 1,068 25 Dec 1,118 26 Dec 788 27 Dec 990 28 Dec 2,270 29 Dec 2,521 30 Dec 2,510 31 Dec 837 01 Jan 1,789 02 Jan 597 03 Jan 1,009 04 Jan 5,122 05 Jan 4,725 06 Jan 5,946 07 Jan 5,692 08 Jan 5,624 09 Jan 1,403 10 Jan 1,564 11 Jan 5,256 12 Jan 7,276 13 Jan 7,674 14 Jan 7,599 15 Jan 6,031 16 Jan 1,916 17 Jan 1,470 18 Jan 94,053 Last 30 days
SDK to build end-to-end encrypted web applications
Environment Variables
The Twelve Factor App model uses environment
variables extensively for configuration and passing runtime data to a web app.
However, there are things to look out for when working with environment
variables, so I built a few packages to make their management easier and more
secure:
NPM updated at: 2026-01-19T14:59:15.806Z GitHub updated at: 2026-01-19T14:59:15.891Z Redact values of critical environment variables in a string
$ pnpm add redact-env $ yarn add redact-env
$ npm install redact-env
17 20 Dec 41 21 Dec 50 22 Dec 100 23 Dec 125 24 Dec 33 25 Dec 31 26 Dec 26 27 Dec 60 28 Dec 126 29 Dec 148 30 Dec 114 31 Dec 69 01 Jan 65 02 Jan 29 03 Jan 75 04 Jan 188 05 Jan 191 06 Jan 231 07 Jan 135 08 Jan 97 09 Jan 69 10 Jan 74 11 Jan 212 12 Jan 190 13 Jan 126 14 Jan 156 15 Jan 92 16 Jan 58 17 Jan 120 18 Jan 3,048 Last 30 days
NPM updated at: 2026-01-19T14:59:15.812Z GitHub updated at: 2026-01-19T14:59:15.953Z Define aliases for environment variables and bind them at runtime
$ pnpm add env-alias $ yarn add env-alias
$ npm install env-alias
0 20 Dec 0 21 Dec 1 22 Dec 0 23 Dec 0 24 Dec 0 25 Dec 0 26 Dec 0 27 Dec 0 28 Dec 0 29 Dec 0 30 Dec 1 31 Dec 0 01 Jan 0 02 Jan 0 03 Jan 2 04 Jan 1 05 Jan 0 06 Jan 0 07 Jan 0 08 Jan 0 09 Jan 0 10 Jan 0 11 Jan 1 12 Jan 0 13 Jan 0 14 Jan 0 15 Jan 0 16 Jan 0 17 Jan 0 18 Jan 6 Last 30 days
NPM updated at: 2026-01-19T14:59:15.814Z GitHub updated at: 2026-01-19T14:59:15.866Z Check that required environment variables are set for your app
$ pnpm add @47ng/check-env $ yarn add @47ng/check-env
$ npm install @47ng/check-env
0 20 Dec 7 21 Dec 34 22 Dec 9 23 Dec 6 24 Dec 2 25 Dec 3 26 Dec 2 27 Dec 4 28 Dec 5 29 Dec 10 30 Dec 3 31 Dec 4 01 Jan 8 02 Jan 4 03 Jan 7 04 Jan 6 05 Jan 6 06 Jan 21 07 Jan 7 08 Jan 6 09 Jan 7 10 Jan 2 11 Jan 13 12 Jan 14 13 Jan 23 14 Jan 30 15 Jan 20 16 Jan 3 17 Jan 2 18 Jan 268 Last 30 days
Miscellaneous
NPM updated at: 2026-01-19T14:59:15.831Z GitHub updated at: 2026-01-19T14:59:16.185Z Universal conversion of Uint8Array from/into UTF-8, base64url and hex in the browser and Node.js
$ pnpm add @47ng/codec $ yarn add @47ng/codec
$ npm install @47ng/codec
1,089 20 Dec 924 21 Dec 4,127 22 Dec 4,185 23 Dec 2,560 24 Dec 1,384 25 Dec 1,562 26 Dec 935 27 Dec 1,173 28 Dec 2,652 29 Dec 2,829 30 Dec 2,729 31 Dec 997 01 Jan 1,872 02 Jan 625 03 Jan 1,107 04 Jan 5,054 05 Jan 4,794 06 Jan 5,990 07 Jan 5,670 08 Jan 5,613 09 Jan 1,445 10 Jan 1,583 11 Jan 5,199 12 Jan 7,261 13 Jan 7,642 14 Jan 7,605 15 Jan 6,065 16 Jan 1,923 17 Jan 1,473 18 Jan 98,067 Last 30 days
My longest-running open-source project is the Arduino MIDI Library. I learned programming in C++ in 2008 with this project and discovered my passion for open-source software.
The source code for this website! Made with Next.js , TailwindCSS and MDX .
🤝 Hire me!
I build web apps for startups, businesses and public institutions as a freelance web developer and designer. Let's discuss your needs and see how I can help.
Contact meEdit this page on GitHub