Community Extension Checklist
Maat extensions are ordinary packages: a MaatExtension, a VizierExtension,
or both, opted into by name through withExtensions or Panel(extensions:).
Nothing scans pub.dev, and nothing installs itself. This checklist is the
bar a package clears before it is worth linking from
Community Extensions — a reviewer’s judgment call,
not an automated gate.
An extension author self-reports against this list. A reviewer confirms each item before the package is added to the directory.
- Public APIs only, explicit activation. The package imports only the
public surface of
maat,vizier, and any other package it extends — nosrc/reach-through. It registers nothing on its own: an application opts in by passing the extension towithExtensionsorPanel(extensions:). - Namespaced everything. Routes, commands, config keys, view names, and translation keys are prefixed so they cannot collide with an application’s own or with another extension’s. Any database objects (tables, migrations) are named the same way.
- Security review of what it exposes. Every route the package registers states the middleware it expects (authentication, authorization) and does not assume the application will supply it silently. State-changing routes carry CSRF protection or a documented exemption. Output rendered into views is escaped, not written past the view engine’s autoescaping.
- Documented install, rollback, and removal. The README says what an
application adds to opt in, what running
vizier:installor an equivalent publishes, and what to delete or revert to remove the package cleanly — including any published views, assets, or migrations. - No hidden behavior. No telemetry, no phone-home update checks, no remote code execution or dynamic code loading. Everything the package does is visible in its source and triggered by the application’s own calls.
- License, changelog, and version discipline. A
LICENSEfile, aCHANGELOG.mdthat describes each release, a semantic version inpubspec.yaml, and a stated compatibility matrix against Maat and Dart SDK versions. - A real security-reporting path. The package’s repository documents
how to report a vulnerability privately — a
SECURITY.md, a security contact address, or an equivalent that a reporter can actually use. A link to a repository with no such path does not satisfy this item. - Runnable proof. An
example/(or equivalent) application that exercises the extension end to end, plus evidence thatdart analyze --fatal-infos,dart test, anddart pub publish --dry-runall pass in the package directory. A directory entry links to that evidence (CI run, or reproducible local commands) rather than asserting it.
None of this is enforced by tooling against packages outside this repository. It is what a reviewer checks by hand before adding a row to Community Extensions.