Documentation
Enough to get a paper written, sat and marked on every shell — and to run the whole thing on your own estate if that is what your rules require.
Prefer to watch it? The complete video guide covers the same ground on the running application, chapter by chapter.
Getting started
Open Zayeed in a browser and it runs: no installer, no account, and it keeps working when the network stops. To put it on a machine properly, take the Windows, Linux or Android build — those add a real .mcq file on disk, lockdown mode for an invigilated sitting, and direct sync with another device on the same network.
Whichever you start with, the first run hands you an empty library. Write a question, make a quiz from it, and sit it — the whole loop works before you have signed in to anything.
Pairing a second device
Sign in on one device, choose Show a pairing code, and type the six digits on the next one. From then on the two are the same library: the same items, the same results, the same settings, converging through the operation log whenever they can reach each other.
A candidate with no account at all can instead join by code for a single sitting. The quiz keeps working when the lecture theatre's wifi does not.
Writing a question
- Write the stem as marked text. Mark whatever formatting is significant — a subscript, an accent, a case distinction.
- Give the accepted answers as an expression, not a list:
ANY,ALL,COUNT(n of m), with synonym groups where a concept has many surface forms. - Set the leniency for the item, and try to break it in the tester beside the editor.
- Add the item to a question set. A paper is assembled from sets, with a recorded seed so a shuffled paper is reproducible.
The whole grammar is on the authoring page.
Packs
Export a .mcq pack to hand a complete exam — items, media, rules, sets and the on-screen keyboard layout — to a machine with no network, or the whole desk at once as a workspace. Import it anywhere; the bridge between pack and database is lossless in both directions, and the same file type carries a sync bundle that merges two devices rather than overwriting one with the other.
Your licence
Every shell shows the licence it is running under, in Account → Your licence: the browser tab, the Windows and Linux desktop, and the phone. An entitlement is a signed statement about what was bought rather than a call to a server, so it is checked in the application in front of you, offline, and it stays readable in a hall where nothing reaches the internet — a licence check that needs the network fails on the one day it matters. Paste the token from your licence email to keep it on that device; remove it and nothing else changes. It is not a secret: copying it copies a seat, which is what seat accounting is for, so it sits in the same plain settings file you can read, copy and delete.
The licence-issuer key is pinned in all four shells — key id 5dee02756404b46a, deliberately a different key from the one that signs releases, because “this binary is genuine” and “this customer bought a team plan” are different claims and compromising one should not forge the other. A token signed by that key therefore reads as active, in grace or lapsed, identically in every shell. A token signed by anything else reports that it cannot be checked here rather than being guessed at: guessing valid would be a lie, and guessing expired would send somebody to a payment page they do not need.
Three things a licence here never does.
- It does not gate the work. A lapse closes paid features and nothing else — never a paper, a mark, a result, a certificate already issued, or an export. That is a test on both platforms rather than an intention.
- A seat ceiling is not a locked door. Going over is reported as a finding that says nothing has been blocked and the overage is on the next invoice, and the advice is given before the click rather than after it.
- It does not phone anywhere. There is no activation server to be unreachable.
There are six plans, five of them priced and one — OEM and embedded use — negotiated. The pricing page, the machine-readable feature feed and all four applications are generated from one catalogue, so a figure cannot appear on this website unless the identical figure is in the software, and a test fails the build if the two drift apart. What is not open is a checkout: this build carries no payment provider, so a licence is bought on an order form and invoiced.
Checking a download
Every build is published with its SHA-256 on the downloads page, and every shell can check a file for you in Account → Verify a release against a publisher key compiled into the application rather than fetched from this site — which is the point, since the page that serves you the file should not also be the only thing vouching for it. That key is b46538f1336eacf8, the signed manifest is at /dl/release.json, and its public half is at /dl/release-key.txt. Comparing the SHA-256 by hand still works and still catches a damaged file; the signed list is what catches a replaced one.
Self-hosting
Sync, pairing, join-by-code and LTI need a server. Nothing else does — authoring, sitting a paper and marking it never require one to be reachable.
Self-hosted deployments are supplied as a licensed package. SQLite is the default and PostgreSQL is a connection string away; both databases are generated from one schema definition, with a parity test that fails if they drift, so a self-hosted deployment is the same product rather than a reduced edition. For an on-premises or air-gapped estate, get in touch. For LTI configuration see Integrations.
The tests worth knowing about
- Conformance — 38,240 generated cases pin the grading grammar. "We improved the marker" and "we changed people's grades" are the same sentence.
- Schema parity — SQLite and Postgres are generated from one definition and must stay identical.
- Convergence — three replicas take thousands of randomly interleaved and partitioned writes, sync to quiescence, and must end byte-identical.
- Offline equivalence — the whole author, deliver, grade and report loop runs with no network and must produce identical scores. The Android version of it replaces
fetchwith something that throws. - Three transports converge — an account over the network, two devices on a local network with no server, and a file carried by hand must all end in the same rows.
- The three format guarantees — a named build gate: a file does not disclose its own structure, there is no global key, and any key holder can always export in the clear.
- A licence cannot reach the marker — the build fails if the grading engine ever depends on the licence package.
Still deciding?
The fastest way to judge a marker is to try to break it. Run a paper, answer it badly on purpose, and read the reason next to every mark.