Epic Totals

Epic Totals for Jira

Epic Totals adds up the children of an epic, or of any parent work item, and shows the result where you already look. Story points, original estimate, time logged, time remaining and counts by status sit in one issue panel. A dashboard gadget does the same for a whole list of epics picked with JQL.

Jira's own roll-ups live in Plans, which needs Premium or Enterprise. This app works on Standard too, and it doesn't ask you to build an Automation rule for every sum.

What you see on an epic

Open any epic and add the Epic Totals panel from the Apps button. It reads the epic's children as you, so it only counts what you're allowed to see.

The panel works on stories as well. On a story it adds up the sub-tasks.

Two levels, counted once

By default the panel reads two levels, so an epic picks up its stories and their sub-tasks. Each work item adds its own values exactly once. The app never reads Jira's aggregate time fields, because those already contain sub-task time and would count it twice.

Work item progress always counts the direct children. Story points come from the direct children unless you switch Options to count every level. Time always adds up every level you've included. If you switch to one level, the panel tells you that sub-task time is left out.

The parent's own estimate and logged time aren't part of the totals. They're still on the work item itself.

The dashboard gadget

Add the Epic Totals gadget to a dashboard and enter a JQL query for the parents, for example project = ABC AND issuetype = Epic AND statusCategory != Done ORDER BY rank. You get one row per parent with its status, children done, points, time logged, time remaining and a progress bar. Rows keep the order of your query.

These are the gadget settings.

The totals above the table count each work item once, even when it shows up under two rows. That happens when your query returns an epic and one of its stories.

Story points on your site

Sites name the field differently. The app looks for Jira Software's own story points field first, then for number fields called "Story Points" or "Story point estimate". If your team uses something else, pick it from the list of number fields under Options (panel) or in the gadget settings. Empty, negative and non-numeric values count as "no points", and so do values above 1,000,000 (almost always a typo). Each work item's value is added as it is, without rounding, so 0.1 and 0.2 make 0.3 and three items of 1/3 make 1. Totals show at most three decimals.

Speed and limits

Results are cached for 60 seconds per person. Refresh reads Jira again once the cached result is at least 10 seconds old. The panel reads up to 2,000 work items and the gadget up to 3,000. Each load stops reading from Jira after 18 seconds. It won't start a new request with less than 2 seconds left, and it stops waiting for a request that hasn't answered by the 18-second mark. When a limit is hit, the totals say they're partial instead of quietly showing smaller numbers. If Jira is too slow to return anything at all, you get a "Jira was slow" message and a Refresh button.

Percentages round down, so 199 of 200 shows 99% and never 100% until the last item is done. Time is shown in hours and minutes (for example 37h 30m), because the app can't read your site's working-day setting without admin access.

Permissions and data

The app runs on Atlassian's Forge platform with no outside servers and no calls to other sites. It asks for two scopes.

ScopeWhy
read:jira-workSearch for child work items and list fields, as the signed-in user
storage:appKeep the 60-second cache, a 1-hour field list and your panel options

It can't change anything in Jira. Cached totals are keyed by a hash of your account ID and expire after 60 seconds. Panel options are kept for 30 days. See PRIVACY.md for details.

Install from source

You'll need Node.js 22 and the Forge CLI.

npm install
forge register        # replaces REPLACE_ME in manifest.yml with your app id
forge deploy -e development
forge install --product jira

Run the checks with npm test (unit tests), npm run validate (offline manifest check, plus a check that every module key exists in the Forge schema) and npm run check-frontend (UI Kit sources). The last two use the Forge CLI you have installed.

Support

Use the support link on the app's Marketplace listing. Include the Jira error text shown in the panel or gadget, and leave out work item summaries you don't want to share.

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