#Ranvier is a Typed Decision Engine

Version: 0.33.0 Updated: 2026-03-15 Applies to: ranvier (facade), ranvier-core, ranvier-runtime Category: Philosophy & Architecture


It is not a web framework. It is a structural layer that keeps execution explicit, inspectable, and safe to refactor. Your Rust code becomes a circuit. Ranvier turns on the lights.

#Core Principles

Principle Description
Execution is explicit Axon chains describe the exact order of decisions. No hidden middleware and no implicit control flow.
Structure is inspectable Schematic captures nodes and edges without executing the runtime. It is the artifact for diff, validation, and visualization.
Control flow is data Outcome models branch, jump, emit, and fault as explicit results. You can audit and replay decisions without guessing.

#The Contract

  • Core stays protocol-agnostic. HTTP lives in the adapter layer.
  • Schematic never executes runtime logic. It is read/validate/visualize only.
  • Flat API is allowed, but it must not hide complexity. We isolate it.

#Resources Stay Explicit

Ranvier does not hide state behind global middleware. Shared resources live in a typed Bus or an explicit resource bundle, and every transition chooses when to read them.

  • Bus is type-indexed and opt-in. No implicit injection.
  • Resources are wired at ingress, not magically discovered at runtime.
  • Capability rules can be layered without changing core contracts.

#Ingress / Egress Boundaries

  • Ingress adapts protocol requests into the initial state.
  • Axon executes the decision flow with typed transitions.
  • Egress maps Outcomes back into protocol responses.

#Schematic Diff & Validation

Schematic is a static artifact. You can diff and validate circuits in CI before runtime, without executing the system.


#Trust & LLM Boundaries

AI can propose structure, but it does not mutate runtime logic. Every change remains explicit, reviewable, and validated against the Schematic.


#Quick Example

use ranvier::prelude::*;

let axon = Axon::simple::<anyhow::Error>("Hello")
    .then(Hello);

Ranvier::http()
    .bind("127.0.0.1:3000")
    .route("/", axon)
    .run(())
    .await?;

If you are looking for a batteries-included framework, Ranvier is not it. If you want your runtime logic to remain visible and verifiable, you are in the right place.


#Next Steps

  • Tutorial โ€” First run
  • Philosophy โ€” Opinionated Core, Flexible Edges
  • Design Principles โ€” Architecture Decision Records