Sign in

Marvin Hagemeister

@marvinh.dev
2.5K followers 176 following 334 posts

I build simple and fast things. Part of Preact team.

PostsRepliesMedia
Reposted by Marvin Hagemeister
nate moore @natemoo.re · 29/09/2026
we have no choice but to give the preact team billions of dollars 😌
3486
Reposted by Marvin Hagemeister
jviide.iki.fi @jviide.iki.fi · 21/08/2025
1. make it work 2. [object Object] 3. make it fas
1134
Reposted by Marvin Hagemeister
danielroe @danielroe.dev · 14/09/2026
🙋‍♂️ ever wanted to build something without needing to configure a db, auth, file storage or a cms? it turns out you already have all four if you have a bluesky account 👉 airspace is a typed client for it
getair.space
airspace
The database you already have.
1950789
Reposted by Marvin Hagemeister
Justin Fagnani @justinfagnani.com · 09/09/2026
I wrote about what I've been up to with my new programming language! Zena targets WebAssembly GC, with a TypeScript-like syntax, sound type system, and lots of cool features like pattern matching, async cancellation, borrow checking, WASI integration, and more! justinfagnani.com/2026/09/09/z...
justinfagnani.com
Zena: A new Wasm-first programming language
410526
Reposted by Marvin Hagemeister
Master.dev (Formerly Frontend Masters) @frontendmasters.com · 02/09/2026
New Things You Should Know About HTML Here in Mid 2026 The foundational language of the web is getting plenty of love lately! While HTML moves a bit more slowly than its buddies, CSS and JavaScript, that tends to be a good thing. I'm not gonna do, like, in here. That's too basic for you. Tha
blog.master.dev
New Things You Should Know About HTML Here in Mid 2026
The foundational language of the web is getting plenty of love lately! While HTML moves a bit more slowly than its buddies, CSS and JavaScript, that tends to be a good thing. I’m not gonna do, like,…
02810
Reposted by Marvin Hagemeister
Vale @vale.rocks · 02/09/2026
Respected friends and acquaintances, initial-scale is dead! We are freed of its tyranny. You no longer need to include it in your HTML head. It is an obsolete part of your head's meta viewport declaration. The details: vale.rocks/micros/20260... #WebDev #HTML
vale.rocks
You Don't Need Initial-Scale In Your HTML - 2 Sept 2026 13:50 UTC
410620
Reposted by Marvin Hagemeister
Predrag Gruevski @predr.ag · 28/08/2026
This change by Noah Lev will probably save a zillion dollars in docs\.rs and CI jobs everywhere. Really nice work! noahlev.org/blog/2026/08...
noahlev.org
How I made Rustdoc 25% faster in one week - Noah Lev Bartell-Mangel
From a "weird bug" to massive speedups
1354
Reposted by Marvin Hagemeister
Jovi 🐨 @jovidecroock.com · 26/08/2026
Preact 11.0.0-rc.1 is here ⚛️ preact/compat code is now tree-shakeable, with representative single-export bundles shrinking by up to ~28%. Plus: more size wins, better HTML attribute types and maintenance fixes. This will most likely be the last rc - feedback is appreciated
preactjs.com
Upgrading from Preact 10.x – Preact Guide v11
Upgrade your Preact 10.x application to Preact 11
3459
Marvin Hagemeister @marvinh.dev · 21/08/2026
The new content-mapper API in tsgo has just been merged and will be part of TS 7.1 It's what every framework dev has dreamed of for years. Really excited about this becoming a reality! github.com/microsoft/ty...
github.com
Content mappers by andrewbranch · Pull Request #4712 · microsoft/typescript-go
Implements microsoft/TypeScript#63800 (comment) Overview Content mappers are external integrations that allow TypeScript to include otherwise unsupported file types in a program. They transform a f...
4395
Reposted by Marvin Hagemeister
jviide.iki.fi @jviide.iki.fi · 15/08/2026
It's so great to see this sort of cross-pollination of ideas (and generous sharing of credit): the tsgo-based API exposes AST nodes to JS in a way that's inspired by @marvinh.dev's work on Deno's Rust-based linter.
1171
Marvin Hagemeister @marvinh.dev · 15/08/2026
So many good things are coming to TS 🙌
1251
Marvin Hagemeister @marvinh.dev · 22/07/2026
I like this approach of exposing hooks in a library and letting consumers decide which crypto crate to pick etc. Makes it very future proof and minimal. nickb.dev/blog/theres-...
nickb.dev
There's always a niche: rawzip and the cost of ergonomics
rawzip is a minimalist Rust zip archive parser with zero dependencies, allocations, copies, and unsafe code, built to handle massive archives where existing libraries showed 15x–15000x more overhead. ...
060
Reposted by Marvin Hagemeister
Jovi 🐨 @jovidecroock.com · 13/07/2026
Preact supports async hydration. Resumed hydration lets Suspense boundaries become interactive independently while code/data arrives. Why that helps the main thread, what Hydration 2.0 fixes, the remaining useId problem, and streaming: www.jovidecroock.com/blog/resumed...
jovidecroock.com
Async hydration in Preact
How Preact resumes hydration across Suspense boundaries, why useId made that hard, and how streaming changes the tradeoffs.
1278
Marvin Hagemeister @marvinh.dev · 14/07/2026
This is a fantastic article on modern and efficient parser design: www.arshad.fyi/writings/eng...
arshad.fyi
Engineering High-Performance Parsers with Data-Oriented Design
How designing the data structure first (flat arrays of indices instead of a pointer tree) makes a parser fast and collapses memory layout, allocation, and serialization into one decision.
0322
Reposted by Marvin Hagemeister
jviide.iki.fi @jviide.iki.fi · 10/07/2026
I sometimes wonder how many "local" containerized services are accidentally exposed to the internet because of this. See also: docs.docker.com/engine/netwo...
A warning in the Docker Compose documentation (https://docs.docker.com/reference/compose-file/services/): "If you do not specify a host IP (such as 127.0.0.1), Docker binds to all interfaces (0.0.0.0), bypassing host firewall rules. This can expose the container directly to the internet if the host has a public IP address. For more information, see Port publishing and mapping."
3161
Marvin Hagemeister @marvinh.dev · 10/07/2026
I am once again exploring the modern take on this after 4 years: marvinh.dev/blog/running...
marvinh.dev
Running 1000 tests in 1s
Most code doesn't require the amount of test isolation modern test runners apply by default. If you only opt into the amount of isolations you need, you can easily run 1000 tests in 1s.
3344
Reposted by Marvin Hagemeister
TypeScript @typescriptlang.org · 08/07/2026
📣 The moment is here. 📣 TypeScript 7 is officially released! 7️⃣ devblogs.microsoft.com/typescript/a...
devblogs.microsoft.com
Announcing TypeScript 7.0 - TypeScript
Today we are proud to announce the availability of TypeScript 7, a 10x faster native port of TypeScript! Since its early days, TypeScript has promised to
15617156
Marvin Hagemeister @marvinh.dev · 02/07/2026
How to speed up vitest: De-barrel everything so that the module graph gets smaller. Saves both processing + import time. And get rid of module mocks, which prevents many de-barelling opportunities.
4606
Marvin Hagemeister @marvinh.dev · 01/07/2026
Every month I look at this TS issue and think of how much further frameworks would be if this would be addressed. github.com/microsoft/ty...
github.com
API usage patterns for complex editor extensions · Issue #2824 · microsoft/typescript-go
TypeScript 6.0 and earlier allowed loading third-party plugin code directly into TS Server, exposing language service and project system internals for proxying and patching. This was often used in ...
1230
Marvin Hagemeister @marvinh.dev · 29/06/2026
Really interesting approach to trying to make shared mutable borrowing safe in programming language design. I long for a simpler Rust so I'm always watching this space and excited about all the research happening there! verdagon.dev/blog/ante-bl...
verdagon.dev
Ante: A New Way to Blend Borrow Checking and Reference Counting
0110
Marvin Hagemeister @marvinh.dev · 23/06/2026
I've been waiting for full bundle mode since the webpack days. Excited that it's becoming a thing now in vite!
0290
Marvin Hagemeister @marvinh.dev · 23/06/2026
Some great usage of prototypes in JS! tanstack.com/blog/tanstac...
tanstack.com
How an Underrated Refactor Saved 90% Memory Usage | TanStack Blog
TanStack Table V9 can use dramatically less memory than Table V8 in large tables because row, column, cell, and header APIs now live on shared prototypes instead of every object instance.
2446
Reposted by Marvin Hagemeister
Luca Casonato 🏳️‍🌈 @lcas.dev · 17/06/2026
What's this, a new HTML proposal? Built-in localized time formatting in HTML! github.com/whatwg/html/...
<time datetime="2026-06-17T08:13:41.099Z" format="datetime">
  fallback
</time>
1942657
Reposted by Marvin Hagemeister
Haoqun Jiang @haoqun.dev · 17/06/2026
Babel 8! After all these years! What a surprise! babeljs.io/blog/2026/06...
babeljs.io
Releasing Babel 8 today: ESM-only, drop ES5 default, and a smooth migration path · Babel
Today we are releasing Babel 8. It's been 8 years since we released Babel 7. And that's not without reason.
05812
Marvin Hagemeister @marvinh.dev · 14/06/2026
Sometimes, HTML is all you need. I wish more sites were like that project described in the article.
1504
Reposted by Marvin Hagemeister
Andrew Nesbitt @andrewnez.bsky.social · 27/05/2026
A new way to explore your node modules folder: nesbitt.io/heap
A voxel world full of npm packages
1629830
Marvin Hagemeister @marvinh.dev · 26/05/2026
I feel like it has become hard to follow actual discussions on PRs with so many integrations commenting. Not sure why GitHub hasn't given them a dedicated integration rather than everyone just using comments.
4631
Marvin Hagemeister @marvinh.dev · 24/05/2026
HTML might be getting out of order streaming natively in the future. I really like this: developer.chrome.com/blog/declara...
developer.chrome.com
Declarative partial updates  |  Blog  |  Chrome for Developers
Learn about new out-of-order streaming capabilities and the renewed HTML insertion and streaming methods available for testing from Chrome 148
05713
Marvin Hagemeister @marvinh.dev · 23/05/2026
Mad respect for Jake here. As someone who is into endurance sports (cycling) a little, walking 100km is highly impressive. Takes a lot of mental strength and being very in tune with your body.
1171
Reposted by Marvin Hagemeister
jviide.iki.fi @jviide.iki.fi · 21/05/2026
Instead of doing more, let’s do better.
03611
Marvin Hagemeister @marvinh.dev · 20/05/2026
Module mocking in test runners is the devil. Prevents so many performance opportunities.
5291
Marvin Hagemeister @marvinh.dev · 17/05/2026
Speeding up the JS ecosystem OXC edition 🚀 We made both oxfmt and oxlint 50% faster on projects with >50k directories. marvinh.dev/blog/speedin...
marvinh.dev
Speeding up the JavaScript ecosystem - oxlint and oxfmt
Future versions of oxlint and oxfmt will be ~50% faster on projecs with many (>=20k) directories.
618024
Marvin Hagemeister @marvinh.dev · 17/05/2026
I always underestimate how long it takes me to write any of these blog posts.
3370
Marvin Hagemeister @marvinh.dev · 15/05/2026
Are worktrees the new branches?
3280
Reposted by Marvin Hagemeister
Jovi 🐨 @jovidecroock.com · 13/05/2026
You only notice how bad npm's 2FA token reuse is once you transition 102 repositories to use provenance with GitHub environment gating... I had a 2FA code in my clipboard that worked for a solid minute
3133
Reposted by Marvin Hagemeister
Jovi 🐨 @jovidecroock.com · 12/05/2026
New post on supply chain security for npm packages — covering the publishing workflow I push in the projects I maintain, plus the consumer side: why pnpm is a better default than npm, its native minimumReleaseAge config, and trustPolicy: no-downgrade to catch provenance regressions automatically.
jovidecroock.com
Hardening publishing &amp; consuming
A practical look at reducing blast radius in npm publishing workflows — environment-gated OIDC publishing, limiting manual access, and what consumers can do on their end.
2167
Marvin Hagemeister @marvinh.dev · 11/05/2026
I think I might have enough material to look at for a second season of "speeding up the javascript ecosystem"
3781
Reposted by Marvin Hagemeister
Jovi 🐨 @jovidecroock.com · 04/05/2026
Golfing the byte size of application is so 2025, I've pivoted into golfing tokens github.com/oxc-project/...
github.com
feat(oxlint): add agent output mode by JoviDeCroock · Pull Request #21955 · oxc-project/oxc
Summary add an oxlint agent formatter with one-line diagnostics and no summary include diagnostic help text inline when available keep the scope to explicit --format agent support only This comes...
172
Reposted by Marvin Hagemeister
Andrew Nesbitt @andrewnez.bsky.social · 02/05/2026
A GitHub for maintainers - Giving dependencies the same treatment the fork got nesbitt.io/2026/05/02/a...
nesbitt.io
A GitHub for maintainers
Giving dependencies the same treatment the fork got
55118
Reposted by Marvin Hagemeister
rich harris @rich-harris.dev · 23/04/2026
actively incentivising larger dependency graphs is bad for the ecosystem
Norman Rockwell free speech meme
2792
Reposted by Marvin Hagemeister
Dominic Gannaway @trueadm.dev · 30/04/2026
TSRX now supports Vue Vapor! Plus we've extended the runtimes support to include Preact. We will soon have an MCP server for TSRX so you can plug it into your favorite AI agent. TSRX is still alpha, so we're looking for early feedback from the Vue community tsrx.dev/getting-star...
Vue + Vite
Install the Vue compiler, its Vite plugin, the Vue runtime, and the Vapor JSX plugin:

 pnpm install @tsrx/vue @tsrx/vite-plugin-vue vue vue-jsx-vapor
Then wire both plugins into your Vite config (order matters — tsrxVue first):

 import { defineConfig } from 'vite';
 import tsrxVue from '@tsrx/vite-plugin-vue';
 import vueJsxVapor from 'vue-jsx-vapor/vite';

 export default defineConfig({
   plugins: [
     tsrxVue(),
     vueJsxVapor({
       macros: true,
       compiler: { runtimeModuleName: 'vue-jsx-vapor' },
     }),
   ],
 });
@tsrx/vite-plugin-vue compiles .tsrx modules into Vue-flavoured TSX, and vue-jsx-vapor/vite performs the downstream Vapor JSX transform. For editor typechecking, set jsxImportSource: "vue-jsx-vapor" in your tsconfig.json.
3336
Marvin Hagemeister @marvinh.dev · 29/04/2026
Such a good read on why "knowing things" still matters and tools won't catch everything. corrode.dev/blog/bugs-ru...
corrode.dev
Bugs Rust Won't Catch | corrode Rust Consulting
In April 2026, Canonical disclosed 44 CVEs in uutils, the Rust reimplementation of GNU coreutil…
0101
Reposted by Marvin Hagemeister
Jovi 🐨 @jovidecroock.com · 28/04/2026
Been mentioning it here and there but officially launching pracht, a framework-y solution for preact! www.producthunt.com/products/pra...
producthunt.com
Full-stack Preact, per route - pracht | Product Hunt
The Preact framework with explicit routing, per-route render modes (SSG/SSR/ISG/SPA), and thin deployment adapters for Cloudflare, Vercel, and Node.js.
2255
Marvin Hagemeister @marvinh.dev · 28/04/2026
I feel like that's the biggest issue in our industry and AI has just multiplied that tenfold. Software that improves people's lives is created with care. I feel like we're teaching a generation of developers that it's totally normal for stuff to be broken all the time. Not sure how to solve this.
6609
Reposted by Marvin Hagemeister
Jovi 🐨 @jovidecroock.com · 23/04/2026
And now with Preact support! Will also add support for tsrx in pracht, my little preact framework in the making github.com/JoviDeCroock...
github.com
feat(vite-plugin): opt-in support for .tsrx (TSRX/Ripple-Preact) modules by JoviDeCroock · Pull Request #136 · JoviDeCroock/pracht
Adds a tsrx option to pracht() that loads @tsrx/vite-plugin-preact (a new optional peer dep), wires .tsrx into the route/shell discovery globs, the client-only export-stripping pass, and the pages-...
1214
Marvin Hagemeister @marvinh.dev · 22/04/2026
This is great! Natural if-statements alone make this so much more readable!
3402
Reposted by Marvin Hagemeister
jviide.iki.fi @jviide.iki.fi · 10/04/2026
A gentle reminder that while `pnpm install` (or `bun install`) doesn't run the lifecycle scripts of the dependencies by default, it *does* run them from the repo's own package.json. Let's be mindful when cloning and exploring all those new & exciting projects on our local machines.
A package.json with the "prepare" script "compromise-the-supply-chain".
2256
Marvin Hagemeister @marvinh.dev · 03/04/2026
Some thoughts about AI-assisted coding and how it affects my brain. I'm more productive and more exhausted at the same time. marvinh.dev/blog/ddosing...
marvinh.dev
DDoS'ing the human brain
AI made us mass produce code at a scale we never could before. More code, more problems, same brain. Somehow I'm more productive and more exhausted at the same time.
57112
Reposted by Marvin Hagemeister
Jake Archibald @jakearchibald.com · 02/04/2026
I've been playing around with Chrome's experimental HTML-in-Canvas API (I use it to create my videos), and I wanted to see if I could make text-selection work on a curved surface by moving the underlying element around on pointermove. It works pretty well!
1939943
Reposted by Marvin Hagemeister
Jake Archibald @jakearchibald.com · 30/03/2026
There's something quite exciting happening with AVIF and progressive rendering. Some recent patches let you provide custom 'frames' as progressive passes, so you can provide e.g. smaller blurry versions of the full image to use as a progressive pass.
1125534