
Watching Now puts a small panel on each Jira work item that lists who else has it open right now. If you want, it also lists who had it open in the last 1, 4, 8 or 24 hours. Two people editing the same bug find out before they both write the fix.
It's off in every project until a project admin turns it on. Nothing is recorded in a project that's off. Each record expires when the window ends (24 hours at most), and Forge then removes it from storage, which can take up to 48 more hours.
This has nothing to do with Jira's Watch button. The app never reads or changes a work item's watchers.
Open a work item and add the Watching Now panel from the Apps button. The panel shows two short lists.
You never see yourself in either list. Up to 20 people are listed under "now" and 30 under "earlier". When there are more, the panel says how many it left out.
Anyone can click "Don't list me" in the panel. From then on the app records no views for that person on any work item in the site. Their records on the work item they're looking at are deleted at once. Records they left on other work items before hiding stay in those lists until the window ends. "List me again" undoes it. A hidden person still sees the lists.
An open work item checks in every 30 seconds while its browser tab is visible. Each check-in saves one small record (who, and when) in the app's Forge storage. Someone counts as "has this open" for 2 minutes after their last check-in, and the admin can stretch that to 3, 4 or 5 minutes. So when a person closes the work item or switches tabs, they move to the earlier list (or drop off) within that time.
Check-ins come from two places. The panel sends them while it's on screen. The app also adds an invisible script to the issue view that sends the same check-in, so people count even when they haven't opened the panel themselves. When both run in the same browser, the app skips the write if that person's record for the work item is less than 20 seconds old, and the invisible script slows to once a minute. In a project that's off, the invisible script asks once when a work item opens and then stops. Hiding and showing the tab doesn't make it check in early, and it keeps the wait after an error.
A page stops checking in after an hour, so a tab left open overnight doesn't keep someone listed. The panel shows an "I'm still here" button to carry on.
The app stores account IDs only. Names and avatars are drawn by Jira's own user component in the panel.
Each record holds an account ID and a time. It's stored with an expiry that matches the window (2 to 5 minutes when the earlier list is off, otherwise 1 to 24 hours). When the earlier list is on, the app also keeps a second, short record per person that expires after the "has this open" minutes, so people here now are read first. The app never reads a record past its window. Forge deletes expired data on its own schedule, and its docs say that can take up to 48 hours, so a record can sit in storage for up to 72 hours in total. Records are kept per project and work item, and the storage key holds a hash of the account ID rather than the ID itself. The value holds the account ID.
Inside the window your admin picks, the earlier list is a record of who opened the work item. Beyond that window the app keeps no history, and there's no log, report or export. Project settings (on or off and the two numbers) and each person's "Don't list me" choice (stored under a hash of their account ID) are the only things kept long term. The app runs on Atlassian Forge, has no servers of its own and makes no calls outside your Jira site. PRIVACY.md has the details.
| Scope | Why |
|---|---|
read:jira-work | Ask Jira, as the signed-in user, whether they can administer the project before saving its settings |
storage:app | Keep presence records (expiry of 24 hours at most), each project's settings and "Don't list me" choices |
That permission check is the app's only Jira API call. It can't change anything in Jira.
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 and imports). The last two use the Forge CLI you have installed.
Use the support link on the app's Marketplace listing. Include the message the panel or settings page showed.
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.