Artifact 047d8821efccd64cf6e48202f5bf12d24260b5eb0b2f423dab7c4835cf333687:
- File
examples/tinygo/README.md
— part of check-in
[4069607141]
at
2026-10-29 03:21:22
on branch main
— docs: libfossil_nohttp is for library embedders, who supply their own transport
The cli package and examples/tinygo, which calls NewHTTPTransport, do not build with the tag; a tagged embedder supplies its own Transport and serves through HandleSyncWithOpts. (user: [email protected], size: 1858) [annotate] [blame] [check-ins using] [more...]
# tinygo (js/wasm) The whole public API, including the HTTP sync client and signing, compiled with [TinyGo](https://tinygo.org) for the `wasm` (js) target. ``` tinygo build -target=wasm -no-debug -opt=z -stack-size=1MB -o libfossil.wasm ./examples/tinygo/ wasm-opt -Oz --detect-features --strip-debug --strip-producers libfossil.wasm -o libfossil.wasm ``` `-stack-size=1MB`: TinyGo's default goroutine stack is too small for go-libfossil's deeper paths. Measured for this program with TinyGo 0.43.0: the first row is the `Build (tinygo)` CI job; the others are macOS (Go 1.27.3, LLVM 22, Binaryen 133). | Build | Raw | gzip -9 | |---|---|---| | TinyGo, as CI builds it (Linux release, its own wasm-opt) | 3.52 MB | 1.26 MB | | TinyGo, then `wasm-opt -Oz` | 3.83 MB | 1.40 MB | | TinyGo | 4.02 MB | 1.44 MB | | Standard Go, `GOOS=js GOARCH=wasm -ldflags='-s -w'` | 16.1 MB | 4.06 MB | A program that leaves out sync (no `net/http`, no TLS) is smaller. A library embedder that never uses the HTTP transport or server can build with `-tags libfossil_nohttp`, which leaves `net/http` and its TLS code out (about 97 KB gzipped). This example does not build with that tag, since it calls `NewHTTPTransport`, and neither does the `cli` package. A tagged embedder supplies its own transport and serving, for example a `Transport` for `Sync` and its own request handling around `HandleSyncWithOpts`. No SQLite driver is imported here. A TinyGo host registers a `database/sql` driver over its own SQLite. The `ncruces` driver runs SQLite as an embedded wasm module and is for standard Go builds; the `modernc` driver has no wasm build. Under TinyGo two things behave differently, because TinyGo's standard library lacks what they use: a sync redirect ends the request with an error instead of being followed, and DNS failures are not classified as transient.