Interop is a build and product boundary, not a second language inside Topaz.
Keep application logic in checked .tpz modules, select the product that fits
the deployment environment, and review any surrounding host code separately.
Choose the boundary
| Need | Choose | What crosses the boundary |
|---|---|---|
| One executable for the build machine's OS and architecture | Rust Backend | A managed native product built through Cargo |
| A product for an environment with Python 3.11 or newer | Python Backend | Generated program.py with its bundled runtime |
| A browser or Worker product | WASM & Playground | A managed Web artifact and its declared ABI |
| A custom Rust, Python, or service wrapper | Host integration | Generated product plus separately owned host code |
| A decision rule that runs inside your application | Run Lispex Rules | Manifest, rules, limits, lock, typed results, and consumer evidence |
| One Lispex evaluator request | Lispex Evaluator and LIT | Canonical rule, input, limits, result, and report |
| Evidence that Lispex can exercise Topaz | Lispex Evaluator and LIT | Internal test and integration evidence, not a shipped backend |
| Source conversion involving Lena Code | Lena Code Interop | A separately maintained conversion workflow |
The installed evaluator is a closed product command, not a Topaz output target. LIT remains separate and is not a shipped Topaz backend. Lena Code is not a new Topaz syntax. These routes remain discoverable because each provides an explicit boundary.
What stays Topaz
Modules, imports, expressions, types, patterns, and primary diagnostics remain
Topaz. There is no import rust, inline Rust, Python, or JavaScript expression,
implicit ABI, automatic ownership conversion, or automatic host-exception
translation. Generated source is an artifact, not permission to place its
tokens in a .tpz file.
Verify only shared observables
Check and run the Topaz package first. Build the selected target, then run the managed product with the same declared input. Compare the observable relevant to the application—such as stdout, an exit code, an artifact field, or a file result—rather than internal object layout or generated source structure.
Treat the result as evidence scoped to that specific program, input, environment, and declared observable. Review the generated product and host integration again when the compiler or deployment target changes.
Host ownership remains explicit
A wrapper around a generated product is foreign code requiring its own dependency, ownership, error, capability, and security review. Importing a Topaz or standard module does not grant filesystem, network, process, environment, clock, or database authority. Unsupported target behavior must fail loudly instead of silently altering the checked program.
Continue with Rust Backend, Python Backend, or Lispex Evaluator and LIT.