# Swift for Wasm September-October 2025 Updates

**URL:** <https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966>\
**Category:** Swift for WebAssembly\
**Created:** [October 31, 2025, 12:11pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966 "2025-10-31T12:11:26Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Max\_Desiatov](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/max_desiatov/32/20654_2.png) [@Max\_Desiatov](https://forums.swift.org/u/Max_Desiatov)\
**Post date:** [October 31, 2025, 12:11pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/1 "2025-10-31T12:11:26Z")

</div>

I'm excited to share an update on the latest progress in the Swift for WebAssembly ecosystem! Last two months of community's work were mainly focused on polishing the Swift toolchain, developing new features in our primary packages (namely [JavaScriptKit](https://github.com/swiftwasm/JavaScriptKit) and [WasmKit](https://github.com/swiftwasm/WasmKit)), while also porting existing Swift libraries to Wasm.

Here’s a list of notable changes prepared with help from @kateinoigakukun, @krodak, and @scottm:

## Swift Toolchain

- Fixed SwiftPM passing incorrect CLI arguments to WasmKit [when running `swift test` with Wasm Swift SDK](https://github.com/swiftlang/swift-package-manager/pull/9114);
- Updated Swift toolchain `docs/WebAssembly.md` instructions for [local builds of Wasm Swift SDK with a development toolchain](https://github.com/swiftlang/swift/pull/84399);
- Updated "Getting Started with Wasm" page [on swift.org for 6.2 release](https://github.com/swiftlang/swift-org-website/pull/1162);
- Significant linker memory footprint and link time reduction: [#84784](https://github.com/swiftlang/swift/pull/84784);
- `@_expose(wasm)` serialization crash fix [cherry-picked for future 6.2 patch releases](https://github.com/swiftlang/swift/pull/84434);
- `import WASILibc` support for Embedded Swift [cherry-picked for 6.2.1 patch release](https://github.com/swiftlang/swift/pull/84396);
- `swift-cmark` (a dependency of `swift-markdown`, `swift-docc`, and `swift-format`) had WASI build support [cherry-picked for 6.2 branch](https://github.com/swiftlang/swift-cmark/pull/83), also [included in the 0.7.1 SemVer tag](https://github.com/swiftlang/swift-cmark/releases/tag/0.7.1);
- Checks for `swift run` command with Wasm Swift SDK [in `swift-integration-tests`](https://github.com/swiftlang/swift-integration-tests/pull/166).

## JavaScriptKit

Most of the changes were made in [the BridgeJS plugin](https://swiftpackageindex.com/swiftwasm/javascriptkit/main/documentation/javascriptkit#BridgeJS) improving interoperability between Swift and JavaScript/TypeScript:

### New Features:

- Added Swift -\> JS `protocol` support [#460](https://github.com/swiftwasm/JavaScriptKit/pull/460) [#456](https://github.com/swiftwasm/JavaScriptKit/pull/456);
- Added Swift -\> JS default parameter value support [#453](https://github.com/swiftwasm/JavaScriptKit/pull/453);
- Added Swift -\> JS `static/class` properties & functions support [#448](https://github.com/swiftwasm/JavaScriptKit/pull/448);
- Added Swift -\> JS `Optional` support [#444](https://github.com/swiftwasm/JavaScriptKit/pull/444);

### Improvements / Fixes:

- Migrated to code fragment printer [#442](https://github.com/swiftwasm/JavaScriptKit/pull/442);
- Switched to direct `TypeSyntax` initializer [#445](https://github.com/swiftwasm/JavaScriptKit/pull/445);
- Fixed nested type resolution for `MemberTypeSyntax` [#433](https://github.com/swiftwasm/JavaScriptKit/pull/433);

## WasmKit

One of our goals for WasmKit is to enable first-class Swift for Wasm debugging support when using LLDB. This is still early days, but we had some significant progress:

- Added [GDB Remote Protocol support with LLDB extensions](https://github.com/swiftwasm/WasmKit/pull/204);
- Added [`breakpoint` instruction to internal WasmKit VM bytecode](https://github.com/swiftwasm/WasmKit/pull/198);
- Implemented [`qWasmCallStack` debugger host command and basic breakpoints support](https://github.com/swiftwasm/WasmKit/pull/212);
- Implemented [basic instruction stepping support](https://github.com/swiftwasm/WasmKit/pull/215) in the debugger.
- Added `--debugger-port` CLI option to `wasmkit run` command [when `WasmDebuggingSupport` package trait is enabled](https://github.com/swiftwasm/WasmKit/pull/221).

Some other relevant small improvements worth mentioning:

- Implemented [parsing of atomic load/store instructions](https://github.com/swiftwasm/WasmKit/pull/205) from the [WebAssembly multi-threading proposal](https://github.com/WebAssembly/threads/blob/33b2dcd/proposals/threads/Overview.md);
- Clarified required Swift version, list of supported platforms, and SwiftPM package usage instructions [in `README.md`](https://github.com/swiftwasm/WasmKit/pull/203);
- Added broader CI matrix for building and testing on Android, [covering Swift 6.2 and `main` development snapshots](https://github.com/swiftwasm/WasmKit/pull/216).
- Enabled Swift 6 mode and [fixed all remaining Swift Concurrency warnings](https://github.com/swiftwasm/WasmKit/pull/202);
- If you ever wanted to put a Wasm runtime into your Wasm runtime (e.g. for developer tooling or for implementing Wasm feature compatibility shims), WasmKit Wasm runtime now [can be built for WASI and can run nested in a separate Wasm runtime](https://github.com/swiftwasm/WasmKit/pull/206);
- WasmKit [successfully builds](https://github.com/swiftwasm/WasmKit/pull/219) on CI with [SwiftPM on Swift Build](https://forums.swift.org/t/swiftpm-on-swift-build-october-update/82889) when using `main` development snapshots.

## Other Projects

- [DispatchAsync](https://github.com/PassiveLogic/dispatch-async) – New community workaround for compiling Swift that uses `import Dispatch` to Wasm. Provides `DispatchQueue`, `DispatchGroup`, `DispatchSemaphore`, `DispatchTime`, and `DispatchTimeInterval` as a drop-in replacement for Dispatch, implemented using Swift Concurrency;
- [swift-distributed-tracing](https://github.com/apple/swift-distributed-tracing) – Introduced CI checks for WebAssembly compilation [#175](https://github.com/apple/swift-distributed-tracing/pull/175). Compilation fixes were merged previously in [#174](https://github.com/apple/swift-distributed-tracing/pull/174);
- WebKit – [Added WebAssembly debugging support](https://github.com/WebKit/WebKit/pull/51462) via Remote Web Inspector.

# Improvements prior to September 2025

There were a few notable improvements made that didn't end up included in [the previous Q3 update](https://forums.swift.org/t/swift-for-wasm-q3-2025-updates/81956), listed below for completeness:

- [GraphQLSwift/DataLoader](https://github.com/GraphQLSwift/DataLoader) – Enabled Wasm compilation [#23](https://github.com/GraphQLSwift/DataLoader/pull/23), and integrated Wasm builds into CI [#26](https://github.com/GraphQLSwift/DataLoader/pull/26);
- [vapor/sql-kit](https://github.com/vapor/sql-kit) – Enabled Wasm compilation [#190](https://github.com/vapor/sql-kit/pull/190);
- [vapor/ci](https://github.com/vapor/ci) added Wasm CI build support to Vapor [#54](https://github.com/vapor/ci/pull/54);
- [JavaScriptKit](https://github.com/swiftwasm/JavaScriptKit) – Added Swift -\> JS case / raw / namespacing / associated value `enum`s support [#436](https://github.com/swiftwasm/JavaScriptKit/pull/436) [#418](https://github.com/swiftwasm/JavaScriptKit/pull/418) [#455](https://github.com/swiftwasm/JavaScriptKit/pull/455);
- [JavaScriptKit](https://github.com/swiftwasm/JavaScriptKit) – Macro extension to define JS namespace [#405](https://github.com/swiftwasm/JavaScriptKit/pull/405);

* * *

Thank you for reading, and please feel free to add any comments or suggestions if we missed anything!

---

<div class="post-metadata">

**Author:** ![Joshua](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/joshua/32/34223_2.png) [@Joshua](https://forums.swift.org/u/Joshua)\
**Post date:** [October 31, 2025, 6:03pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/2 "2025-10-31T18:03:06Z")

</div>

when emscripten support？

---

<div class="post-metadata">

**Author:** ![Troy\_Harvey](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/troy_harvey/32/13926_2.png) [@Troy\_Harvey](https://forums.swift.org/u/Troy_Harvey)\
**Post date:** [November 1, 2025, 12:27am UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/3 "2025-11-01T00:27:30Z")

</div>

Excellent work Max, Scott, Krzysztof, and Yuta. Great to see Swift WASM accelerating!

---

<div class="post-metadata">

**Author:** ![kateinoigakukun](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/kateinoigakukun/32/16706_2.png) [@kateinoigakukun](https://forums.swift.org/u/kateinoigakukun)\
**Post date:** [November 1, 2025, 3:21pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/4 "2025-11-01T15:21:26Z")

</div>

Would you mind elaborating on what you meant by "emscripten support"? Anything you want to use from the Emscripten toolchain?

---

<div class="post-metadata">

**Author:** ![ktoso](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/ktoso/32/44526_2.png) [@ktoso](https://forums.swift.org/u/ktoso)\
**Post date:** [November 2, 2025, 3:07am UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/5 "2025-11-02T03:07:53Z")

</div>

Pretty funny idea with DispatchAsync! Why not I guess, it’s kinda neat you can inverse it like that and this way get source compatible with libs which did use dispatch still huh 🙂

---

<div class="post-metadata">

**Author:** ![Joshua](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/joshua/32/34223_2.png) [@Joshua](https://forums.swift.org/u/Joshua)\
**Post date:** [November 2, 2025, 7:32pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/6 "2025-11-02T19:32:13Z")

</div>

Long JMP / exceptions. The WASI implementation is not supported in most browsers.

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/florianpircher/32/39919_2.png) [@FlorianPircher](https://forums.swift.org/u/FlorianPircher)\
**Post date:** [November 5, 2025, 8:43pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/7 "2025-11-05T20:43:36Z")

</div>

I wanted to try `import WASILibc` support for Embedded Swift, but the download code (_Swift SDK Bundles_ → _WebAssembly_ → _Copy install command_) on the [Install Swift - macOS | Swift.org](https://www.swift.org/install/macos/) website gets me a 404:

```sh
$ swift sdk install https://download.swift.org/swift-6.2.1-release/wasm/swift-6.2.1-RELEASE/swift-6.2.1-RELEASE_wasm.artifactbundle.tar.gz --checksum 482b9f95462b87bedfafca94a092cf9ec4496671ca13b43745097122d20f18af
Downloading swift-6.2.1-RELEASE_wasm.artifactbundle.tar.gzError: badResponseStatusCode(404)

```

Same 404 address for the _Download Wasm SDK_ link.

Same 404 address here: [Getting Started with Swift SDKs for WebAssembly | Swift.org](https://www.swift.org/documentation/articles/wasm-getting-started.html)

---

<div class="post-metadata">

**Author:** ![Max\_Desiatov](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/max_desiatov/32/20654_2.png) [@Max\_Desiatov](https://forums.swift.org/u/Max_Desiatov)\
**Post date:** [November 5, 2025, 10:43pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/8 "2025-11-05T22:43:58Z")

</div>

The issue has been fixed, would you be able to try again? Thanks!

(The article itself is [updated in a separate PR](https://github.com/swiftlang/swift-org-website/pull/1216)).

---

<div class="post-metadata">

**Author:** ![FlorianPircher](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/florianpircher/32/39919_2.png) [@FlorianPircher](https://forums.swift.org/u/FlorianPircher)\
**Post date:** [November 5, 2025, 10:53pm UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/9 "2025-11-05T22:53:03Z")

</div>

It works, thank you!

(And with `swift-6.2.1-RELEASE_wasm-embedded` I can now enjoy easy access to trigonometry!)

---

<div class="post-metadata">

**Author:** ![kateinoigakukun](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/kateinoigakukun/32/16706_2.png) [@kateinoigakukun](https://forums.swift.org/u/kateinoigakukun)\
**Post date:** [November 6, 2025, 2:31am UTC](https://forums.swift.org/t/swift-for-wasm-september-october-2025-updates/82966/10 "2025-11-06T02:31:35Z")

</div>

Thanks for sharing.

> [@Joshua](#):
>
> Long JMP / exceptions.

setjmp/longjmp is supported in recent versions of wasi-libc, and the wasi-libc bundled in our Swift SDK for Wasm includes that support in theory.  
You can give it a try by passing a few extra LLVM flags to the Swift compiler: `-Xllvm -wasm-enable-sjlj -lsetjmp -Xllvm -wasm-use-legacy-eh=false`  
More details are available here: [wasi-sdk/SetjmpLongjmp.md at main · WebAssembly/wasi-sdk · GitHub](https://github.com/WebAssembly/wasi-sdk/blob/main/SetjmpLongjmp.md)

> [@Joshua](#):
>
> The WASI implementation is not supported in most browsers.

That’s true. Browsers don’t natively implement WASI (just like they don’t natively support the Emscripten system interface either).  
However, there are a few WASI shim implementations available, such as:

- [GitHub - bjorn3/browser\_wasi\_shim: A WASI shim for in the browser](https://github.com/bjorn3/browser_wasi_shim/)
- [GitHub - swiftwasm/uwasi: Micro modularized WASI runtime for JavaScript](https://github.com/swiftwasm/uwasi)

Currently, we only rely on a few basic WASI interfaces (clock, random, and basic filesystem access), and they’re fairly straightforward.  
Having a (relatively) well-defined and clean system interface like WASI has been helpful so far.  
At this point, there’s not much we could directly reuse from Emscripten, but I’m definitely open to exploring that direction if it turns out to be useful.
