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.