Compiling a wasip1 binary with scheduler=none fails due to net/textproto usage of goroutine
Author: rikatzCreated Aug 6, 2026Updated Sep 17, 2026
During the upgrade of https://github.com/corazawaf/coraza-proxy-wasm/ to latest Go and tinygo, I've faced a problem with the usage a Go Routine that wasn't happening on previous versions.
Coraza relies on the mime/multipart library, that imports net/textproto (and its Reader).
As an example, a simple program like the below will fail to compile:
package main
import (
"mime/multipart"
"strings"
)
func main() {
r := multipart.NewReader(strings.NewReader("--x\r\n\r\n"), "x")
_, err := r.NextPart()
println(err != nil)
}tinygo build -gc=precise -scheduler=none -target=wasip1 -opt=2 -o t.wasm .
/usr/local/go/src/time/sleep.go:182:2: attempted to start a goroutine without a schedulerThe compilation needs to target wasip1 for Envoy WASM, but apparently Envoy WASM refuses to load a WASM that contains threads, so using asincify scheduler also blocks the loading of this WASM on Envoy.
Thank you very much!
Source: tinygo-org/tinygo