The field was moved to the top level but not marked nullable, so upgrades from older configs (where it lived under advanced) failed with "Field Is Not Nullable". The entrypoint already falls back to true via yq's // operator.
Kamado Pool — StartOS Packaging
StartOS 0.3.5.1 wrapper for Kamado Pool, a modern solo Bitcoin mining pool built on a patched fork of CKPool-solo with a Go middleware API and Svelte real-time dashboard.
Prerequisites
- Docker with buildx plugin
- deno — bundles the TypeScript embassy procedures
- yq — parses
manifest.yamlfor package metadata - start-sdk — packs and verifies the
.s9pk(from the StartOS SDK) - KamadoPool source — local sibling checkout at
../KamadoPool(override withKAMADO_SRC=/path/to/KamadoPool)
Building
Universal package (x86_64 + aarch64)
A universal .s9pk runs on any StartOS machine regardless of architecture. This is the default and what you should ship.
One-time setup (re-run after each reboot):
make setup
This registers qemu binfmt handlers for cross-architecture emulation and creates a multiplatform Docker buildx builder. The arm64 build runs under emulation on x86 hosts, so it is significantly slower (~5-10x) than native.
Build:
make
This bundles the TypeScript procedures, builds Docker images for both architectures, and packs kamado-pool.s9pk. The universal package is roughly double the size of a single-arch package since it contains two Docker images.
Single-arch (development)
For faster iteration when you only need one architecture:
make x86 # x86_64 only
make arm # aarch64 only
These skip the other architecture entirely — no emulation overhead.
Overrides
# Use a different KamadoPool source directory
make KAMADO_SRC=/path/to/KamadoPool
# Use a different buildx builder
make BUILDER=my-builder
License
GPL-3.0 — matches upstream Kamado and CKPool.