Repository navigation
EN Hot Reload
English · Türkçe · Languages / Diller
Scope: JSON API Forge 0.5.1 · Source review: 17 September 2026 · Language: English
v0.5.1 applies JSON changes without closing the ASGI listener. A new route/runtime candidate is prepared and, when valid, atomically becomes the active generation. Services for unchanged projects are retained.
| Change | Application mechanism |
|---|---|
| Add/remove/disable an app; manifest/config JSON | Debounced JSON reload |
| Environment values referenced by project JSON | Resolved again when the app reloads |
| Global process setting | Worker restart |
| Python hook code | Separate Python reloader or controlled restart |
| Data/media/database files | Outside the configuration watcher |
Polling defaults to 1 second and debounce to 0.5 seconds. Configure APPS_AUTO_RELOAD, APPS_RELOAD_INTERVAL_SECONDS and APPS_RELOAD_DEBOUNCE_SECONDS. JSON files are limited to 2 MiB and projects to 256 fragments.
Malformed JSON, invalid configuration or runtime startup failure retains the affected application's last valid version. Other valid app changes can proceed. At first startup there may be no valid previous version to serve. Prefix/slug ownership conflicts quarantine the conflicting applications instead of picking an arbitrary directory-order winner.
Existing HTTP requests, streams and WebSockets can finish in the older generation. Up to two old generations can drain; long-lived connections can keep them occupied and delay further reloads. Reload does not guarantee that every client switches instantaneously.
forge dev --no-reload disables the Python worker-restart reloader. Disabling JSON reload also requires APPS_AUTO_RELOAD=false. These are separate mechanisms.
Write complete temporary files and publish them with atomic replacement. Remote Editor saves already use staging, whole-project validation, revision checks, locks and atomic replacement. Saving graph metadata alone does not update the runtime operation configuration.
Each worker watches files independently. Use a controlled rollout/restart if simultaneous transition is required. Isolation does not cover a failed shared identity database, process death or untrusted Python code; those require separate infrastructure/process boundaries.
This page describes the behavior at the pinned commits below. Recheck these contracts when upgrading.
main/framework/reload.pymain/framework/config.pymain/docs/44-Development-Reload-and-App-Isolation.md