{ git-like backup, self-hosted }

Backup
anything.

Commit offline anywhere, push when you're home. Content-addressed & deduplicated — identical files stored once, on a server that is yours.


{ Why bakup® }

Your files. Your server.
Your rules.

Offline

Commit anywhere

Snapshots are recorded locally, exactly like git. No connection needed until you push.

Dedup

Stored once

Content-addressed by sha256 — the same file across ten repos costs one copy on the server.

Self-hosted

One container

A single Docker service on any machine you own. Unlimited clients, unlimited repos, one token.

Incremental

Only the new

git-style stat cache plus server negotiation — only content the server lacks ever crosses the wire.


{ Install the client }

Three ways in.
Configure once.

Linux

A real .deb, like the tools you already trust.

Grab the package from releases — apt resolves the dependencies (python3, python3-requests) for you.

bash — Debian / Ubuntu / Mint / Raspberry Pi OS
$ curl -LO https://github.com/RamizMohammad/backup-release/releases/latest/download/bakup_0.1.0_all.deb
$ sudo apt install ./bakup_0.1.0_all.deb
$ bakup --version
Download .deb

Windows

One line in PowerShell — or a GUI installer.

The terminal route installs Python via winget if it's missing and puts bakup on your PATH. Prefer clicking? The setup wizard ships a standalone exe — no Python required.

Option A — PowerShell, one line
PS> irm https://github.com/RamizMohammad/backup-release/releases/latest/download/install.ps1 | iex
Option B — GUI app, no terminal needed
1. Download bakup-setup-0.1.0.exe from the button below
2. Run it — Next → accept the license → keep "Add bakup to PATH" ticked
3. Tick "Connect to my backup server" and paste your server
   address + token — the installer runs bakup config for you
4. Finish — open any terminal and type bakup  # fully configured
Download bakup-setup.exe

Any OS

pip, for everything else.

macOS, other Linux distros, BSD — anywhere Python 3.9+ runs.

bash / PowerShell
$ pipx install https://github.com/RamizMohammad/backup-release/releases/latest/download/bakup-0.1.0-py3-none-any.whl
# or plain pip:
$ pip install https://github.com/RamizMohammad/backup-release/releases/latest/download/bakup-0.1.0-py3-none-any.whl

{ then, once per machine }

one-time setup
$ bakup config --server http://YOUR-SERVER-IP:8000 --token YOUR-TOKEN

{ Interactive setup guide }

Walk through it.
Get it right.

Pick your side — a client OS, or the Docker box that stores everything — and step through a perfect setup with the warnings, do's and don'ts most people learn the hard way.

terminal

    

{ step 1 }


{ Run your own server }

Any box with Docker.
Three commands.

An old PC, a NAS, a Raspberry Pi, a $5 VPS — one server handles unlimited clients, and dedup is shared across all of them.

01

Download & start — no code, no config

on the server
$ mkdir bakup-server && cd bakup-server
$ curl -LO https://github.com/RamizMohammad/backup-release/releases/latest/download/docker-compose.yml
$ docker compose up -d   # pulls the image from Docker Hub

02

Grab your auto-generated token

On first run the server generates its own secret token, saves it in the data volume, and prints it in the logs. Backups land in ./data — point the volume at a big disk if you like (/mnt/hdd/bakup:/data).

docker
$ docker compose logs bakup-server   # shows the token — save it
$ docker exec bakup-server cat /data/.bakup_token   # or anytime later
$ curl http://localhost:8000/health   # {"ok":true}

03

Done — enjoy the entire system

Every machine that runs bakup config with your server address and token can now push repos from any folder.


{ Daily use }

If you know git,
you know bakup.

inside any folder you care about
$ bakup init                    # like git init — once per folder
$ bakup status                  # what changed? server connected?
$ bakup commit -m "wip"         # snapshot locally — works offline
$ bakup push                    # upload to your server when reachable
$ bakup log                     # history: ✓ pushed / ○ local
$ bakup restore 20260706-031503 ./restored

Offline? commit still works — it saves locally and says "no server connected — push when you're home." push refuses safely and changes nothing. Automate it: bakup commit -m auto && bakup push in cron or Task Scheduler.


{ Requirements }

Deliberately tiny.

Linux client Debian-family with Python 3.9+ — apt installs python3-requests for you. Other distros: use pip.

Windows client Windows 10/11. GUI installer needs nothing else (bundled exe). Terminal install fetches Python 3.12 via winget if missing.

macOS / other Python 3.9+ and pip or pipx. That's it.

Server Docker + Compose on any OS or architecture (x86, ARM, Raspberry Pi). ~50 MB RAM idle, plus disk for your backups. Image: kobraop9517/backup on Docker Hub.

Network Client reaches the server on port 8000 — same LAN is enough. Away from home, a mesh VPN (Tailscale, WireGuard) makes it reachable anywhere. Offline, commits simply queue up.

Auth One shared Bearer token, auto-generated by the server on first run. Keep it secret — anyone holding it can read and write backups.