Full page layouts, each shown in the mode that suits it. They all use the same
tokens and components. Only the spacing, density and size of display type change
from one to the next.
01 / App shell · industrial
Dashboard
A 48px top bar and a 256px sidebar, each separated by a 1px line. Compact
density, mono table headers that stick as you scroll, and status shown as a
square plus a word.
console.example.com/services
4 healthyus-east-1
Services
6 services across 3 regions
Requests / 24h
2.41M
p95 latency
88ms
Error rate
0.04%
Spend / mo
$1,284
Service
Region
Status
p95
Requests
edge-router
us-east-1
Healthy
41 ms
2,410,882
api-gateway
eu-west-2
Healthy
88 ms
1,092,441
image-proxy
ap-south-1
Degraded
612 ms
318,204
webhook-fanout
us-east-1
Failing
—
0
cron-worker
eu-west-2
Paused
—
0
Scroll sideways to see the whole preview at desktop width
02 / Marketing · editorial
Landing
A two-column hero with a 1px line between the columns, a feature grid with
shared borders so the section reads as one table, and a single inverted
call-to-action band.
orbit.dev
ORBIT
Sign inStart free
Infrastructure
Ship to the edge in one command
310 locations, immutable builds, instant rollback. No YAML, no control
plane to babysit.
Start buildingRead the docs
No credit card · 4,000 free builds
deploy.log
$ orbit deploy
✓ build 1.8s
✓ upload 0.4s
✓ propagate 2.1s
live at orbit.app → 310 pops
02 / Platform
Everything the team needs
Instant rollback
Every deploy is content-addressed. Roll back in under a second.
Edge routing
Requests terminate at the nearest of 310 locations, with failover.
Zero-config TLS
Certificates issued, renewed and stapled with no configuration.
Start shipping in under five minutes
Free for personal projects.
Create accountTalk to us
Scroll sideways to see the whole preview at desktop width
03 / Documentation
Docs
Three columns separated by 1px lines. Body text is capped at 68ch, code
blocks have a mono strip naming the language, and the active heading gets an
accent line.
orbit.dev/docs/routing
Guides / Routing
Routing
Requests are matched against your route table in order. The first match
wins, so put specific patterns above catch-alls.
Defining routes
Routes live in orbit.toml at the root of your project.
Sessions on the left, the transcript in the middle, and the agent's plan and
changed files on the right. Tool calls are log lines you can expand. The
approval request is the only thing in the warning colour. Type in the composer
and it streams back a reply.
agent.orbit.dev/s/fix-flaky-webhook
agent/webhook-retryRunning · 02:14
JR
Jo Rivera12:02
send.test.ts fails about one run in five on CI but never locally. Find the cause and fix it; do not touch the mock server.
AI
Agentsonnet-5
Thought for 9s
CI-only and intermittent points to timing. CI boots the mock in the same job, so the first request can land before it is ready. If send() has no retry, a single 503 fails the test.
Check the sender first, then reproduce with a cold mock.
4 tool calls5.4s
grep"send(" src/webhooks0.2s
Output · 2 matches
src/webhooks/send.ts:4 export async function send(hook, body)
src/webhooks/queue.ts:31 await send(hook, payload)
read_filesrc/webhooks/send.ts0.1s
Output · 7 lines
export async function send(hook: Hook, body: string) {
const res = await fetch(hook.url, { method: "POST", body });
if (!res.ok) throw new WebhookError(hook.id);
return res;
}
runMOCK_COLD=1 npm test -- webhooks4.8s
Input
{ "command": "MOCK_COLD=1 npm test -- webhooks", "timeout": 60 }
Output · exit 1
FAIL webhooks/send.test.ts
✗ delivers to a cold endpoint
WebhookError: hook_01H8 (503 Service Unavailable)
Tests: 1 failed, 11 passed
edit_filesrc/webhooks/send.ts +9 −20.3s
Diff
+ for (let attempt = 0; attempt < 5; attempt++) {
+ const res = await fetch(hook.url, { method: "POST", body });
+ if (res.ok) return res;
+ await sleep(200 * 2 ** attempt);
+ }
- if (!res.ok) throw new WebhookError(hook.id);
Reproduced it. A cold mock returns 503 for roughly 300ms1, and send() throws on the first non-2xx response. I added a bounded retry:
src/webhooks/send.ts+9−2
export async function send(hook: Hook, body: string) {const res = await fetch(hook.url, { method: "POST", body });if (!res.ok) throw new WebhookError(hook.id);for (let attempt = 0; attempt < 5; attempt++) {const res = await fetch(hook.url, { method: "POST", body });if (res.ok) return res;await sleep(200 * 2 ** attempt); }throw new WebhookError(hook.id);}
Approval needed · writes to the working tree
Run the full suite 20 times against a cold mock to confirm the fix:
for i in $(seq 20); do MOCK_COLD=1 npm test -- webhooks || exit 1; done
Waiting on you · 12:03:41
Scroll sideways to see the whole preview at desktop width
06 / Marketing · editorial
Features and pricing
A feature grid with one wider cell, then pricing laid out as a plain table.
The recommended plan gets an inverted header instead of a bigger card. The
billing toggle works.
orbit.dev/pricing
ORBIT
Sign inStart free
01 / Platform
Everything between git push and production
01
Deploys you can undo
Every build is immutable and content-addressed. Rolling back is a pointer move that lands in under a second, at every edge location at once.
Instant, global rollback
Preview URL per pull request
90 days of build history
DeploysFIG. 01
12:04 · 8f3a1c2
Live
11:52 · 2b7d9e0
Rolled back in 0.8s
11:40 · c41a0f3
Superseded
02
310 edge locations
Requests terminate at the nearest location with automatic failover.
03
Zero-config TLS
Certificates issued, renewed and stapled without a line of config.
04
Built-in observability
p50, p95 and error rate per route, kept for 30 days.
05
Cold starts under 5ms
Isolates, not containers. Nothing to keep warm.
02 / Pricing
Pay for what you ship
Hobby
$0/month
Personal projects and experiments.
Start free
1 project
100 GB bandwidth
Preview deploys
Team members
SSO
Team
Recommended
$20/month
Per member. For teams shipping weekly.
Start 14-day trial
Unlimited projects
1 TB bandwidth
Preview deploys
Up to 50 members
SSO
Enterprise
Custom
Volume pricing, SLAs and support.
Talk to sales
Unlimited projects
Committed bandwidth
Preview deploys
Unlimited members
SAML SSO & SCIM
Compare plans
Feature
Hobby
Team
Enterprise
Deploy
Build minutes / month
100
6,000
Custom
Concurrent builds
1
4
24
Instant rollback
Security
Audit log
30 days
1 year
SAML SSO
Uptime SLA
99.9%
99.99%
Scroll sideways to see the whole preview at desktop width
07 / Support · editorial
Frequently asked questions
A heading column that stays in place as you scroll, next to a numbered
accordion that opens one answer at a time. A segmented control filters the
questions by category. The section ends with a real person to contact, so
readers who don't find their answer still have somewhere to go.
orbit.dev/faq
03 / FAQ
Questions, answered plainly
Can’t find it here? The docs go deeper, and a human answers the rest.
MKAOSL
Still stuck?
Median first reply: 38 minutes
Read the docsContact support
01What counts as a build minute?
Wall-clock time from the first build step to the upload finishing, rounded up to the next minute per build. Cached steps that are skipped cost nothing.
02What happens when I go over a limit?
Nothing stops. You get an email at 80% and 100%, and overage is billed at the published rate:
Bandwidth: $0.15 per GB
Build minutes: $0.01 per minute
03Can I bring my own domain?
Yes, on every plan. Point a CNAME at edge.orbit.app; certificates are issued within a minute and renew on their own.
04Which runtimes are supported?
Node 20 and 22, Bun, Deno and any static output. Set it per project in orbit.toml.
05Where is my data stored?
Build artefacts live in the region you pick at project creation. Logs are kept for 30 days and never leave that region.
06Do you support SSO?
SAML SSO and SCIM provisioning are on the Enterprise plan. Google and GitHub sign-in are on every plan.
6 questions
Scroll sideways to see the whole preview at desktop width
08 / Content · editorial
Blog index and article
The index puts one featured post at the top and the rest in a grid that reads
like a table of contents. The article keeps text to 68ch, has a sticky table of
contents beside a vertical line, and uses every content component: lists, a
blockquote, code, a callout and a figure with a caption.
A single percentile hides the shape of the distribution. Here is what we alert on instead, and the incident that changed our minds.
AEAryan EbrahimpourSep 11, 20268 min read
One Tuesday in July our p95 latency looked perfect: 88ms, flat all afternoon. Meanwhile 4% of checkout requests were timing out. The dashboard was right about p95, but p95 was the wrong thing to be watching.
The shape matters
A percentile is one point on a curve. Two very different services can share a p95:
A tight distribution with a clean tail
A bimodal one, where a slow path serves a few percent of traffic
A healthy body with a cliff at p99.5 that a p95 never sees
We were not measuring the service. We were measuring one number the service happened to produce.
What we alert on instead
We now keep a full histogram per route and alert on the share of requests over budget, which is closer to what a user feels. The query is short:
Scroll sideways to see the previews at desktop width
09 / Analytics · industrial
Dashboard with charts and a team view
Filters sit in one row above everything they affect, with the date range
first. Below them are KPI tiles with sparklines, a line chart with two series
(the comparison line is gray and dashed, so it still reads in greyscale), a bar
chart labelled on the bars, and a team table with workload meters and row menus.
Hover over the charts or step through them with the arrow keys.
Scroll sideways to see the whole preview at desktop width
10 / Documentation · blueprint
Docs site with a nested tree
Sidebar sections have mono headings on darker strips, and groups open three
levels deep along drawn tree lines. The article has a breadcrumb, a tab for each
package manager, a parameter table, an accordion for options you rarely need,
and previous and next links. The version switcher is a menu.
orbit.dev/docs/networking/routing/rewrites
ORBIT Docs
Version
Rewrites
A rewrite serves a different path than the one requested, without changing the URL the visitor sees.
Install the SDK if you want to define rewrites in code rather than in orbit.toml:
terminal
npm install @orbit/sdk
terminal
pnpm add @orbit/sdk
terminal
bun add @orbit/sdk
Regex captures
Patterns may use named groups. Each group is available in the destination as :name.
Scroll sideways to see the whole preview at desktop width
11 / Storage · industrial
File browser
A folder tree, a breadcrumb that doubles as the path, and a table you can
right-click. The right-click menu repeats the actions in each row's overflow
menu, which stays visible. Drop files on the dashed area to add them to the
upload tray.
console.orbit.dev/acme/storage/assets
1,204 objects · 12.8 GB
Name ▲
Type
Size
Modified
Actions
fonts/
Folder
—
Sep 21
img/
Folder
—
Sep 24
app.4e2c.css
text/css
48.2 KB
12:04
app.91bf.js
text/javascript
212.6 KB
12:04
hero.avif
image/avif
1.4 MB
Sep 19
robots.txt
text/plain
112 B
Aug 02
Uploads
2 of 3 done
svg
logo-mark.svg
4.1 KB
Done
woff
inter-var.woff2
312 KB72%
Uploading
Scroll sideways to see the whole preview at desktop width
12 / Status · editorial
Status page
Each component gets 90 square cells, one per day, which is the most literal
use of the grid anywhere in the system. Every cell has its own tooltip, every
state has both a colour and a word, and incidents are listed newest first.
status.orbit.dev
ORBIT Status
Get incident updates
Degraded performance in ap-south-1Updated 12:40 UTC
Components · last 90 days
OperationalDegradedOutage
Edge network
Operational
90 days ago99.99% uptimeToday
Builds
Operational
90 days ago99.91% uptimeToday
ap-south-1
Degraded
90 days ago99.95% uptimeToday
Dashboard & API
Operational
90 days ago100.00% uptimeToday
Incident history
Sep 25 · 12:14 UTC · Monitoring
Elevated latency in ap-south-1
An upstream transit provider is dropping packets. Traffic has been shifted to secondary links; p95 is recovering.
Sep 02 · 09:40 UTC · Resolved in 38m
Slow builds for large monorepos
A cache eviction bug forced cold builds. Fixed and backfilled.
Jul 28 · 22:05 UTC · Resolved in 1h 12m
Build queue outage
A failed database migration stopped the queue. Builds were retried automatically once it recovered. Read the postmortem →
Scroll sideways to see the whole preview at desktop width
Delete project
This permanently removes the project, its services and 90 days of build history.