On this page
QA Reference
Hot Updates (OTA) — Manual Testing
10 / 10 Tests Passed
Every mode and scenario the OTA hot-updates feature ships with, walked through end-to-end. Each test is self-contained — run them in any order. Look for the green pill on each test card to confirm coverage as you go.
Prerequisites
Before you start, confirm two things.
1. The manifest is live
curl -s https://mindsdb.github.io/antontron-releases/latest.json | python3 -m json.tool
You should see something like:
{
"version": "2.0.4-e94e713",
"url": "https://github.com/mindsdb/antontron-releases/releases/download/ui-v2.0.4-e94e713/ui-bundle.tar.gz",
"sha256": "5b15b66a5a7bcf9a319418e22f601e2ce3f610ac0edc45d6cc45fc3ad53af1d3"
}
If this fails or 404s, the OTA system has nothing to serve — the update check will report "up to date" and the app will load its bundled renderer.
2. You can build the packaged app
OTA checks only run in packaged builds (app.isPackaged === true). Dev mode
(npm run dev) skips them entirely.
PATH="/opt/homebrew/opt/node@20/bin:$PATH" npm run pack
Output: release/mac-arm64/Anton.app
Tip. To see Electron's console logs, always launch the packaged app from Terminal:
./release/mac-arm64/Anton.app/Contents/MacOS/Anton
That lets you watch [ui-updater] and [main] log lines in real
time.
Key file locations
Manual update mode (default) — first launch, no cache
PassedThe out-of-the-box experience for new users.
Setup
# Ensure no prior OTA cache exists
rm -rf ~/Library/Application\ Support/Anton/ui-cache
# Ensure manual mode (or just remove the key — manual is the default)
grep -v 'UI_UPDATE_MODE' ~/.anton/.env > /tmp/.env.tmp && mv /tmp/.env.tmp ~/.anton/.env
grep -v 'DEV_MODE' ~/.anton/.env > /tmp/.env.tmp && mv /tmp/.env.tmp ~/.anton/.env
Steps
- Build the app:
PATH="/opt/homebrew/opt/node@20/bin:$PATH" npm run pack - Launch from Terminal:
./release/mac-arm64/Anton.app/Contents/MacOS/Anton - Watch the Terminal output.
What to verify
- Terminal shows
[ui-updater]checking log lines (no errors) - The app loads normally with the bundled renderer (no blank screen)
- After a few seconds, a small green-accented banner appears in the sidebar footer area saying "Update available (2.0.4-e94e713)" with an "Install" label
- The banner is unobtrusive — it doesn't block any UI or force action
- Clicking the banner starts the download — you may briefly see a full-screen overlay with a spinner and "Updating to 2.0.4-e94e713…"
- The app reloads with the new bundle — the UI looks the same (it's the same codebase, just delivered via OTA)
- After reload, the sidebar banner is gone (we're now up to date)
Verify the cache
# Should now have files
ls ~/Library/Application\ Support/Anton/ui-cache/current/
# Should contain index.html and assets
cat ~/Library/Application\ Support/Anton/ui-cache/version.json
# Should show {"version":"2.0.4-e94e713"}
Manual update mode — already up to date
PassedSetup
Run Test 1 first so the cache is populated with the latest version.
Steps
- Quit and relaunch:
./release/mac-arm64/Anton.app/Contents/MacOS/Anton
What to verify
- Terminal shows the update check but reports no new version
- No update banner appears in the sidebar
- The app loads from the cached OTA bundle (check Terminal for the file path in any load logs)
Auto update mode
PassedSetup
# Clear cache to force a fresh download
rm -rf ~/Library/Application\ Support/Anton/ui-cache
# Set auto mode
echo 'UI_UPDATE_MODE=auto' >> ~/.anton/.env
Steps
- Launch:
./release/mac-arm64/Anton.app/Contents/MacOS/Anton
What to verify
- The app starts and shows its normal UI briefly
- A full-screen overlay appears with a spinner and "Updating to …" message
- After a few seconds (download time), the overlay says "Almost there…"
- The app reloads automatically — no user interaction needed
- After reload, the app is running the OTA bundle (check
version.json) - No update banner appears (auto mode doesn't use the banner)
Cleanup
# Remove the auto mode setting to go back to default (manual)
grep -v 'UI_UPDATE_MODE' ~/.anton/.env > /tmp/.env.tmp && mv /tmp/.env.tmp ~/.anton/.env
Offline behavior
PassedSetup
# Clear cache
rm -rf ~/Library/Application\ Support/Anton/ui-cache
Steps
- Disconnect from the internet (turn off Wi-Fi, or use an airplane-mode equivalent)
- Launch:
./release/mac-arm64/Anton.app/Contents/MacOS/Anton
What to verify
- Terminal shows something like
[ui-updater] timeoutor connectivity failure (not a crash) - The app loads normally with the bundled renderer — no blank screen, no error
- No update banner appears
- The app is fully functional (aside from features that need the network)
Then
- Reconnect to the internet
- Quit and relaunch
- The update check now succeeds and the banner (or auto-update) kicks in
DEV_MODE=live
PassedFor developers who want renderer changes in real time without rebuilding the full app.
Setup
echo 'DEV_MODE=live' >> ~/.anton/.env
Steps — with dev server running
-
In one terminal, start the Vite dev server:
Wait until it says the server is ready onPATH="/opt/homebrew/opt/node@20/bin:$PATH" npm run dev:rendererlocalhost:5173. -
In another terminal, launch the packaged app:
./release/mac-arm64/Anton.app/Contents/MacOS/Anton
What to verify
- Terminal shows
[main] DEV_MODE=live — loading from http://localhost:5173 - The app loads the renderer from the Vite dev server, not from the bundled/cached files
- If you edit a file under
src/renderer/, Vite hot-reloads it in the running app window - No OTA update check runs — no
[ui-updater]log lines appear - The Python server still starts and works normally
Steps — without dev server running
- Stop the Vite dev server (
Ctrl+C) - Launch the packaged app again
- The app window shows an error page (
ERR_CONNECTION_REFUSEDor similar) — this is expected - The app does NOT crash — it just can't reach
localhost:5173
Cleanup
grep -v 'DEV_MODE' ~/.anton/.env > /tmp/.env.tmp && mv /tmp/.env.tmp ~/.anton/.env
DEV_MODE=full
PassedFor developers who want to test the packaged build end-to-end but don't want OTA to override their local changes.
Setup
# Populate the OTA cache so we can verify it gets ignored
# (run Test 1 first if the cache is empty)
echo 'DEV_MODE=full' >> ~/.anton/.env
Steps
- Launch:
./release/mac-arm64/Anton.app/Contents/MacOS/Anton
What to verify
- Terminal shows
[main] DEV_MODE=full — using bundled renderer, skipping OTA cache - The app loads from the app bundle, NOT from
ui-cache/current/ - No OTA update check runs
- If you had a different version cached in
ui-cache/, it is ignored
Cleanup
grep -v 'DEV_MODE' ~/.anton/.env > /tmp/.env.tmp && mv /tmp/.env.tmp ~/.anton/.env
Settings UI toggle
PassedSteps
- Launch the app (packaged or dev mode — Settings UI works in both)
- Navigate to Settings (gear icon in the sidebar)
- Scroll down and expand the Updates section
What to verify
- There is a segmented control with two options: Manual and Auto
- The default selection is Manual
- Clicking Auto switches the selection visually
- Click Save settings
-
Verify the setting was persisted:
grep UI_UPDATE_MODE ~/.anton/.env # Should show: UI_UPDATE_MODE=auto - Switch back to Manual and save again
-
Verify:
grep UI_UPDATE_MODE ~/.anton/.env # Should show: UI_UPDATE_MODE=manual
Rollback / cache clearing
PassedIf a bad OTA bundle is deployed, users can recover by clearing the cache.
Steps
-
After running any test that populated the cache:
rm -rf ~/Library/Application\ Support/Anton/ui-cache - Relaunch the app
What to verify
- The app loads the bundled renderer (the version shipped inside
Anton.app) - On next launch with internet, OTA check runs and re-downloads the latest bundle
About panel version display
PassedSteps
- Launch the packaged app
- Click Anton in the menu bar > About Anton
What to verify
- If running the OTA bundle, the version shows something like
2.0.4 (UI: 2.0.4-e94e713) - If running the bundled renderer (no cache), it shows just
2.0.4or2.0.4 (UI: bundled)
Standard dev mode (npm run dev)
PassedVerify that the normal development workflow is unaffected.
Setup
# Make sure DEV_MODE is NOT set
grep -v 'DEV_MODE' ~/.anton/.env > /tmp/.env.tmp && mv /tmp/.env.tmp ~/.anton/.env
Steps
PATH="/opt/homebrew/opt/node@20/bin:$PATH" npm run dev
What to verify
- The app starts with Vite hot-reloading as usual
- No OTA checks run (because
app.isPackagedis false in dev) - No update banner appears
- Everything works as it did before this feature
Quick reference: env vars
Add these to ~/.anton/.env as KEY=value lines.
Both can also be set from the Settings UI (UI_UPDATE_MODE) or manually
edited.
Troubleshooting
I see no update banner but the manifest has a new version
- Are you running the packaged app? OTA only runs when
app.isPackaged === true. - Is
DEV_MODEset? It skips OTA entirely. - Check Terminal logs for
[ui-updater]lines.
The app shows a blank white screen
- If
DEV_MODE=liveand no Vite server is running, this is expected. RemoveDEV_MODEfrom~/.anton/.env. - If the OTA cache is corrupted:
rm -rf ~/Library/Application\ Support/Anton/ui-cacheand relaunch.
The update overlay is stuck
- Could mean the download is slow or failed. Check Terminal for
[ui-updater] download failedor SHA-256 mismatch errors. - Kill the app, clear the cache, and relaunch.
I want to force a re-download
rm -rf ~/Library/Application\ Support/Anton/ui-cache
Then relaunch.