v0.43.0-net.2
Pre-releaseTinyGo 0.43.0-net.2
This is a test release of the yohimik fork, not an official TinyGo release. It targets hosted Linux and Darwin CLI applications that use HTTPS clients, files, environment variables, concurrent work, child processes and signals. It does not establish general Go server compatibility.
Source
- Upstream base is TinyGo 0.42.0, commit
bdc4a21a. - Release source is
95fba82a76c198a4543a031b29c14fc878dfc05f. - Net source is
0f460803c832e5edad095ce02731f1000496dd88. - The release differs from accepted candidate
e7d34c8c126e0eecd2ce711915f2f88d112d833aonly in the version constant.
The 0.43.0-net.N version denotes a fork prerelease. It does not mean that this build uses upstream TinyGo 0.43.0.
Changes since net.1
- Use the coordinated Darwin dynamic-import and variadic trampoline implementation from TinyGo PR 5612. This replaces the fork's duplicate fcntl wrapper path. Both fcntl regression checks remain.
- Map child file descriptors without destroying sources needed by later file actions. Cover cycles, repeated sources and sparse mappings. Close unnamed standard descriptors. Use valid Darwin close actions for descriptors that were not open.
- Include the Go
net/http/cookiejarpackage in the loader. Keep the port's surrounding net packages. - Add
ListenConfigwith explicit limits for unsupported options. Report kernel-assigned ephemeral ports and preserve listener zones. - Shut sockets down before close and prevent repeated close from closing a reused descriptor. This is not a complete poller or descriptor-lifetime implementation.
- Include the net submodule in the Nix test source checkout.
Real hosted TCP/TLS, HTTP redirects, DNS, process spawning, environment and directory handling, Setpgid, RWMutex and signal delivery fixes from net.1 remain included.
Downstream candidate acceptance
These results use the exact pre-version candidate. They are not claims that downstream releases have already shipped with net.2.
Dispat source 909dc401f3725a610604b77b0e790808cee9a524, with corrected harness 0990c6db, passed 796 test events with no failures or skips on each of native Darwin ARM64 and native Linux ARM64. Checks include TinyGo-built update fixtures, trusted TLS, unknown-CA refusal, update and original backup hashes, byte-identical offline rollback, and install --pipe success, failure and environment handling.
Crier source 7d687fc8a17cb0350d95698be0f74f6e8ce4b4b4 passed full raw and stripped E2E on native Linux ARM64 and emulated Linux AMD64. Each run has 144 top-level tests and 156 passing test events, with no failures or skips. Coverage includes TinyGo-built update fixtures, trusted TLS by name and IP, certificate and plaintext refusal, byte-identical rollback, real FFmpeg, helper processes, publishing, files and concurrent application work. The standard Go unit, E2E, FFmpeg, coverage and lint checks also pass.
Crier uses webrender and canvas for text, fonts, page layout and PNG rendering. Its unchanged 13-image comparison passes on both targets. AMD64 is exact for all images. ARM64 is exact for 12 images, with four event-card pixels differing by one channel value. Crier applies a two-line explicit-rounding build patch to webrender for both compilers. This makes gradient origins consistent across permitted fused and separately rounded Go arithmetic. It is an application build patch, not a TinyGo compiler fix or a relaxed pixel threshold. Crier's owner supplied the candidate acceptance report and logs, which were checked independently. The later published-artifact report is linked below.
Crier candidate sizes
Same source and target. Go is built with stripped release flags. TinyGo uses size optimization, no debug data and a separate strip step.
| Target | Go bytes | Stripped TinyGo bytes | Reduction |
|---|---|---|---|
| Linux ARM64 | 30,277,794 | 13,835,824 | 54.30% |
| Linux AMD64 | 32,518,306 | 16,446,968 | 49.42% |
These are candidate application measurements, not final downstream release asset sizes. AMD64 execution here used emulation. Neither these results nor the Dispat tests cover every Go package or every concurrency pattern.
Published Crier v1.1.1
Crier v1.1.1 is now public at source acac2f0eae0d98e42f442c7f4e6a36ccf9bc3665, built with this published toolchain. Its final acceptance report records all application checks and their limits. The public tag, asset sizes and report SHA-256 were checked.
Final Linux ARM64 bytes are 13,835,840 for stripped TinyGo versus 30,277,794 for standard Go, a 54.30% reduction. Final Linux AMD64 bytes are 16,447,000 versus 32,518,306, a 49.42% reduction. These final asset measurements supersede the candidate sizes above. The release SHA-256 manifest identifies each file.
Tiny assets are opt-in. Normal Crier installation and self-update still select standard Go assets. The published report retains the emulated generic os failures, the platform execution limits and the explicit-rounding renderer patch.
Related upstream work
Published Dispat v1.8.1 CLI
Dispat v1.8.1 CLI is public. Its binary size manifest records build source 40c5823673c9f7811397adeaf51c9e96a0be0905, Go1.26.8 and this TinyGo release. The release tag identifies release-record commit 3b8f2793e728e180db4e0700b050850d24c37482, not the build source. Public metadata and the downloaded manifest digest were checked.
Final Linux ARM64 sizes are 6,299,032 TinyGo bytes versus 9,896,098 standard Go bytes, 36.35% smaller. Linux AMD64 sizes are 6,697,528 versus 10,895,522, 38.53% smaller. These figures identify published CLI assets and do not replace the separately recorded acceptance evidence. The full release workflow has now completed successfully at the recorded build source, including its Windows, macOS and Ubuntu checks.
Upstream PR ownership
Runtime, process and loader work is tracked in TinyGo 5630, 5633, 5634, 5635, 5636 and 5655. The Darwin implementation follows owner PR 5612. Duplicate PR 5632 is closed. Signal PR 5631 is closed in favor of owner PR 5530; this fork still uses its tested signal implementation. TLS PR 5645 is closed in favor of 5633 and 5635.
Net changes are tracked in 72, 73, 74, 75, 80 and 82. Close and poller coordination continues in 77. This release does not include that full poller, the newer RoundTripper PR 83, or the Itoa shim PR 84. Redirect PR 72 and RoundTripper PR 83 require coordinated integration.
Known limits
http.Client.Timeout, in-flight deadline changes and full descriptor lifetime are not resolved. A signal can stretch the host netdev receive deadline after EINTR.os/exec.WaitDelaydoes not reliably bound output collection when a descendant keeps a pipe open. Closing a descriptor does not interrupt all active blocking pipe I/O. Seetestdata/os-exec-waitdelayin this source.- Raw
tls.Dialon Darwin needs an explicit root pool. The port's HTTP client supplies PEM roots, but this is not native keychain verification. - Darwin DNS uses the port's stub resolver, not the complete macOS resolver. Split DNS, scoped resolution and mDNS are not established.
SysProcAttrsupports Setpgid and Pgid. Other unsupported fields are rejected. Programs that reap children independently can race withProcess.Wait.signal.Ignoredremains unimplemented. Hosted cooperative scheduler link failures remain separate from the default threads scheduler.- Windows, baremetal and WebAssembly retain the previous TLS/process behavior. The real hosted TLS claim applies to Linux and Darwin only.
- macOS 10.15 or later is required for the spawn directory action. The minimum OS version has not been tested on an old Mac.
- Earlier emulated AMD64 stress found rare hangs. This release's successful application tests do not establish that the stress issue is fixed.
- TinyGo test compilation can require substantial memory. Bound test-build parallelism and use an external timeout for tests that can block.
Install and verify
Use a release asset for your host OS and architecture. Each tarball contains a tinygo directory with the compiler, runtime, libraries and targets. Keep them together and set TINYGOROOT to that directory if the compiler is installed separately. A compatible host Go toolchain is required. The candidate acceptance used Go 1.26.x; TinyGo accepts Go 1.25 through 1.27.
The fork can also be selected through dispat install github/yohimik/tinygo. Check that the resolved version is 0.43.0-net.2 and preserve the complete toolchain directory.
GitHub records SHA-256 digests for the release assets. Compare the downloaded files with the API digests before use. Downstream owners will repeat acceptance with these published assets before their own releases.
Release verification
The versioned source passed branch CI on the first attempt on Linux, macOS and Windows. All LLVM build steps used the existing cache.
The tag release workflow also passed on the first attempt at the exact release commit. All seven LLVM build steps were skipped from cache. The workflow checked and uploaded all nine expected assets with SHA-256 digests.
All nine published assets were downloaded without authentication and matched the public API SHA-256 digests. The packaged runtime and net sources match the accepted source. No source overlay was used.
Published Darwin ARM64 and Linux ARM64 toolchains pass 16 process probes, 11 signal probes, cookiejar, the full os and net package runs, TCP, real TLS 1.3, HTTP, HTTPS and DNS checks. The package runs retain their normal platform and root-user skips. Darwin used Go 1.26.7 and Linux used Go 1.26.8.
The published Linux AMD64 toolchain passes the same process, signal, cookiejar and network probes under emulation. Its first cold-cache build reached a 900-second compilation limit. One retry with a 1800-second build limit completed compilation. Runtime limits were not increased.
The emulated AMD64 os suite fails closed-descriptor assertions in five file-remapping cases and the unnamed-standard-descriptor test. Ordinary Go 1.26.8 reproduces both assertion failures under the same emulation, while native Linux ARM64 returns the expected errors. In the emulated bash child, descriptor 3 points to /usr/bin/bash despite being explicitly closed before execution. Thus this observation is not specific to TinyGo. The failing suite is not counted as a pass. The tag workflow's native Linux AMD64 os and net package runs passed in 0.241s and 0.103s. The separate published AMD64 net package run passed with no failures or skips.
Dispat's owner also completed published-toolchain acceptance on native Darwin ARM64 and Linux ARM64, each with 796 passing test events, no failures and no skips. The first Linux run exceeded its 6 GiB memory limit; the complete 12 GiB rerun passed.
Crier's owner confirmed published-toolchain acceptance at source acac2f0eae0d98e42f442c7f4e6a36ccf9bc3665. On native Linux ARM64 and emulated Linux AMD64, raw and stripped runs each pass 144 top-level tests and 156 test events, with no failures or skips. The same 13-image gate passes, including the four ARM64 event-card pixels with a one-value difference. TinyGo-stamped replacement fixtures, standard Go tests, real FFmpeg, 90.6% coverage, lint and docs checks also pass. These are owner-confirmed application results, not a new run by the toolchain verifier.
The final toolchain handoff has been sent to both owners with the emulation limitation. Their application CI and publication gates remain theirs. Candidate sizes above are not final release asset measurements.
The Darwin AMD64, Linux ARM and Windows assets and the Debian packages were hashed but were not executed or installed in these post-publication checks.