ALPHAThe Norn core is open source

Run your business onrules that can't break

Any person or any model does the work, under the same permissions and laws.

Open sourceApache-2.0 on GitHub
Self-hostableRuns on your own servers
Checked500+ checks before go-live

    Every action, checked

    People and models act on the same records, and every step passes the laws first.

    By people498
    By models786
    1,2841,284

    People and models, side by side

    See who did what, and hand work back and forth. A person can always take over.

    • order.confirmed2s ago77fa…e0d2
    • check.passed9s agoe0d2…41b7
    • order.drafted14s ago41b7…9c1e
    • message.received21s ago9c1e…a03f
    Chain verified8,816 receipts

    A receipt for every write

    Every change leaves a tamper-evident receipt you can export and verify.

    01Core

    One object, everything about itone typed definition, checked as a whole

    Everything about a thing, its data, links, states, actions, rules and who may do what, is declared in one typed definition, your ontology, and checked as a whole.

    OrderSO-1048object type
    CustomerDelta Tools
    TotalEGP 132,000.00
    Stateconfirmed
    Data
    totalMoney · EGP132,000.00
    linesLine[ ]3
    customer→ CustomerDelta Tools
    CustomerOrderLineLineLine1many
    draftconfirmedshippedinvoiced
    Only an action can move it. Invoiced orders are frozen.
    toolorder.shipMCP
    input{ "order": "SO-1048" }
    movesconfirmed → shipped
    asWarehouse
    Salesconfirmallowed
    Warehouseshipallowed
    Agent, as Salesrefunddenied
    total = Σ lines.amountholds
    132,000.00 = 98,000.00 + 27,600.00 + 6,400.00
    Checked before every write. A change that breaks it is refused.
    order.confirmed09:3177fa…
    order.drafted09:1241b7…
    message.received09:129c1e…
    Open orders this week18
    Every number opens to the records it was added up from.
    One typed definition, checked as a whole

    02Connect

    Connected in one modelevery system in, any actor out

    Connect the systems and tools you already run. Their records land in one typed model, each value tied to its source. Every tool call is checked against your policy, and credentials never pass through Norn.

    03Workflows

    Every process is a state machinesteps only happen when the rules allow

    A record moves through declared states, and an action is the only way to move it.

    04Rules

    Who may, must and must neverone model for people and agents, default deny

    Each step names who may take it. Values a role can't see come back withheld or masked, never leaked.

    Normswho may, must and must never
    MayWarehouse may count stock
    MustA count must be approved by someone other than whoever counted it, within 2 days
    Must neverWarehouse must never post a count that isn't approved
    Checked before go-liveChecking
    No case is both obligated and forbiddenevery role × action × condition, exhaustively
    No one can approve their own workseparation of duties, across the whole action graph
    “Within 2 days” is tracked as a dutythe deadline is type-checked and followed at runtime
    Norms grant no access on their ownaccess still comes only from permissions

    05Checks

    Your business rules aren't commentsNorn checks your model before it goes live

    And it refuses any change that would break a law, with the reason in plain words.

    500+checks on your app before it goes live, each with a plain explanation
    Everywrite checked against its guard and every law before commit
    0partial writes. A refused change leaves nothing behind

    Laws are model-checked for simple lifecycles today. Contradiction search is bounded.

    Statecharts
    State machines

    No unreachable states, no exits from an end state, no write that skips a step.

    Finite lifecycles, exhaustively
    Quint
    Model-checked laws

    Each law becomes a model. If it can break, you get the exact case.

    Simple lifecycles, today
    Logic
    No contradictions

    Definitions and mappings are searched for conflicts, with a concrete example.

    Bounded search
    Logic
    Mappings that fit

    Every source field is covered, and the source data meets the target's rules.

    Against your systems
    Deontic
    No rule conflicts

    Who may, must and must never can't clash, and no one approves their own work.

    Every role and action
    Exact
    Exact units

    Kilograms never mix with litres, and division by zero is refused.

    At check time
    Types
    Typed tool wiring

    Every tool's inputs and outputs match what they connect to.

    Including MCP tools
    Runtime
    Every write checked

    Guard and laws run before commit. Nothing partial is ever written.

    On every change

    06Features

    A business that runs itselfand explains every step

    Why is SKU-204 down 6 units?
    NornCounted 294 against 300 on Tuesday. Approved by the supervisor at 14:20.
    Refund R-89, 6,800
    NornDrafted. It's above your 5,000 limit, so a person approves it.

    Agents, checked like code

    An agent's models, tools and laws are admitted by the checker. Anything over its limit waits for a person.

    Stock valueAs of 14:00Now
    EGP 412,380.00
    What we knew at 14:00

    As of any time

    Ask what the business knew then and what it knows now. Corrections restate the answer, they never overwrite history.

    1Message from the customer9c1e
    2Model drafted the order41b7
    3Stock check passede0d2
    4Approved by Sales77fa

    Ask why

    Any value walks back through the events that produced it, on a hash-chained ledger.

    Customer at riskderived
    because
    An order is overdueSO-1031
    Its invoice is 30+ days unpaidINV-4398
    unless they're on a payment plannone

    Rules that build on rules

    Define facts from other facts, with exceptions, and Norn keeps the reason behind every one.

    07Open

    Open at the coreand yours to run

    Read every line, and run it on your own servers.

    $git clone https://github.com/Norn-cloud/norn
    RustTypeScriptEffectSQLiteWebAssemblyMCPQuintLean

    Rust core

    The kernel and checker, embeddable in your own service.

    One file per business

    Each business is its own SQLite cell. Export it and take it with you.

    Definitions as code

    Types and rules in TypeScript, admitted by a Rust checker.

    Define the business once.Let anyone run it, safely.