Databases, caches, queues, object stores, auth, search engines, cron, webhooks, media encoding… replaced by one API built on immutable events. Zero setup. Open CORS.
Same capabilities. One endpoint. No infrastructure to manage.
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.
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\"}"}'
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"}'
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));
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.
Keyword search, semantic search, or hybrid. Fuzzy, filtered. No separate search index to sync.
SELECT, INSERT, JOIN, GROUP BY, transactions, schemas, views, indexes. Your drops are queryable as tables.
Key-based CRUD with full audit trail. Every mutation is an event. Reversible deletes — nothing is lost.
Private routes, shared routes, trust-based grants. Crypto key auth. No third-party provider.
Upload images, video, audio. Range streaming. Resumable chunked uploads. Video encoding via functions.
Python functions with full ocean access. io/min budget controls execution speed. Data pipelines, video encoding, anything.
Every namespace is an MCP endpoint. Define tools, connect Claude Desktop or any MCP client. JSON-RPC 2.0, auth, billing — built in.
Scheduled functions, Signed callbacks, connections to Stripe, Slack, GitHub — all composed from drops.
Stream entities as NDJSON. Filter, project fields, pipe to jq or any language. Your data is always yours.
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.
# 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
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.
# 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