Browse documentation
The supported Rust profile
Identify the admitted language surface, its safety constraints and the meaning of a refusal.
The profile defines the Rust syntax, types and operations admitted by an execution route. Within the supported surface, Rust meaning is preserved under the documented configuration. A program accepted by ordinary Rust is not necessarily admitted by Septa.
Read the surface by route
The unit/application surface and the original-library graph surface have separately enumerated constructs. A feature supported by one route should not be assumed to be supported by every other route.
| Status | Meaning |
|---|---|
| Supported | An enumerated construct has a stated compatibility contract and corresponding evidence |
| Refused | An enumerated invalid or unsupported form receives a located diagnostic |
| Experimental | Acceptance outside the enumerated stable surface carries no stable compatibility promise |
A successful check establishes acceptance for the inputs checked. It does not broaden the documented stable surface.
Core vocabulary
The admitted surfaces include defined subsets of Rust’s structs, enums, scalar values, pattern matching, helpers, ownership and borrowing. Collections, iteration, associated functions and control-flow forms have route-specific limits.
Framework attributes such as #[effectful], #[durable_server], #[cast] and #[call] connect supported source to the runtime model. Their presence does not make an otherwise unsupported Rust construct valid.
Arithmetic
The core uses checked integer operations and exact decimals. Floating-point values and operations are refused in the managed profile. Where floating point is required, use an explicit integration boundary and a defined result contract.
Range, scale and rounding remain part of the application’s policy. Prefer an explicit checked outcome when exhaustion is a meaningful business condition.
Values across durable boundaries
Saved state and values held across supported suspension points must meet the runtime’s representation and size rules. Bounds are part of the contract, not merely performance hints.
For example, a String field in durable-server state declares a capacity with #[effectful::cap(N)]. That bound counts Unicode scalar values. It must not be confused with the byte count of ordinary Rust string .len(). The supported helper and its stability status depend on the profile route and version.
Libraries and native code
Original-library graphs preserve source owners and exact dependency identities within their manifest and language subset. Installing a package does not broaden the compiler’s admitted Rust surface.
Code requiring unsupported constructs, ambient I/O or platform APIs belongs in a supported native integration route. Importing an arbitrary Cargo crate into the core is not an escape from the profile.
Read a refusal
A located diagnostic identifies the code, source position, refused construct and suggested remedy. Use the actual diagnostic code with:
effectful explain <diagnostic-code> --format json
This is command syntax: replace the angle-bracket placeholder with the reported code. Have the agent inspect the remedy and the surrounding contract rather than repeatedly rewriting source until a check happens to pass.
For operational commands and output forms, use the CLI reference.
Build software you can reason about.