
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.
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.
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.
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.
issuetype != Bug, that narrows which children are counted at every level.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.
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.
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.
The app runs on Atlassian's Forge platform with no outside servers and no calls to other sites. It asks for two scopes.
| Scope | Why |
|---|---|
read:jira-work | Search for child work items and list fields, as the signed-in user |
storage:app | Keep 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.
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.
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.
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.
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.