Hi all,
We're blocked from launching our app publicly because of this warning in General Access:
"Dynamic resource queries won't work in public apps. This app has 86 queries that select their resource dynamically. They will fail for users accessing the public app without signing in."
When testing our QA app as a public (signed-out) user, the first query in the flow (a login mutation) fails with:
{"status":403,"message":"Dynamic resource queries are not allowed in public apps.","statusCode":403,"error":"Forbidden"}
Our queries use dynamic resource mode (the Ζ button) with a JS function like:
const getResourceId = (environment = 'production') => {
switch (environment) {
case 'development':
return 'xxxxx'
case 'staging':
return 'xxxxx'
default:
return 'xxxxx'
}
}
return getResourceId({{ environment.value }})
What's strange: our original production app uses this exact same pattern and is currently live and publicly accessible WITHOUT this error. That app is sharing an older pinned release rather than the latest editor state.
Questions for the community / Retool team:
- Is this restriction evaluated only at publish/release time (so older releases created before the restriction existed are grandfathered in), or enforced in real time regardless of release date?
- Is "Dynamic resource queries are not allowed in public apps" a recently introduced policy? Does anyone know when it was rolled out?
- We're on a non-Enterprise plan (no Source Control / Git). Besides manually disabling dynamic mode on every affected query, is there a supported way to bulk-update queries (e.g. via the Retool API)?
- For apps needing to switch between environment-specific resources (dev/staging/production) in a public app without hitting this restriction β is configuring environment-specific credentials on a single resource (instead of dynamic resource mode) the recommended pattern?
Any pointers appreciated β happy to share more details if useful.



