apfeller
April 5, 2026 ยท View on GitHub
apfeller is the manager + runtime repo for small shell apps built around
apfel.
The apps run fully local on your Mac with zero API cost: no API bill, no API
keys, and no cloud round-trip.
End-user docs live at hasit.github.io/apfeller. App authors can start at hasit.github.io/apfeller/write-an-app/.
Repo Split
apfeller: manager/runtime, installer, shell integration, packaging helpers, fixture apps, and tests.apfeller-apps: published app definitions, catalog generation, and app bundle releases.
The manager fetches its app catalog from:
https://raw.githubusercontent.com/hasit/apfeller-apps/main/catalog/latest.tsv
by default, then downloads the exact bundle URLs listed in that catalog.
What This Repo Contains
- A POSIX
sh-basedapfellermanager - Shell integration for fish and zsh
- Shared
app.tomlvalidation and packaging tooling - Compiled runtime manifests plus generated wrappers and completions
- Fixture apps under
fixtures/appsfor local testing - A one-line installer for the manager
Development
Prerequisites:
- macOS
curl,tar,shasum
Validate locally:
tests/apps/test_cmd.shtests/apps/test_oneliner.shtests/apps/test_define.shtests/apps/test_context_budget.shtests/docs/test_public_copy.shtests/install/test_install.shtests/release/test_package_release.shtests/release/test_app_schema.shtests/e2e/test_manager.shtests/e2e/test_checksum_mismatch.sh
Packaging
Package the manager release asset:
scripts/package_release.sh --output-dir dist
That produces:
dist/apfeller.tar.gz
Package a local fixture catalog and fixture bundles for testing:
scripts/package_catalog.sh --output-dir dist --app-dir fixtures/apps --bundle-base-url "file://$PWD/dist"
That produces:
dist/apfeller-catalog.tsvdist/<app>-<revision>.tar.gzfor fixture app bundles
Each app bundle now contains its app.toml, a compiled runtime manifest, args
metadata, examples metadata, and any declared hooks. Installed commands are
framework-generated wrappers that call apfeller __run-app.
Real published apps no longer live in this repo. Use apfeller-apps for app
catalog and bundle publication work.
Releases
Manager releases are published automatically by
release.yml
after CI succeeds on main, as long as the current VERSION
does not already have a matching GitHub release.
To cut a new manager release:
- Update VERSION.
- Merge that change to
main. - Let the workflow publish
v<VERSION>withdist/apfeller.tar.gz.