Hey everyone,
I’m working on migrating our Jira Connect app to adopt Forge (ahead of the Q4 2026 deadline) and I’ve hit a pretty significant roadblock. Would love to hear if anyone else has dealt with this.
The situation:
- We have customers running our Connect app in production
- Our entire backend is an ACSB (Atlassian Connect Spring Boot) application, built around Connect’s clientKey as the primary identifier (database keys, API endpoints, logging, you name it)
- I successfully migrated the webhooks (issue created/modified/deleted) to Forge triggers with
@ForgeRemote(associateConnect = true)- those work great - Now I’m trying to migrate the
/installedlifecycle event to Forge’savi:forge:installed:app
The problem:
When the Forge installed event fires, I’m getting a null value in AtlassianHostUser.
I think this happens because @ForgeRemote(associateConnect = true) tries to look up an existing Connect installation, but at installation time, that record doesn’t exist yet.
The issue webhooks work fine because they fire after installation completes, so the Connect record already exists.
I know Forge Invocation Tokens (FIT) don’t contain a client key.
For existing installations it’s ok since @ForgeRemote(associateConnect=true) handles the mapping and retrieves the AtlassianHost successfully. But, new installations don’t have clientKeys.
My question:
Has anyone successfully migrated from Connect’s /installed lifecycle to Forge’s avi:forge:installed:app event while maintaining a clientId/AtlassianHost-based application?
Some options I’m considering:
- Extract the clientKey somehow from the Forge context (is this even possible?)
- Keep relying on Connect’s /installed event
- Go big and refactor the entire app to use installationId instead of clientKey, or at least a new flow for users without clientKeys. Even with ACSB’s easy mapping, all our Jira api usage uses AtlassianHost and will need to be replaced.
Option 3 seems like the “right” long-term answer, but it’s a massive undertaking with significant risk given our customer base.
Has anyone dealt with this? What’s the recommended migration path for ACSB apps that are heavily invested in clientKey as an identifier?
Thanks in advance for any insights!