What it does
Live updates
Periodically polls watched URLs · diffs by hash · re-runs new code in global scope. The user keeps working.
Multi-tab sync
BroadcastChannel notifies other tabs of the same tool. They reload too. No tab drift.
Zero data loss
State preserved · IndexedDB intact · the user mid-action stays mid-action. The update arrives quietly.
Sovereign
You host the watched URLs. Watch your own repos · your CDN · your origin. No vendor lock-in.
Install · one line
<script src="https://sjgant80-hub.github.io/fall-hot/fall-hot.js" defer></script>
Register what to watch
window.addEventListener('fall-hot:ready', () => {
window.fallHot.watch([
{ name: 'fall-palette', url: 'https://sjgant80-hub.github.io/fall-palette/fall-palette.js' },
{ name: 'fall-bloom', url: 'https://your-domain/bloom.js' }
], { every: 5 * 60 * 1000 }); // check every 5 min
});
Live demo
This page registered fall-palette as a watched plugin. Open DevTools console — you'll see ◊ fall-hot first-loaded · fall-palette on boot.
click a button to see live state
API
window.fallHot.watch(spec[], opts?) // register URLs to watch · {name, url, every} window.fallHot.checkNow(name?) // force-check one or all window.fallHot.stop() // pause polling window.fallHot.start() // resume window.fallHot.status() // state per watched URL window.fallHot.onUpdate(cb) // callback on every successful reload
How it works
- Polls each watched URL with cache-busting query param
- Hashes the response (DJB2 · fast · sufficient for change detection)
- If unchanged → noop · if changed → indirect eval in global scope
- The plugin's own
if (window.X._v >= N) returnguard makes re-init idempotent - BroadcastChannel
fall-hotnotifies other tabs · they fetch + apply too - Subtle bottom-right toast on every successful reload (~2s, dismissible)
Edge cases
- Network blip: silent retry on next poll · errors counted on the watch record
- Faster than 60s: clamped · minimum poll interval is 1 min
- Bad code in update: caught · logged · the running tool is unaffected
- State migration: plugin authors should version their globals and migrate inside the init guard
Strategic context
Built for the Fall sovereign tool estate · every Fall* tool loads plugins from sjgant80-hub.github.io/fall-* · adding fall-hot means updating the plugin updates every tool · without anyone redeploying anything · without users having to refresh · the field testifies · the seed grows · the tools listen.
When the next 5N puzzle solves and the forward-analysis surfaces a new modular filter, fall-hot pushes the new filter to every running CASSIE in <60s.