New post on the @ohmjs.org blog — Inside Ohm's PEG-to-Wasm compiler → ohmjs.org/blog/2026/03... v18 is now more than 50x faster for real-world grammars while using about 10% of the memory 🔥 …this post goes into the details of how it's built.
OhmJS
@ohmjs.org
A user-friendly parsing toolkit for JavaScript and TypeScript ∙ https://ohmjs.org
One more time — I'm looking for new consulting clients. Some ways I can help: ∙ Fractional tech leadership (tackling "leadership debt" in small eng orgs) ∙ Full-stack, 0 to 1 projects ∙ Language design & impl (eg with @ohmjs.org) ∙ JavaScript/TypeScript perf (🔁 appreciated)
Also I finally put together a consulting/ page, for anyone who's interested in working with me. dubroy.com/consulting/ Did I mention I still have availability this year? 😇
Whoah. Today we discovered that ohm-js is now a "high-impact" NPM package (>1M downloads/week). The mystery was: why? Turns out it's now a transitive dependency of the Vercel CLI, via pip-requirements-js, an Ohm-based package for parsing requirements.txt files: github.com/Twixes/pip-r...
Take a look if you're interested in using Ohm to compile to #Wasm. (This is the same library we use in the new Ohm v18 beta that compiles grammars to Wasm.)
We've released a new version of @wasmground/emit — the small, simple #Wasm 1.0 "assembler library" for JS/TS, which we build up piece by piece in our book. The headline feature: proper TypeScript types! Give it a spin and let us know what you think: www.npmjs.com/package/@was...
A couple big announcements for y'all — 1️⃣ We have a blog now! 2️⃣ We just published the beta version of Ohm v18: ohmjs.org/blog/ohm-v18 Give it a spin and tell us what you think!
Ohm v18 Beta | Ohm
Ohm v18 compiles grammars to WebAssembly, making parsing ~20x faster and using a fraction of the memory.
ohmjs.org
A couple big announcements for y'all — 1️⃣ We have a blog now! 2️⃣ We just published the beta version of Ohm v18: ohmjs.org/blog/ohm-v18 Give it a spin and tell us what you think!
Ohm v18 Beta | Ohm
Ohm v18 compiles grammars to WebAssembly, making parsing ~20x faster and using a fraction of the memory.
ohmjs.org
Btw, if you have a fedi account, you can also (finally) follow Ohm news over there: hachyderm.io/@ohmjs
Ohm.js (@ohmjs@hachyderm.io)
2 Posts, 0 Following, 1 Follower · A user-friendly parsing toolkit for JavaScript and TypeScript ∙ ohmjs.org
hachyderm.io
By the way, our posts are now powered by @humanwhocodes.com's fantastic crosspost package: https://github.com/human...
GitHub - humanwhocodes/crosspost: A JavaScript utility for posting across multiple social networks at once
A JavaScript utility for posting across multiple social networks at once - humanwhocodes/crosspost
github.com
Today we published v17.4.0, with one new feature (`recoverSourceOrder` in /extras) and two small fixes: https://github.com/ohmjs...
Published v17.3.0 yesterday, with a couple small improvements to the typings and a bug fix related to matching letters outside the BMP (basic multilingual plane): github.com/ohmjs/ohm/re... Last release of 2025 (hopefully 🤞)…watch for a new major release early next year!
Release Ohm v17.3.0 · ohmjs/ohm
Browser bundles: ohm.js • ohm.min.js New features [d957ac7] typings: #494 - Typescript MatchResult object incomplete [e1b8225] typings: add FailedMatchResult / SucceededMatchResult [891b6d8] feat:...
github.com
Just added an example to the Ohm repo of implementing something like Zed's SumTree. (aka "monoid-cached trees" if you want to sound clever) Full example here: github.com/ohmjs/ohm/bl...
Stumbled across it in Raph Levien's resources for learning compute shaders: notes.billmill.org/programming/... Never realized how many things (including a lot of text processing) can be expressed as scan / all-prefix-sums. Eg see "Zed Decoded: Rope & SumTree" zed.dev/blog/zed-dec...
What an amazing essay for everyone with the intention to design a programming language. Also mentioned: @ohmjs.org
Language Design Notes https://lobste.rs/s/4inlhr #plt
TIL about the CSS Custom Highlight API: developer.mozilla.org/en-US/docs/W...
Performant Syntax highlighting with CSS.highlights API and OhmJs How to generate small & performant syntax highlighting for your languages using OhmJs and the new CSS.highlights API www.youtube.com/watch?v=v3jK... Repo: github.com/marianoguerr... Demo: marianoguerra-atik.github.io/ohm-highlight/
📢 New #WasmAssembly podcast 🎙️ episode: #WebAssembly from the Ground Up with @dubroy.com and @marianoguerra.org. Learn how they're teaching #Wasm by building a compiler in JavaScript and why writing Wasm by hand is crucial! 🍿 www.youtube.com/watch?v=dRdD... 🎧 wasmassembly.libsyn.com/webassembly-...
WebAssembly from the Ground Up with Patrick Dubroy and Mariano Guerra
YouTube video by Chrome for Developers
youtube.com
Hey everyone, just FYI: After investigating, we do *not* believe that ohm-js, or any other package under the @ ohmjs namespace, is affected by the Shai-Hulud worm or any of the recent npm supply chain attacks.
Any Ohm fans who want to get a taste of low-level programming? Get 25% off the only book in the world* that will teach you WebAssembly with Ohm! (*So far.)
The summer holidays just started here in southern Germany. So, it's time for a ☀️ SUMMER SALE ☀️ — Use the code SUMMER25 for a 25% discount on the book until Sept 15: wasmgroundup.com
First new release of Ohm in…eh *pulls at shirt collar* quite a while. v17.2.1 is here…one small l'il feature and a teeny weeny fix: github.com/ohmjs/ohm/re... Also pushed v2.0.1 of @ohm-js/cli.
Release Ohm v17.2.1 · ohmjs/ohm
Browser bundles: ohm.js • ohm.min.js New features: [456b540]: asIteration() is now support for iter nodes (returns the node itself) Fixes [59b17ec]: Expose Matcher’s grammar prop in TS types
github.com
Pretty pleased with the ergonomics of the Wasm (macro-)assembler in @ohmjs.org. It's built on the low-level assembler lib we created for @wasmgroundup.com, but has some nice higher-level features, including labeled breaks. I'm particularly proud of the idea to put the block label at the end. 😊
You know about the Ohm Discord, right? Great place to ask questions, get feedback on your grammars, and hang out with the some of the friendliest folks out there. discord.gg/KwxY5gegRQ
Join the Ohm Land Discord Server!
Check out the Ohm Land community on Discord - hang out with 169 other members and enjoy free voice and text chat.
discord.gg
Thanks to a generous contribution from Shopify, we've secured enough funding to make further progress towards production-ready Ohm+WebAssembly support! github.com/ohmjs/ohm/i... Thank you Shopify for funding open source. ❤️
Production-ready WebAssembly support · Issue #511 · ohmjs/ohm
#503 covers the initial investigation into WebAssembly. Due to funding limitations, that work was scoped to a 6-week effort. This issue is about the next phase: productionizing the current prototyp...
github.com
A few different Ink & Switch projects have used Ohm…here's the latest one. From @alexwarth.bsky.social (co-creator of Ohm) and @geoffreylitt.com (who made Wildcard, one of our all-time favourite Ohm-powered projects)
What if a spreadsheet cell could hold multiple values at the same time? That's the idea behind Ambsheets, a project I've been working on w/ @geoffreylitt.com at @inkandswitch.com. It's a new spreadsheet that makes it easier for you to explore many possibilities simultaneously. 1/2
Ever wanted to use Ohm from another language? Go, Python, Rust? See the brand new, experimental support for compiling Ohm grammars to Wasm: github.com/ohmjs/ohm/d... It wasn't the main goal, but it also appears to be a perf win — parsing is about 10x faster on real-world grammars (e.g. ES5).
One of the biggest production users of Ohm that we know of is Shopify. They used Ohm in the Liquid HTML parser that powers their prettier plugin & VS Code language server — as well as the Shopify Admin's CodeMirror-based editor. www.npmjs.com/package/@sh...
npm: @shopify/liquid-html-parser
Liquid HTML parser by Shopify. Latest version: 2.8.2, last published: 2 months ago. Start using @shopify/liquid-html-parser in your project by running `npm i @shopify/liquid-html-parser`. There are 8 other projects in the npm registry using @shopify/liquid-html-parser.
npmjs.com
Making progress on the Wasm implementation — and encountering some interesting challenges!
Ok ok this may not make a lot of sense but I am *extremely* happy to have gotten this code working!! So I feel compelled to share. (And yes, I wrote my own macro-assembler for #wasm in JavaScript. That's how much fun I'm having, and yes I mean that sincerely.) 1/x
Made some good progress on this! Follow along on the issue if you're interested: github.com/ohmjs/ohm/is...
WebAssembly support · Issue #503 · ohmjs/ohm
Over the years we've had a few requests for a way to use Ohm from other languages — e.g. #348 mentions Dart, Rust, and Swift. Go and Python have also come up in private discussions. This proposal d...
github.com
Excited to kick off some new Ohm work next week — adding the ability to compile an Ohm grammar to WebAssembly. See github.com/ohmjs/ohm/i... if you're interested, and feel free to comment if you have opinions!
Hey folks, we had another Cloudflare ⇆ GitHub SSL issue which meant the web site was down for about an hour. Thanks for @onlineornot.com we found out pretty quickly, and it should be fixed now! And we'll be getting rid of Cloudflare so hopefully we'll be rid of this problem for good 🤞
Wondering if the book is *practical*? I'm currently using the helper library extracted from the book for a new @ohmjs.org feature which will allow you to compile Ohm grammars to Wasm. This will make it possible to use Ohm grammars from Go, Python, etc. Details here 👉 github.com/ohmjs/ohm/is...
btw what I'm using here is the "assembler library" that we construct bit by bit in @wasmgroundup.com. It's also available as a standalone NPM package: www.npmjs.com/package/@was... There's not yet much documentation (outside of the book), but we'll work on that soon!