pallet
What it is
Section titled “What it is”pallet is an Emacs package-management bridge between Emacs’s built-in package.el and Cask (the Emacs-ecosystem dependency manifest tool). The setup: a project (or a user’s Emacs config) declares its dependencies in a Cask file at the project root — explicit, version-pinned, reproducible. pallet syncs package.el’s installed-packages state to the Cask file (and back) so the manifest is the source of truth and the installed packages are always in agreement with it.
For KN-86 this is the reference pattern for a plugin / extension manifest — when the desktop tooling around KN-86 grows enough to need third-party plugins (cart-authoring helpers, emulator debug-overlay extensions), a Cask-style manifest is the right shape.
Key takeaways for KN-86
Section titled “Key takeaways for KN-86”- Manifest file as the source of truth. A single text file at a known location declares every dependency, every version, every source. The installed state is derived from the manifest; the manifest is hand-edited. KN-86’s eventual plugin manifest — wherever it lives (
.kn86-tools.tomlnext to a cart-authoring project,~/.kn86/plugins.tomlfor global desktop tooling) — should follow this discipline. Hand-editable text format (audium.md lineage); declarative (nosh-config.toml lineage). - Bidirectional sync vs. one-directional install. pallet syncs both ways — installing a package via
package.elwrites the dependency back to the Cask file. KN-86 should pick one-directional — the manifest is the authority, install actions read from the manifest, ad-hoc installs require manifest edits first. Simpler model, fewer surprises, no “where did this dep come from?” mystery. - Version pinning. Cask supports version pins. KN-86 plugin manifests should too —
kn86-cart-helper = { version = "1.4.2", source = "github:org/repo" }. Lockfile-style reproducibility is downstream of this but worth being explicit about as a directional commitment. - Cask itself is a useful read. Cask is the actual file format and tooling; pallet is the bridge to Emacs’s built-in packaging. KN-86’s analog might not need the bridge — a direct manifest-driven install tool is simpler.
- No on-device equivalent. KN-86 carts are not plugins (per ADR-0001 — they’re capability modules, distributed as
.kn86containers per ADR-0006). The cart-distribution model is different (cartridge-as-artifact, ADR-0019). pallet’s reference here is desktop tooling only.
No image downloaded.
- Direct citation for the desktop-tooling architecture spec when one gets scoped. Plugin manifest format = TOML or similar; layout = Cask-derived; sync direction = manifest-to-installation only.
- Cross-link rs-pug.md and cliamp.md — both use Lua plugins for their extension model. Together with pallet, the lesson converges: declarative manifest + explicit-extension language is the right shape for desktop tooling around KN-86.
- Cross-link emacs-request.md — the data-fetching pattern that plugins will use most often. pallet manages the package; emacs-request is the kind of package the plugins might depend on.
- Cross-link exwm.md and webmacs.md for the broader “Emacs as the model” lineage that pallet sits inside.