Repository navigation
v1.2.0
kjak v1.2.0
kjak sends one notification to Slack, Discord, e-mail, any HTTP API or a
plugin of your own, from the command line, a script or CI. v1.2.0 lets a
plugin installed with Homebrew run on macOS, under a statement of its
content that you make. It is a minor release: everything v1.0.0 guarantees
(docs/stability.md)
is kept.
Highlights
-
Plugins installed by Homebrew (macOS). Homebrew makes
<prefix>/bin,Cellarandoptwritable by theadmingroup, so kjak
refused every plugin installed withbrew. Such a plugin now runs when
its SHA-256 is the one you stated: a feather of your configuration whose
sha256equals the file's, or a project whosekjak config trust
recorded that path and SHA-256.kjak feather pluginsshows the value to
pin:[feathers.mac] type = "external" plugin = "notify-macos" sha256 = "..." # from kjak feather plugins; update it after brew upgrade
kjak does not treat the
admingroup as root (writing there needs no
authentication). The exception covers only the group-write rule, only
bin,Cellarandoptof/opt/homebrewand/usr/local(owned by
you, groupadmin, not writable by others, ACLs checked as before), and
only a file in a keg named for the plugin that is a Mach-O executable
whose load commands name system libraries alone (not a script, not a
program linked to a library of Homebrew; what the plugin opens or starts
at run time is not checked). The content and the place are checked again before
every run, and once more just before the process starts. What it opens to
other admin users, and the short window that remains before the exec, are
in docs/security.md.
Compatibility
- Nothing that ran before is refused now, and nothing is removed or changed
in meaning. A plugin anywhere but Homebrew's directories is checked
exactly as in v1.1.0. - New: in
kjak feather plugins -o json,plugins[].homebrew(true for a
plugin in Homebrew's directories, with itssha256); in the text output,
its stateHomebrew: runs only for a feather with sha256 = "..." (or a project trust).kjak config trustnotes such a plugin. - Linux (Linuxbrew included) and Windows behave as in v1.1.0.
- The plugin protocol is still version 1.
Install
brew install magicdrive/tap/kjak # macOS, Linux; brew upgrade kjak lateror, without Homebrew, on macOS and Linux:
curl -fsSLO https://raw.githubusercontent.com/magicdrive/kjak/v1.2.0/install.sh
sh install.sh --version v1.2.0 # into ~/.local/bin; sh install.sh --upgrade lateror the archive of your platform below, checked with kjak_checksums.txt
and, optionally, its build provenance:
gh attestation verify kjak_1.2.0_linux_amd64.tar.gz --repo magicdrive/kjak \
--signer-workflow magicdrive/kjak/.github/workflows/release.yml --source-ref refs/tags/v1.2.0Developers can build from source with Go 1.27 (make build, or
go install github.com/magicdrive/kjak@v1.2.0).
Platforms
| platform | archive |
|---|---|
| macOS arm64, amd64 | tar.gz; Homebrew, install script |
| Linux amd64, arm64 | tar.gz; Homebrew, install script |
| Windows amd64 | zip |
The notes of v1.0.0 on keychains, secrets-file permissions and plugins per
platform still apply.
Known limitations
- A plugin installed by Homebrew needs its
sha256updated after each
brew upgrade. Between kjak's last check and the exec, another admin user
of the Mac could still replace it (docs/security.md). - OS-native notifications are not supported.
- Windows has no keychain support. On macOS and Linux the keychain tools
are tested as test doubles, not against a real keychain. - Changes other than adding a feather, group or template rewrite the
configuration file without its comments. - Plugins are not sandboxed: they run with your rights.
- The macOS binaries are not notarized.
Full Changelog: v1.1.0...v1.2.0