We replaced the backend.

Databases, caches, queues, object stores, auth, search engines, cron, webhooks, media encoding… replaced by one API built on immutable events. Zero setup. Open CORS.

Open CORS · No signup · One endpoint · Free
What disappears

You used to need all of this.

SQL database Cache Event streaming Object storage Full-text search Authentication Vector database Cron jobs Webhooks Message queues Media encoding Serverless functions Container orchestration MCP servers
api.infiniteocean.io

Same capabilities. One endpoint. No infrastructure to manage.


How it works

One primitive. Everything follows.

Everything in InfiniteOcean is a drop — an immutable event posted to a route. From that single primitive, you get storage, queries, real-time streams, full-text search, vector similarity, SQL, CRUD, audit trails, and more.

1

Post a drop

Your database write, your event, your cache entry, and your stream message. All at once.

curl -X POST api.infiniteocean.io/drop \
  -H "Content-Type: application/json" \
  -d '{"route":"my/data",
       "key":"user-1",
       "payload":"{\"name\":\"Alice\"}"}'
2

Query any way

SQL, MongoDB-style filters, full-text search, vector similarity, aggregations, joins. Same data, no extra setup.

curl -X POST api.infiniteocean.io/sql \
  -H "Content-Type: application/json" \
  -d '{"query":
       "SELECT * FROM my/data
        WHERE name = '\''Alice'\''
        LIMIT 10"}'
3

Stream in real time

Every drop is instantly available as a server-sent event. History replay on connect. No pub/sub to configure.

const es = new EventSource(
  "https://api.infiniteocean.io
   /stream/my/*?last=10"
);
es.onmessage = (e) =>
  console.log(JSON.parse(e.data));

What emerges

You don't configure these. They're just there.

Because everything is an immutable event on a route, these capabilities aren't separate services — they're natural consequences of the architecture.

Full-text + Vector Search

Keyword search, semantic search, or hybrid. Fuzzy, filtered. No separate search index to sync.

SQL

SELECT, INSERT, JOIN, GROUP BY, transactions, schemas, views, indexes. Your drops are queryable as tables.

Entity Versioning

Key-based CRUD with full audit trail. Every mutation is an event. Reversible deletes — nothing is lost.

Access Control

Private routes, shared routes, trust-based grants. Crypto key auth. No third-party provider.

Media

Upload images, video, audio. Range streaming. Resumable chunked uploads. Video encoding via functions.

Functions

Python functions with full ocean access. io/min budget controls execution speed. Data pipelines, video encoding, anything.

MCP Servers

Every namespace is an MCP endpoint. Define tools, connect Claude Desktop or any MCP client. JSON-RPC 2.0, auth, billing — built in.

Cron, Webhooks, Integrations

Scheduled functions, Signed callbacks, connections to Stripe, Slack, GitHub — all composed from drops.

Data Export

Stream entities as NDJSON. Filter, project fields, pipe to jq or any language. Your data is always yours.


Infrastructure

Run your own node. Or don't.

Use the public API and never think about infrastructure, or run your own node to keep data local and get dedicated throughput. Pick a storage size — 1 GB to 1 TB. Throughput scales super-linearly. One app — just download, open, and run. Every tier is free.

Download for Mac Windows All tiers →
# Desktop app — just open and run.
# Or, install from the command line:
curl -sSL api.infiniteocean.io/install | sudo bash

io: node tier=10gb (storage=10GB, rate=75,000 io/min)
io: listening on :3000

Also

AI agents get persistent context for free.

Because every drop is immutable and queryable, agent memory isn't a feature we bolted on — it's a natural side effect. Call GET /context to load the full project state. Record what you learn. Next session, pick up where you left off.

Learn how it works →
# Load your development context
curl api.infiniteocean.io/context \
  -H "X-Ocean-Key: $KEY"

# Returns markdown:
## Tables
### users (142 rows)
| Column | Type |
## Development Log (12 entries)
### decisions
- Decided to version all data
- Rate limit at proxy level