Repository navigation
Releases: Papilio-Labs/papilio-loader
Release list
Papilio Loader v0.4.9
Papilio Loader v0.4.9
Highlights
- Board Recovery now combines the latest Papilio ESP Bootloader app with the
latest FPGA-Companion migration image instead of reporting a newer loader
version than the image actually contains. - The recovery page links directly to the exact bundled recovery image and
displays the versions of both firmware components. - Updated web asset cache version to refresh the recovery page and its firmware
manifest.
Validation
- Web assets build successfully.
- The generated recovery image is checked against the released partition table,
factory app size, andota_0image before it is published.
Papilio Loader v0.4.8
Papilio Loader v0.4.8
Restores the saved-file library and WiFi log pop-out missing from the Electron migration, and includes the recent blank-board setup fixes.
Desktop
- Save FPGA/ESP32 files without programming, or save before programming.
- Load, filter, rename, edit descriptions, and delete saved files.
- Export/import ZIP backups, including exports from the old Python loader.
- Preserve concurrent library edits and report corrupt/incomplete data explicitly.
- Open a separate WiFi UDP log terminal with Stop, Reconnect, Clear, auto-scroll, ANSI colors, and listener error reporting.
- Main and pop-out log views share one UDP socket but control their subscriptions independently.
- The pop-out fills resized and maximized windows.
Web and getting started
- Desktop-only controls remain hidden on the hosted website.
- Includes the four-step blank-board flow, USB WiFi provisioning and boot selection fixes, and reliable return to FPGA-Companion after programming.
- Web and desktop version numbers are now aligned at 0.4.8.
Migration
Export your old Python loader library as a ZIP, then use Import ZIP in the Electron Saved Files Library. The Python SQLite database is not modified.
Downloads
PapilioLoader-Setup-0.4.8.exe: Windows x64 Electron installer.papilio-loader-web-v0.4.8.zip: static website build, including setup firmware.SHA256SUMS.txt: artifact checksums.
The Windows installer is unsigned; Windows SmartScreen may show a warning.
Validation
52 regression tests passed; web/Electron builds and strict Electron type-check passed. Real Electron UI smoke tests cover saved-file management, ZIP transfers, persistence, ANSI rendering, bounded logs, auto-scroll, and independent window lifecycle. A separate Electron layout test checks normal, wide, and maximized windows. The user confirmed the new desktop functionality and maximized layout on their running app.
WiFi UDP logging and the filesystem saved-file library are desktop-only. The website retains local file selection and USB logs.
Papilio Loader v0.4.0
Papilio Loader v0.4.0
This release completes the loader workflow for boards using the
factory-resident Papilio ESP Bootloader and the stripped FPGA Companion.
Highlights
- OTA-only mode no longer falls through to USB.
- Automatic mode returns to the loader status result before opening USB.
- Failed or aborted status probes invalidate stale cached device roles.
- Web and Electron builds share the same updated loader state machine.
- Desktop startup includes the WiFi log display path.
- OTA programming is available through the bootloader regardless of which
user application is installed.
Compatibility
Use FPGA-Companion v2.0.0 only with papilio-esp-bootloader v0.1.0 or a
compatible factory-resident bootloader. Boards using the previous
application-centered OTA design must be migrated once with the published
merged image over USB.
Validation
The flasher-core suite passes 35 tests, the TypeScript package compiles, the
web and Electron bundles build successfully, and the Windows installer builds
with Electron Builder 26.15.3. Physical USB recovery, interrupted-write
recovery, and full A2600/C64/NES migrated-board regression remain hardware
follow-ups.
v0.3.1 - Export Bug Fix
What's New in v0.3.1
Bug Fixes
- Fix export crash: add missing \stored_filename\ column to \get_saved_files()\ SELECT queries — exporting saved files no longer fails with a database error
v0.3.0 - WiFi Log and OTA UX Improvements
What's New in v0.3.0
Bug Fixes
- Fix WiFi log pop-out page (
/web/wifi-log) crashing with NameError due to missingsysimport - Fix HTML entities rendering literally in WiFi log status badge
WiFi Log Monitor
- Add full ANSI color support for FPGA Companion log output
- Status badge now correctly renders bullet and ellipsis characters
Flash Interface UX
- OTA (WiFi) is now the default flash method instead of USB/Serial
- Persist last-used OTA IP address across page loads via localStorage — no need to re-discover the device if the IP has not changed
- Status Log moved above Saved Files and WiFi Log sections for better visibility
- Added Keep history checkbox on the Status Log — flash operations auto-clear the log unless checked
Saved Files Library
- Auto-append .bin extension when saving a file without a file extension
- Uncheck Save to library after a successful save to prevent duplicate saves on repeated flashes
- Export all saved files as a ZIP archive (includes metadata manifest)
- Import saved files from a previously exported ZIP archive
v0.2.0 - OTA Updates & Improved Web Interface
Release Notes v0.2.0 — OTA Updates & Improved Web Interface
Date: 2026-05-13
Overview
This release adds Over-The-Air (OTA) wireless update capability for both ESP32 firmware and FPGA bitstreams, removes login requirements from the web interface for easier local network use, and improves the overall user experience. OTA support is available through Python API, MCP tools, and the web interface.
Highlights
- OTA (Over-The-Air) Updates: Flash ESP32 and FPGA wirelessly via WiFi
- Network device discovery (auto-scan local subnet)
- Both firmware types supported (ESP32
.binand FPGA.bin) - ~2-3 second flash times (vs 10-15s USB)
- Full validation and error handling
- Optional Authentication: Web interface no longer requires login by default
- Perfect for local network deployments
- Can be enabled via
PAPILIO_REQUIRE_WEB_AUTH=true
- Improved Web UI: Flash method selector (USB/Serial or OTA WiFi)
- Device discovery button in web interface
- Visual device list with click-to-select
- Real-time OTA progress feedback
Changes
OTA Support
- Network discovery tool (
network_discovery.py) scans /24 subnet for devices on port 3232 - OTA flashing tool (
ota_flash.py) handles wireless firmware uploads - Three new MCP tools:
discover_ota_devices,check_device_ip,flash_device_ota - Web API endpoints:
/web/discover-ota-devices,/web/check-ota-device,/web/flash-ota - Complete OTA documentation with examples and troubleshooting
- Dependency added:
aiohttp>=3.9.0for async HTTP requests- See pyproject.toml
Web Interface Improvements
- Flash method radio button selector (USB/OTA) on both FPGA and ESP32 cards
- Device discovery button with visual feedback and device list
- IP address input field with validation
- OTA-specific error messages and troubleshooting tips
- Updated CSS for OTA UI components (method selector, device list, discover button)
Authentication Changes
- New config option:
require_web_auth(default:False) - Authentication check skipped when
require_web_authis disabled - Smart redirects:
/and/web/login→/web/uploadwhen auth disabled - Updated startup messages to show direct access URL or login URL
Code Cleanup
- Removed unused imports and dead code
- Deleted obsolete
requirements.txt(consolidated topyproject.toml) - Improved code organization in database and desktop modules
New Files
src/papilio_loader_mcp/tools/network_discovery.py- Network device discoverysrc/papilio_loader_mcp/tools/ota_flash.py- OTA flashing implementationdocumentation/OTA_FEATURE.md- Complete OTA documentationtesting/test_ota.py- OTA functionality tests
Fixes
- None specific to this release (focused on new features)
Installation
- Download and run the installer:
installer_output/PapilioLoader-Setup-0.2.0.exe - See INSTALLATION.md for detailed instructions
- Optional: Enable authentication with environment variable
PAPILIO_REQUIRE_WEB_AUTH=true
Upgrade Notes
- Breaking Change: Default web interface now has no authentication
- To restore login requirement: set
PAPILIO_REQUIRE_WEB_AUTH=trueenvironment variable
- To restore login requirement: set
- New dependency:
aiohttp>=3.9.0(auto-installed with installer orpip install -e .) - OTA requires devices running firmware with HTTP OTA server on port 3232
- Compatible with FPGA-Companion firmware v1.0+
Usage Examples
OTA via Web Interface
- Open http://localhost:8000 (no login required)
- Select firmware file
- Click "📡 OTA (WiFi)" method
- Click "🔍 Discover Devices"
- Select device from list
- Click "⚡ Flash"
OTA via MCP Tools (for AI assistants)
// Discover devices
{"method": "tools/call", "params": {"name": "discover_ota_devices"}}
// Flash ESP32
{"method": "tools/call", "params": {
"name": "flash_device_ota",
"arguments": {
"ip": "10.0.4.35",
"device_type": "esp32",
"file_path": "firmware.bin"
}
}}Enable Authentication
# Windows PowerShell
$env:PAPILIO_REQUIRE_WEB_AUTH="true"
python start_combined_server.py
# Or permanently in system environment variablesPerformance Metrics
- OTA Flash Times:
- ESP32 (1.5MB): ~2.3 seconds
- FPGA (2MB): ~3-4 seconds
- USB Flash Times (for comparison):
- ESP32: ~10-15 seconds
- FPGA: ~10-15 seconds
- Network Discovery: Typically completes in 2-5 seconds for /24 subnet
Known Issues
- OTA discovery scans entire /24 subnet - may take longer on large networks
- OTA requires devices to be on same local network (no remote OTA support)
- First OTA flash after device boot may require 10-second delay for server startup
- Primary support targets Windows 10/11. macOS/Linux packaging not included.
Verification Checklist
- Build outputs present: GUI, console,
pesptool.exe,esptool.exe - Installer compiles with version 0.2.0
- Web interface accessible without login at http://localhost:8000
- OTA device discovery works in web interface
- OTA flash succeeds for ESP32 (requires hardware with OTA server)
- OTA flash succeeds for FPGA (requires hardware with OTA server)
- Authentication can be enabled via environment variable
- USB flashing still works (regression test)
References
- OTA Feature Guide: OTA_FEATURE.md
- Architecture: ARCHITECTURE.md
- Build Guide: BUILD.md
- Desktop App Guide: DESKTOP_APP.md
- Installation: INSTALLATION.md
- Changelog: CHANGELOG.md
Checksums
SHA256 checksums for release files:
installer_output/PapilioLoader-Setup-0.2.0.exe:DA67E12A281AEE9F6FAF47303ECEF71882FEB01328ABB7B913B9A41266206559dist/PapilioLoader.exe:3A36DB5D36E839170A9C415CC267CF392633410B24E93BF5ABDFFDFCDA676764dist/pesptool.exe:4ACD17A08A16F480EEA3B1D0449BFE0F82D95BF8E16BFA68BE1F9097A2DDAE2Adist/esptool.exe:616B48A7C991541914491DBC0CE62B7990D67CD6C83915EEA4861B9BCC097106
Papilio Loader v0.1.0
Release Notes v0.1.0 — Desktop Installer & Tool Separation
Date: 2025-12-28
Overview
This release packages Papilio Loader as a Windows desktop application with an installer, separates flashing tools by device type, and fixes write-permission issues for installed builds. It also bundles required esptool data files to support ESP32 variants.
Highlights
- Desktop executables: GUI (
PapilioLoader.exe) and console (PapilioLoader-Console.exe). - Standalone tools:
pesptool.exe(FPGA) andesptool.exe(ESP32, official). - Windows installer with optional PATH integration and shortcuts.
- User data and temp files written to
%LOCALAPPDATA%\\papilio-loader-mcp\\.
Changes
- Standalone
esptool.exepackaging via spec and entry point.- See esptool.spec and esptool_entry.py.
esp_flash.pyupdated to call the officialesptool.exe.- Temp directory fixed for frozen executables using user data path.
- Main app packaging updated to include templates and tool binaries.
- See papilio_loader.spec.
- Build script orchestrates tools + app + installer.
- Installer bundles GUI/console apps and tools; optional PATH integration.
- See installer.iss.
Fixes
- Write-permission errors resolved by moving temp/saved data to
%LOCALAPPDATA%\\papilio-loader-mcp\\. - Bundled esptool chip stub JSON files to prevent
FileNotFoundErrorfor ESP32 variants (e.g., S3).
Installation
- Download and run the installer in installer_output. See INSTALLATION.md.
- Optional: PATH integration enables
pesptool.exeandesptool.exefrom any terminal.
Upgrade Notes
- Installed builds no longer write to Program Files. All writable data is under
%LOCALAPPDATA%\\papilio-loader-mcp\\. - For Python/dev users, behavior is unchanged; dev mode uses the current working directory.
Known Issues
- Primary support targets Windows 10/11. macOS/Linux packaging is not included in this release.
- Default credentials are
admin/admin; change for production use.
Verification Checklist
- Build outputs present: GUI, console,
pesptool.exe,esptool.exe. - Installer compiles and installs; shortcuts created if selected.
- PATH integration enables CLI tools.
- ESP32 S2/S3/C3 flashing validated post-install (requires hardware).
References
- Architecture: ARCHITECTURE.md
- Build guide: BUILD.md
- Desktop app guide: DESKTOP_APP.md
- Installation: INSTALLATION.md
- Changelog: CHANGELOG.md
Checksums
installer_output/PapilioLoader-Setup-0.1.0.exe: SHA256 = 760FE1BDCC917C3890E25D82B689761FAD23425C29751396799613A12C90C2ACdist/PapilioLoader.exe: SHA256 = 0392CD3EBBAFD307F1A6E720DDC5C48DAFEF6C670DB18F03E9839734A24AA464dist/pesptool.exe: SHA256 = DB0EF34BFA24EB3142F30CA58B6BDA5C2F14D88D284095FA5E799283771AEED5dist/esptool.exe: SHA256 = 6301C382D5B8BCD4FF3C993E0432302DEB8E19219D3B33F0155D4B008418BB2F