Hello all,
I'm wondering if I can get some clarity around this topic as the Forge cost estimator assumes the developer knows the usage of their plugin.
I'm working on a very small plugin that would only index space attributes in JIRA so they can be JQL'd.
The entire plugin is just a manifest.yml file that declares the attributes so they be indexed. Over time we may add more attributes to the index.
The plugin itself does nothing else. It will not be deployed to the marketplace, it'll only be deployed on my employer's JIRA sites.
What would the forge cost be in this instance? The only close thing I can find on the estimator is the "Key Value Store", but I'm not sure of the storage needed for reads/writes to provide my employer an accurate estimate.
Any guidance here is appreciated.
Thank you
Jean's answer is right on the cost — but I'd add the reason why, plus two things that will bite you later.
On cost. Forge moved to consumption-based pricing on 1 January 2026 and the old quota system was retired. You're billed on things you actually consume: function invocations, hosted storage (KVS / Custom Entity Store / SQL / Object Store), egress, LLM calls. A manifest-only jira:entityProperty declaration consumes none of them — the index lives in Jira's own index, and the property values live on the Jira platform, both covered by your existing subscription. So $0, and it stays $0 as long as nothing in the app runs.
The thing worth flagging: something has to write those entity properties. If that's an external script or CI job hitting PUT /rest/api/3/issue/{key}/properties/{propertyKey}, you stay at $0 on the Forge side. If you later add a product trigger or scheduled function inside the app to set them, that's where invocations — and cost — start. Worth deciding now which side of that line you want to be on.
Two gotchas on the module itself:
jira:entityProperty modules combined can't declare more than 100 values. You said you may add attributes over time, so I'd start on jira:entityPropertySetinstead — it bundles multiple properties under one module with no limit. Migrating later means re-indexing, so it's cheaper to pick it up front.entityType defaults to issue. You said "space attributes," so if you mean project-level properties you need to set it explicitly:modules:
jira:entityProperty:
- key: space-attrs
entityType: project
propertyKey: space-attrs
values:
- path: costCentre
type: string
searchAlias: costCentre
and then in JQL you prefix with project: project.costCentre = "R&D", or the long form project.property['space-attrs'].costCentre = "R&D".
One last practical note: pick your type carefully, because it decides which operators you get. string gives you exact match only (=, !=), text tokenizes and gives you ~ but no exact match or ordering, number and date give you ranges and ORDER BY. Getting that wrong is the most common reason a property indexes fine but won't query the way people expect.
Ah thank you so much for the detailed write up! I was not aware of the jira:entityPropertySet manifest, but that makes sense to start with that as opposed to the jira:entityProperty to avoid the limit altogether.
And yeah as far as hitting that API endpoint, I'm just doing it via JIRA Automation rules (for ongoing support) and an external python script (for the initial roll out)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Forge offers a generous free usage allowance for each service. Even if you generated costs for Atlassian, it would very likely fit this free budget.
We have public apps with ~100 installation and fairly little (but more than zero) logic, they happily fit the free budget.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Pierre Ibrahim !
Since your Forge app is purely declarative and only defines attributes in the manifest.yml for Jira JQL indexing, your monthly Forge cost will be $0.
Because the app doesn't execute any backend functions or use Forge Storage (Key-Value), it consumes no billable Forge resources. The entity properties themselves are stored directly on the Jira Cloud platform (updated externally via REST API), which is already included in your existing Jira subscription at no extra charge.
Here is a quick breakdown of how this works:
For more technical details on property indexing and platform quotas, you can check out the official docs:
Hope this helps clear things up for your team!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.