Skip to content

Moddable SDK 5.12.0

Choose a tag to compare

@mkellner mkellner released this 04 Oct 01:56
· 112 commits to public since this release

Moddable SDK 5.12.0 contains improvements made between September 11, 2025 and October 2, 2025

Zephyr RTOS Port Preview

Zephyr is an open source RTOS project hosted by the Linux Foundation. We like its lightweight runtime and rigorous design. Zephyr runs on hundreds of development boards across many major silicon families.

Moddable has begun porting the Moddable SDK to Zephyr. The initial focus is on silicon from STMicroelectronics. ST has an impressively broad portfolio of embedded microcontrollers with strong IO capabilities. ST silicon support is a common request. We're excited to publish a branch of the Moddable SDK with our Zephyr port in progress.

Our Zephyr blog post has all the details. We're looking for contributors to try out the port, track down bugs, help implement modules, and try it out on more silicon.

New ECMA-419 DNS-SD Preview

DNS-SD is a network protocol for devices to discover each other on the local network. It is widely used on computers, phones, and consumer electronic products. It is formally defined in RFC 6763 The Moddable SDK has long supported these protocols. More recently Ecma TC53 has proposed a standard API for DNS-SD that builds on the class patterns for embedded devices in ECMA-419. The ECMA-419 API is simpler to use, more flexible, and more powerful.

This release of the Moddable SDK contains the first implementation of the ECMA-419 DNS-SD API. The committee's work is not yet complete, so changes are possible. Please consider this a preview.

To work with DNS-SD, first create an instance of the service:

const dnssd = new (device.network.mdns.io)(device.network.mdns);

Use that instance to claim a name on the local network:

const claim = dnssd.claim({
	host: "example-server",
	onReady() {
		trace(`"example-server" claimed\n`);
	}
});

Once the name is claimed, you're ready to advertise services on the local network:

dnssd.advertise({
	serviceType: "_http._tcp",
	instanceName: "419 Web Server",
	host: "example-server",
	port: 8080
});

Discovering DNS-SD services on the local network is just as easy:

dnssd.discover({
	serviceType: "_http._tcp",
	onFound(service) {
		trace(`Found: "${service.name}" on ${service.host} @ ${service.address}:${service.port}\n`);
	},
	onUpdate(service) {
		trace(`Update: ${service.name}\n`);
	},
	onLost(service) {
		trace(`Lost: ${service.name}\n`);
	}
});

The API supports making multiple claims, advertising multiple services, and discovering multiple kinds of services.

We've got an all-new example that shows how to use all these features in more detail. The example works best on ESP32 and has also been tested on macOS. We've also added TypeScript type declarations.

Give it a try and let us know how it goes.

macOS Tahoe 26

We've verified that the Moddable SDK is compatible with the latest release of macOS. We've updated the icons of our xsbug and mcsim applications for the new OS.

ESP-IDF v5.5.1

The Moddable SDK has migrated to ESP-IDF v5.5.1 for all ESP32 family builds. The release contains improvements from Espressif, particularly BLE. As usual, no code changes are required for the vast majority of projects using the Moddable SDK. Updating takes just a few minutes:

  • If you use xs-dev to install the Moddable SDK, execute xs-dev update --device esp32
  • Otherwise, follow the update instructions for macOS and Linux, or Windows.

Release Details

  • ECMA-419
    • New mDNS / DNS-SD service added
    • New BLE Client and Server updated to reflect latest TC53 recommendations
    • Update MCP23017 expander manifest and example (contributed by @stc1988)
  • Contributed
    • conversationalAI fix for typo in default voice. (contributed by @stc1988)
  • Examples
  • Documentation
    • XS in C updated to include xsCallFunction* macros (requested by @rmontrosecbw)
  • Tools
    • mcconfig and mcrun import of git repositories uses default manifest of manifest.json as documented (reported by @stc1988) #1532
  • Modules
    • DNS serializer now also accepts a Map instance for txt record
    • Fix path for mbedtls on Windows for latest ESP-IDF (contributed by @rmontrose)
  • XS JavaScript engine
    • Linker no longer truncates strings longer than 64 KB
  • TypeScript
    • ECMA-419 mDNS / DNS-SD typings added
    • ECMA-419 BLE Client and Server typings updated

Contact Us

If you have questions or suggestions about anything here, please reach out: