Karl Horky
@karlhorky.com
Technical Founder, Curriculum Engineer @upleveled.io
Org Team React Amsterdam, AmsterdamJS, @reactvienna.com
Canadian, Austrian, he/him
📍Amsterdam https://github.com/karlhorky
Org Team React Amsterdam, AmsterdamJS, @reactvienna.com
Canadian, Austrian, he/him
📍Amsterdam https://github.com/karlhorky
npx-safe by @rafaelgss.dev :
Use the Node.js permissions model to make running npx on untrusted packages safer 🔥
github.com/RafaelGSS/do...
Use the Node.js permissions model to make running npx on untrusted packages safer 🔥
github.com/RafaelGSS/do...
October 16, 2025 at 9:43 AM
npx-safe by @rafaelgss.dev :
Use the Node.js permissions model to make running npx on untrusted packages safer 🔥
github.com/RafaelGSS/do...
Use the Node.js permissions model to make running npx on untrusted packages safer 🔥
github.com/RafaelGSS/do...
Why?
Dependabot security alert appears and update generated -> fails because the update is for a pnpm transitive dependency with the error:
Dependabot doesn't support the 'updating transitive dependencies' feature for pnpm package_manager
Dependabot security alert appears and update generated -> fails because the update is for a pnpm transitive dependency with the error:
Dependabot doesn't support the 'updating transitive dependencies' feature for pnpm package_manager
September 25, 2025 at 1:09 PM
Why?
Dependabot security alert appears and update generated -> fails because the update is for a pnpm transitive dependency with the error:
Dependabot doesn't support the 'updating transitive dependencies' feature for pnpm package_manager
Dependabot security alert appears and update generated -> fails because the update is for a pnpm transitive dependency with the error:
Dependabot doesn't support the 'updating transitive dependencies' feature for pnpm package_manager
My request for Dependabot: Full support for @pnpm.io
(updates to transitive deps fail currently)
Voice support in the issue 🙌
github.com/dependabot/d...
(updates to transitive deps fail currently)
Voice support in the issue 🙌
github.com/dependabot/d...
September 25, 2025 at 1:09 PM
My request for Dependabot: Full support for @pnpm.io
(updates to transitive deps fail currently)
Voice support in the issue 🙌
github.com/dependabot/d...
(updates to transitive deps fail currently)
Voice support in the issue 🙌
github.com/dependabot/d...
Codemods for Node.js 😍
Looking great, thanks to all contributors!
Looking great, thanks to all contributors!
August 30, 2025 at 4:06 PM
Codemods for Node.js 😍
Looking great, thanks to all contributors!
Looking great, thanks to all contributors!
@netlify.com multiple users reporting Netlify edge functions being down, in case you didn't know yet
Maybe you can update the status page with the outage?
answers.netlify.com/t/the-site-s...
Maybe you can update the status page with the outage?
answers.netlify.com/t/the-site-s...
August 11, 2025 at 5:59 PM
@netlify.com multiple users reporting Netlify edge functions being down, in case you didn't know yet
Maybe you can update the status page with the outage?
answers.netlify.com/t/the-site-s...
Maybe you can update the status page with the outage?
answers.netlify.com/t/the-site-s...
VS Code 1.103 (Jul 2025) finally has expandable hovers in JavaScript and TypeScript 😍
for when the hover info is showing the type name instead of the object / array / etc
code.visualstudio.com/updates/v1_1...
for when the hover info is showing the type name instead of the object / array / etc
code.visualstudio.com/updates/v1_1...
August 9, 2025 at 3:49 PM
VS Code 1.103 (Jul 2025) finally has expandable hovers in JavaScript and TypeScript 😍
for when the hover info is showing the type name instead of the object / array / etc
code.visualstudio.com/updates/v1_1...
for when the hover info is showing the type name instead of the object / array / etc
code.visualstudio.com/updates/v1_1...
Looks like `experimental.typedRoutes` is coming to Next.js Turbopack, thanks to Ben Gubler 🚀 🎉
github.com/vercel/next....
github.com/vercel/next....
July 17, 2025 at 9:07 AM
Looks like `experimental.typedRoutes` is coming to Next.js Turbopack, thanks to Ben Gubler 🚀 🎉
github.com/vercel/next....
github.com/vercel/next....
My work in open source, from fixing papercuts to support students to discussing standards 🚀
Thanks so much to the Open Source Initiative @opensource.org for featuring me as a maintainer for Maintainer Month 2025!
opensource.org/maintainers/...
Thanks so much to the Open Source Initiative @opensource.org for featuring me as a maintainer for Maintainer Month 2025!
opensource.org/maintainers/...
May 21, 2025 at 10:04 AM
My work in open source, from fixing papercuts to support students to discussing standards 🚀
Thanks so much to the Open Source Initiative @opensource.org for featuring me as a maintainer for Maintainer Month 2025!
opensource.org/maintainers/...
Thanks so much to the Open Source Initiative @opensource.org for featuring me as a maintainer for Maintainer Month 2025!
opensource.org/maintainers/...
AI-generated image alt text in HTML and Markdown in VS Code April 2025 (1.100) 😍
code.visualstudio.com/updates/v1_1...
code.visualstudio.com/updates/v1_1...
May 8, 2025 at 11:39 PM
AI-generated image alt text in HTML and Markdown in VS Code April 2025 (1.100) 😍
code.visualstudio.com/updates/v1_1...
code.visualstudio.com/updates/v1_1...
Oh nice, looks like the 2019 idea I had to "skip parameters in function parameter lists" may come to life in @chronicles.org's proposal "void Discard Bindings for ECMAScript" 😍
May 7, 2025 at 11:44 PM
Oh nice, looks like the 2019 idea I had to "skip parameters in function parameter lists" may come to life in @chronicles.org's proposal "void Discard Bindings for ECMAScript" 😍
GritQL Biome plugins looking great 🔥
More options for simpler linting plugins 👍
ESLint `no-restricted-syntax` is almost there, but esquery can get pretty verbose...
More options for simpler linting plugins 👍
ESLint `no-restricted-syntax` is almost there, but esquery can get pretty verbose...
March 24, 2025 at 2:49 PM
GritQL Biome plugins looking great 🔥
More options for simpler linting plugins 👍
ESLint `no-restricted-syntax` is almost there, but esquery can get pretty verbose...
More options for simpler linting plugins 👍
ESLint `no-restricted-syntax` is almost there, but esquery can get pretty verbose...
`Cannot find matching keyid` error with latest pnpm?
Upgrade to Node.js v22.14.0, which updates to the fixed Corepack 0.31.0 version:
Windows: choco upgrade nodejs # or nodejs-lts
macOS: brew upgrade node # or node@22
Ubuntu: sudo apt-get --only-upgrade install nodejs
Upgrade to Node.js v22.14.0, which updates to the fixed Corepack 0.31.0 version:
Windows: choco upgrade nodejs # or nodejs-lts
macOS: brew upgrade node # or node@22
Ubuntu: sudo apt-get --only-upgrade install nodejs
February 11, 2025 at 11:47 AM
`Cannot find matching keyid` error with latest pnpm?
Upgrade to Node.js v22.14.0, which updates to the fixed Corepack 0.31.0 version:
Windows: choco upgrade nodejs # or nodejs-lts
macOS: brew upgrade node # or node@22
Ubuntu: sudo apt-get --only-upgrade install nodejs
Upgrade to Node.js v22.14.0, which updates to the fixed Corepack 0.31.0 version:
Windows: choco upgrade nodejs # or nodejs-lts
macOS: brew upgrade node # or node@22
Ubuntu: sudo apt-get --only-upgrade install nodejs
Thanks for the great talk at React Amsterdam @mickey.studio 🎉
Great to see more about this topic in design systems creation:
- Drawbacks of rigid, highly-coupled components
- Patterns of fine-grained component factoring and composition to counter these drawbacks
Great to see more about this topic in design systems creation:
- Drawbacks of rigid, highly-coupled components
- Patterns of fine-grained component factoring and composition to counter these drawbacks
January 24, 2025 at 8:53 AM
Thanks for the great talk at React Amsterdam @mickey.studio 🎉
Great to see more about this topic in design systems creation:
- Drawbacks of rigid, highly-coupled components
- Patterns of fine-grained component factoring and composition to counter these drawbacks
Great to see more about this topic in design systems creation:
- Drawbacks of rigid, highly-coupled components
- Patterns of fine-grained component factoring and composition to counter these drawbacks
> if you use the demo code and print `.get('a[]')` you get the value, right?
you get a string - that was the point
there is no way to receive an array value, which was the vulnerability
forked sandbox: codesandbox.io/p/devbox/pen...
you get a string - that was the point
there is no way to receive an array value, which was the vulnerability
forked sandbox: codesandbox.io/p/devbox/pen...
January 13, 2025 at 2:49 PM
> if you use the demo code and print `.get('a[]')` you get the value, right?
you get a string - that was the point
there is no way to receive an array value, which was the vulnerability
forked sandbox: codesandbox.io/p/devbox/pen...
you get a string - that was the point
there is no way to receive an array value, which was the vulnerability
forked sandbox: codesandbox.io/p/devbox/pen...
This is what we teach to students in the first lecture about TypeScript, that narrowing with runtime code is sometimes required
January 13, 2025 at 2:34 PM
This is what we teach to students in the first lecture about TypeScript, that narrowing with runtime code is sometimes required
PostgreSQL: Ever wanted to insert test data with explicit `id`s into a table with an identity column eg. `GENERATED ALWAYS AS IDENTITY`?
Added a new trick to PostgreSQL Tricks with a seeder script which achieves this (short version: detect + drop + re-add the identity)
github.com/karlhorky/po...
Added a new trick to PostgreSQL Tricks with a seeder script which achieves this (short version: detect + drop + re-add the identity)
github.com/karlhorky/po...
January 6, 2025 at 1:06 PM
PostgreSQL: Ever wanted to insert test data with explicit `id`s into a table with an identity column eg. `GENERATED ALWAYS AS IDENTITY`?
Added a new trick to PostgreSQL Tricks with a seeder script which achieves this (short version: detect + drop + re-add the identity)
github.com/karlhorky/po...
Added a new trick to PostgreSQL Tricks with a seeder script which achieves this (short version: detect + drop + re-add the identity)
github.com/karlhorky/po...
one last edge case where I can imagine TS has only partial errors:
overlapping identically-named APIs between different types (Array.prototype.concat and String.prototype.concat)
but more uncommon, and I guess could be caught by types in other parts of program or other tooling like linters
overlapping identically-named APIs between different types (Array.prototype.concat and String.prototype.concat)
but more uncommon, and I guess could be caught by types in other parts of program or other tooling like linters
December 6, 2024 at 10:40 PM
one last edge case where I can imagine TS has only partial errors:
overlapping identically-named APIs between different types (Array.prototype.concat and String.prototype.concat)
but more uncommon, and I guess could be caught by types in other parts of program or other tooling like linters
overlapping identically-named APIs between different types (Array.prototype.concat and String.prototype.concat)
but more uncommon, and I guess could be caught by types in other parts of program or other tooling like linters
In case this is still not clear, here's a demo
In this demo, tsc (with @types/node and @types/sanitize-html) will not allow building type-unsafe, insecure JS, because of the type error on line 25
(see tsc error in alt text, or just run `pnpm tsc` in the sandbox)
codesandbox.io/p/devbox/l7w...
In this demo, tsc (with @types/node and @types/sanitize-html) will not allow building type-unsafe, insecure JS, because of the type error on line 25
(see tsc error in alt text, or just run `pnpm tsc` in the sandbox)
codesandbox.io/p/devbox/l7w...
December 6, 2024 at 5:45 PM
In case this is still not clear, here's a demo
In this demo, tsc (with @types/node and @types/sanitize-html) will not allow building type-unsafe, insecure JS, because of the type error on line 25
(see tsc error in alt text, or just run `pnpm tsc` in the sandbox)
codesandbox.io/p/devbox/l7w...
In this demo, tsc (with @types/node and @types/sanitize-html) will not allow building type-unsafe, insecure JS, because of the type error on line 25
(see tsc error in alt text, or just run `pnpm tsc` in the sandbox)
codesandbox.io/p/devbox/l7w...
Or in Next.js use, you can't even pass in an array without special handling - everything is strings
(I think that's my favorite - secure by default, make the insecure thing harder)
codesandbox.io/p/devbox/sto...
(I think that's my favorite - secure by default, make the insecure thing harder)
codesandbox.io/p/devbox/sto...
December 5, 2024 at 9:03 AM
Or in Next.js use, you can't even pass in an array without special handling - everything is strings
(I think that's my favorite - secure by default, make the insecure thing harder)
codesandbox.io/p/devbox/sto...
(I think that's my favorite - secure by default, make the insecure thing harder)
codesandbox.io/p/devbox/sto...
Yeah, I guess I'm used to TypeScript param types catching these things for me already, eg. Express query param types:
www.typescriptlang.org/play/#code/J...
www.typescriptlang.org/play/#code/J...
December 5, 2024 at 8:53 AM
Yeah, I guess I'm used to TypeScript param types catching these things for me already, eg. Express query param types:
www.typescriptlang.org/play/#code/J...
www.typescriptlang.org/play/#code/J...
Ah interesting, and in the case of Dust, it seems like it was to avoid XSS vulnerabilities caused by missing encoding
github.com/linkedin/dus...
github.com/linkedin/dus...
December 5, 2024 at 8:25 AM
Ah interesting, and in the case of Dust, it seems like it was to avoid XSS vulnerabilities caused by missing encoding
github.com/linkedin/dus...
github.com/linkedin/dus...
it's crazy how often a new typescript-eslint rule ends up teaching JavaScript and TypeScript fundamentals 😮 🚀
typescript-eslint.io/rules/return...
typescript-eslint.io/rules/return...
November 28, 2024 at 10:19 AM
it's crazy how often a new typescript-eslint rule ends up teaching JavaScript and TypeScript fundamentals 😮 🚀
typescript-eslint.io/rules/return...
typescript-eslint.io/rules/return...
Playwright 1.49's new `.toMatchAriaSnapshot()` 😍
Nice and compact YAML syntax to test multiple elements in an accessibility tree 🎉
Thanks Pavel Feldman, @max.sh , @skn0tt.bsky.social , Dmitry Gozman and everyone else involved!
playwright.dev/docs/release...
Nice and compact YAML syntax to test multiple elements in an accessibility tree 🎉
Thanks Pavel Feldman, @max.sh , @skn0tt.bsky.social , Dmitry Gozman and everyone else involved!
playwright.dev/docs/release...
November 26, 2024 at 5:57 PM
Playwright 1.49's new `.toMatchAriaSnapshot()` 😍
Nice and compact YAML syntax to test multiple elements in an accessibility tree 🎉
Thanks Pavel Feldman, @max.sh , @skn0tt.bsky.social , Dmitry Gozman and everyone else involved!
playwright.dev/docs/release...
Nice and compact YAML syntax to test multiple elements in an accessibility tree 🎉
Thanks Pavel Feldman, @max.sh , @skn0tt.bsky.social , Dmitry Gozman and everyone else involved!
playwright.dev/docs/release...
nice!
some before and after code shots from the video (with alt text)
some before and after code shots from the video (with alt text)
November 24, 2024 at 5:57 PM
nice!
some before and after code shots from the video (with alt text)
some before and after code shots from the video (with alt text)
I like the overall idea behind privacy protections for users 👍
But cookie banners / similar are a bad technical implementation, imposing bad UX on millions of users
This makes a noticeable impact on user frustration, not to mention Europe's productivity and economy
legiscope.com/blog/hidden-...
But cookie banners / similar are a bad technical implementation, imposing bad UX on millions of users
This makes a noticeable impact on user frustration, not to mention Europe's productivity and economy
legiscope.com/blog/hidden-...
November 17, 2024 at 11:17 AM
I like the overall idea behind privacy protections for users 👍
But cookie banners / similar are a bad technical implementation, imposing bad UX on millions of users
This makes a noticeable impact on user frustration, not to mention Europe's productivity and economy
legiscope.com/blog/hidden-...
But cookie banners / similar are a bad technical implementation, imposing bad UX on millions of users
This makes a noticeable impact on user frustration, not to mention Europe's productivity and economy
legiscope.com/blog/hidden-...