Capabilities

Request behavior, not vendors.

A capability describes what an application needs and what a provider guarantees, independently of cloud vendor, protocol, runtime, or implementation language.

Docs / Capabilities

A Presolve capability contract has a stable semantic identity, a version, baseline operations, mandatory guarantees, and optional feature vocabulary. Providers advertise the exact version and features they really support; applications declare what they require or prefer.

Matching

Required is a constraint. Preferred is a ranking signal.

[[capabilities]]
interface = "presolve:objects/store"
version = "^0.1"
required_features = ["range-read"]
preferred_features = ["user-metadata"]
01
Match interface + version.

The environment advertises concrete supply such as presolve:objects/store@0.1.0.

02
Enforce required features.

If a provider lacks range-read, it is not compatible for this application.

03
Rank preferred features.

user-metadata may make one otherwise-compatible provider preferable without making the environment invalid.

04
Record what was matched.

The deployment plan exposes the selected provider ID, version, and requested features actually satisfied.

Built-in contracts

The current capability surface.

CapabilityBaseline operationsCurrent providersEvidence
presolve:kv/store@0.1.0get · set · deletememory · Redis · Cloudflare Workers KVsame-release proof
presolve:objects/store@0.1.0get · put · head · list · deletememory · S3-compatiblesame-release proof
presolve:sql/database@0.1.0execute · query · begin · commit · rollbackSQLite · PostgreSQLsame-release proof
presolve:queue/work-queue@0.1.0send · receive · ack · retryin-memory leased queuecapability proof
KV

presolve:kv/store@0.1.0

The smallest built-in contract establishes exact-key state semantics without prescribing whether the implementation is an in-process map, Redis, or a managed cloud KV service.

Mandatory guarantees

exact-key-identitymissing-distinct-from-emptyset-replaces-value

There are currently no optional KV features in the 0.1 contract. The flagship proof exercises memory, Redis, and Cloudflare resolution with the same application release.

Object storage

presolve:objects/store@0.1.0

Object storage introduces opaque byte bodies, metadata, prefix listing, streaming reads, and provider limits that are materially different from KV.

Mandatory guarantees

exact-key-identityopaque-byte-contentput-replaces-objectread-after-writedelete-idempotent

Optional features

range-readconditional-writeuser-metadata
The S3-compatible proof exposed real abstraction pressure: S3 delete-existence must be synthesized, S3 keys have a 1,024-byte limit, and large multipart upload semantics are not yet part of the portable baseline.
Relational SQL

presolve:sql/database@0.1.0

Presolve standardizes parameter binding, a portable scalar/result model, and transaction ownership. It deliberately does not claim that arbitrary SQL source is dialect-portable.

Baseline guarantees

bound-parametersportable-scalar-valuesordered-result-columnstransaction-atomicitytransaction-session-affinityuncommitted-drop-rolls-back

Optional features

dialect-postgresqldialect-sqliteread-only-transactionsreturningsavepointsserializable-transactions
[[capabilities]]
interface = "presolve:sql/database"
version = "^0.1"
required_features = ["dialect-postgresql"]
preferred_features = ["returning"]

The SQLite/PostgreSQL proof uses a deliberately shared SQL subset and the same bound $1, $2, … parameter form. Presolve does not rewrite SQL.

Work queues

presolve:queue/work-queue@0.1.0

The baseline models pull-style work distribution: send opaque bytes, receive a finite leased delivery, explicitly acknowledge success, or request retry. Duplicate delivery is legal baseline behavior.

Mandatory guarantees

at-least-once-deliveryleased-deliveryexplicit-acknowledgementunacknowledged-redeliveryretry-preserves-bodyprovider-defined-delivery-order

Optional features

delayed-senddelayed-retrydelivery-attempt-countdead-letter-routingconfigurable-lease-durationordered-receive
Queue workload triggering is intentionally separate. “This queue exists” and “invoke this workload when a message arrives” are different deployment concerns.
Transport independence

WIT is one binding target, not the semantic contract.

CanonicalCapability contractoperations · guarantees · features
→
ProjectionWIT / Rust SDKtyped binding surface
→
ImplementationProviderRedis · S3 · PostgreSQL · etc.

Capability semantics remain independent of ABI, protocol, deployment platform, or implementation language. A future non-Wasm workload can still request the same semantic capability.

Canonical contract definitions on GitHub ↗
Current limits

Boolean features will not be enough forever.

Real providers have exposed semantic dimensions that are values rather than yes/no features: key-size limits, SQL limits, queue message-size limits, retention ranges, lease-duration ranges, and similar constraints. Presolve has not added a typed semantic-property system yet; provider evidence will determine what that model needs.

See the proof evidenceHow real providers have already changed and sharpened the abstractions.