Show HN: Cj–tiny no-deps JIT in C for x86-64 and ARM64
Show HN (score: 8)Description
About 7 years ago, I had this idea to write a JIT with an autogenerated backend for x86 based on the ISA specs. I sketched something out and then just kinda let it sit. I picked it up again a few weeks ago and made a complete-ish backend for both x86 and ARM64. It has no dependencies, the backends are completely autogenerated (by horrible, horrible JS scripts), and I built a small abstraciton layer for things like functions prologues etc.
It’s super duper early and will probably break on your machine, but it’s good enough to compile some cool examples (look at the examples directory: https://github.com/hellerve-pl-experiments/cj/tree/master/ex..., my personal favorite is the minimal language implementation: https://github.com/hellerve-pl-experiments/cj/blob/master/ex...).
It doesn’t have anything except basically a fancy JIT assembler with some helpers as of yet. No register allocator, a lot of ABI details will still have to be figured out manually (though of course feel free to add anything to the abstraction layer that’s generally useful and submit a PR!).
I honestly don’t know where I’m going with this next. I kind of stumbled into the project, and am not sure whether I’ll consider it as “exercise completed” or whether I should pursue it more. Time will tell.
Feedback, questions, and bug reports very welcome—especially on the codegen helpers, additional examples or cool things you come up with, or backend rough edges.
P.S.: I also wrote a small announcement blog post on it that you can find here (https://blog.veitheller.de/cj:_Making_a_minimal,_complete_JI...), but it honestly doesn’t add all that much interesting info that you can’t find in the repo.
More from Show
Show HN: ccrider - Search and Resume Your Claude Code Sessions – TUI / MCP / CLI
Show HN: ccrider - Search and Resume Your Claude Code Sessions – TUI / MCP / CLI I built a tool that stores your full Claude Code history to let you easily find and resume sessions. It has TUI, CLI and MCP interfaces. It's a single Go binary, and the session history is synced to SQLite each time you use it.<p>Default mode is the TUI with a session browser and full-text search. Once a session is selected you can browse and search within it, resume it or export to markdown.<p>The MCP server provides tools to let Claude search back through the session for pre-compact context or pull from prior sessions. I use this constantly.<p>I've seen elaborate continuity systems to give Claude Code access to history but this simple approach has been very effective.<p>Installation:<p>macOS: brew install neilberkman/tap/ccrider<p>Linux/other: git clone <a href="https://github.com/neilberkman/ccrider" rel="nofollow">https://github.com/neilberkman/ccrider</a> && cd ccrider && go build<p>MCP server: claude mcp add --scope user ccrider $(which ccrider) serve-mcp<p>Source: <a href="https://github.com/neilberkman/ccrider" rel="nofollow">https://github.com/neilberkman/ccrider</a>
Show HN: OSS sustain guard – Sustainability signals for OSS dependencies
Show HN: OSS sustain guard – Sustainability signals for OSS dependencies Hi HN, I made OSS Sustain Guard.<p>After every high-profile OSS incident, I wonder about the packages I rely on right now. I can skim issues/PRs and activity on GitHub, but that doesn’t scale when you have tens or hundreds of dependencies. I built this to surface sustainability signals (maintainer redundancy, activity trends, funding links, etc.) and create awareness. It’s meant to start a respectful conversation, not to judge projects. These are signals, not truth; everything is inferred from public data (internal mirrors/private work won’t show up).<p>Quick start: pip install oss-sustain-guard export GITHUB_TOKEN=... os4g check<p>It uses GitHub GraphQL with local caching (no telemetry; token not uploaded/stored), and supports multiple ecosystems (Python/JS/Rust/Go/Java/etc.).<p>Repo: <a href="https://github.com/onukura/oss-sustain-guard" rel="nofollow">https://github.com/onukura/oss-sustain-guard</a><p>I’d love feedback on metric choices/thresholds and wording that stays respectful. If you have examples where these signals break down, please share.
Show HN: Open database of link metadata for large-scale analysis
Show HN: Open database of link metadata for large-scale analysis
Show HN: TinyPDF – 3KB PDF library (70x smaller than jsPDF)
Show HN: TinyPDF – 3KB PDF library (70x smaller than jsPDF) I needed to generate invoices in a Node.js app. jsPDF is 229KB. I only needed text, rectangles, lines, and JPEG images.<p><pre><code> So I wrote tinypdf: <400 lines of TypeScript, zero dependencies, 3.3KB minified+gzipped. What it does: - Text (Helvetica, colors, alignment) - Rectangles and lines - JPEG images - Multiple pages, custom sizes What it doesn't do: - Custom fonts, PNG/SVG, forms, encryption, HTML-to-PDF That's it. The 95% use case for invoices, receipts, reports, tickets, and labels. GitHub: https://github.com/Lulzx/tinypdf npm: npm install tinypdf</code></pre>
No other tools from this source yet.