Ecosystem Map
This page maps active repositories, packages, and ownership boundaries in the Tsonic stack.
Compiler and user entrypoint
tsonic
tsonic owns:
- parsing, typing, validation, IR, emission, backend orchestration
- the CLI commands users run
- the workspace, project, and package model
- the compiler quality bar (
./test/scripts/run-all.sh)
Public docs: /tsonic/
Authoring packages
@tsonic/core
Language-facing types and intrinsics:
- numeric branded types such as
int,long,byte,double lang.jshelpers such asnameof,sizeof,defaultof,out,stackalloc,asinterface, andtrycast
@tsonic/globals
Shared ambient declarations used by surface and package layers.
These two packages are foundational, but they are not “ambient worlds” on their own. They support the compiler and the higher-level package model.
First-party TypeScript source packages
These are the public authored packages in the stack.
@tsonic/js
Role:
- active JavaScript ambient surface
- first-party
tsonic-source-package - canonical source for JS-style globals and receiver methods
Examples of what it provides:
consoleJSONDateMap,Set- typed arrays
- timers
JSON APIs are typed and compiler-lowered. JSON.parse<T>() and
JSON.stringify<T>() require closed payload types so generated serializers can
be rooted for NativeAOT.
Public docs: /js/
@tsonic/nodejs
Role:
- first-party source package for Node-style modules
- layered on top of
@tsonic/js - package metadata declares
node:*aliases and runtime requirements
Examples of what it provides:
node:fsnode:pathnode:httpnode:cryptonode:streamnode:netnode:tls
Broad event, stream, DNS, URL, assertion, and utility slots are represented by
the package-owned RuntimeValue union. The package does not expose any as an
unbounded runtime escape hatch.
Public docs: /nodejs/
@tsonic/express
Role:
- first-party source package for Express-style routing and middleware
- canonical package for the Express layer
- authored in TypeScript and consumed as source
Public docs: /express/
Generated CLR binding packages
These packages are generated by tsbindgen from CLR metadata.
Core families
@tsonic/dotnet@tsonic/aspnetcore@tsonic/microsoft-extensions@tsonic/efcore@tsonic/efcore-sqlite@tsonic/efcore-sqlserver@tsonic/efcore-npgsql
These are not authored source packages in the same sense as js, nodejs, and
express.
They exist to project CLR namespaces, members, overloads, extension methods, and metadata into TypeScript packages that Tsonic can consume.
CLR System.Object positions are projected as TypeScript unknown, and
value-type constraints use NonNullable<unknown>.
Public docs: /tsbindgen/
Repo ownership model
| Repo / package family | Owns | Validation bar |
|---|---|---|
tsonic |
compiler + CLI + project model | full run-all |
js |
JS surface and authored source package | package selftest + downstreams |
nodejs |
Node-style source package | package selftest + downstreams |
express |
Express-style source package | package selftest + downstreams |
tsbindgen |
generated CLR binding pipeline | generator tests + wave preflight |
dotnet / aspnetcore / microsoft-extensions / efcore* |
generated CLR binding packages | regen + downstream verification |
runtime |
NuGet runtime carriers for generated C# | runtime tests + wave preflight |
proof-is-in-the-pudding, tsumo, clickmeter, Jotster |
ecosystem consumers | downstream verification |
Downstream verification repos
These repos are part of the real quality bar, not just demos:
proof-is-in-the-puddingtsumoclickmeter- Jotster
They matter because they exercise:
- real package graphs
- real generated projects
- runtime startup and request handling
- end-to-end integration with generated bindings
Public mental model
- authored public packages are first-party TypeScript source packages
- CLR-facing packages are generated by
tsbindgen - the ecosystem is released as a verified wave, not as isolated repo islands