Plain HTML, CSS and JavaScript. No framework, no build step, no bundler, no server-side rendering. The same files are served to everyone; the editor is code your browser runs, not a service your browser talks to. That is also why the app works offline after the first load: there is nothing to fetch per keystroke.
The editor is a static page
Where a draft lives
| Data | Where | Who can read it |
|---|---|---|
| The open document | localStorage, this browser profile | You, and anything else running in that profile |
| The library and images | IndexedDB, this browser profile | You, on this device |
| An exported file | Wherever you saved it | Whoever you give it to |
| Pro sync copy | Your own Google Drive | You and Google, as with any Drive file |
Scroll the table sideways to read every column
There is no account record and no server-side copy on the free plan. Clearing site data deletes the local library — which is the trade-off: nothing can leak from a server that does not hold it, and nothing can be recovered from one either. The privacy page written for writers lists the backup routes.
What the server does
The only server-side API is /api/*, and it exists for two jobs: knowing which plan an account is on, and deciding which features are enabled. It stores subscription state and flags. It has no endpoint that accepts a title, a paragraph or a file.
- Sign-in for Pro uses Supabase; billing uses Dodo. Both are about money and entitlement, not documents.
- Pro Cloud Sync mints a short-lived Google Drive token. The browser uploads the document directly to your Drive; Quorly brokers the credential and never receives the file.
- Local Sync writes
.quorlyfiles to a folder you pick, through the browser's file APIs. No server involved at all.
What leaves the page
Exactly four things, and none of them carries document text:
- Assets from the same origin — the page, the stylesheet, the scripts, the fonts.
- Cloudflare Web Analytics, which counts visits without cookies or cross-site identifiers.
- Google Analytics, for aggregate traffic. It may set cookies; the privacy page says so plainly rather than claiming otherwise.
- A cookieless event to
/e— an allowlisted name such asfirst_keystrokeorexport, plus at most one short label like the export format. Never text.
Open DevTools → Network and type a paragraph. The request list stays quiet.
No AI, by architecture
The editor ships no model, no assistant and no endpoint a model could be pointed at. Adding one would mean building a service that receives drafts — a change large enough to appear in the network tab on first use. The no-AI page turns that into three questions anyone can ask of any writing app.
In browsers that support WebMCP, the editor does register tools that a local agent in your session can call. That is the opposite direction: an agent you already run can work against the page, the way it could against any tab, and nothing is sent anywhere.
Why build it this way
- Longevity. Static files and plain text outlive frameworks. An export today opens in twenty years.
- No lock-in. Markdown, PDF, EPUB and
.quorly— the first three are standards, and the fourth is a zip of HTML you can open. - Verifiability. Claims about privacy are worth what you can check. This design is checkable in a minute.
- Cost. There is no document storage to pay for, because there are no documents on the server.
Ready when you are
Start writing — free
Open the editor and watch the network tab stay quiet.