Define shared models once
Describe the shape of your data a single time, then generate code for multiple runtimes instead of retyping the same model definitions everywhere.
CCL is a small language for describing data models that can be generated into code for multiple programming languages. It is built for teams that want one clear source of truth instead of duplicated structs, classes, and serialization glue.
The quickest question many people have is whether their language is stable yet. This list shows which generators have full codegen now, which ones are actively being built, and which ones are still in planning.
Stable target for C# projects.
Full codegen supported.
Most complete non-Go target right now, including extra generator features.
Full codegen supported.
Stable target for current CCL workflows.
Full codegen supported.
Stable target for JavaScript projects.
Full codegen supported.
Stable target for Python projects.
Full codegen supported.
Stable target for TypeScript projects.
Full codegen supported.
Generator work is in progress.
Codegen is under active development.
Generator work is in progress.
Codegen is under active development.
Tracked as a future target.
No generator support yet.
Tracked as a future target.
No generator support yet.
Tracked as a future target.
No generator support yet.
Open the language pages to see codegen status for Go, GDScript, C#, Python, JavaScript, TypeScript, C, C++, Rust, Zig, and Lua.
CCL is for situations where the data contract matters more than language-specific syntax. If your project shares models across multiple targets, the goal is to describe those models once and let generators produce the repetitive parts.
Describe the shape of your data a single time, then generate code for multiple runtimes instead of retyping the same model definitions everywhere.
CCL focuses on model definitions and code generation. It is meant to be easy to scan, easy to review, and hard to overcomplicate.
Attributes make serialization choices visible at the language level instead of hiding them in generator-specific side channels.
The best use case is shared model definitions that need to stay aligned across different languages or runtimes. If that is not your problem, you can usually tell quickly and move on without getting lost in the docs.
The landing page should help a new visitor answer “is this relevant to me?” immediately. After that, the docs split into short paths instead of one giant wall of technical detail.
Go to Docs for the project overview, installation, and the language basics.
Use CLI reference and attribute docs when you need specifics without rereading the introductory material.
Read the roadmap for completed milestones, active work, and planned language and input-format support.
If you are evaluating CCL, read the language overview and the getting-started page before diving into generators or internals.