If you build a full-stack product with a .NET backend and a TypeScript frontend, you have almost certainly described the same domain twice. The User entity, the Order status enum, the small validation rule, the JSON contract: written once in C#, then mirrored by hand in TypeScript. The mirror drifts. Someone adds a field on one side and forgets the other. A bug ships.
I got tired of maintaining that second copy, so I built Metano.
Metano is a Roslyn-powered transpiler. You keep your domain in C#, as the single source of truth, and Metano generates real TypeScript from it. Not declaration stubs, not just type shapes: actual behavior. Records, methods, operators, guards, LINQ, async, exceptions, and JSON serializer contracts come across as idiomatic TypeScript that fits the tooling you already use.
Why not just use what already exists
A few approaches get close, and each one stops short of what I wanted:







