Skip to content

EN Hot Reload

Cavanshirpro edited this page Sep 19, 2026 · 1 revision

JSON hot reload and application fault isolation

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.

Invalid changes

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.

What does --no-reload disable?

forge dev --no-reload disables the Python worker-restart reloader. Disabling JSON reload also requires APPS_AUTO_RELOAD=false. These are separate mechanisms.

Safe document writes

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.

Sources and verification

This page describes the behavior at the pinned commits below. Recheck these contracts when upgrading.


English home · All English pages · Version maintenance

Clone this wiki locally