Every new account starts at trust level 0.
Established people shouldn’t.
Discourse keeps newcomers restricted because it can’t tell a real, established person from a bot at signup. This plugin lets a member link their Mask.ID from their profile; your forum receives a tier — Trusted, Building or Low — and nothing else. Then it shows a badge, marks their posts, and can start them above TL0. Open source, installed with one git URL.
A tier, and a way to act on it
A native Discourse badge per tier (Gold / Silver / Bronze), a shield beside the member’s name on every post, and a trust-level floor you set per tier — a Trusted Mask.ID can start at TL2 instead of serving the new-user restrictions. A floor, never a ceiling: nobody is demoted, staff and locked levels are untouched.
Anything personal
No Mask.ID username, no wallet address, no referral graph, no profile content. The forum stores a pairwise reference code that is meaningless on any other site. The member can unlink at any time; a Mask.ID revoked or deleted on the other side unlinks on the next refresh.
Install
Self-hosted Discourse: add the plugin to containers/app.yml and rebuild. (Discourse’s hosted plans allow third-party plugins only on the higher tiers; self-hosted instances install anything.)
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/EricStanek/maskid-discourse.git
cd /var/discourse && ./launcher rebuild app
Then Admin → Settings → Plugins → maskid and tick maskid enabled. The Mask.ID platform key is fetched once from https://app.mask.id/.well-known/maskid-attest-key and pinned. No API key is needed during the pilot.
Settings
| Setting | Default | Meaning |
|---|---|---|
maskid trust level trusted | 2 | Minimum trust level for a member whose Mask.ID tier is Trusted |
maskid trust level building | 1 | …whose tier is Building |
maskid trust level low | 0 | …whose tier is Low |
maskid refresh days | 1 | How often each linked member’s tier is re-read from Mask.ID |
maskid show poster icon | on | Shield beside the name on posts |
maskid key id | production key | The pinned platform key; responses signed by any other key are rejected |
How it works
- A member clicks Link my Mask.ID on their forum profile. The plugin mints a single-use code and sends them to Mask.ID’s consent page with your forum’s request.
- The member sees exactly what will be shared — a tier and a reference code — and approves it with their own key on Mask.ID.
- Mask.ID returns a platform-signed response to your forum (in the member’s browser, and to your webhook if your forum is on public https). The plugin verifies one Ed25519 signature against the pinned key, checks the single-use code, the user, and your host, and stores the tier.
- Every refresh days, the plugin re-reads the member’s current tier. Revoked or deleted on Mask.ID → unlinked here.
The full contract is the Attestation API — the same one every other integration uses. The plugin’s source is on GitHub (MIT).
Why a forum admin would want this
You already run a trust-level system; it exists because signup can’t tell humans from bots, so it punishes every genuine newcomer for weeks. A Mask.ID tier is a trust level the member earned elsewhere — from people who know them, on an identity that is expensive to fake — and it plugs into the levels you already understand. Bots still start at zero. Banned members can’t come back with a fresh email. And a member who links once carries their standing to every forum that installs this.