This release includes several bug fixes.
- Fix regressions in the built-in HTTP server introduced in 1.0
- Fix CLI test harness to work with the latest wasmtime
This release adds support for 6.0 toolchain, regression fixes, and internal improvements.
- Support SwiftWasm 6.0 toolchain
- Default toolchain version is now based on builder Swift version
- Skip hot-reloading if build fails
- Fix
carton bundle
regression introduced in 1.0.4 - Fix
carton test
regression introduced in 1.0.0 - Experimental support for
wasm32-unknown-wasip1-threads
target in test harness
This release adds support for 5.10.0 toolchain, CLI options, and internal improvements.
- Update default toolchain version to 5.10.0
- Add
--bind
todev
subcommand to specify serving address with relaxed default (0.0.0.0
) - Add
-Xwasm-opt
option tobundle
subcommand to pass additional arguments towasm-opt
- Many internal refactorings and test improvements
This release includes several bug fixes and internal improvements:
- Fix
carton test --environment node
to work with 6.0 and later toolchains - Stop writing files under
~/.carton/static
to avoid pollution - Many internal refactorings and test improvements
- Fix test harness for the latest main XCTest by @kateinoigakukun in #426
- TypeScript-ify entrypoint scripts by @omochi in #428
- Use
@bjorn3/browser_wasi_shim
as WASI implementation by @kateinoigakukun in #429
This release fixes several issues:
- Restore MIME types in
dev
server to fix loading of CSS and image files. - Fixed browser test runner to work with large number of test suites with Chrome.
- Fixed permission issue when running
swift run carton bundle
This release fixes several issues in version 1.0.0:
carton bundle
command didn't use proper reactor ABI, which caused a crash when running the output bundle.carton bundle
command didn't bundle resources from dependencies when applyingwasm-opt
optimizations.
Breaking changes:
carton
CLI is now slimmed down to be a SwiftPM Plugin.
This means that you can now use carton
by just declaring it as a dependency in your Package.swift
file.
dependencies: [
.package(url: "https://github.com/swiftwasm/carton", from: "1.0.0"),
],
Each carton
subcommand is now split into a separate SwiftPM plugin.
Old command | New command |
---|---|
carton dev |
swift run carton dev |
carton test |
swift run carton test |
carton bundle |
swift run carton bundle |
Also carton
no longer supports the following features:
carton init
command (useswift package init --type executable
instead)- Homebrew and Docker installation methods
Internal changes:
- Reduce build time by removing unnecessary dependencies: 96.97s -> 25.26s
- No longer directly depend on SwiftPM as a library. This means that
carton
no longer has to be updated when SwiftPM is updated (hopefully).
Our new SwiftPM plugin oriented architecture is illustrated in the following diagram:
sequenceDiagram
participant SwiftRunCarton as swift run carton
participant SwiftPM
participant CartonDevPlugin as carton-dev Plugin
participant CartonFrontend
SwiftRunCarton->>SwiftPM: exec
SwiftPM->>CartonDevPlugin: spawn
CartonDevPlugin->>SwiftPM: Build product
SwiftPM->>CartonDevPlugin: Build artifacts
CartonDevPlugin->>CartonFrontend: spawn
note right of CartonDevPlugin: Establish IPC
CartonFrontend->>CartonDevPlugin: File changed
CartonDevPlugin->>SwiftPM: Build product
SwiftPM->>CartonDevPlugin: Build artifacts
CartonDevPlugin->>CartonFrontend: Reload browsers
Additional changes:
--no-content-hash
option is added tocarton bundle
command. This option disables the use of content hash in the output file name.
This release fixes a bug in carton test
where it reports missing sock_accept
syscall.
This release adds SwiftWasm 5.9 toolchain support.
Merged pull requests:
- Update CI Action by @STREGA in #403
- Add Swift 5.9 to Build Action by @STREGA in #409
- Swift 5.9 toolchain & macOS Sonoma beta by @furby-tm in #402
- Add 5.9 support by @STREGA in #412
- Stop bothering WASI apps including unimplemented syscalls by @kateinoigakukun in #415
- Update default toolchain version to 5.9.1 by @kateinoigakukun in #416
This release fixes the wrong toolchain version installed in docker image. It was accidentally not updated to 5.8.0 in the last release.
This release adds SwiftWasm 5.8 toolchain support.
Merged pull requests:
- Update SwiftPM branch to 5.8 and fix build errors by @kateinoigakukun in #395
- Fix the default docker command arguments by @kateinoigakukun in #396
- Support jammy and amazonlinux2 for toolchain install by @kateinoigakukun in #397
- Update default toolchain version to 5.8 channel snapshot by @kateinoigakukun in #398
This release adds an extra size stripping optimization.
Merged pull requests:
- Fix SwiftPM dependency warning for template project by @gibachan in #384
- Allow to save .swift-version even .swift-version is missing by @gibachan in #385
- Fix carton sdk install on linux(aarch64) by @gibachan in #386
- Fix typo in container registry domain by @p- in #389
- Strip autolink custom section by @kateinoigakukun in #390
This release adds SwiftWasm 5.7 toolchain support.
Merged pull requests:
- Update SwiftPM dependencies by @kateinoigakukun in #371
- Update SwiftPM dependencies by @kateinoigakukun in #372
- Update SwiftPM dependencies by @kateinoigakukun in #373
- Update SwiftPM dependencies by @kateinoigakukun in #374
- Ignore force_try swift-lint rule where in defer. by @noppefoxwolf in #379
- Use @main attributes by @noppefoxwolf in #378
- Add 5.7 host toolchain matrix by @kateinoigakukun in #380
- Update SwiftPM library version to 5.7 by @kateinoigakukun in #381
- Update default toolchain version to 5.7.1 by @kateinoigakukun in #383
This release fixes an issue when carton test
doesn't execute the all of async tests, and doesn't handle
JS exception.
Merged pull requests:
- Exit non-zero status when test fail on browser #370 via @kateinoigakukun
- Update SwiftPM dependencies #368 via @MaxDesiatov
- Update SwiftPM dependencies #366 via @MaxDesiatov
This release adds several enhancements in carton test
, and allows you to customize optimization strategy.
One of the notable enhancement is --headless
option added in carton test
, which runs tests using
W3C WebDriver protocol
Merged pull requests:
- Revert "Use
--static-swift-stdlib
for easier distribution on Linux" (#365) via @MaxDesiatov - Update SwiftPM dependencies (#363) via @MaxDesiatov
- Headless test runner (#362) via @kateinoigakukun
- Add option to disable wasm optimizations (#359) via @ephemer
- Update SwiftPM dependencies (#360) via @MaxDesiatov
- Use
--static-swift-stdlib
for easier distribution on Linux (#343) via @MaxDesiatov - Add
--prebuilt-test-bundle-path
option tocarton test
(#358) via @kateinoigakukun - Update SwiftPM dependencies (#357) via @MaxDesiatov
- Fix linter error in
Builder.swift
(#356) via @MaxDesiatov - Clean up integration tests and fixtures (#355) via @kateinoigakukun
This release fixes an issue when carton test
wouldn't be finished after large number of test suites, and
improved HTML 5 compatibility.
Merged pull requests:
- Stop limiting WS frame size to 16kb for large number of test suites (#353) via @kateinoigakukun
- Use standards mode in default index page (#351) via @carson-katri
This release fixes an issue when JS entrypoints weren't unpacked during carton test --environment node
runs.
Merged pull requests:
- Add missing check for Node.js entrypoint (#350) via @MaxDesiatov
This release fixes an issue when temporary symlinks weren't cleaned up after running carton test --environment node
.
Merged pull requests:
- Fix symlinks not fully cleaned up in Node.js tests (#349) via @MaxDesiatov
This release of carton
includes enhancements and bugfixes. Namely:
- Compatibility with JavaScriptKit 0.15.0 and later.
The long-standing incompatibility between different versions of
carton
and JavaScriptKit is resolved now. All version combinations ofcarton
and JavaScriptKit higher than 0.15 should be compatible with each other. This is achieved by supplying JavaScriptKit runtime via SwiftPM resources, instead of embedding within.js
entrypoints as we did previously. If you relied on the previous behavior, please open an issue describing your use case. carton test
can now run your test suite with Node.js when that is installed. Run it ascarton test --environment node
to enable this.- SwiftPM resources from sub-dependencies of your package are now available on the web server with
carton dev
and bundled withcarton bundle
. Resources from each target are still isolated in subdirectories named with\(packageName)_\(targetName).resources
format, which is hardcoded by SwiftPM. Resources from the main target you're building are still available at the root path, also accessible viaBundle.main.path(forResource:ofType:)
function when you import Foundation (mind the binary size overhead when relying on Foundation). Incorrect paths accessed viaBundle.module
are a known issue, which we track as swiftwasm/swift#4573.
Many thanks to @AntonioCandinho, @j-f1, and @kateinoigakukun for contributions!
Closed issues:
- Re-read supplied
index.html
on updates (#341) carton dev
stops rebuilding/reloading after error (#339)- Avoid applying
I64ImportTransformer
when JS BigInt support is enabled (#326) swjs_create_typed_array
error oncarton test
(#322)- Host JSKit entrypoint assets on GH Pages CDN (#317)
Merged pull requests:
- Fix watcher breakage on failed builds (#347) via @MaxDesiatov
- Re-read custom
index.html
on updates (#342) via @MaxDesiatov - Use JSKit runtime from SwiftPM resources (#335) via @MaxDesiatov
- Fix JavaScriptBigIntSupport compatibility issue (#338) via @kateinoigakukun
- Embed static.zip in Swift code instead of downloading from remote (#334) via @kateinoigakukun
- Clarify
--environment
option forcarton test
inREADME.md
(#333) via @MaxDesiatov - Add
carton
/SwiftWasm/JSKit compat matrix toREADME.md
(#332) via @MaxDesiatov - Add support for running tests using NodeJS (#328) via @AntonioCandinho
- Serve all available resources with
dev
/bundle
(#330) via @MaxDesiatov - Update to v2 of Contributor Covenant in shared GitHub repo (#329) via @j-f1
- Fix 5.6 template: use
executableTarget
(#325) via @MaxDesiatov - Update SwiftPM dependencies (#324) via @MaxDesiatov
This is a bugfix release resolving an issue with JavaScript entrypoint code.
Many thanks to @fjtrujy for the contribution!
Closed issues:
- Apply
clock_res_get
patch in all entrypoints (#321)
Merged pull requests:
- Update SwiftPM dependencies (#319) via @MaxDesiatov
- Update SwiftPM dependencies (#320) via @MaxDesiatov
- Override
clock_res_get
function fromwasmer/wasi-js
to fix memory issue (#323) via @fjtrujy
This is a bugfix release that resolves an issue with carton test
introduced in 0.14.0. Many thanks to
@SDGGiesbrecht for reporting, and to @kateinoigakukun
for fixing it!
Closed issues:
- “carton test” fails to run as of 0.14.0 (#313)
Merged pull requests:
- Fix "No export
_start
found in the module" error incarton test
(#314) via @kateinoigakukun
This release uses SwiftWasm 5.6.0 as the default toolchain. Additionally, issue with rebuilding projects when watching
for file changes with carton dev
has been fixed. Also refer to release details for carton
0.13.0 for more information on new recently introduced flags.
Many thanks to @kateinoigakukun for contributions!
Closed issues:
- Watcher doesn't see my changes (#295)
Merged pull requests:
- Several fixes for 5.6 toolchain (#310) via @kateinoigakukun
- Update SwiftPM dependencies (#309) via @MaxDesiatov
- Describe
--debug-info
and-Xswiftc
inREADME.md
(#308) via @MaxDesiatov - Fix watcher blocked by Vapor
run()
(#307) via @kateinoigakukun
This is a small feature release with a few bugfixes. Namely, new -Xswiftc
option was added for forwarding flags to
underlying swiftc
invocations. Also, new --debug-info
flag allows keeping debug information even for release builds.
Additionally, we've fixed a crash with executableTarget
declarations in Package.swift
manifests, and switched to
SwiftPM 5.6 API in preparation for the imminent SwiftWasm 5.6 release.
This version of carton
now ships with JavaScriptKit 0.13.0 runtime.
WARNING: this release of carton
is not compatible with latest Tokamak or SwiftWasm 5.6 snapshots or releases yet. You should stay with carton
0.12.2 for now if you're building apps and libraries with Tokamak. A future release of carton
will resolve this incompatibility.
Thanks to @kateinoigakukun and @yonihemi for contributions, and to @pedrovgs for additional testing and bug reports.
Closed issues:
- Detecting completion of Wasm module instantiation (#290)
- Add support for Swift 5.6 package description format (#285)
- Add support for
-Xswiftc
arguments (#277)
Merged pull requests:
- Bump JavaScriptKit dependency to 0.13.0 (#306) via @MaxDesiatov
- Don't strip custom sections when using
--debug-info
(#304) via @kateinoigakukun - Update dependencies (#298) via @MaxDesiatov
- Add macOS 12 and Xcode 13.3 to CI matrix (#303) via @MaxDesiatov
- Add
--debug-info
flag to carton bundle (#301) via @kateinoigakukun - Use libSwiftPM 5.6 to parse manifests (#302) via @yonihemi
- Add
-Xswiftc
option for each build commands (#300) via @kateinoigakukun - Update dependencies (#297) via @MaxDesiatov
- Fix crash for packages with
executableTarget
(#296) via @yonihemi
This release features a massive refactor by @MaxDesiatov to use Swift 5.5's async/await
and actors, reducing its size, improving readability and removing Combine/OpenCombine dependency, as well as CI and Linux installation improvements.
JavaScriptKit and Tokamak versions in templates were bumped to 0.12.0 and 0.9.1 respectively.
Merged pull requests:
- Update dependencies (#293) via @MaxDesiatov
- Update dependencies (#289) via @MaxDesiatov
- Add libsqlite3-dev dependency (#288) via @SwiftCoderJoe
- Upgrade binaryen version to 105 (#286) via @fjtrujy
- Use
async/await
and actors instead of Combine (#283) via @MaxDesiatov - Update dependencies (#284) via @MaxDesiatov
- Statically link with
SwiftPMDataModel
library (#275) via @yonihemi - Build
main
Docker images on every push tomain
branch (#272) via @MaxDesiatov - Update dependencies (#282) via @MaxDesiatov
- Update dependencies (#279) via @MaxDesiatov
- Update dependencies (#273) via @MaxDesiatov
- Fix Wasmer installation issues in
Dockerfile
(#276) via @MaxDesiatov
This is a bugfix release that fixes linking issues with ICU that some users could've experienced
with carton dev
and carton bundle
. Many thanks to @Sefford for
reporting this and providing detailed issue description!
Closed issues:
- Carton 0.12.0 with SwiftWasm 5.5.0 fails with linker command (#268)
Merged pull requests:
- Bump SwiftWasm to 5.5 in
Dockerfile
, bump AHC (#269) via @MaxDesiatov - Add ICU linker flags to all build invocation (#270) via @MaxDesiatov
- Update dependencies (#261) via @MaxDesiatov
This release bumps the default version of SwiftWasm distribution to 5.5.0. For projects that don't
specify their preferred version of SwiftWasm in .swift-version
, carton
will now download SwiftWasm
5.5.0.
Since SwiftWasm 5.5.0 now provides distributions for Apple Silicon, carton
will
download such distributions by default on compatible hardware. Run carton
under Rosetta if you
prefer to use x86_64 builds of SwiftWasm on macOS.
JavaScriptKit and Tokamak versions in templates were bumped to 0.11.1 and 0.9.0 respectively.
Additionally, a bug with demangling of stack traces was fixed. Thanks to @Feuermurmel for the contribution!
Closed issues:
- Download Apple Silicon builds for releases that have them available (#262)
- Stack trace demangling (#248)
- Docker tag for 0.10.0? (#246)
Merged pull requests:
- Use SwiftWasm 5.5.0, bump version to 0.12.0 (#266) via @MaxDesiatov
- Update JavaScriptKit to v0.11.1 (#265) via @yonihemi
- Update dependencies, add support for SwiftWasm 5.5 (#263) via @MaxDesiatov
- Fix environment detection from User-Agent header (#249) via @Feuermurmel
- Update dependencies (#260) via @MaxDesiatov
- Disable
--enable-test-discovery
for old versions (#257) via @MaxDesiatov
This is a bugfix release that fixes an issue with dynamic linking to libSwiftPMDataModel.so
in Ubuntu images for Docker.
This release bumps the default version of SwiftWasm distribution to 5.4.0. For projects that don't
specify their preferred version of SwiftWasm in .swift-version
, starting with this version
carton
will download SwiftWasm 5.4.0.
No other major changes are included in this release.
Merged pull requests:
- Bump version to 0.11.0, update dependencies (#251) via @MaxDesiatov
- Update link in
README.md
(#252) via @MaxDesiatov - Update dependencies (#247) via @MaxDesiatov
This is a bugfix release that resolves issues with incorrect or missing diagnostic output, improves
our end-to-end test coverage, and updates dependencies and carton init
templates.
Additionally, we improved support for demangling stack traces in different browsers, and added a stack overflow sanitizer that's enabled by default for debug builds.
Many thanks (in alphabetical order) to @j-f1, @kateinoigakukun, @literalpie, @thecb4, and @yonihemi for their contributions to this release!
Closed issues:
carton test
command unable to find gtk+3 using--template tokamak
(#241)carton
also requires zlib.h to compile from source (#237)carton test --environment defaultBrowser
broken on GitHub Actions (#200)- Add
--host
option tocarton dev
andcarton test
(#193) - Replace hard-coded path delimiters (#183)
- Use libSwiftPM instead of custom model types (#120)
Merged pull requests:
- Update JSKit and Tokamak versions in templates (#243) via @MaxDesiatov
- Fix Ubuntu deps, clarify Linux support in
README.md
(#242) via @MaxDesiatov - Add more browsers to
DestinationEnvironment
(#228) via @j-f1 - Fix
carton dev
crashing with SO sanitizer (#239) via @MaxDesiatov - Avoid building in
release
mode when testing (#240) via @MaxDesiatov - Update JS dependencies in
package-lock.json
(#231) via @MaxDesiatov - Integrate stack sanitizer (#230) via @kateinoigakukun
- Add
carton init
with template test. Supports #99 (#221) via @thecb4 - Add host argument to
dev
andtest
commands (#213) via @literalpie - Add tests for
sdk versions
andsdk local
commands (#218) via @thecb4 - Add test for
carton sdk install
(#217) via @thecb4 - Use libSwiftPM instead of custom model types (#194) via @yonihemi
- Add end-to-end tests for
carton test
command (#209) via @thecb4 - Link to the org sponsorship page from
README.md
(#210) via @MaxDesiatov - Update the "Roadmap" section in
README.md
(#207) via @MaxDesiatov - Avoid running tests while building the Docker image (#204) via @MaxDesiatov
- Fix browser testing for Safari, update
tasks.json
(#202) via @MaxDesiatov - Add
test
command test with no arguments (#198) via @thecb4
This is a bugfix release that fixes parsing of Package.swift
manifests that contain dependencies on system targets. It also adds support for Chrome and Safari stack traces. Many thanks to @j-f1 for the contribution!
Merged pull requests:
- Update dependencies (#188) via @MaxDesiatov
- Fix parsing system targets in
Package.swift
(#189) via @MaxDesiatov - Bump ini from 1.3.5 to 1.3.8 (#187) via @dependabot[bot]
- Add support for Chrome and Safari stack traces (#186) via @j-f1
- Update dependencies (#184) via @MaxDesiatov
This release adds multiple changes and new features:
-
New
--environment
option oncarton test
, which when passed--environment defaultBrowser
runs test suites of a given package in your default browser, allowing you to use JavaScriptKit and other browser-specific dependencies in your tests. Another available option is--environment wasmer
, which is the old and still the default behavior, which runs the test suite inwasmer
. -
Now when your SwiftWasm app crashes in Firefox, the strack trace will printed by
carton dev
andcarton test
in terminal with function symbols demangled, which makes crashes much easier to debug. Since different browsers format their stack traces differently, support for browsers other than Firefox will be added separately in a future version ofcarton
. -
carton dev
andcarton bundle
now serve SwiftPM resources declared on targets of executable products from the root/
path, in addition to a subpath automatically generated forBundle.module
. This was a necessary change to allow theImage
view to work properly in Tokamak. -
Support for JavaScriptKit 0.9.0, which allows catching JavaScript exceptions in Swift code.
-
The default SwiftWasm toolchain is now 5.3.1, which is a recommended bugfix update for all of our users.
Merged pull requests:
- Mark all commands as implemented in
README.md
(#180) via @MaxDesiatov - Bump versions of libraries in
Template.swift
(#182) via @MaxDesiatov - Serve main bundle resources from root directory (#176) via @MaxDesiatov
- Use
FileDownloadDelegate
from the AHC package (#171) via @MaxDesiatov - Bump JSKit, add support for testing in browsers (#173) via @MaxDesiatov
- Update dependencies (#179) via @MaxDesiatov
- Bump
defaultToolchainVersion
to 5.3.1 (#178) via @MaxDesiatov - Demangle and print Firefox stack traces in terminal (#162) via @MaxDesiatov
- Update dependencies (#172) via @MaxDesiatov
- Update dependencies (#170) via @MaxDesiatov
This patch release updates the default version of Tokamak in the carton init
template to fix autocomplete in Xcode.
Merged pull requests:
- Add minimum deployment target in template (#165) via @kateinoigakukun
- Remove wasm-strip from log comment (#164) via @kateinoigakukun
This patch release updates the default version of Tokamak in templates used by carton init
.
Merged pull requests:
- Update Tokamak version used in init template (#160) via @kateinoigakukun
- Update dependencies (#159) via @ie-ahm-robox
- Add image source label (#161) via @kateinoigakukun
This is a bugfix and feature release that coincides with the stable 5.3.0 release of SwiftWasm,
uses it as the default toolchain, and enables compatibility with it. This is the recommended version
of SwiftWasm, and older development snapshots are no longer supported in carton
. We also
discourage you from adding .swift-version
files to your project or using new development
snapshots, unless you'd like to try a preview of a new Swift feature. If there's anything that
prevents you from using the 5.3.0 release of SwiftWasm instead of a specific 5.3 development
snapshot, please report it as a bug.
Many thanks to @carson-katri, @kateinoigakukun for their contributions to this release!
Notable changes:
carton test
now parses output of XCTest and reformats as a clear test summary with colors highlighted in terminals that support it.- Our
WasmTransformer
dependency now can strip debug information from release bundles, which meanscarton bundle
no longer requires WABT with itswasm-strip
utility to run. carton test
previously built all targets in a SwiftPM package even when they weren't direct or indirect dependencies of test targets, which mirrored the behavior ofswift test
. This could cause issues with packages that have some targets that are incompatible with the WASI platform, but are excluded from dependency trees otherwise. This is no longer the case,carton test
now only builds targets that are actually needed to run the tests in a given package.- SwiftPM included in the SwiftWasm 5.3.0 toolchain produces executable binaries with the
.wasm
extension. This version ofcarton
now assumes this extension is present in filenames of WebAssembly binaries, which makes old development snapshots incompatible. carton
now looks for SwiftWasm SDKs installed in the/Library/Developer/Toolchains
directory in addition to the~/.carton/sdk
and~/Library/Developer/Toolchains
directories on macOS.
Closed issues:
- Search /Library/Developer/Toolchains also (#146)
Merged pull requests:
- Support system installed toolchain (#157) via @kateinoigakukun
- Remove wabt dependency (#156) via @kateinoigakukun
- Use ghcr.io/swiftwasm/swift as base image (#154) via @kateinoigakukun
- Fix handling of test products with .wasm extension (#153) via @MaxDesiatov
- Format testing time to two decimal places (#152) via @MaxDesiatov
- Build only test product and its deps for testing (#150) via @MaxDesiatov
- Update dependencies (#149) via @ie-ahm-robox
- Update toolchain and remove extra compiler flags (#147) via @kateinoigakukun
- Fix handling of binaries with
.wasm
extension (#148) via @MaxDesiatov - Pretty print
carton test
output (#144) via @carson-katri - Stop using destination.json (#141) via @kateinoigakukun
- Use Xcode 12.2 on macOS Big Sur (#145) via @MaxDesiatov
- Fix error message output (#142) via @carson-katri
- Update dependencies (#143) via @ie-ahm-robox
- Update JavaScriptKit version in TestApp (#140) via @kateinoigakukun
This is a bugfix release that prevents carton
commands from re-downloading .pkg
toolchains
on macOS on every CLI invocation.
This release contains bugfixes and improvements.
Now SwiftWasm binaries built with carton
are
fully compatible with Safari, even when they use functions that return 64-bit integers. This was
caused by the lack of support for conversions between i64
and BigInt
types in
Safari.
Additionally, when you run carton dev
a new tab with your app is opened in your default browser
automatically. You can now also specify a port to use for the development server with the --port
option (-p
for short).
All carton
commands that build Swift code now pretty-print error messages in case of failures.
If an error message points to a specific location in your code, surrounding code has its syntax
highlighted in terminals.
carton test
now automatically passes --enable-test-discovery
flag when building your tests, so
you no longer need to manually maintain LinuxMain.swift
and XCTestManifests.swift
files in your
test suites.
carton
now uses the wasm-5.3-SNAPSHOT-2020-10-21-a
toolchain and SDK by default. This and most
of our recent snapshots are built for both Ubuntu 18.04 and 20.04, the latter supported in carton
for the first time. carton
automatically detects the version of your OS and downloads an
appropriate snapshot. Recent snapshots for macOS are also tested on macOS Big Sur on Intel CPUs
(Apple Silicon is not supported yet), and are signed and distributed as .pkg
files, which carton
fully supports now.
Lastly, we've prepared a prebuilt Docker image for you that you can get by running
docker pull ghcr.io/swiftwasm/carton:latest
This image has the toolchain and all required dependencies preinstalled.
Many thanks to @carson-katri, @kateinoigakukun, and @yonihemi for their contributions to this release!
Closed issues:
- Method with i64 return type fails on Safari 13+14 (#127)
- Provide a Dockerfile for easier distribution and testing on Linux (#119)
- Support downloading Ubuntu 20.04 SDK (#114)
carton dev
should open a browser window when server starts (#92)
Merged pull requests:
- Bump JavaScriptKit to 0.8, stop checking revision (#139) via @MaxDesiatov
- Avoid repeated
loadingMessage
inProcessRunner
(#138) via @MaxDesiatov - Add support for signed
.pkg
archives on macOS (#137) via @MaxDesiatov - Add Dockerfile, mention the Docker image in
README.md
(#136) via @MaxDesiatov - Fix support for Ubuntu 20.04, use GHA for SwiftLint (#134) via @MaxDesiatov
- Build on macOS Big Sur with GitHub Actions (#132) via @MaxDesiatov
- Remove sudo usage from
install_ubuntu_deps.sh
(#135) via @MaxDesiatov - Add separate Builder class, use WasmTransformer (#131) via @MaxDesiatov
- Bump toolchain, use
--enable-test-discovery
(#130) via @MaxDesiatov - Update dependencies (#133) via @ie-ahm-robox
- Bump default toolchain, make i64 bug reproducible (#128) via @MaxDesiatov
- Pretty print diagnostics (#122) via @carson-katri
- Update dependencies (#125) via @ie-ahm-robox
- Add @carson-katri and @kateinoigakukun to
FUNDING.yml
(#124) via @MaxDesiatov - Update dependencies (#118) via @ie-ahm-robox
- Automatically open a browser window when Dev Server starts (#117) via @yonihemi
- Allow changing dev server's port (#116) via @yonihemi
This release fixes basic carton init
template that was pulling an incompatible version of
JavaScriptKit in carton
0.6.0.
This release introduces a new carton bundle
command that produces an optimized build of your app
and writes it to the Bundle
subdirectory of your package. Additionally, SwiftPM
resources
are supported by both carton dev
(served as static files) and carton bundle
(copied with the
rest of the assets), if any package resources are declared in your Package.swift
.
New carton package
command is introduced, which proxies its subcommands to swift package
invocations on the currently-installed toolchain. This may be useful in situations where you'd like
to generate an Xcode project file for your app with something like carton package generate-xcodeproj
. It would be equivalent to swift package generate-xcodeproj
, but invoked with
the SwiftWasm toolchain instead of the toolchain supplied by Xcode. Many thanks to
@kateinoigakukun for the implementation!
Compatibility with Safari 14 is fixed for carton dev
and is maintained for the new carton bundle
command as well.
This version of carton
ships with new JavaScript runtime compatible with JavaScriptKit
0.7. You should update JavaScriptKit
dependency to 0.7 if you had an older version specified in Package.swift
of your project.
A regression in carton test
was fixed in the latest 5.3 toolchain snapshot, which became the
default snapshot version in this version of carton
. In general we advise against having a
.swift-version
file in your project, but if you need one, please specify
wasm-5.3-SNAPSHOT-2020-09-25-a
snapshot or a later one from the 5.3 branch in this file for
carton test
to work.
Closed issues:
carton
crashes when it fails to instantiateTerminalController
(#112)- Allow carton to use a provided HTML template file (#100)
- Add static file support (#38)
- Demo cannot be run on Safari 14 (#25)
- Implement
carton bundle
command (#16)
Merged pull requests:
- Use raw stdout if
TerminalController
is unavailable (#113) via @MaxDesiatov - Bump JavaScriptKit to 0.7.2 (#115) via @MaxDesiatov
- Bump dependencies and default toolchain snapshot (#111) via @MaxDesiatov
- Implement resources copying in
carton bundle
(#109) via @MaxDesiatov - Update node.js dependencies, including wasmer.js (#108) via @MaxDesiatov
- Bump JavaScriptKit dependency to 0.6.0 (#107) via @MaxDesiatov
- Implement support for static resources in
carton dev
(#104) via @MaxDesiatov - Bump default toolchain version, fix release builds (#106) via @MaxDesiatov
- Bump bl from 4.0.2 to 4.0.3 (#102) via @dependabot[bot]
- Implement
--custom-index-page
option (#101) via @MaxDesiatov - Implement
carton bundle
command (#97) via @MaxDesiatov - Update
tokamak
template for the new TokamakUI org (#98) via @MaxDesiatov - Add
carton package
cmd (#96) via @kateinoigakukun
This release updates both basic
and tokamak
templates in carton init
for compatibility with
the latest JavaScriptKit and
Tokamak versions. Additionally, carton dev
now cleans build logs from
previous builds when its watcher is triggered. New --verbose
flag was added, which restores the
previous behavior with all build logs listed on the same screen.
carton dev
and carton test
now install 5.3 SwiftWasm snapshots by default, which in general are
more stable than the previously used SwiftWasm development snapshots, and are compatible with Xcode
12 betas. You can now also add direct dependencies on a specific JavaScriptKit version instead of a
revision with these 5.3 snapshots, as they contain a workaround for the unsafe flags
issue reproducible with SwiftWasm development
snapshots.
Allowing carton
to select a default snapshot is now the recommended approach, so in general we
suggest avoiding .swif-version
files in projects that use carton
.
The issue where carton dev
hangs on exit after establishing at least one WebSocket connection with
a browser is now fixed in our Vapor dependency. Kudos to
@tanner0101 for diagnosing and fixing the issue!
Thanks to @carson-katri, @RayZhao1998 for their contributions to this release!
Closed issues:
- Compiling swift packages that depend on Darwin or Glibc (#89)
- Detect the currently selected version of Xcode and warn if it's 12 beta (#81)
- Print the error output of
swift package dump-package
(#78) - JavaScriptKit dependency missing in the
basic
template (#77) carton sdk install
crashes when passed an invalid version (#72)- No package found when invoking
carton dev
(#71) - Xcode 12 beta 3 compatibility (#65)
- Delay on Ctrl-C with error: Could not stop HTTP server (#7)
Merged pull requests:
- Update
README.md
to reflect the current feature set (#90) via @MaxDesiatov - Fix broken
carton init
templates (#88) via @MaxDesiatov - Propagate package manifest parsing errors (#86) via @MaxDesiatov
- Update default toolchain version (#87) via @MaxDesiatov
- Close WebSocket connections after HTTP server exits (#85) via @MaxDesiatov
- Fix crash caused by use of
try!
while installing invalid version (#73) via @RayZhao1998 - Update TSC and add sqlite dependency (#74) via @ie-ahm-robox
- Avoid using 3rd-party action for the Linux build (#75) via @MaxDesiatov
- Add verbose/concise logging levels (#69) via @carson-katri
- Fix watcher crashing in package subdirectories (#67) via @MaxDesiatov
- Warn against Xcode 12 betas in
README.md
(#66) via @MaxDesiatov
This release modifies the tokamak
template for carton init
to use the main
branch of
Tokamak. This fixes dependency resolution issues caused by unsafe build flags
in JavaScriptKit. Please see
swiftwasm/JavaScriptKit#6 for more details.
This release adds a few major features, namely carton init
and carton test
commands, carton sdk local
subcommand, and enables support for linking with Foundation automatically.
Thanks to @carson-katri, @RayZhao1998, @JaapWijnen and @broadwaylamb for their contributions to this release!
New features:
Firstly, carton dev
no longer requires a --destination
flag with a manually crafted
destination.json
file to link with Foundation. If your project has import Foundation
anywhere in
its source code, a subset of Foundation provided with SwiftWasm is automatically linked. Please
check the list of Foundation types currently unavailable in
SwiftWasm
for more details on Foundation compatibility (mostly filesystem, socket, multi-threading, and APIs
depending on those are disabled).
The new carton init
command initializes a new SwiftWasm project for you (similarly to swift package init
) with multiple templates available at your choice. carton init --template tokamak
creates a new Tokamak project, while carton init --template basic
(equivalent to
carton init
) creates an empty SwiftWasm project with no dependencies. Also, carton init list-templates
provides a complete list of templates (with only basic
and tokamak
available
currently).
The new carton test
command runs your test suite in the wasmer
environment. Unfortunately, this currently requires a presence of LinuxMain.swift
file and
explicit test manifests, --enable-test-discovery
flag is not supported yet. Projects that can
build their test suite on macOS can use swift test --generate-linuxmain
command to generate this
file.
Breaking changes:
The bundled carton dev
JavaScript entrypoint has been updated to fix runtime issues in the
Swift-to-JavaScript bridge API. Because of this, projects that depend on
JavaScriptKit should specify c90e82f
revision as a
dependency:
dependencies: [
.package(url: "https://github.com/kateinoigakukun/JavaScriptKit", .revision("c90e82f")),
],
Unfortunately, specifying a JavaScriptKit version in Package.swift
as a dependency is not
supported by SwiftPM due to the use of unsafe flags, see
swiftwasm/JavaScriptKit#6 for more details.
Closed issues:
- Avoid running the tests if can't build them (#56)
- Verify SDK is already installed before installing the same version (#45)
- Automatically create destination JSON to allow linking Foundation (#4)
- Watcher should detect custom paths in Package.swift (#1)
Merged pull requests:
- Propagate test build/run failures in the exit code (#61) via @MaxDesiatov
- Update static.zip, automate its release process (#60) via @MaxDesiatov
- Upgrade JavaScriptKit to 0.5.0 (#59) via @carson-katri
- Add
carton init
command (#54) via @carson-katri - Fix
carton test
output skipping lines (#53) via @MaxDesiatov - Implement
carton sdk local
subcommand (#40) via @RayZhao1998 - Add
list
flag andtestCases
argument totest
(#52) via @MaxDesiatov - Implement simple wasmer runner for
test
command (#51) via @MaxDesiatov - Always pass --enable-test-discovery to swift build (#49) via @MaxDesiatov
- Fix watcher missing root directories (#48) via @MaxDesiatov
- Update to Vapor 4.15.2, fix formatting (#47) via @MaxDesiatov
- Add sources to watcher per target (#46) via @JaapWijnen
- Avoid displaying destination files as SDK versions (#44) via @MaxDesiatov
- Automatically link Foundation w/ destination.json (#41) via @MaxDesiatov
- Use Combine instead of OpenCombine where possible (#39) via @MaxDesiatov
- Add separate CartonHelpers/SwiftToolchain modules (#35) via @MaxDesiatov
- Use
from
instead ofupToNextMinor
for OpenCombine (#34) via @MaxDesiatov - Bump OpenCombine version to 0.10.0 (#33) via @broadwaylamb
This is a bugfix release that fixes SwiftWasm backtrace reporting in certain cases and also enables
sorting for the output of the carton sdk versions
subcommand.
Merged pull requests:
- Fix backtrace logging for async startWasiTask (#30) via @MaxDesiatov
- Sort the output of
carton sdk versions
(#29) via @MaxDesiatov
This is a release that adds a new carton sdk versions
subcommand, new --release
flag and a new
--destination
option to the carton dev
command. Additionally, archive size is logged when a new
SDK is downloaded, and backtrace logging is improved in browser consoles for crashing SwiftWasm
apps. Many thanks to @RayZhao1998 and
@ratranqu for their contributions! 👏
Closed issues:
- Support linking with Foundation/CoreFoundation (#11)
Merged pull requests:
- Log archive size when downloading new SDK (#28) via @MaxDesiatov
- Update WASI polyfill, print a backtrace on crash (#27) via @MaxDesiatov
- Support
carton sdk versions
(#21) via @RayZhao1998 - Add a --release flag to the carton dev command (#19) via @ratranqu
- Add --destination option to the
carton dev
command (#18) via @ratranqu
This release introduces a new carton sdk install
command that allows
you to quickly install the SwftWasm toolchain and SDK
without requiring any additional dependencies such as swiftenv
. Also,
carton dev
now automatically installs SwiftWasm through the same code paths
as carton sdk install
, when no suitable SDK is detected.
This is a refinement release that adds a --version
flag. Additionally, the
dev
command is no longer the default, now a simple carton
invocation without
any arguments prints a help message describing available commands.
This is a bugfix release that fixes the dev.js
bundle broken in 0.1.3.
This is a bugfix release that includes the latest version of
JavaScriptKit runtime
in the dev.js
bundle. It fixes a bug with reference counting of JSObjectRef
instances, which could lead to crashes.
This is a bugfix release that fixes stdout and stderr WASI output in async handlers.
Previously stdout output was redirected with console.log
only on the first pass
of execution of top-level code, while none of the output from async handlers (such
as DOM listeners) was redirected. Now in this release, stdout and stderr output
is consistently redirected with console.log
and console.error
respectively,
in all cases.
This is a bugfix release that fixes dependency downloads on Linux. The issue was
caused by Foundation not supporting HTTP
redirects in Swift 5.2 on Linux,
and is now resolved by using AsyncHTTPClient
instead of Foundation's URLSession
for dependency downloads.
Since SwiftPM doesn't always build an executable target even if one is present without
an explicit --product
option, the dev
command now requires the presence of an executable
target in your Package.swift
. Use the new --product
option instead of --target
to
disambiguate between multiple executable targets.
Pass --target
option to swift build
when running the dev
command.
Fix index page body served by HTTP when running the dev
command.
Fix expected polyfill hashes and a fatal error triggered when hashes didn't match.
Fix watching and reloading, allow multiple WebSocket connections in the watcher code. The latter allows multiple browser windows to stay open and get reloaded simultaneously.
First preview release, only a basic dev
command is implemented.