Docs · Apps for Jira

JQL Extensions Library

31 JQL functions for overdue, stuck, and stale work — native-speed filters for search, boards, and gadgets on Jira Cloud.

Runs on Atlassian · No data leaves Atlassian

01 — How it works

Functions that expand to ordinary JQL

I built JQL Extensions Library so you can write short, memorable filters instead of long native JQL every time. Each function expands to a JQL fragment. Jira’s own index evaluates it under the searcher’s permissions — the same way a hand-written filter would.

There is no external server in the path. The app is Forge on Jira Cloud. Handlers return JQL fragments only; they do not fetch issue lists over the network. That is why it can stay on Atlassian with zero customer-issue egress.

Open Settings → Apps → JQL Extensions Library for Try it, Recipes, and the function catalog. Or type a function directly in issue search.

02 — Key features

Try it, recipes, and 31 functions

Try it screen turning a question into issue IN overdue().
Try it turns “what’s late?” into issue IN overdue() before you save anything.
Recipes list with Run buttons for common filters.
Recipes for due-date debt, unowned WIP, stuck flow, hygiene, and stale backlog — each with a Run button.
Native Jira issue search using issue IN overdue().
Functions run in native issue search, boards, backlogs, gadgets, and automation.

Popular functions

overdue()
Open issues past their due date
stuckInProgress("7")
In Progress with no updates for N days
staleIssues()
Open issues not updated in 30 days
noDueDate()
Open work missing a due date
unresolvedNoComponent() / noFixVersion()
Hygiene filters
issuesUpdatedLastWorkingDay() / weekendIssues() / businessDaysAgo("n")
Business-calendar helpers (shared UTC calendar)
childrenOfIssue("KEY") / linkedByEpic("KEY")
Hierarchy via parent

The in-app catalog lists all 31 functions with examples.

03 — Setup / install

Install from the Atlassian Marketplace

  1. Open the Atlassian Marketplace listing for JQL Extensions Library (Jira Cloud).
  2. Choose your site and install. A site admin must approve the scopes.
  3. Scopes used: read:app-data:jira, write:app-data:jira (precomputation only).
  4. After install, open Settings → Apps → JQL Extensions Library to confirm the app page loads (Try it / Recipes / catalog).

Jira Cloud only. No Data Center / Server. No ScriptRunner-style scripting — these are fixed JQL functions.

04 — Usage

Type it where Jira already accepts JQL

  1. Open issue search (or a board / backlog / gadget filter).
  2. Switch to JQL if needed.
  3. Type a function, for example:
issue IN overdue()
issue IN stuckInProgress("7")
issue IN staleIssues()

Quoted string arguments are required where a function takes a parameter (days, issue keys, and similar).

Save the query as a filter, board filter, or dashboard gadget like any other JQL.

Or use Try it / Recipes in the app: pick a question, copy the JQL, or open it in issue search. Nothing is saved until you say so.

Important notes

  • Personal “my issues” queries should use native JQL (assignee = currentUser() …). App functions cannot safely embed currentUser() because Jira caches function results site-wide.
  • Business-day and weekend functions use a shared UTC calendar so every user sees a consistent answer.
  • Function results can lag issue changes by up to about one hour (hourly precomputation refresh).
  • NOT IN follows normal JQL rules (empty fields are not included in negation).

05 — How to test

A five-minute smoke check

  1. Install check: Settings → Apps → JQL Extensions Library opens without error.
  2. Try it: Pick “what’s late?” (or similar). Confirm the app shows issue IN overdue() and a simple match window.
  3. Native search: In Filters → View all issues → JQL, run issue IN overdue(). You should get open work past its due date (or an empty set if nothing is overdue). Permissions match any other filter.
  4. Parameterized function: Run issue IN stuckInProgress("7"). Confirm quoted args are accepted.
  5. Recipe: From Recipes, press Run on one starter filter and confirm it opens issue search with that JQL.
  6. Save: Save one query as a filter and reopen it — same results shape as a native filter.

If a function name is unknown, re-check install and wait a minute for Forge registration, then hard-refresh issue search.

06 — Support

Questions land with me

I am Berk Karabacak, an individual developer. Public contact for this app is info@berkly.nl only.

Privacy: berkly.nl/privacy. DPA: berkly.nl/dpa. More app docs: berkly.nl/docs.

Runs on Atlassian · No data leaves Atlassian