ZAYEED preview
Home / Docs

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

  1. Write the stem as marked text. Mark whatever formatting is significant — a subscript, an accent, a case distinction.
  2. 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.
  3. Set the leniency for the item, and try to break it in the tester beside the editor.
  4. 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.

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

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.