Skip to content

ADR-0003: Rust kernel; async at I/O seams only

ADR-0003: Rust async boundary

Status: accepted

Decision

Vinxi kernel services are async-friendly by default, using Tokio. Ports that touch I/O are async. Pure domain logic remains synchronous.

Rules

  • vinxi-port-* traits are async.
  • vinxi-adapter-* implementations may depend on Tokio, SQLx, filesystem, object storage, HTTP, etc.
  • vinxi-ids, vinxi-value, registry models, and pure validation logic must not depend on Tokio.
  • Long-running work is represented as durable process.job_request / materialization.run; HTTP handlers do not spawn detached work as truth.

Rationale

The kernel waits on databases, blob stores, streams, external calls, search, and materialization workers. Async belongs at these I/O seams, not inside the semantic brain of the system.