Problem
docs/tdbin.html instructs consumers to depend on the runtime like this:
[dependencies]
tdbin = { path = "../typeDiagram/crates/tdbin" }
A relative path dependency into a sibling checkout is not a distribution channel. It cannot be used by any repository that:
- builds in CI containers that only clone the consumer repo,
- cross-compiles release artifacts (our release job builds 6 target triples),
- publishes its own crates, or
- vendors dependencies.
tdbin is not on crates.io:
$ curl -s https://crates.io/api/v1/crates/tdbin
{"errors":[{"detail":"crate `tdbin` does not exist"}]}
$ curl -s 'https://crates.io/api/v1/crates?q=tdbin' # → []
$ curl -s 'https://crates.io/api/v1/crates?q=typediagram' # → []
Meanwhile typediagram encode emits code that references it unconditionally:
impl tdbin::Struct for CacheStats {
const DATA_WORDS: u16 = 2;
const PTR_WORDS: u16 = 0;
const LAYOUT_HASH: u64 = 0x71f0_bb61_837c_895a;
fn write_struct(&self, w: &mut tdbin::Writer, at: usize) -> Result<(), tdbin::EncodeError> { … }
fn read_struct(r: &tdbin::Reader<'_>, at: usize) -> Result<Self, tdbin::DecodeError> { … }
}
So the generator's output does not compile anywhere outside the typeDiagram monorepo. That makes tdbin unadoptable today, regardless of how good the format is.
Ask
- Publish
tdbin to crates.io with a real semver line and a documented MSRV.
- Pin the relationship between the CLI version and the runtime version. Generated code already embeds
LAYOUT_HASH; it should also be checkable against a runtime version so a typediagram CLI bump cannot silently pair with an incompatible runtime.
- Replace the
path = "../typeDiagram/crates/tdbin" snippet in docs/tdbin.html with the registry form.
- State the crate's feature flags (
std, alloc, packed framing, columnar layout major 2) in the docs, since consumers building for constrained targets need to know what is optional.
Context — why we care
Deslop (deslop-lsp, deslop-mcp, the VS Code extension, the JetBrains plugin) generates all of its wire models from a single .td schema and currently ships them as newline-delimited JSON over a private loopback IPC channel. One live report in our own repo is 797 KB / 712 clusters / 1688 occurrences across 475 files, and it is re-serialised and re-parsed on every incremental generation. tdbin is exactly the right answer for that channel. We cannot start until the runtime is installable.
Problem
docs/tdbin.htmlinstructs consumers to depend on the runtime like this:A relative path dependency into a sibling checkout is not a distribution channel. It cannot be used by any repository that:
tdbinis not on crates.io:Meanwhile
typediagram encodeemits code that references it unconditionally:So the generator's output does not compile anywhere outside the typeDiagram monorepo. That makes tdbin unadoptable today, regardless of how good the format is.
Ask
tdbinto crates.io with a real semver line and a documented MSRV.LAYOUT_HASH; it should also be checkable against a runtime version so atypediagramCLI bump cannot silently pair with an incompatible runtime.path = "../typeDiagram/crates/tdbin"snippet indocs/tdbin.htmlwith the registry form.std,alloc, packed framing, columnar layout major 2) in the docs, since consumers building for constrained targets need to know what is optional.Context — why we care
Deslop (
deslop-lsp,deslop-mcp, the VS Code extension, the JetBrains plugin) generates all of its wire models from a single.tdschema and currently ships them as newline-delimited JSON over a private loopback IPC channel. One live report in our own repo is 797 KB / 712 clusters / 1688 occurrences across 475 files, and it is re-serialised and re-parsed on every incremental generation. tdbin is exactly the right answer for that channel. We cannot start until the runtime is installable.