JavaScript API Reference

Installation

Browser (CDN)

<script src="https://cdn.jsdelivr.net/gh/adam-weber/esp-webflash-toolkit@main/dist/esp-webflash-toolkit-full.min.js"></script>
<script>
    const { flashDevice, ESPFlasher, NVSGenerator } = ESPWebFlash;
</script>

npm

npm install esp-webflash-toolkit
import { flashDevice, ESPFlasher, NVSGenerator } from 'esp-webflash-toolkit';

flashDevice(options)

Flash a device in one call. The simplest API.

await flashDevice({
    firmware: 'https://example.com/firmware.bin',
    config: { wifi_ssid: 'MyNetwork', wifi_pass: 'secret' },
    onProgress: (percent) => console.log(`${percent}%`)
});

Parameters:

Option Type Required Description
firmware string Yes Firmware URL
config object No Key-value config to write to NVS
chip string No Expected chip type (esp32, esp32s3, etc.)
onProgress function No Progress callback (percent: number) => void
onLog function No Log callback (message: string, level: string) => void
firmwareOffset number No Firmware flash offset (default: 0x10000)
nvsOffset number No NVS partition offset (default: 0x9000)

Returns: Promise<{ chipType: string, macAddr: string }>


ESPFlasher

Event-driven flasher for custom UIs.

Constructor

const flasher = new ESPFlasher({
    chip: 'esp32',
    firmwareUrl: 'https://example.com/firmware.bin',
    fields: ['wifi', 'mqtt'],
    firmwareOffset: 0x10000,
    nvsOffset: 0x9000,
    nvsSize: 0x6000,
    nvsNamespace: 'config'
});

Options:

Option Type Default Description
chip string null Expected chip type
firmwareUrl string null Firmware URL
fields array [] Config field definitions or preset names
firmwareOffset number 0x10000 Firmware flash offset
nvsOffset number 0x9000 NVS partition offset
nvsSize number 0x6000 NVS partition size
nvsNamespace string 'config' NVS namespace

Events

flasher.addEventListener('progress', e => console.log(e.detail.percent));
flasher.addEventListener('log', e => console.log(e.detail.message, e.detail.level));
flasher.addEventListener('status', e => console.log(e.detail.state, e.detail.message));
flasher.addEventListener('connected', e => console.log(e.detail.chipType, e.detail.macAddr));
flasher.addEventListener('disconnected', e => {});
flasher.addEventListener('error', e => console.error(e.detail.message));
flasher.addEventListener('complete', e => {});
flasher.addEventListener('chip-mismatch', e => {
    // e.detail: { expected, detected, proceed(), cancel() }
});

Methods

// Connection
await flasher.connect();
await flasher.disconnect();
flasher.isConnected();

// Configuration
flasher.setConfig({ wifi_ssid: 'MyNetwork', wifi_pass: 'secret' });
flasher.getConfig();
flasher.getSchema();

// Flashing
await flasher.flash();                    // Flash firmware + config
await flasher.flash({ customFirmware });  // Flash custom File object
await flasher.flashConfig();              // Flash only NVS config

// Device
await flasher.reset();
flasher.dispose();

NVSGenerator

Generate NVS partition binaries directly.

import { NVSGenerator } from 'esp-webflash-toolkit';

const nvs = new NVSGenerator();
const binary = nvs.generate({
    config: {
        wifi_ssid: 'MyNetwork',
        wifi_pass: 'MyPassword',
        device_id: 42
    }
}, 0x6000);  // 24KB partition size

// binary is a Uint8Array ready to flash at 0x9000

generate(data, size)

Parameters:

  • data (object) - Namespaced key-value pairs. Top-level keys are NVS namespaces.
  • size (number) - Partition size in bytes (default: 0x6000 / 24KB)

Returns: Uint8Array

Supported types:

  • Strings (up to 1984 bytes)
  • Numbers (u8, u16, u32 auto-detected)

parse(binary)

Parse an NVS partition binary back to an object.

const data = nvs.parse(binary);
// { config: { wifi_ssid: 'MyNetwork', ... } }

Field Presets

Built-in field presets expand to common config patterns:

const flasher = new ESPFlasher({
    fields: ['wifi', 'mqtt', 'device_name']
});
Preset Expands to
'wifi' wifi_ssid (text, required), wifi_pass (password, required)
'mqtt' mqtt_host (text), mqtt_user (text), mqtt_pass (password)
'device_name' device_name (text)

Custom Fields

fields: [
    'wifi',  // preset
    { key: 'api_url', label: 'API URL', type: 'text', required: true },
    { key: 'refresh_rate', label: 'Refresh Rate', type: 'number', default: 60 }
]

Field properties:

Property Type Description
key string NVS key name (max 15 chars)
label string Display label
type string text, password, number
required boolean Whether field is required
default any Default value
placeholder string Input placeholder
help string Help text

Low-Level Components

For advanced usage, these components are also exported:

import {
    DeviceConnection,   // Serial connection management
    FirmwareFlasher,    // Flash operations
    ConfigStore,        // Config state management
    FieldPresets,       // Field preset definitions
    expandFieldPresets  // Expand preset names to field objects
} from 'esp-webflash-toolkit';

Reading Config in Firmware

The generated NVS partitions use standard ESP-IDF format:

C/C++ (ESP-IDF)

nvs_handle_t handle;
nvs_open("config", NVS_READONLY, &handle);

char ssid[32];
size_t len = sizeof(ssid);
nvs_get_str(handle, "wifi_ssid", ssid, &len);

nvs_close(handle);

Arduino

#include <Preferences.h>

Preferences prefs;
prefs.begin("config", true);
String ssid = prefs.getString("wifi_ssid", "");
prefs.end();

Rust (esp-idf-svc)

let nvs = EspNvs::new(partition, "config", true)?;
let ssid = nvs.get_str("wifi_ssid")?;

results matching ""

    No results matching ""