Realtime app backend, one click.

Every click mints a key with a 5 MB database, 100 MB of storage, realtime multiplayer rooms, a hosted website, and a code sandbox. Getting started needs nothing — no signup, no setup.

zero setup 5 MB SQLite DB 100 MB files binary realtime ~/ hosted site Python sandbox
Start now — nothing to sign up for, nothing to type
1 One click, live site
bash — scaffold uploads a working realtime page for youcopy
curl -s -X POST https://spark.boqsc.eu/api/scaffold
# → {"key":"spk_...","id":"sp_...","scaffold":{"files":["index.html","app.js"],
#    "site_url":"https://spark.boqsc.eu/~/sp_.../"},...}
# open site_url in two browsers — they join the same realtime room instantly.
2 Database (5 MB)
bash — raw SQL, one statement per callcopy
curl -s -X POST https://spark.boqsc.eu/api/db/query \
  -H "Authorization: Bearer $KEY" \
  -d '{"sql":"CREATE TABLE scores(level INT, score INT)"}'

curl -s -X POST https://spark.boqsc.eu/api/db/query \
  -H "Authorization: Bearer $KEY" \
  -d '{"sql":"INSERT INTO scores VALUES(1, 9000)"}'

curl -s -X POST https://spark.boqsc.eu/api/db/query \
  -H "Authorization: Bearer $KEY" \
  -d '{"sql":"SELECT * FROM scores"}'
# → {"ok":true,"columns":["level","score"],"rows":[[1,9000]],"usage":{...}}
3 Storage & hosted site (100 MB)
bash — upload files, then they are livecopy
curl -s -X POST "https://spark.boqsc.eu/api/files?path=index.html" \
  -H "Authorization: Bearer $KEY" \
  --data-binary '<h1>hi</h1>'

# your site, live (no server restart needed):
curl -s https://spark.boqsc.eu/~/sp_.../index.html
# download API:  /api/download?path=...   (add &inline=1 to preview)
# list:          /api/files           delete: /api/files?path=...  (DELETE)
4 Realtime multiplayer — binary by default
html — one script tag gives you the codec + interpolation helpercopy
<script src="https://spark.boqsc.eu/spark-client.js"></script>
// provides SparkBinary (compact binary codec) and SparkInterp (smooth
// snapshot interpolation using the server ts/seq stamps).
javascript — connect, send, listen (binary is the default protocol)copy
const ws = new WebSocket(`wss://spark.boqsc.eu/api/socket?project=PROJECT_ID&room=alpha`);
ws.binaryType = 'arraybuffer';   // compact binary by default
ws.onmessage = e => { const m = e.data.byteLength !== undefined
  ? SparkBinary.decode(e.data) : JSON.parse(e.data);
  if (m.type === 'event') console.log(m.nickname, m.event, m.data); };
ws.send(SparkBinary.encode({type:'event', event:'move', data:{x:0.5, y:0.5}}));
// ~60% smaller frames than JSON, per-room ts/seq for interpolation, and
// server-authoritative push: POST /api/broadcast {room, event, data}.
// Legacy JSON clients can opt in with ?fmt=j.
5 Run code
bash — sandboxed Pythoncopy
curl -s -X POST https://spark.boqsc.eu/api/run \
  -H "Authorization: Bearer $KEY" \
  -d '{"code":"print(6*7)"}'
# → {"ok":true,"exit_code":0,"stdout":"42\n","stderr":""}
6 Register it later
bash — claim a username + password to manage the keycopy
curl -s -X POST https://spark.boqsc.eu/api/register \
  -H "Authorization: Bearer $KEY" \
  -d '{"username":"sam","password":"hunter2"}'
# forgot the key? login, then rotate for a fresh one:
# POST /api/login {username,password} → info   |   POST /api/rotate {username,password} → new key
Everything included

Zero-setup start

One click scaffolds a live multiplayer page and mints a key. No signup, no setup.

🗄

5 MB database

Per-key SQLite. Run raw SQL via /api/db/query. Enforced quota, one statement per call.

📦

100 MB storage

Upload, download, list and delete files with the key. Every file has a public URL.

🌐

Hosted site

Drop in index.html and your page is live at spark.boqsc.eu/~/<id>/.

🎮

Realtime multiplayer

WebSocket rooms on a compact binary protocol by default (with ts/seq stamps and a client helper). Presence, events, direct messages, server push via /api/broadcast.

Run code

Sandboxed Python with a timeout. No OS, network or file access.

🔑

Key only

Issued instantly, no account needed. Register a username + password later to manage and rotate it.

How it works. Every key is a project. The id (like sp_...) is public — use it to address your site and realtime rooms. The key (like spk_...) is secret — send it as Authorization: Bearer <key> on every API call. Keys are stored hashed server-side; the raw key is shown once. Quotas are enforced per project, and all API responses are CORS-open for any origin.