Repository navigation
Extensions
Extensions add outbound notifications (Discord, Slack, Teams, Google Chat, ntfy, generic HTTPS webhooks, email relays), custom task fields, and sandboxed panels on projects and kanban boards. Each one is a folder with a manifest.json. There is no plugin runtime: Ordryn reads the manifest, renders the settings UI itself, and delivers events.
This page covers installing and running them. Writing a manifest is covered in the server README and the Ordryn-Extensions wiki.
The bundled set lives in Ordryn-Extensions, not in the server repo:
| Kind | Extensions |
|---|---|
| Chat and push |
discord, slack, teams, google-chat, ntfy, claimed, mentions
|
| HTTPS webhooks |
webhook, comments, activity, lifecycle, email, due-dates, join-requests (site-wide) |
| Custom fields |
severity, estimate, fields-demo
|
| Panels |
standup (daily check-in), retro (kanban retrospective), callback-bot (callback tokens and inbound actions) |
- Copy a folder into the extensions directory, default
data/extensions/<id>relative to the server's working directory (override withEXTENSIONS_DIR). The folder name must equal the manifestid. Hidden folders are ignored. - Load it: either restart the server, or click Reload Extensions in Admin → Extensions. Reload rescans every manifest, syncs custom field definitions, refreshes hook bindings, and tells open browsers to refresh, all without a restart.
- Site admin: Admin → Extensions → enable the extension → Save.
- Project owner: project settings → Extensions (or the kanban board's Extensions tab) → enable, paste the destination URL, pick triggers → Save.
Both the site switch and the project switch are needed for project behavior. Settings appear only where the manifest's scope allows them: Admin (site), the classic project tab, the kanban tab, or Profile → Integrations for personal destinations.
Load errors are printed to the server log as extensions: failed ….
Copy the new folder over the old one, then Reload Extensions (or restart). Existing destinations, secrets, and per-project settings are kept. When an update adds new events, such as project.deleted, existing destinations don't get them automatically; owners tick the new trigger, or use * to follow every event the extension declares.
-
Set
PUBLIC_URLin.env(see Configuration) so messages include working task links. - Outbound requests go from the server to Discord, Slack, your relay, and so on. Allow outbound HTTPS from the host.
- Failed deliveries retry with backoff and are marked
deadafter 8 attempts. Project owners can see delivery history and retry from the Extensions tab. Discord and Google Chat rate limits (HTTP 429) are retried using theRetry-Afterthe service sends. - Quiet hours and hourly or daily digests are per destination.
- Destination secrets are visible only to owners. Other members see which destinations are on, their triggers, and the webhook host name.
Field extensions (severity, estimate, fields-demo) create field definitions in the database when loaded. Removing the folder hides the field. Stored values stay in the database, so putting the folder back restores them.
Getting started
- Home
- Self-hosting
- Building-the-server
- Configuration
- Admin-settings
- Reverse-proxy
- Extensions
- Upgrading
Using the API
Help