Installation
Prebuilt downloads are on the releases page:
| Platform | File |
|---|---|
| macOS menu bar app (Apple silicon, macOS 14+) | capycal-v<version>-macos.dmg (includes the CLI) |
| macOS CLI (Apple silicon) | capycal-v<version>-aarch64-apple-darwin.tar.gz |
| Linux x86_64 (static) | capycal-v<version>-x86_64-unknown-linux-musl.tar.gz, capycal_<version>-1_amd64.deb, capycal-<version>-1.x86_64.rpm |
| Linux arm64 (static) | capycal-v<version>-aarch64-unknown-linux-musl.tar.gz, capycal_<version>-1_arm64.deb, capycal-<version>-1.aarch64.rpm |
| Arch Linux | PKGBUILD of the AUR package capycal-bin |
| Linux desktop app (x86_64, arm64; GTK 4.14+) | capycal-gtk_<version>-1_<arch>.deb, capycal-gtk-<version>-1.<arch>.rpm, see Desktop app (Linux) |
On macOS and Linux, Homebrew installs the CLI and the macOS app from the tap twiebe/capycal.
Each file has a .sha256 file next to it:
shasum -a 256 -c capycal-v<version>-<target>.tar.gz.sha256
Homebrew
brew install twiebe/capycal/capycal # CLI (macOS on Apple silicon, Linux)
brew install --cask twiebe/capycal/capycal-app # menu bar app (macOS)
The formula installs capycal with the man page and shell completions; brew services start capycal runs it in the background with your default config. The cask installs Capycal.app without linking its bundled CLI, so both can be installed side by side. The app is not notarized either: before its first start, remove the quarantine flag as described under macOS app.
macOS app
-
Open
capycal-v<version>-macos.dmgand dragCapycal.appto Applications. -
The app is neither signed with an Apple Developer ID nor notarized, so macOS refuses the first start. Right-click
Capycal.appin Finder and choose Open, then confirm. Alternatively remove the quarantine flag once:xattr -dr com.apple.quarantine /Applications/Capycal.app -
When Capycal first reads Calendar.app, macOS asks for calendar access for “Capycal”. Allow it. You can change this later in System Settings > Privacy & Security > Calendars.
The bundle also contains the capycal CLI. To use it from a terminal:
sudo ln -s /Applications/Capycal.app/Contents/MacOS/capycal /usr/local/bin/capycal
Continue with Quick start: desktop app.
Linux packages
sudo apt install ./capycal_<version>-1_amd64.deb # Debian, Ubuntu
sudo dnf install ./capycal-<version>-1.x86_64.rpm # Fedora, RHEL, openSUSE (zypper)
On Arch Linux, install capycal-bin from the AUR, or build the PKGBUILD from the release with makepkg -si.
The packages install /usr/bin/capycal, the man page (man capycal), completions for bash, zsh and fish, and two systemd units that are not enabled: the user service capycal.service (runs your default config, see User service) and the system service capycal.service (see System service). Then:
capycal --generate-config # ~/.config/capycal/capycal.toml
capycal --discover https://caldav.example.com/
capycal --once # try it
systemctl --user enable --now capycal
CLI binaries
tar -xzf capycal-v<version>-<target>.tar.gz
sudo install capycal-v<version>-<target>/capycal /usr/local/bin/
The archive also contains README.md, LICENSE, CONTRIBUTORS.md, THIRD-PARTY-NOTICES.txt, capycal.example.toml, the man page capycal.1, shell completions in completions/ and the systemd units in systemd/. Completions and the man page can also be generated by the binary itself:
capycal --completions bash > ~/.local/share/bash-completion/completions/capycal
capycal --completions zsh > ~/.zfunc/_capycal # a directory in your fpath
capycal --completions fish > ~/.config/fish/completions/capycal.fish
capycal --man > ~/.local/share/man/man1/capycal.1
macOS: the binary is not notarized. If macOS refuses to start it, remove the quarantine flag once:
xattr -d com.apple.quarantine /usr/local/bin/capycal
Linux: the binaries are static musl builds and do not use NSS for name resolution. Regular DNS and /etc/hosts work, but hostnames that only resolve through NSS modules do not, for example mDNS *.local names via nss-mdns, or LDAP. If your CalDAV server has such a name, use its IP address or build from source, which links against glibc and uses the system’s NSS configuration.
Linux builds support CalDAV only. Calendar.app (EventKit) calendars need macOS.
From source
Requires a recent stable Rust toolchain (edition 2024).
cargo install --git https://github.com/twiebe/capycal
EventKit support is compiled in automatically on macOS. The menu bar app is behind the ui feature; see Building and testing for building Capycal.app.
Docker
The repository contains a Dockerfile and a docker-compose.yml that build the CLI from source:
git clone https://github.com/twiebe/capycal && cd capycal
cp capycal.example.toml capycal.toml # edit it
cp .env.example .env # put your passwords here
docker compose up -d
See Running on a server for details.