| Version | Supported |
|---|---|
| 0.9.x | Yes |
| 0.5.x - 0.8.x | No |
| < 0.5 | No |
If you discover a security vulnerability, please report it responsibly:
- Do NOT open a public GitHub issue
- Email hasna@hasna.com with details
- Include steps to reproduce if possible
- Allow reasonable time for a fix before public disclosure
@hasna/todos stores all data in a local SQLite database. No data is sent to
external servers by default.
When API keys are configured:
- All API endpoints require
Authorization: Bearer <key>header - Keys are SHA-256 hashed before storage (plaintext never stored)
- Keys can have optional expiry dates
- The
/api/keysmanagement endpoints are always accessible
- SQLite database is stored on disk with filesystem permissions
- API key secrets are only shown once at creation time
- Webhook secrets are stored in plaintext (protect your database file)
- API endpoints are rate-limited to 100 requests/minute per key/IP
- Rate limits are enforced in-memory
- Set
TODOS_DB_PATHto a location with restricted permissions - Use API keys when exposing the dashboard on a network
- Rotate API keys periodically
- Use webhook secrets for payload verification