{"slug": "mir", "name": "Mir", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 3, "commenters": 7, "warners": 3, "score": 0.304, "rising": -0.98, "first": "2026-02-22", "latest": "2026-07-24", "why": "", "why_is_quote": false, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 0, "compare": 1, "warn": 3}, "spark": [0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "", "kind": "", "icon": false, "domain": null, "github_repo": "github.com/vnmakarov/mir", "official_url": "https://github.com/vnmakarov/mir", "pricing": "", "aliases": ["Mir", "MIR"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 784680384, "item_id": 49042524, "url": "https://news.ycombinator.com/item?id=49042524", "by": "derekbsnider", "date": "2026-07-24", "version": null, "stance": "recommend", "quote": "I recently switch to MIR", "excerpt": "Oh wow, interesting project... I've also been working on a \"better c\" for a few years, and while it was originally a JIT language (using jitasm), I recently switch to MIR, but since I already had my own lexer/parser/etc stack, I ended up changing it to basically lower everything into a node_t compatible AST tree and handing that off directly to c2mir, bypassing its parser. Maybe you're interested in collaborating? :)", "context": "", "use_case": "JIT compiler backend", "switched_from": "", "story": "Solod: Go can be a better C"}, {"id": 783189872, "item_id": 48949367, "url": "https://news.ycombinator.com/item?id=48949367", "by": "convivialdingo", "date": "2026-07-17", "version": null, "stance": "recommend", "quote": "Started with the excellent MIR compiler", "excerpt": "I've been toying with a better C... https://github.com/panaflexx/classyc Started with the excellent MIR compiler, and I wrote much of the class/string/json/dict, exceptions and AI made the generics,ownership tracking, and safety checks/traps. Added some go The memory model is mixed, I ended up using arenas for dictionaries and adding a full ownership checking / safety checking compiler stage. It's purely for the joy ", "context": "", "use_case": "", "switched_from": "", "story": "Solod: Go can be a better C"}, {"id": 767061616, "item_id": 47941351, "url": "https://news.ycombinator.com/item?id=47941351", "by": "nutjob2", "date": "2026-04-28", "version": null, "stance": "recommend", "quote": "Much more interesting is Mir", "excerpt": "Much more interesting is Mir: https://github.com/vnmakarov/mir It has all the tools for custom JIT including a nice C compiler.", "context": "", "use_case": "", "switched_from": "", "story": "C, Just In Time!"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 774046914, "item_id": 48377932, "url": "https://news.ycombinator.com/item?id=48377932", "by": "s3graham", "date": "2026-06-02", "version": null, "stance": "warn", "quote": "I found IR much faster and better codegen than MIR", "excerpt": "IR (https://github.com/dstogov/ir) is worth a look in this vein too. I personally went with QBE for my hobby project because of C-interop, but at least in my tests, I found IR much faster and better codegen than MIR. Neither of MIR or IR are friendly/easy though.", "context": "", "use_case": "", "switched_from": "", "story": "QBE \u2013 Compiler Back end: Version 1.3"}, {"id": 753819478, "item_id": 47113717, "url": "https://news.ycombinator.com/item?id=47113717", "by": "wolvoleo", "date": "2026-02-22", "version": null, "stance": "warn", "quote": "canonical with their Mir, snaps etc", "excerpt": "I love several things about it: - Stable OS coupled with rolling packages. I am on the previous FreeBSD version (14.3-RELEASE, while 15 is out) but I have the very latest KDE. - A ports collection where you can recompile packages whenever you're not happy with the default settings. Strict separation between packages and core OS. Everything that is from packages is in /usr/local (and this separation is also what makes", "context": "", "use_case": "", "switched_from": "", "story": "Back to FreeBSD: Part 1"}]}], "who": [], "tags": [], "use_cases": ["jit compiler backend", "compiler backend"], "compared": [{"slug": "snap", "name": "Snap", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "qbe", "name": "QBE", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 800342002, "item_id": 50021375, "url": "https://news.ycombinator.com/item?id=50021375", "by": "matthewkosarek", "date": "2026-10-09", "version": null, "stance": "neutral", "quote": "I work on Mir & Flutter", "excerpt": "Hey all! Moonswing is a largely AI-coded desktop environment for Linux. It is mostly a fun exploration, rather than a production-ready project, so use it at your own risk. I work on Mir & Flutter, and I wanted to see how far I could push these technologies to give me a modern-looking desktop environment, entirely in one process and entirely in Flutter. This was made possible now that Flutter supports multi-window, wh", "context": "works on Mir and Flutter", "use_case": "display server", "switched_from": "", "story": "Moonswing: A Linux Desktop Environment Built in Flutter"}, {"id": 760150656, "item_id": 47509416, "url": "https://news.ycombinator.com/item?id=47509416", "by": "matthewkosarek", "date": "2026-03-24", "version": null, "stance": "neutral", "quote": "A long, long time ago I implemented virtual outputs in Mir", "excerpt": "A long, long time ago I implemented virtual outputs in Mir: https://github.com/canonical/mir/pull/3056 I forget if we've added dynamic configuration for them, but I don't see why it wouldn't be a possibility of we had upstream support there :)", "context": "", "use_case": "", "switched_from": "", "story": "Creating a WebAssembly Plugin System for Window Management in Miracle"}], "threads": [{"url": "https://news.ycombinator.com/item?id=48895199", "title": "Solod: Go can be a better C", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=48373442", "title": "QBE \u2013 Compiler Back end: Version 1.3", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=50021374", "title": "Moonswing: A Linux Desktop Environment Built in Flutter", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47939105", "title": "C, Just In Time!", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47691538", "title": "What is RISC-V and why it matters to Canonical", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47508697", "title": "Creating a WebAssembly Plugin System for Window Management in Miracle", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {}, "2026-01": {}, "2026-02": {"warn": 1}, "2026-03": {}, "2026-04": {"warn": 1, "recommend": 1}, "2026-05": {}, "2026-06": {"compare": 1, "warn": 1}, "2026-07": {"recommend": 2}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 784680384, "item_id": 49042524, "url": "https://news.ycombinator.com/item?id=49042524", "by": "derekbsnider", "date": "2026-07-24", "version": null, "stance": "recommend", "quote": "I recently switch to MIR", "excerpt": "Oh wow, interesting project... I've also been working on a \"better c\" for a few years, and while it was originally a JIT language (using jitasm), I recently switch to MIR, but since I already had my own lexer/parser/etc stack, I ended up changing it to basically lower everything into a node_t compatible AST tree and handing that off directly to c2mir, bypassing its parser. Maybe you're interested in collaborating? :)", "context": "", "use_case": "JIT compiler backend", "switched_from": "", "story": "Solod: Go can be a better C"}, {"id": 783189872, "item_id": 48949367, "url": "https://news.ycombinator.com/item?id=48949367", "by": "convivialdingo", "date": "2026-07-17", "version": null, "stance": "recommend", "quote": "Started with the excellent MIR compiler", "excerpt": "I've been toying with a better C... https://github.com/panaflexx/classyc Started with the excellent MIR compiler, and I wrote much of the class/string/json/dict, exceptions and AI made the generics,ownership tracking, and safety checks/traps. Added some go The memory model is mixed, I ended up using arenas for dictionaries and adding a full ownership checking / safety checking compiler stage. It's purely for the joy ", "context": "", "use_case": "", "switched_from": "", "story": "Solod: Go can be a better C"}, {"id": 774046914, "item_id": 48377932, "url": "https://news.ycombinator.com/item?id=48377932", "by": "s3graham", "date": "2026-06-02", "version": null, "stance": "warn", "quote": "I found IR much faster and better codegen than MIR", "excerpt": "IR (https://github.com/dstogov/ir) is worth a look in this vein too. I personally went with QBE for my hobby project because of C-interop, but at least in my tests, I found IR much faster and better codegen than MIR. Neither of MIR or IR are friendly/easy though.", "context": "", "use_case": "", "switched_from": "", "story": "QBE \u2013 Compiler Back end: Version 1.3"}, {"id": 774034497, "item_id": 48377156, "url": "https://news.ycombinator.com/item?id=48377156", "by": "torginus", "date": "2026-06-02", "version": null, "stance": "compare", "quote": "QBE being a bit more friendly and well documented, with MIR making faster code", "excerpt": "I love that there are compilers beside the big 2 with a simple API, and small enough codebase, that produce decent-enough code, but damn did I make an honest effort to crack the QBE source code, and it is just impenetrable, not only because the difficulty of the domain, but the code is just arcane. It was one of the projects that made me realize what the arcane wizened sages of olden C were capable of - C is not as m", "context": "", "use_case": "compiler backend", "switched_from": "", "story": "QBE \u2013 Compiler Back end: Version 1.3"}, {"id": 767061616, "item_id": 47941351, "url": "https://news.ycombinator.com/item?id=47941351", "by": "nutjob2", "date": "2026-04-28", "version": null, "stance": "recommend", "quote": "Much more interesting is Mir", "excerpt": "Much more interesting is Mir: https://github.com/vnmakarov/mir It has all the tools for custom JIT including a nice C compiler.", "context": "", "use_case": "", "switched_from": "", "story": "C, Just In Time!"}, {"id": 763633746, "item_id": 47727109, "url": "https://news.ycombinator.com/item?id=47727109", "by": "popcornricecake", "date": "2026-04-10", "version": null, "stance": "warn", "quote": "", "excerpt": "Ubuntu Touch... I was so excited about it that I bought one of the phones with it preloaded. I even used it as my sole daily driver for months, until I learned that I was not receiving all calls made to me. Even after that I kept hoping it would keep developing so that I could pick it up again one day. But then Canonical abandoned it instead. That's when they became as good as dead to me.", "context": "", "use_case": "", "switched_from": "", "story": "What is RISC-V and why it matters to Canonical"}, {"id": 753819478, "item_id": 47113717, "url": "https://news.ycombinator.com/item?id=47113717", "by": "wolvoleo", "date": "2026-02-22", "version": null, "stance": "warn", "quote": "canonical with their Mir, snaps etc", "excerpt": "I love several things about it: - Stable OS coupled with rolling packages. I am on the previous FreeBSD version (14.3-RELEASE, while 15 is out) but I have the very latest KDE. - A ports collection where you can recompile packages whenever you're not happy with the default settings. Strict separation between packages and core OS. Everything that is from packages is in /usr/local (and this separation is also what makes", "context": "", "use_case": "", "switched_from": "", "story": "Back to FreeBSD: Part 1"}]}