ziran capabilities --json prints one JSON object describing the currently
supported output targets and shared limits. Use --target=c, go,
or zx to select one target. The command works without a project or network
access, so an editor or coding agent can query the installed compiler before
generating code. The numeric_conformance object is a stable-ID registry. Its ids cite the
numerical cases proven by numeric semantics
for C, Go, and .zx; they are described by numeric_conformance.json.
The width matrix adds 592 independently
generated boundary conversions across all 64 integer type pairs, from source
and saved IR on those three targets.
schema_version starts at 1; consumers should reject schema
versions they do not understand and ignore unknown fields within a version.
tier says how complete a target is. primary targets, C and the portable
.zx runner, carry every language feature and gate every change. The
downstream applications build through them. The secondary target, Go,
may lag behind a new feature, but must reject a program it cannot
run faithfully during checking or lowering, never emit code with a different
meaning. New language work lands on the primary targets first.
source_and_saved_ir reports that the target accepts checked source and saved
.zir inputs. parallel_execution is threads for C forward CPU regions
and serial for Go and the portable VM.
It does not promise a parallel result reduction. gpu_execution is cpu_fallback for every target: there is no
device backend. text_view_mutable_bytes reports the current observable
divergence when backing bytes are mutated after making a view: native C
borrows those bytes, while Go and .zx copy them. Checking rejects mutation
of local backing storage while a direct, field-held, aliased, or
checked-call-produced view is live. Field-sensitive checks protect the
borrowed field or array while allowing sibling record fields to change. Global
views track their backing-global origins and alias chains, and views through
local *value pointers protect their pointee and pointer aliases. Unknown
local pointer views are rejected when their backing lifetime cannot be proved.
Local copies of pointer parameters preserve their backing identity. Separate
pointer or slice parameters of the same type are possible aliases. Checked
calls include transitive parameter/global writes, and earlier text arguments
stay live while later arguments and the procedure body execute. Unknown
callbacks conservatively write reference arguments. Differently typed pointer
aliases and arbitrary host-backed aliases still need further coverage; raw
native FFI has no checked memory-effect contract.
automatic_vec_drop is true for every target: direct owned Vec locals
and parameters are released at scope exit or return, as are vectors reachable
through record fields and fixed arrays. Global storage remains shared and is
not automatically released.
text_view_local_mutation_check is true for every target: checking rejects
mutation of local backing storage while a direct, field-held, aliased, or
checked-call-produced TextView is live. Checks are field-sensitive, include
global backing origins, local *value pointer aliases, and local copies of
pointer parameters.
text_view_opaque_pointer_check reports rejection of TextView through opaque
local pointers with unproven backing lifetimes.
heap_allocation reports zero-initialized New(T) and free(pointer).
C, Go, and the portable VM are checked from source and saved IR by
tests/heap_new.sh.
Native pointers retain their native lifetime rules; this flag does not promise
automatic ownership or runtime checking of arbitrary pointer aliases.
target_preflight reports the common foreign identity/import, native callback
ABI, and Go/portable scalar-union checks available through
ziran check --target=... and builds. Go and .zx reject #c_call
procedure types with a procedures.c-call capability diagnostic before
native output is emitted. The target's lowerer and verifier still enforce
its other limits.
aggregate_vec_transfer is true: whole local aggregates, fresh aggregate
call results, and vector-bearing record-literal fields can move through
assignment, argument passing, and return, with native targets recursively
clearing every moved vector field. diagnostics_json is partial: compiler
tools, the package launcher, and formatter report ordinary argument, input,
output, allocation, and native-tool failures as schema-versioned JSON, but
arbitrary external package tools and fatal process signals can still produce
unstructured output. These are current
boundaries, not feature requests or guarantees about unlisted behavior. See
implementation status and the
owned-value contract for detail.