Roundhouse

Blog — the reference application

A blog is the quintessential Rails demo, and it's where Roundhouse proves it is correct. Small enough to support completely, broad enough to touch the framework features that make a transpiler interesting — this is the app every target is built and tested against.

Status: fully supported on all targets — compiles clean and passes its tests everywhere.

▶ Run it live Transpile it (Playground) Explore its types (IDE) Edit it live (Studio) Browse emitted output

Why the blog

It is deliberately in scope. The real-blog fixture is not hand-written to be easy to transpile — it is generated from rails new + rails generate scaffold and then edited into a coherent app, so it is recognizably what a Rails developer would produce. It exercises associations, validations, nested routes, strong parameters (params.expect), ERB partials and collection rendering, JBuilder, Turbo Streams, and Action Cable over a real WebSocket.

Why it's the oracle

Because the blog is fully supported, it can define what "correct" means for every other app. The same URL fetched from Rails and from a Roundhouse target must produce the same response — enforced three ways: Minitest model/controller tests emitted alongside the app and run in each target language; a differential compare gate that diffs each target's DOM against live Rails; and Playwright end-to-end specs for the dynamic behavior (Turbo Stream inserts, Action Cable broadcasts, validation re-renders). Those compare-* jobs gate the deploy — drift from Rails fails the build before it can ship.

Go deeper

How the fixture is built and tested — the generator script, the modernized Rails stack, and the full conformance harness · edit the Ruby and watch any target update live · read the generated output for every language · download the generator.