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.
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.
- Conformance vs Comprehension — the project and its oracle