Artifact ce792f964ac1591f0c53de964c330eb4630cb7ba9897a94d39a6950e03f3f487:
- File
docs/site/content/docs/get-started/install.md
— part of check-in
[7377cb7c97]
at
2026-10-23 21:25:06
on branch main
— docs: size from the measured TinyGo build of the whole API
go-libfossil now builds with TinyGo, sync and signing included (examples/tinygo). The landing page reads the measured sizes from data/wasm.json instead of an outside project's engine-only build, and the install page says how to build it and what differs under TinyGo. (user: [email protected], size: 2776) [annotate] [blame] [check-ins using]
title: Install
weight: 10
go-libfossil is a Go module and a command. Neither needs cgo, a C toolchain or an installed fossil.
The command
go install github.com/danmestas/go-libfossil/cmd/libfossil@latest
libfossil --help
This needs the Go toolchain named in go.mod (Go 1.26 or later). The binary is statically linked and runs on Linux, macOS and Windows. Every command is listed in the CLI reference.
The library
go get github.com/danmestas/go-libfossil@latest
The library talks to SQLite through database/sql and does not pick a driver for you. Blank-import exactly one of the two driver modules in your main package; importing both panics at start-up.
| Driver | Import | Use it for |
|---|---|---|
| modernc | _ "github.com/danmestas/go-libfossil/db/driver/modernc" |
servers, command-line tools, desktop: SQLite translated to Go |
| ncruces | _ "github.com/danmestas/go-libfossil/db/driver/ncruces" |
GOOS=js and GOOS=wasip1 builds: SQLite itself as WebAssembly |
Each driver is its own module, so go get it too:
go get github.com/danmestas/go-libfossil/db/driver/modernc@latest
WebAssembly
With the ncruces driver the module builds for GOOS=js GOARCH=wasm (a browser) and GOOS=wasip1 GOARCH=wasm (any WASI Preview 1 host). CI builds the module's packages for js/wasm on every change. The wasm example builds and runs a WASI module.
TinyGo
The whole public API, the HTTP sync client and signing included, also builds with TinyGo for the wasm target, which is what makes it small enough to ship with a page or an edge function:
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
- Size: for
examples/tinygo, about 1.4 MB gzipped, against about 4.1 MB from the standard toolchain. A program without sync is smaller. - Driver: a TinyGo build imports no SQLite driver. The host registers a
database/sqldriver over its own SQLite; ncruces is for standard Go builds and modernc has no wasm build. - Stack:
-stack-size=1MB, because TinyGo's default goroutine stack is too small for the deeper paths. - Differences: under TinyGo a sync redirect ends the request with an error instead of being followed, and DNS failures are not classified as transient.
CI builds examples/tinygo with TinyGo 0.43 on every change.