Technology / System architecture

One lineage graph. Across the stack.

A Python SDK over a Rust core connects data, experiments, model versions, and execution. Every run carries the context needed to inspect and reproduce it.

Declarative Python SDK · Promethean Editor@dataset · @featureset · @pipeline, committed as codeControl plane · compile · backfill · scheduletypecheck · materialize · schedule · record · reproducibility contract · multi-tenantEmberfeature storeForgepipelinesRegistrymodel artifactsRuntimebacktest · liveone lineage graph · Arrow Flight between systems · git-style data branchesRust coreRedpanda logParquet · GCSClickHouseRay · GKEAll computation happens server-side
  1. DeclarePython SDK and research workspace
  2. CoordinateControl plane: compile, materialize, schedule, and record
  3. RunEmber data · Forge experiments · Model registry · Backtest and paper runtime
  4. PreserveOne lineage graph connects datasets, runs, and model versions.
Declarations enter a shared control plane. Data moves over Arrow Flight; runs, artifacts, and datasets retain their identity.

What the architecture is for

Three properties, and everything follows.

  • Correct. A result reflects only what was knowable when the decision would have been made. Point-in-time correctness is enforced in the data path.
  • Reproducible. A result can be re-derived from its record (same code, data, environment, seed) by someone else, later.
  • Comparable. Two results can be evaluated under one methodology, in one environment, so their differences are differences in the strategies and not in the measurement.

These are the properties of scientific evidence. They are also the minimum requirements for a market in intelligence and for composing intelligence into products. The stack below is what it takes to guarantee them at scale, for many tenants, continuously.

Correctness of evidence

Where the guarantees live.

Point-in-time

Every dataset declares its keys and timestamp; every read is as-of a moment. Training frames are assembled from what was knowable at each row's decision time; joins are as-of joins; label windows are explicit. Look-ahead is prevented in the read path.

Reproducible identity

Each run is anchored to the exact code, data versions, environment, and seeds that produced it. Runs diff; any run replays; a production model traces to the experiment and data that produced it. Sweeps are data.

Against the book

An event-driven simulator with a full-depth limit order book: orders rest in queue, cross the spread, consume depth; fills, slippage, and costs come from the book's state. The same strategy code runs in a live session without translation.

Ember · the feature store

Declared once. Served point-in-time-correct, offline and online.

Datasets, featuresets, and derived streams are declared as typed expressions and materialized server-side; all computation happens on the platform. Reads are point-in-time-correct offline (training frames over history) and online (latest and as-of lookups for live decisions) from one definition, with a write path that enforces schema and validates data on entry.

Ember · Feature Store
branch: experiment/feature-v3
FEATURESETS
FS
Momentum3 features · v4
FS
OrderFlowImbalance5 features · v2
FS
VolSurface8 features · v7
DATASETS
DS
SpotBarsArrow · 412M rows
DS
OrderFlowArrow · 1.2B rows
DS
FundingRatesArrow · 9.4M rows
FEATURESET

Momentum

Cross-sectional momentum over the spot tape. Joined point-in-time to SpotBars.

v4⎇ experiment/feature-v3
FeaturesLineageStatsVersions
ret_5mfloatcoverage 99.8%
close / close.shift(5) - 1
rv_30mfloatcoverage 99.6%
ret.rolling(30).std() * 1440 ** 0.5
ofi_imbalancefloatcoverage 97.1%
(bid_vol - ask_vol) / (bid_vol + ask_vol)
Arrow Flighttypechecked at commitmaterialized server-side● fresh · backfilled to 2026-06-15 00:00 UTC

A durable log is the source of truth

Columnar history serves range and point-in-time reads; a per-replica serving index answers latest and as-of lookups in microseconds. Reference data and time series are distinguished by storage class and routed accordingly.

Derived pipelines with checkpointed state

A leader-elected reactor executes server-side operators (windows, lags, joins, aggregations) with state that survives restarts and replay, so a windowed aggregation resumes where it left off.

Branches isolate experiments

Git-style branches keep experimental definitions away from production reads until merged. The catalog holds definitions, lineage, watermarks, and checkpoints: metadata only.

Forge · pipelines and experiments

You declare the graph. The platform runs it.

Pipelines are declared as steps with dependencies and executed remotely on managed compute; the declaration describes the work, and the platform decides where it runs. Hyperparameter sweeps fan out as trials with shared identity. Metrics stream to a columnar store and are queryable across runs, which is what makes experiment comparison (across seeds, parameters, time, and strategies) a single view. Backtests and live sessions are runs in the same system, with the same provenance.

Forge · Pipelines
train.momentum · run a4f1c2
@pipeline train_momentum● running
loadSpotBars · OrderFlowfeaturizeMomentum · OFItrainLGBM · A10Gevaluatewalk-forwardregister→ registry
donerunningqueued
SWEEP · forge.metricsBayesian · 24 trials · ClickHouse
triallrdepthval lossseed σ
t-19best1.2e-360.0271±0.0009
t-228.0e-470.0284±0.0011
t-112.5e-350.0302±0.0019
t-045.0e-380.0337±0.0041
trials · objective improving24

Registry · models, strategies, lineage

Immutable versions. Promotion with provenance.

Artifacts are immutable and versioned, with lineage to the run, features, data versions, and branch that produced them. Promotion through stages is gated and reversible. A deployed model binds to a live session automatically; a listed strategy references the registry version its evidence was produced from. Chunked, deduplicated transfer keeps hundreds of versions cheap.

Model Registry
momentum-alpha
VERSIONSTAGERUNDATACREATED
v0.9.0prodc81d0eSpotBars@v1112d ago
v0.10.0staging9b27f4SpotBars@v123d ago
v0.11.0deva4f1c2SpotBars@v12just now
v0.8.2archived3e60aaSpotBars@v1031d ago
LINEAGEmomentum-alpha · v0.11.0
◆
MODELmomentum-alpha@v0.11.0
LGBM · 412 trees · sha 7e3a1f
▸
RUNforge / train.momentum · a4f1c2
trial t-19 · lr 1.2e-3 · depth 6 · seed 42
✦
FEATURESETMomentum@v4
3 features · typed expressions
▦
DATASETSpotBars@v12 · OrderFlow@v8
branch experiment/feature-v3 · point-in-time
Promote v0.11.0 →staging

Execution at scale

Metered, attributed, shared.

COMPUTE

Server-side execution

A shared, quota-managed compute cluster with per-organization priority. Workspaces run on managed Kubernetes and pause when idle.

DATA

Streaming and history

Streaming ingestion on a durable log; columnar history on object storage; in-process analytical reads for point-in-time and range queries.

METERING

Every second attributed

Compute-seconds and storage bytes are metered and attributed to an owner, which is why the platform can be priced on what it measures.

Isolation and trust

Soft at the compute layer. Hard at the data layer.

TENANCY

Per-organization isolation

Namespaces with database-level isolation. Compute is shared under quotas; data is isolated per organization.

IDENTITY

IdP-agnostic sign-in

OIDC with any identity provider, passkey sign-in, scoped and auto-refreshing credentials, encrypted secrets, RBAC-guarded operators.

OWNERSHIP

Yours

Your code, data, models, and strategies are yours. You control what is listed.

Rust, and why

The Python you write is a declaration. The Rust we run is the platform.

The SDK is a thin, typed Python surface over a Rust core; business logic lives in Rust. Compilation, materialization, scheduling, lineage, and data movement run in a memory-safe, concurrent engine, which is how a feature store, an experiment engine, a registry, and a backtester stay correct under multi-tenant load with predictable latency. The web application is Rust compiled to WebAssembly, so the SDK and the interface share real code.

thin SDK, heavy core# the SDK is a thin, typed surface; all logic lives in Rust
@featureset
class Momentum(Featureset):
    ret_5m: float = Feature(expr=close / close.shift(5) - 1)

# commit ships the declaration to the Rust engine,
# which typechecks, materializes, and serves it.
client.commit(featuresets=[Momentum])
# this process never touches pandas, a GIL, or your CPU

What is shown here

Diagrams describe the real shape of the system. Strategy names and run identifiers in illustrations are examples. This site shows the structure of the system and the evidence it produces; performance figures only mean something inside their methodology, so they live on the platform.