Skip to main content

The Embedded Engine

iCommerce is the engine inside the agent. You don’t call it over a network; you compile it into your runtime. The analogy is SQLite. Postgres is a server you connect to. SQLite is a library you embed — and that single difference changes latency, offline behaviour, and how you reason about failure. iCommerce is that, for commerce.

What “embedded” buys you

For an agent doing dozens of reads to decide one action, in-process calls are the difference between a coherent turn and a timeout.

Start

That’s the whole setup — no server to run, no connection string, no control plane.

A complete flow

Same thing in Rust, with exact decimals:

Storage

The API is identical across all three, so you can develop against :memory: and deploy against Postgres without changing call sites.
Two domains historically reported isSupported() == true on SQLite while every call failed — that gap is closed, but it’s worth calling isSupported() rather than assuming parity when you’re relying on a less common domain.

Determinism and explicit write intent

Operations are deterministic, and writes require explicit intent rather than being inferred. That’s what makes an agent holding the engine safe to reason about: a read cannot mutate, and a mutation is a decision someone made. See the CLI safety model for the same principle at the command line.

Money is never a float

Every monetary value crosses as an exact decimal string. 0.1 + 0.2 !== 0.3 in binary floating point, and a commerce engine that sells exact settlement cannot afford that drift.
Some older binding fields still convert to f64 — roughly 50 fields on the Node and Python surfaces, including PaymentOutput.amount and OrderResponse.total_amount. See the money precision note for which to avoid until that lands.

When to embed