preUninstall module not firing

We’re trying to use the new preUninstall module (FRGE-1246, released March 30, 2026) in our Forge Remote app. The handler never fires: zero logs in the Forge console, zero requests to our remote backend.

We’ve followed both the official documentation and the Forge Remote example from the RFC 119 thread, and tested with both function and endpoint approaches with same results in both cases.

What we’ve tried

1. preUninstall with a Forge function

Local handler using invokeRemote to forward the event to our backend:

preUninstall:
  - key: pre-uninstall-trigger
    function: pre-uninstall-handler

2. preUninstall with a remote endpoint

Per the Forge Remote example in RFC 119 post #26:

preUninstall:
  - key: pre-uninstall-trigger
    endpoint: remote-pre-uninstall-bas
endpoint:
  - key: remote-pre-uninstall-bas
    remote: remote-app-bas
    route:
      path: /jira-forge/uninstalling
    auth:
      appSystemToken:
          enabled: true

Linter issue with the RFC 119 example

The Forge Remote example in RFC 119 post #26 uses the same key for both preUninstall and endpoint modules:

preUninstall:
  - key: remote-pre-uninstall
    endpoint: remote-pre-uninstall
endpoint:
  - key: remote-pre-uninstall

However, forge lint rejects this with:

error  found duplicate module key 'remote-pre-uninstall'  valid-module-required

We had to use distinct keys to pass the linter. Is this a linter bug, or is the RFC example incorrect?

Missing documentation

The official lifecycle events documentation only shows a function-based example. A Forge Remote example using endpoint is missing from the docs, the only reference is in the community RFC thread.

Environment

  • Forge CLI 12.17.0, all @forge/* packages at latest versions
  • Deployed to development environment via forge deploy
  • forge lint passes (no errors related to preUninstall)
  • forge deploy succeeds
  • App runtime: nodejs22.x

Other lifecycle triggers work fine

avi:forge:installed:app and avi:forge:upgraded:app both fire correctly using the trigger module with local functions.

Test procedure

Deploy → install app on site → uninstall app via UI → check Forge console logs. No preUninstall logs appear. Reinstall → uninstall again → still nothing.

Questions

  1. Is there a known rollout delay for this feature?
  2. Are there any additional permissions or scopes required beyond read:app-system-token?
  3. Any advice for debugging it ?

Hi @AndreaSerra,

There was a slight delay with this feature rolling out to all apps. Can you please try again and advise?

We will continue to improve the documentation with additional use cases.

Thanks,

Josh.

Hi Josh,

Thanks for looking into this, preUninstall is now firing correctly on both our Jira and Confluence Forge apps. No code changes needed on our side.

Thanks again!