Maturity: Limited preview, in active development. The surface documented
here is built and tested end to end, and published as release candidates
(
0.x-rc), but wire shapes can still change. Pin exact versions.Access is granted per team rather than self-serve: packages are on a private
registry, and your application record is created by us. Everything runs on
testnets, with no production environment stood up. Do not gate real value on
it yet.What you can build with it
The common thread is a gate that counts people instead of accounts. Each of these runs off the same sign-in and network membership proof.- Token airdrops and claims. One allocation per real person. Deduplicate on the pseudonym the verifier hands back and someone holding a hundred wallets still gets one.
- Gated access. Private betas, community spaces and allowlists where the gate is network membership rather than a token balance or an invite code.
- Rate limits that count people. Per-person quotas on a free tier, where signing up again does not reset the counter.
- Anonymous participation that still has consequences. Votes, reviews and ratings. Pairwise mode gives you a stable pseudonym, so you can enforce one per person and ban an abuser without ever learning who anyone is.
How it works
Array does not authenticate your users. The device asserts, and your server verifies. That is the opposite of an ordinary federated login, where a provider authenticates the user and vouches for them to you.Diagram: the same login, both ways round
Diagram: the same login, both ways round
Under Array the device signs for itself, and the only thing you trust is a key
you pinned yourself.
What you can do today
Authenticate a user in one of two subject modes. Disclosed mode gives you their global AliveID (aka ArrayID). Pairwise mode gives you a per-application pseudonym that is stable for you and uncorrelatable anywhere else. Prove the user is an admitted [ ] network member, distinct from every other member. A sign-in request can ask for a zero-knowledge membership proof. Verified against an operator-signed Merkle root that your server pins, it returns themembership_proven verdict and a unique flag. That is the only
tier carrying a sybil guarantee, and it is the reason to integrate Array
rather than any other sign-in.
Ask Array about a signed-in user, with their permission. A
capability grant authorises your application to ask
specific questions about that person, such as whether they are connected to
someone else. The capability set is agreed per integration.
What isn’t here yet
- No public npm distribution. Packages are on a private registry, with access granted per team.
- Proving artifacts come from a development ceremony. Deployed verifiers carry
DEVELOPMENT_ONLYprovenance, so proofs have no cryptographic soundness guarantee until a production trusted setup runs. Use preview environments only, and do not gate real value on this yet. - On-chain verification is not documented here either. A contract can check a membership proof directly against roots posted on-chain, which suits an airdrop claimed by transaction rather than gated by your backend. It is built and testnet-only.
- Asking Array about arbitrary people is not supported and will not be. A partner machine key (M2M Key) on its own resolves no person. Every question about a subject requires that subject’s authorization.
Next
Get access
Register your application, generate a presenter key, install the packages.
Quickstart
A working sign-in. Sign the request, render it, verify the response.
Reference implementation
There is a complete, working web relying party, and we share it on request. It covers the whole flow against a local stack: signing the request, rendering the QR, the consent sheet on the phone, offline verification, and the verdict. It goes further than this guide does, into capability grants and on-chain claims, so it doubles as a preview of what lands next. It also ships a headless device simulator, which means you can drive a sign-in end to end without a phone in the loop. Useful for a first read, and for tests. Ask your contact on the team.Feedback
This is a preview, so the feedback loop is the product. File issues against the GitHub org or reach your contact on the team. Send the package version, the call you made, and the errorcode.