Browse documentation

Hooks / Docs / JQL functions and saved searches

JQL functions and saved searches

Last updated 24/08/2026

Hooks registers twelve JQL functions into Jira's native search — usable in the search bar, saved filters, boards, dashboards, and subscriptions.

Eleven built-ins (no script needed)

Each takes an inner JQL as its argument and supports in / not in:

linkedIssuesOf · subtasksOf · parentsOf · epicsOf · childrenOf · issuesInEpics · hasSubtasks · hasLinks · hasAttachments · hasComments · hasWorklogs

issue in linkedIssuesOf("project = ABC AND status = Blocked") AND priority = Highest

hooked() — your script as a search

Save an onJql hook and its name becomes a search: issue in hooked("unassigned-recent"). The script returns either a JQL string or an array of work item keys (capped at 1,000). Broken hooks degrade to a valid no-match result — a saved filter never breaks — and every evaluation is recorded in Run history.

Saved complex searches (the Enhanced Search pattern)

There is nothing app-specific to save: compose the query in Jira's own search, save it as a normal Jira filter, and use that filter on boards, dashboards, and subscriptions. The JQL functions tab has a Try a search panel to preview a query's first matches before saving. Jira caches function results rather than re-running them on every search; Hooks keeps them current for you — searches reflect hook changes immediately and data changes within a few minutes. Nesting one custom function inside another's argument is not supported — flatten with a single hooked() script.