Encrypted, deduplicated, verifiable, and scalable.
Back up anything, store anywhere, restore everywhere, with zero-trust encryption and no vendor lock-in.
Deutsch | Español | français | 日本語 | 한국어 | Português | Русский | 中文
Plakar is an open-source backup solution powered by Kloset and ptar. It creates snapshots of your data, stores them in an encrypted and deduplicated store, and lets you inspect, verify, and restore them later.
Plakar stores backups in a Kloset, an open-source, immutable data store that enables the implementation of advanced data protection scenarios.
Through integrations, Plakar can back up and restore databases, Kubernetes workloads, object stores, and other sources alongside regular files.
What sets Plakar apart:
- snapshots are browsable: you can inspect their contents, diff two snapshots, or restore a single file without touching the rest;
- every snapshot is independently verifiable without restoring anything;
- backups are deduplicated and compressed, so keeping many snapshots does not multiply storage costs;
- encryption covers both data and metadata, with an audited cryptography implementation;
- Plakar is extensible through integrations for additional sources, storage backends, and destinations.
Plakar can be used from the command line or through its built-in web UI.
# Install (macOS, Linux)
brew install plakar
# Create a local repository
plakar at /var/backups create
# Back up a directory
plakar at /var/backups backup /etc
# List snapshots
plakar at /var/backups ls
# Restore a snapshot
plakar at /var/backups restore -to /tmp/restore <snapshot-id>
# Open the web UI
plakar at /var/backups uiPrebuilt binaries and a Debian/Ubuntu apt repository are also available: see Installation. For a full walkthrough, see the quickstart guide.
brew install plakarPlakar publishes an apt repository. See the installation guide for the setup commands.
Download a binary for your platform: https://www.plakar.io/download
Plakar requires Go 1.23.3 or higher.
go install github.com/PlakarKorp/plakar@latest@latest installs the latest release, which includes the web UI. A build of the main branch does not: with go install github.com/PlakarKorp/plakar@main, or make in a clone, plakar ui serves the API and a page explaining how to get the UI. To build the UI in a clone, run make ui before make; it requires Node.js and pnpm.
Archives. You can export one or more snapshots as a .ptar archive using plakar ptar. A .ptar file is a self-contained, deduplicated, compressed, and encrypted archive.
Integrations. Plakar supports additional backup sources and storage backends through its package manager. Available integrations include PostgreSQL, MySQL, etcd, Kubernetes, S3-compatible object stores, and more.
plakar pkg add <integration>Distributed stores. Kloset stores can be synchronized across locations to implement 3-2-1 backup strategies or more advanced push, pull, and sync workflows across heterogeneous environments.
plakar at /var/backups sync to @s3Scheduled backups. Plakar does not run as a daemon. To back up on a schedule, run plakar backup from a systemd timer or cron. See Scheduling backups.
0 2 * * * /usr/local/bin/plakar at /var/backups backup /etcWhere restored files land. restore -to writes the contents of the backed-up path directly into the target directory. If the snapshot was taken from /etc, plakar at /var/backups restore -to /tmp/restore <id> gives /tmp/restore/hosts, not /tmp/restore/etc/hosts. To restore one directory or file, add its path to the snapshot ID: <id>:/etc/ssh.
See the documentation for the full list of supported workflows.
https://www.plakar.io/docs/community
Please read the contributing guidelines and code of conduct before opening a pull request.
If you find a bug or want to request a change, open an issue:
https://github.com/PlakarKorp/plakar/issues
Release tags carry the built web UI, main does not. Releases are cut from a release/vX.Y branch: create it from main for a new minor version, and reuse it for its patch releases. To release vX.Y.Z:
git switch release/vX.Y # for vX.Y.0: git switch -c release/vX.Y main
# set version to "vX.Y.Z" in utils/utils.go
make release-ui
git commit -am "release vX.Y.Z"
git tag vX.Y.Z
git push origin release/vX.Y vX.Y.ZRun make release-ui for every release, patch releases included: the branch already carries the previous release's UI, and the release workflow refuses a tag whose UI was not built from its own ui/web/src.
See CHANGELOG.md for release notes and version history.