Development
Security
How to report a vulnerability, and the model that backs the app.
Reporting a vulnerability
Do not open public issues
Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.
Report privately via GitHub Security Advisories: open the repository's Security tab and click Report a vulnerability.
Include as much as you can:
- A description of the vulnerability and its impact.
- Steps to reproduce (a proof of concept if possible).
- The affected component (app/package) and version or commit.
- Any suggested mitigation or fix.
What to expect
- Acknowledgement within 7 days.
- Updates while the fix is investigated and worked on.
- Credit in the advisory once a fix ships, unless you prefer to remain anonymous.
Scope & supported versions
This policy covers the code in this repository. Third-party dependency issues
should be reported upstream (but feel free to notify us too). Security fixes are
applied to the latest release / main branch.
The security model, briefly
Understanding what already protects the app helps when assessing a report:
- Authorization is server-side. Every read and write is checked in
packages/api; the frontend only mirrors checks for UI. See Permissions. - Tenants are isolated. Every query is organization-scoped; cross-org access is
the backend's responsibility (
assertOrgPermissionagainst the resource's own org). - Secrets are validated at startup. Placeholder or low-entropy
BETTER_AUTH_SECRET/POSTGRES_PASSWORDvalues are rejected. - Postgres is not exposed. It binds to
127.0.0.1:5432; in production only Caddy is public. - Everything is audited. Mutations append an audit row in the same transaction — see Activity log.
- Rate limiting guards the API and auth routes (
RATE_LIMIT_MAX,RATE_LIMIT_AUTH_MAX).