Skip to content

Extensions

xNifty edited this page Oct 11, 2026 · 1 revision

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.

Where to get them

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)

Install

  1. Copy a folder into the extensions directory, default data/extensions/<id> relative to the server's working directory (override with EXTENSIONS_DIR). The folder name must equal the manifest id. Hidden folders are ignored.
  2. 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.
  3. Site admin: Admin → Extensions → enable the extension → Save.
  4. 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 ….

Updating

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.

Running them well

  • Set PUBLIC_URL in .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 dead after 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 the Retry-After the 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.

Custom fields

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.

Clone this wiki locally