Iwf Guide
Troubleshooting
This page collects the failure modes that come up most often while working on Iwf apps.
1. Canonical PostgreSQL Readiness Fails
If devenv up in examples/canonical reports a PostgreSQL readiness failure or postmaster.pid already exists, an earlier process is probably still holding the example data directory.
Check first:
cd examples/canonical
sh scripts/kill-orphans
Then clean canonical example services:
sh scripts/kill-orphans
Restart:
iwf-ensure-db
devenv up
2. Generated Idris Files Appear Beside .idrx
The build command is writing to the wrong output directory. For the canonical app, generated views should go here:
build/generated/Web/View/*.idr
The schema module should go here:
build/generated/Generated/Schema.idr
Starter apps should write:
build/generated/Main.idr
Fix the tools/idrx.py -o ... path and keep generated files out of source directories.
3. Login Works With Curl But Not Browser
Compare the body. A browser form posts URL-encoded data:
email=jake%40realworld.test&password=password123
The HTTP parser must decode %40 to @ before auth validation. Also check:
Content-Type: application/x-www-form-urlencodedHX-Request: trueHX-Boosted: trueLocationorHX-Redirectresponse headers
4. HTMX Updates Content But Shell Is Stale
Use the right redirect:
seeOtherfor ordinary boosted form/link redirectshtmxHardRedirectonly when the whole shell must reload
Hard redirects are appropriate for logout, stale shell recovery, organization switching, or deleting the resource that owns the current shell state.
5. Auto Refresh Does Not Update
Check:
- the direct HTML document includes the Auto Refresh runtime assets for pages that need live updates
- the app is started with
runApp (app "Name" routes |> withAutoRefresh) - live regions are registered by the page-level or advanced Auto Refresh API in use
- custom SQL reads use
transactionExecTracked - database writes use
transactionExecInvalidatingwithwithTransactionWithAutoRefresh - same-page mutations return
respondNoContent - the table being read is tracked or inferred from TypedSQL
6. TypedSQL Cannot Describe SQL
Confirm the module has:
import Generated.Schema
Confirm PostgreSQL is running and the compiler sees a database URL:
export DATABASE_URL='postgres://user:password@127.0.0.1:5432/app_development'
If the describe database should be built from the current schema file, set:
export IWF_TYPEDSQL_SCHEMA="$PWD/Application/Schema.sql"
If you are outside the Iwf repository, also set IWF_SOURCE or IWF_TYPEDSQL_DESCRIBE so the macro can find the describe helper.
For source-localized failures, run:
iwf check
7. Port Already In Use
Find the process:
lsof :8082 :LISTEN
For the canonical example, prefer the cleanup script instead of manually killing random processes:
cd examples/canonical
sh scripts/kill-orphans
sh scripts/kill-orphans
8. Static Assets Look Stale
If framework assets or app static assets look stale:
- rebuild the app
- confirm
fingerprintedStaticRoutesare mounted when using fingerprinted hrefs - include
devAssetRefreshScriptfrom an app-levelwithPageLayoutduring local work - confirm the browser is loading from
/__iwf/assetsfor framework assets
9. OpenAPI Route Missing
Only documented routes appear in the document. Confirm the route is built from a documented action and is included in the route list passed to:
swaggerUiRoutes "/docs" apiInfo appRoutes
Use undocumentedRoute only for internal endpoints.
Next
Return to Getting Started With Iwf.