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: 2025-10-07T12:35:42.301Z GitHub updated at: 2025-10-07T12:35:42.478Z 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,156 07 Sep 5,556 08 Sep 6,259 09 Sep 5,802 10 Sep 6,184 11 Sep 5,487 12 Sep 1,222 13 Sep 939 14 Sep 6,302 15 Sep 6,651 16 Sep 6,871 17 Sep 7,332 18 Sep 6,734 19 Sep 1,192 20 Sep 909 21 Sep 6,492 22 Sep 6,183 23 Sep 6,455 24 Sep 6,619 25 Sep 5,666 26 Sep 1,365 27 Sep 1,254 28 Sep 7,264 29 Sep 7,702 30 Sep 7,410 01 Oct 6,452 02 Oct 4,560 03 Oct 1,191 04 Oct 950 05 Oct 4,442 06 Oct 142,601 Last 30 days
NPM updated at: 2025-10-07T12:35:42.315Z GitHub updated at: 2025-10-07T12:35:42.320Z 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
34,801 07 Sep 147,616 08 Sep 150,478 09 Sep 148,018 10 Sep 153,216 11 Sep 141,921 12 Sep 38,560 13 Sep 41,739 14 Sep 151,413 15 Sep 165,303 16 Sep 162,790 17 Sep 156,100 18 Sep 140,864 19 Sep 33,951 20 Sep 43,786 21 Sep 158,421 22 Sep 152,610 23 Sep 155,436 24 Sep 174,974 25 Sep 141,622 26 Sep 36,249 27 Sep 38,351 28 Sep 165,821 29 Sep 178,392 30 Sep 171,748 01 Oct 158,350 02 Oct 137,147 03 Oct 43,977 04 Oct 45,943 05 Oct 167,469 06 Oct 3,637,066 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: 2025-10-07T12:35:42.359Z GitHub updated at: 2025-10-07T12:35:42.521Z Opinionated Node.js microservices framework built on Fastify ⚡️
$ pnpm add fastify-micro $ yarn add fastify-micro
$ npm install fastify-micro
2 07 Sep 2 08 Sep 2 09 Sep 5 10 Sep 2 11 Sep 0 12 Sep 0 13 Sep 0 14 Sep 16 15 Sep 12 16 Sep 0 17 Sep 0 18 Sep 12 19 Sep 0 20 Sep 0 21 Sep 2 22 Sep 3 23 Sep 0 24 Sep 7 25 Sep 1 26 Sep 0 27 Sep 1 28 Sep 0 29 Sep 0 30 Sep 0 01 Oct 1 02 Oct 53 03 Oct 177 04 Oct 62 05 Oct 0 06 Oct 360 Last 30 days
NPM updated at: 2025-10-07T12:35:42.375Z GitHub updated at: 2025-10-07T12:35:42.334Z Run cron jobs alongside your Fastify server 👷
$ pnpm add fastify-cron $ yarn add fastify-cron
$ npm install fastify-cron
104 07 Sep 1,300 08 Sep 1,118 09 Sep 1,140 10 Sep 1,104 11 Sep 989 12 Sep 97 13 Sep 121 14 Sep 1,193 15 Sep 967 16 Sep 1,068 17 Sep 1,040 18 Sep 1,193 19 Sep 116 20 Sep 84 21 Sep 1,068 22 Sep 946 23 Sep 1,061 24 Sep 1,043 25 Sep 1,031 26 Sep 148 27 Sep 166 28 Sep 1,053 29 Sep 1,304 30 Sep 1,230 01 Oct 1,025 02 Oct 868 03 Oct 114 04 Oct 101 05 Oct 995 06 Oct 23,787 Last 30 days
GitHub Action to deploy to Clever Cloud
Security & Encryption
NPM updated at: 2025-10-07T12:35:42.377Z GitHub updated at: 2025-10-07T12:35:41.137Z Secure cryptographic key storage in the browser and Node.js
$ pnpm add session-keystore $ yarn add session-keystore
$ npm install session-keystore
3 07 Sep 9 08 Sep 41 09 Sep 40 10 Sep 25 11 Sep 7 12 Sep 3 13 Sep 3 14 Sep 18 15 Sep 17 16 Sep 31 17 Sep 19 18 Sep 51 19 Sep 3 20 Sep 1 21 Sep 33 22 Sep 34 23 Sep 23 24 Sep 12 25 Sep 16 26 Sep 3 27 Sep 0 28 Sep 28 29 Sep 6 30 Sep 21 01 Oct 26 02 Oct 34 03 Oct 50 04 Oct 34 05 Oct 15 06 Oct 606 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: 2025-10-07T12:35:42.396Z GitHub updated at: 2025-10-07T12:35:42.539Z 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,023 07 Sep 4,230 08 Sep 3,535 09 Sep 4,354 10 Sep 4,432 11 Sep 3,607 12 Sep 1,003 13 Sep 878 14 Sep 3,713 15 Sep 4,266 16 Sep 4,348 17 Sep 4,295 18 Sep 3,536 19 Sep 892 20 Sep 1,244 21 Sep 3,666 22 Sep 4,142 23 Sep 4,439 24 Sep 4,346 25 Sep 4,211 26 Sep 1,858 27 Sep 606 28 Sep 4,503 29 Sep 5,185 30 Sep 4,402 01 Oct 5,471 02 Oct 4,564 03 Oct 1,165 04 Oct 1,075 05 Oct 5,276 06 Oct 100,265 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: 2025-10-07T12:35:42.417Z GitHub updated at: 2025-10-07T12:35:42.540Z Redact values of critical environment variables in a string
$ pnpm add redact-env $ yarn add redact-env
$ npm install redact-env
176 07 Sep 177 08 Sep 444 09 Sep 316 10 Sep 278 11 Sep 192 12 Sep 56 13 Sep 100 14 Sep 272 15 Sep 213 16 Sep 387 17 Sep 179 18 Sep 85 19 Sep 65 20 Sep 82 21 Sep 102 22 Sep 94 23 Sep 83 24 Sep 198 25 Sep 109 26 Sep 104 27 Sep 118 28 Sep 252 29 Sep 193 30 Sep 113 01 Oct 249 02 Oct 71 03 Oct 55 04 Oct 65 05 Oct 138 06 Oct 4,966 Last 30 days
NPM updated at: 2025-10-07T12:35:42.398Z GitHub updated at: 2025-10-07T12:35:42.599Z Define aliases for environment variables and bind them at runtime
$ pnpm add env-alias $ yarn add env-alias
$ npm install env-alias
0 07 Sep 1 08 Sep 3 09 Sep 8 10 Sep 3 11 Sep 0 12 Sep 0 13 Sep 2 14 Sep 1 15 Sep 6 16 Sep 0 17 Sep 0 18 Sep 0 19 Sep 2 20 Sep 1 21 Sep 0 22 Sep 0 23 Sep 0 24 Sep 0 25 Sep 0 26 Sep 0 27 Sep 0 28 Sep 0 29 Sep 0 30 Sep 0 01 Oct 0 02 Oct 0 03 Oct 0 04 Oct 0 05 Oct 2 06 Oct 29 Last 30 days
NPM updated at: 2025-10-07T12:35:42.400Z GitHub updated at: 2025-10-07T12:35:42.597Z 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
17 07 Sep 32 08 Sep 30 09 Sep 23 10 Sep 18 11 Sep 18 12 Sep 3 13 Sep 4 14 Sep 32 15 Sep 68 16 Sep 12 17 Sep 41 18 Sep 9 19 Sep 18 20 Sep 10 21 Sep 13 22 Sep 16 23 Sep 32 24 Sep 26 25 Sep 10 26 Sep 3 27 Sep 6 28 Sep 19 29 Sep 32 30 Sep 56 01 Oct 41 02 Oct 27 03 Oct 16 04 Oct 1 05 Oct 9 06 Oct 642 Last 30 days
Miscellaneous
NPM updated at: 2025-10-07T12:35:42.416Z GitHub updated at: 2025-10-07T12:35:42.537Z 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,023 07 Sep 4,209 08 Sep 3,559 09 Sep 4,386 10 Sep 4,418 11 Sep 3,564 12 Sep 1,005 13 Sep 882 14 Sep 3,671 15 Sep 4,193 16 Sep 4,370 17 Sep 4,271 18 Sep 3,562 19 Sep 888 20 Sep 1,255 21 Sep 3,635 22 Sep 4,144 23 Sep 4,446 24 Sep 4,313 25 Sep 4,195 26 Sep 1,863 27 Sep 613 28 Sep 4,511 29 Sep 5,203 30 Sep 4,421 01 Oct 5,456 02 Oct 4,501 03 Oct 1,193 04 Oct 1,051 05 Oct 5,236 06 Oct 100,037 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.
Note: my earliest availability is September 2025 .
Contact meEdit this page on GitHub