/ developers

Built for the person on the keyboard.

Every choice we make is a choice a developer will feel SDK ergonomics, error shapes, log formats, receipt structure. Nothing shipped to make a chart, everything shipped to make a shift.

/ why · build on orvex

A runtime that argues for itself.

OpenAI-shape
Drop-in
Same endpoints, same SDK shape. Change the base URL.
Streams first
SSE
Streaming is on by default. First token in 38ms.
Every language
6 SDKs
TS, Python, Go, Rust, Swift, Kotlin.
Receipts
Signed
Every request produces a verifiable proof of work.
/ quickstart

From zero to streaming in 90 seconds.

A live terminal boots the runtime, then monitors it. Follow the numbered steps on the right.

orvex · runtime · boot
booting
1Install
bun add @orvex/sdk
2Auth
orvex login
orvex keys create prod
3Ship
orvex chat "hello, runtime"
/ workflow

One call. Five stops. Milliseconds.

A request enters the gateway, gets scored, warms a worker, streams back. Nothing between your code and the model that isn't earning its ms.

/ request flow
live · user app
step 01
User app
SDK / HTTP
step 02
ORVEX API
gateway · auth
step 03
Scheduler
router · scoring
step 04
Worker
H100 · eu-west-3
step 05
Stream
response · SSE
/ api

POST once. Stream forever.

A live request in the language you already write in. The response streams beside it, exactly like production.

from orvex import Orvex

client = Orvex(api_key=os.environ[300/85">"ORVEX_API_KEY"])

stream = client.chat.completions.create(
    model=300/85">"orvex-1",
    stream=True,
    temperature=0.4,
    messages=[
        {300/85">"role": 300/85">"system", 300/85">"content": 300/85">"You are a runtime engineer."},
        {300/85">"role": 300/85">"user", 300/85">"content": 300/85">"How does the router decide which worker gets my request?"},
    ],
)

for chunk in stream:
    print(chunk.choices[0].delta.content or 300/85">"", end=300/85">"", flush=True)
response · complete
text/event-stream
/ endpoints

The surface, in six cards.

Every major endpoint on the runtime. Same auth, same envelope, same receipt.

POST
/v1/chat/completions
Chat completion

Streamed chat with tools, JSON mode, and function calling.

POST
/v1/images/generations
Image generation

Text-to-image routed to image-capable workers.

POST
/v1/embeddings
Embeddings

Batched, deduped, cached. 1536-d by default.

GET
/v1/models
Models

Live catalog with capabilities, context, price per token.

GET
/v1/workers
Workers

Network-wide status: region, GPU class, health, load.

GET
/v1/credits
Credits

Usage by key, by model, by window. Live and historical.

/ docs

A reference that stays out of the way.

Search by shape, not by page. Every endpoint, every error, every SDK one keystroke away.

90 seconds to first token

Quick start

Install the SDK, set your key, send a streaming chat completion. The response starts arriving before the model finishes composing it.

bun add @orvex/sdk
export ORVEX_API_KEY=orx_live_…
← previousnext →
/ streaming

Streaming, without ceremony.

Async iterables. Tools that stream. Backpressure the runtime respects.

const stream = await orvex.chat.stream({
  model: "orvex-1",
  messages,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.delta ?? "");
}

const receipt = await stream.receipt();
console.log(receipt.worker, receipt.credits);
TTFT · p50
38ms
Tokens / s · p50
182
TTFT · p99
112ms
Stream complete · p50
620ms
/ architecture

How your call reaches a worker.

Every layer between your code and the model. Nothing hidden.

layer 01
Your code
chat()stream()embed()images()
layer 02
SDK
typed clientretriesbackofftelemetry
layer 03
Transport
HTTP/2SSEgRPC · optional
layer 04
ORVEX edge
authquotarouter
layer 05
Worker mesh
orvex-1orvex-1-miniembed-1image-1
/ models

What the network runs.

Prices are per 1M tokens unless noted. Same endpoint, different worker.

modelcontexttok/spricetag
orvex-1128k180$0.42flagship
orvex-1-mini64k320$0.12fast
orvex-1-long1M84$1.10long
embed-18k-$0.03embed
image-1--$0.004/imgimage
vision-1128k140$0.62vision
/ sdks

Every language your stack speaks.

TypeScript
v1.4.2
bun add @orvex/sdk
Python
v1.4.0
pip install orvex-sdk
Go
v0.9.1
go get github.com/orvex/sdk-go
Rust
v0.8.0
cargo add orvex-sdk
Swift
v0.6.0
spm: orvex-sdk-swift
Kotlin
v0.5.0
impl 'dev.orvex:sdk:0.5.0'
/ deploy

Ships anywhere your code ships.

No sidecars. No agents. HTTPS, a key, and a network.

Vercelsupported
Cloudflaresupported
Fly.iosupported
AWS · Lambdasupported
Kubernetessupported
Bare metalsupported
Local devsupported
Edge functionssupported
/ production

Best practices, from operators.

What our largest customers do. What we do ourselves.

Pin a region only when you must.
The router is usually smarter than you. Let it move traffic.
Set credit budgets per key.
Never let a bug melt your bill. Every key has a hard cap.
Verify receipts async.
Don't block a response on settlement. The receipt is always available.
Retry on 429, not on 500.
5xx is us. 429 is you. Backoff differently.
Stream everything.
TTFT is the felt latency. Streaming halves it for your users.
Log the worker ID.
When something is off, we ask which worker. Give the answer immediately.
/ live

What the network is doing right now.

avg latency
41ms
api uptime
99.994%
rolling 30d
workers online
214
requests · today
1.84m
streaming · now
318
/ next
ready to ship

Start building on the runtime.

A key, a base URL, an SDK. That's it. Move your first request in an afternoon, then keep the same code as you scale to millions.