Issue Dates Calendar

Issue Dates Calendar for Confluence

Put Jira issues on a calendar inside any Confluence page. You pick a JQL query and a date field, and the macro shows a month grid, a week or a day-by-day list. The date can be due date, created, updated, resolved or any date custom field, alone or as a start and end pair. Every issue links to Jira.

Each reader sees only the issues they can see in Jira, because the search runs with the reader's own Jira permissions.

What it does

JQL errors show Jira's own message. A custom field that doesn't exist or isn't a date is named in the error. Cut-off results and issues without a readable date are reported under the calendar.

Setup

A site administrator installs the app for Confluence and then for Jira on the same site. Both installs are needed (see Requirements).

  1. Edit a Confluence page, type /Issue Dates Calendar and insert the macro.
  2. Enter the JQL query, for example project = ABC AND statusCategory != Done. It's the only required setting.
  3. Pick the date field, or pick "Custom date field" and enter its ID (customfield_10015, cf[10015] or 10015).
  4. Leave the end date field on "None" for one date per issue, or pick a second field for spans. Then set the default view, the first day of the week and an optional title.
  5. Publish the page.

To find a custom field ID, go to Settings, Issues, Custom fields in Jira and open the field's Edit details page. The number in the page address is the ID.

Limits

LimitValueWhat happens
Issues per view500 loadedThe search also covers a day or two around the range, and those issues count toward the 500. When more match, the earliest issues in the range are shown and the notice gives the exact number shown.
JQL length2,000 charactersLonger queries are refused in the settings check.
Jira time budget20 seconds per loadThe budget also bounds a request that is still running and the reading of its response. A further page starts only with 6 seconds left. Loading then stops early and the notice says how many issues are shown.
Rate limitsRetry-After up to 3 secondsThe app waits and retries. When Jira asks for a longer wait, the app doesn't retry and says Jira is limiting requests.
Summary length200 charactersLonger summaries end with "…".
Cache5 minutes per reader and viewRefresh reloads from Jira. A Refresh within 20 seconds of the last load uses the cache. A result that ran out of time isn't cached, so the next load asks Jira again.

How dates are placed

Date fields, such as Due date, Start date and other Date custom fields, are calendar days and are never shifted.

Date-time fields (Created, Updated, Resolved and Date Time custom fields) land on the day they fall on in the reader's Atlassian time zone, which is shown under the calendar. Jira compares them in the reader's Jira time zone instead, and the two can be up to 26 hours apart. So the search is widened by two days on each side for date-time fields (one day for date-only fields) and then filtered by the local day. Issues near midnight aren't lost.

An issue whose end is before its start shows on its start day only, and the notice counts it.

JQL safety

Your JQL is wrapped as (your JQL) AND <date range> ORDER BY <date field> ASC, key ASC. Before that, the macro checks that parentheses and quotes are balanced outside quoted text and that no stray backslash could escape the added ). If something is off, it asks you to fix the query. Any ORDER BY in your query is ignored. The JQL goes only in the body of Jira's search API, never in a URL.

Permissions and data

Requirements

Confluence Cloud and Jira Cloud must be on the same site. The macro calls that site's Jira as the reader.

The app must be installed for Jira as well as for Confluence. A site administrator adds it to Jira after the Confluence install. Without the Jira install, Forge refuses every Jira call with "The app is not installed on this instance", and the macro tells readers that an administrator needs to install the app for Jira.

In the manifest (app.compatibility), Confluence is the required product and Jira is optional. Forge's manifest check accepts only one required product, so Jira can't be marked required too. That's why the Jira install is a manual step. We haven't run the app on a live site yet. Public answers from Atlassian staff on the developer community say the second install is needed, so we treat it as required (see NOTES.md).

If Jira refuses a search for any other reason, the macro shows a permission message and says what an administrator should check. It doesn't show an empty calendar.

Support Zovo

Zovo builds and maintains this app. If it saves you time, you can support the work on GitHub Sponsors. Sponsorship is optional, and the tool works the same without it.

Zovo is made by theluckystrike on GitHub.

More tools by Zovo

Support this work

If this app saves you time, you can support the work on GitHub Sponsors. Monthly tiers start at $5, and one-time tiers start at $15. Sponsorship is optional, and the tool works the same without it.

Sponsor on GitHubZovo on GitHub