Limits
Elastic Projects is an alpha experiment on AT Protocol Spaces. Treat every limit below as intentional until the docs say otherwise.
Alpha scope
- Protocol and PDS behavior will change. Do not depend on stable record shapes or URLs.
- Spaces provide access control, not confidentiality. Anyone with a space credential can read permissioned repos.
- Do not store secrets, credentials, or data you cannot lose.
- Do not send non-developers to the public alpha PDS without understanding the risk.
What is not deployed
| Expectation |
Reality today |
Public elasticprojects host |
Not live from this repo. You run locally or link your own Vercel project |
| Org PDS “host here” |
Updates SQLite only. No PDS is provisioned on Elastic Projects infrastructure |
| Git remote on Elastic Projects |
Git ships the app. The labs/elastic tree is a separate product workspace |
| Vercel pull from Spaces |
Build still comes from git. No ep pull in CI with auth yet |
| Durable cloud replica |
DATABASE_URL / Neon is documented but not wired |
Storage and files
| Limit |
Value |
| Text document size |
100 KB per file (lib/repo/replica.ts) |
| Path depth |
12 segments max |
| Path length |
180 characters max |
| Allowed path characters |
Letters, numbers, dots, dashes, brackets, slashes |
Text kinds in UI and ep |
md, json, sql, txt, csv, ts, tsx, js, jsx, mjs, cjs, css, html, svg, yaml, yml, toml, sh |
| Binary kinds |
png, mp4, bin — placeholder hashes only; no blob upload to PDS yet |
| Local database |
Single SQLite file (DATABASE_PATH). WAL mode on disk |
Sync and version control
| Behavior |
Detail |
| Pull |
Merges published heads into your checkout. Skips dirty paths (no clobber) |
| Push |
Sends only dirty files as a pack, not a full tree clone |
| Incremental pull |
listRepoOps and cursor-based fetch are not implemented. Live pull scans listRecords |
remoteCursor table |
Stored but not used for incremental ops yet |
| Commit model |
Local commit chain over dirty packs. Not Git packfiles or ATProto commit objects |
| Binary push/pull |
Not supported end-to-end |
| Delete propagation |
Removing a file from disk with ep does not delete remote paths |
Live Spaces
| Limit |
Detail |
| Space authority on create |
Signed-in person DID, not organization ODS |
| Network on demo/guest |
No XRPC. SQLite only |
| Credential errors |
Usually means you are not on the member list |
| Full record scan |
Every pull may walk all file records per writer repo |
Organizations (ODS)
| Limit |
Detail |
| Preview org DIDs |
did:plc:hearthorg2… and *.elasticprojects.test are local fabrications, not PLC-registered production identities |
| Acquire / nest |
Parent pointer in SQLite. Not a file copy between orgs |
| Readiness checklist |
Six checks in UI; several are manual or preview-only |
| Local pack |
You operate compute and storage, or set HOSTED_ODS_PROVIDER=fly for one-click machines |
Web UI
| Limit |
Detail |
| Guest mode |
Guest DIDs (did:plc:guest…) are local. Good for share-link testing |
| Invite flow |
Demo invites use fixed test accounts; live invites need Spaces accounts |
| File editor |
Text only. Binary files show hash metadata |
| Cloud wallpaper |
Requires WebGPU. Falls back to CSS gradient without it |
ep CLI
| Limit |
Detail |
| Modes |
Local demo replica only |
| OAuth / live |
Not wired |
| Default viewer |
Demo user unless EP_VIEWER_DID is set |
| Import scope |
Walks --dir for text files. Does not delete removed paths from the replica |
| npm scripts |
Pass CLI flags after --: npm run ep -- pull labs/elastic --dir ./tree |
Vercel and production hosting
| Limit |
Detail |
| Session persistence |
Ephemeral without Neon |
| SQLite on serverless |
Not viable. Functions do not share a durable disk |
| OAuth |
Requires stable UI_PUBLIC_URL matching deployment origin |
| Staging |
No separate staging project assumed. Use Vercel preview URLs per branch |
Security notes (alpha)
- Join URLs (
/join/{token}) are public teasers: name, description, member count. No file contents.
- Share tokens are capability URLs. Treat them like passwords.
- OAuth sessions live in SQLite (or future Postgres). Protect
DATABASE_PATH on disk.
- No audit log, SOC2, or enterprise SSO in this codebase yet.
- Space credentials are powerful. Compromised session ≈ read access to all repos in a project.
See security.md for the alpha audit and deploy checklist.
What we are building toward
- Durable Postgres replica for the hosted app
- Org DID as live space authority
listRepoOps incremental pull
- Binary blob upload and download
ep with OAuth for live Spaces
- Optional CI pull of product trees with service credentials
Until those land, use local preview + ep for dogfooding version control, and git for shipping the host.