{"slug": "ohm", "name": "Ohm", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 3, "commenters": 9, "warners": 2, "score": 1.846, "rising": -0.98, "first": "2025-11-15", "latest": "2026-03-30", "why": "used Ohm-js [1] which I highly recommend if you want to parse a custom language in Javascript or TypeScript", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 4, "compare": 1, "warn": 2}, "spark": [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "used Ohm-js [1] which I highly recommend if you want to parse a custom language in Javascript or TypeScript", "kind": "", "icon": true, "domain": "ohmjs.org", "github_repo": null, "official_url": "https://ohmjs.org", "pricing": "", "aliases": ["Ohm", "ohmjs", "ohm.js", "Ohm-js"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 761130000, "item_id": 47570625, "url": "https://news.ycombinator.com/item?id=47570625", "by": "pdubroy", "date": "2026-03-29", "stance": "recommend", "quote": "Here are some awesome things people have built using Ohm", "excerpt": "From https://ohmjs.org \u2014 Here are some awesome things people have built using Ohm: - Shopify's theme-tools (https://github.com/Shopify/theme-tools/), used in their online code editor and the official VS code extension. - Seymour (https://github.com/harc/seymour), a live programming environment for the classroom. - Shadama (https://tinlizzie.org/~ohshima/shadama2/live2017/), a particle simulation language designed for", "context": "", "use_case": "", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761113232, "item_id": 47569577, "url": "https://news.ycombinator.com/item?id=47569577", "by": "egonschiele", "date": "2026-03-29", "stance": "recommend", "quote": "Ohm looks slick. The online editor is nice too", "excerpt": "I have been very curious to try Ohm. I'm currently using a hand-rolled parser combinator library, but Ohm looks slick. The online editor is nice too https://ohmjs.org/editor/", "context": "", "use_case": "Parser grammars", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761088896, "item_id": 47568056, "url": "https://news.ycombinator.com/item?id=47568056", "by": "joshmarinacci", "date": "2026-03-29", "stance": "recommend", "quote": "it\u2019s the best way to build parsers I\u2019ve ever seen", "excerpt": "I\u2019ve been following the Ohm project for years and it\u2019s the best way to build parsers I\u2019ve ever seen. I\u2019ve used it to parse many program languages and even markdown. I\u2019m happy to see it get even faster. https://joshondesign.com/2021/07/16/ohm_markdown_parser", "context": "", "use_case": "Building parsers", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 759322960, "item_id": 47457685, "url": "https://news.ycombinator.com/item?id=47457685", "by": "fouronnes3", "date": "2026-03-20", "stance": "recommend", "quote": "used Ohm-js [1] which I highly recommend if you want to parse a custom language in Javascript or TypeScript", "excerpt": "Very cool article! I also implemented a spreadsheet last year [0] in pure TypeScript, with the fun twist that formulas also update backwards. While the backwards root finding algorithm was challenging, I also found it incredibly humbling to discover how much complexity there is in the UX of the simple spreadsheet interface. Handling selection states, reactive updates, detecting cycles of dependency and gracefully rec", "context": "", "use_case": "parsing spreadsheet formulas", "switched_from": "", "story": "VisiCalc Reconstructed"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 761245408, "item_id": 47577838, "url": "https://news.ycombinator.com/item?id=47577838", "by": "Trung0246", "date": "2026-03-30", "stance": "warn", "quote": "it still unable to handle to context sensitive language which is a deal breaker for me", "excerpt": "Unfortunately it still unable to handle to context sensitive language which is a deal breaker for me (like C++ raw string as an example). https://github.com/ohmjs/ohm/issues/158", "context": "", "use_case": "", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 745395874, "item_id": 46587242, "url": "https://news.ycombinator.com/item?id=46587242", "by": "jbergstroem", "date": "2026-01-12", "stance": "warn", "quote": "As I started benchmarking I realized how slow it was", "excerpt": "I coincidentally worked on something similar but I kept closer to the SQL standard. It grew out of business cases where you don't have strongly typed data to act on. I more or less adopted the syntax from dumbql (https://github.com/tomakado/dumbql) and started off with a peg parser using ohm.js. As I started benchmarking I realized how slow it was and started looking for \"fast paths\" using regex. I ultimately resorte", "context": "", "use_case": "", "switched_from": "", "story": "Elo \u2013 A data expression language which compiles to JavaScript, Ruby, and SQL"}]}], "who": [], "tags": [], "use_cases": ["parser grammars", "peg parsing", "building parsers", "parsing spreadsheet formulas"], "compared": [{"slug": "claude", "name": "Claude", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 734994192, "item_id": 45937137, "url": "https://news.ycombinator.com/item?id=45937137", "by": "pdubroy", "date": "2025-11-15", "stance": "recommend", "quote": "Ohm is a user-friendly parsing toolkit for JavaScript/TypeScript.", "excerpt": "Hi HN! I'm the main author of the Ohm Editor, and co-creator and primary maintainer of Ohm itself. Ohm is a user-friendly parsing toolkit for JavaScript/TypeScript. You can find out more at https://ohmjs.org. Anyone interested in the editor might like to check out a blog post I wrote about it a few years ago called \"Visualizing Packrat Parsing\" (https://dubroy.com/blog/visualizing-packrat-parsing/) Some people also m", "context": "Ohm co-creator and maintainer", "use_case": "parsing toolkit", "switched_from": "", "story": "Ohm Editor"}], "threads": [{"url": "https://news.ycombinator.com/item?id=47539165", "title": "Ohm's Peg-to-WASM Compiler", "mentions": 7}, {"url": "https://news.ycombinator.com/item?id=46525389", "title": "Elo \u2013 A data expression language which compiles to JavaScript, Ruby, and SQL", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=45935398", "title": "Ohm Editor", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=47410871", "title": "VisiCalc Reconstructed", "mentions": 1}], "sentiment_by_month": {"2025-11": {"neutral": 1}, "2025-12": {}, "2026-01": {"neutral": 1, "warn": 1}, "2026-02": {}, "2026-03": {"recommend": 3, "compare": 1, "neutral": 2, "warn": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "quotes": [{"id": 761245408, "item_id": 47577838, "url": "https://news.ycombinator.com/item?id=47577838", "by": "Trung0246", "date": "2026-03-30", "stance": "warn", "quote": "it still unable to handle to context sensitive language which is a deal breaker for me", "excerpt": "Unfortunately it still unable to handle to context sensitive language which is a deal breaker for me (like C++ raw string as an example). https://github.com/ohmjs/ohm/issues/158", "context": "", "use_case": "", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761130000, "item_id": 47570625, "url": "https://news.ycombinator.com/item?id=47570625", "by": "pdubroy", "date": "2026-03-29", "stance": "recommend", "quote": "Here are some awesome things people have built using Ohm", "excerpt": "From https://ohmjs.org \u2014 Here are some awesome things people have built using Ohm: - Shopify's theme-tools (https://github.com/Shopify/theme-tools/), used in their online code editor and the official VS code extension. - Seymour (https://github.com/harc/seymour), a live programming environment for the classroom. - Shadama (https://tinlizzie.org/~ohshima/shadama2/live2017/), a particle simulation language designed for", "context": "", "use_case": "", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761113232, "item_id": 47569577, "url": "https://news.ycombinator.com/item?id=47569577", "by": "egonschiele", "date": "2026-03-29", "stance": "recommend", "quote": "Ohm looks slick. The online editor is nice too", "excerpt": "I have been very curious to try Ohm. I'm currently using a hand-rolled parser combinator library, but Ohm looks slick. The online editor is nice too https://ohmjs.org/editor/", "context": "", "use_case": "Parser grammars", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761112145, "item_id": 47569509, "url": "https://news.ycombinator.com/item?id=47569509", "by": "kristianp", "date": "2026-03-29", "stance": "neutral", "quote": "The precursor to Ohm, Ometa", "excerpt": "The precursor to Ohm, Ometa [1,2] was created at the Viewpoints Research Institute some more papers at [3]. [1] https://en.wikipedia.org/wiki/OMeta [2] https://tinlizzie.org/VPRIPapers/tr2008003_experimenting.pdf [3] https://tinlizzie.org/IA/index.php/Papers_from_Viewpoints_Research_Institute", "context": "", "use_case": "", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761105232, "item_id": 47569077, "url": "https://news.ycombinator.com/item?id=47569077", "by": "wslh", "date": "2026-03-29", "stance": "neutral", "quote": "You can also check rhe examples folder", "excerpt": "You can also check rhe examples folder: https://github.com/ohmjs/ohm/tree/main/examples", "context": "", "use_case": "PEG parsing", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761098544, "item_id": 47568659, "url": "https://news.ycombinator.com/item?id=47568659", "by": "ogogmad", "date": "2026-03-29", "stance": "compare", "quote": "", "excerpt": "I had the impression that PEG and Earley/GLR all fully solved the parsing problem, but in different ways. But then recently, I found this guy's blog: https://www.oilshell.org/blog/tags.html?tag=parsing#parsing Now I don't know what to think. The author's got a ton more experience than me. It seems there's a big enough market out there for people wanting non-ambiguity proofs and linear running-time proofs. Then again,", "context": "", "use_case": "", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 761088896, "item_id": 47568056, "url": "https://news.ycombinator.com/item?id=47568056", "by": "joshmarinacci", "date": "2026-03-29", "stance": "recommend", "quote": "it\u2019s the best way to build parsers I\u2019ve ever seen", "excerpt": "I\u2019ve been following the Ohm project for years and it\u2019s the best way to build parsers I\u2019ve ever seen. I\u2019ve used it to parse many program languages and even markdown. I\u2019m happy to see it get even faster. https://joshondesign.com/2021/07/16/ohm_markdown_parser", "context": "", "use_case": "Building parsers", "switched_from": "", "story": "Ohm's Peg-to-WASM Compiler"}, {"id": 759322960, "item_id": 47457685, "url": "https://news.ycombinator.com/item?id=47457685", "by": "fouronnes3", "date": "2026-03-20", "stance": "recommend", "quote": "used Ohm-js [1] which I highly recommend if you want to parse a custom language in Javascript or TypeScript", "excerpt": "Very cool article! I also implemented a spreadsheet last year [0] in pure TypeScript, with the fun twist that formulas also update backwards. While the backwards root finding algorithm was challenging, I also found it incredibly humbling to discover how much complexity there is in the UX of the simple spreadsheet interface. Handling selection states, reactive updates, detecting cycles of dependency and gracefully rec", "context": "", "use_case": "parsing spreadsheet formulas", "switched_from": "", "story": "VisiCalc Reconstructed"}, {"id": 745395874, "item_id": 46587242, "url": "https://news.ycombinator.com/item?id=46587242", "by": "jbergstroem", "date": "2026-01-12", "stance": "warn", "quote": "As I started benchmarking I realized how slow it was", "excerpt": "I coincidentally worked on something similar but I kept closer to the SQL standard. It grew out of business cases where you don't have strongly typed data to act on. I more or less adopted the syntax from dumbql (https://github.com/tomakado/dumbql) and started off with a peg parser using ohm.js. As I started benchmarking I realized how slow it was and started looking for \"fast paths\" using regex. I ultimately resorte", "context": "", "use_case": "", "switched_from": "", "story": "Elo \u2013 A data expression language which compiles to JavaScript, Ruby, and SQL"}, {"id": 745330722, "item_id": 46583170, "url": "https://news.ycombinator.com/item?id=46583170", "by": "egonschiele", "date": "2026-01-11", "stance": "neutral", "quote": "have been eyeing ohmjs", "excerpt": "Maybe the most incredible part \u2013 did Claude write a recursive descent parser from scratch for this? https://github.com/enspirit/elo/blob/9f07fefcdf65c169089f123a2c0b684131b53dd7/src/parser.ts Not that it's super complex, but I'm surprised it didn't pick up an npm package. I wrote tarsec[1] and have been eyeing ohmjs[2]. And of course nearley is a classic. [1] https://github.com/egonSchiele/tarsec [2] https://ohmjs.or", "context": "", "use_case": "", "switched_from": "", "story": "Elo \u2013 A data expression language which compiles to JavaScript, Ruby, and SQL"}, {"id": 734986656, "item_id": 45936666, "url": "https://news.ycombinator.com/item?id=45936666", "by": "tomtom1337", "date": "2025-11-15", "stance": "neutral", "quote": "I\u2019m looking at the math example", "excerpt": "Could you provide a bit more context here? I\u2019m looking at the math example (https://github.com/ohmjs/ohm/blob/main/examples/math/index.html) and would like to learn a bit more.", "context": "", "use_case": "", "switched_from": "", "story": "Ohm Editor"}]}