This release uses WebAssesmby for the tagging and database backends. This means that gonic no longer requires Cgo or external dependencies to build. As a result, static binaries will be available in the releases page, and Docker images for more architectures. Performance of scanning and tagging should also be improved.
Features
- build: add Cgo free database (505f7d8)
- build: add Cgo free tagging backend (7802e20)
- ci: merge nightly and debug workflows (ca85eed)
- ci: remove Cgo dependencies, cross compile without QEMU, upload static binaries (e3db819)
- ffprobe: add more supported file types (8e7820a)
- gonic: add
scan-embedded-cover-enabled
flag (c69cb8c) - gonic: use wrtag/normtag for nag normalisation (aba758f)
- subsonic: also read unsynced lyrics from .txt files and tag metadata (eb0d8fd), closes #593
- subsonic: keep original cover file format when caching (#609) (1af4ce3), closes #11
- subsonic: return genres for getAlbumListTwo2 (3909e9b), closes #605
- subsonic: support embedded cover art (ec7cffd), closes #11 #556
- subsonic: support embedded track level cover art (d66814b), closes #11
- tags: add ffprobe reader (3a9c03a)
- tags: add Properties.HasCover (bc0b6c0)
- tags: add ReadCover interface method (e413bc3)
⚠ Note to package maintainers
- The
sqlite-dev
andlibtag-dev
(or your distro's equivalents) packages are no longer required; please remove them from package dependencies. - Build with
CGO_ENABLED=0
to produce static binaries.
gonic now vendors reproducible WebAssembly backends for TagLib and SQLite, eliminating Cgo and external system libraries. Builds are fully static, cross-compiling is straightforward, and supply-chain verification is easier.
Verify the vendored WASM artifacts using Artifact Attestations:
- https://github.com/sentriz/go-taglib/raw/refs/tags/v0.10.4/taglib.wasm (Attestations)
- https://github.com/ncruces/go-sqlite3/raw/refs/tags/v0.29.1/embed/sqlite3.wasm (Attestations)
Example build pipeline:
$ git clone https://github.com/sentriz/gonic
$ cd gonic
$ sha256sum "$(go list -m -f '{{.Dir}}' go.senan.xyz/taglib)/taglib.wasm"
# expected ca5ce04b35f1e6cad8b8d9f00906a4c108ccd004b56e713db5ce69aa69b3805d (https://github.com/sentriz/go-taglib/attestations/11402786)
$ sha256sum "$(go list -m -f '{{.Dir}}' github.com/ncruces/go-sqlite3)/embed/sqlite3.wasm"
# expected 117262b6241d8de78ba564a44383fa1562e52f1a978de269e20a02b3c06c02e3 (https://github.com/ncruces/go-sqlite3/attestations/11344814)
$ CGO_ENABLED=0 go build ./cmd/gonic/.
Opting out of WebAssembly:
- If you prefer not to use the WebAssembly binaries, you can build with
nowasm
:
$ go build -tags nowasm ./cmd/gonic/.
- This mode is not supported, and tagging/scan performance will degrade.
- Cgo will be used for sqlite, so sqlite-dev is still required.
ffprobe
will be used for tagging, so that must be available in$PATH
.libtag-dev
is still not used in this mode.