{"id":31618055,"url":"https://github.com/tzero78/kopi-docka","last_synced_at":"2026-05-24T18:00:49.453Z","repository":{"id":317999083,"uuid":"1066585326","full_name":"TZERO78/kopi-docka","owner":"TZERO78","description":"Cold backup tool for Docker Compose stacks using Kopia. Stack-aware, encrypted backups with optional Tailscale and multi-backend storage.","archived":false,"fork":false,"pushed_at":"2026-05-23T13:24:06.000Z","size":30875,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T13:26:11.833Z","etag":null,"topics":["backup","backup-automation","cloud-backup","cold-backup","devops","disaster-recovery","docker","docker-compose","encryption","homelab","kopia","linux","python3","restore","self-hosted","systemd"],"latest_commit_sha":null,"homepage":"https://kopi-docka.tzero.de/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TZERO78.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-29T17:28:01.000Z","updated_at":"2026-05-23T13:24:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"d6c05862-95c6-4a96-816b-84603e187b96","html_url":"https://github.com/TZERO78/kopi-docka","commit_stats":null,"previous_names":["tzero78/kopi-docka"],"tags_count":73,"template":false,"template_full_name":null,"purl":"pkg:github/TZERO78/kopi-docka","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TZERO78%2Fkopi-docka","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TZERO78%2Fkopi-docka/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TZERO78%2Fkopi-docka/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TZERO78%2Fkopi-docka/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TZERO78","download_url":"https://codeload.github.com/TZERO78/kopi-docka/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TZERO78%2Fkopi-docka/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33444704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-24T13:13:05.286Z","status":"ssl_error","status_checked_at":"2026-05-24T13:13:03.728Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","backup-automation","cloud-backup","cold-backup","devops","disaster-recovery","docker","docker-compose","encryption","homelab","kopia","linux","python3","restore","self-hosted","systemd"],"created_at":"2025-10-06T13:45:15.795Z","updated_at":"2026-05-24T18:00:49.444Z","avatar_url":"https://github.com/TZERO78.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kopi-Docka\n\n\u003e **Cold Backup Tool for Docker Environments using Kopia**\n\nKopi-Docka is a Python-based backup wrapper for Docker containers and volumes. It uses Kopia for encryption and deduplication, with specific focus on Docker Compose stack awareness.\n\n[![PyPI](https://img.shields.io/pypi/v/kopi-docka)](https://pypi.org/project/kopi-docka/)\n[![Python Version](https://img.shields.io/pypi/pyversions/kopi-docka)](https://pypi.org/project/kopi-docka/)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![Downloads](https://img.shields.io/pypi/dm/kopi-docka)](https://pypi.org/project/kopi-docka/)\n\n---\n\n## What is Kopi-Docka?\n\n**Kopi-Docka = Kopia + Docker + Backup**\n\nA wrapper around [Kopia](https://kopia.io), designed for Docker environments:\n\n- **📦 Stack-Aware** - Recognizes Docker Compose stacks and backs them up as logical units\n- **🔐 Encrypted** - End-to-end encryption via Kopia (AES-256-GCM)\n- **🌐 Multiple Storage Options** - Local, S3, B2, Azure, GCS, SFTP, Tailscale, Rclone\n- **💾 Disaster Recovery** - Encrypted bundles with auto-reconnect scripts\n- **🔧 Pre/Post Hooks** - Custom scripts (maintenance mode, notifications, etc.)\n- **📊 Systemd Integration** - Daemon with sd_notify and watchdog support\n- **🚀 Restore on New Hardware** - Recovery without original system\n- **🛡️ Graceful Shutdown** - SafeExitManager ensures containers restart after Ctrl+C\n- **🔔 Notifications** - Telegram, Discord, Email alerts via Apprise\n\n**[See detailed features →](docs/FEATURES.md)**\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n**Kopi-Docka expects a prepared system.** You need to install dependencies **before** installing Kopi-Docka:\n\n**Required:**\n- [Docker](https://docs.docker.com/engine/install/) (20.10+)\n- [Kopia](https://kopia.io/docs/installation/) (0.13+)\n\n**Quick check:**\n```bash\ndocker --version\nkopia --version\n```\n\n**Need automated setup?** Use [Server-Baukasten](https://github.com/TZERO78/Server-Baukasten) for automated system preparation.\n\n### Installation\n\n```bash\n# Recommended: pipx (isolated environment)\npipx install kopi-docka\n\n# Make available for sudo (pipx installs to ~/.local/bin)\nsudo ln -s ~/.local/bin/kopi-docka /usr/local/bin/kopi-docka\n\n# Or: pip (system-wide)\npip install kopi-docka\n\n# Verify all dependencies\nkopi-docka doctor\n```\n\n**[Full installation guide →](docs/INSTALLATION.md)**\n\n### Setup\n\n```bash\n# Interactive setup wizard\nsudo kopi-docka setup\n```\n\nThe wizard guides you through:\n1. ✅ Dependency verification (Docker, Kopia)\n2. ✅ Repository storage selection (Local, S3, B2, Azure, GCS, SFTP, Tailscale, Rclone)\n3. ✅ Repository initialization\n4. ✅ Connection test\n\n**[Configuration guide →](docs/CONFIGURATION.md)**\n\n### First Backup\n\n```bash\n# System health check\nsudo kopi-docka doctor\n\n# List backup units (containers/stacks)\nsudo kopi-docka advanced snapshot list\n\n# Test run (no changes)\nsudo kopi-docka dry-run\n\n# Full backup\nsudo kopi-docka backup\n\n# Create disaster recovery bundle (encrypted ZIP)\nsudo kopi-docka disaster-recovery export ~/recovery.zip\n# → Store bundle + passphrase off-site: USB/cloud/safe\n```\n\n**[Usage guide →](docs/USAGE.md)**\n\n### Automatic Backups\n\n```bash\n# Generate systemd units\nsudo kopi-docka advanced service write-units\n\n# Enable daily backups (02:00 default)\nsudo systemctl enable --now kopi-docka.timer\n\n# Check status\nsudo systemctl status kopi-docka.timer\n\n# Or use the interactive management wizard\nsudo kopi-docka advanced service manage\n```\n\n**[Systemd integration →](docs/FEATURES.md#4-systemd-integration)**\n\n---\n\n## Key Features\n\n### 1. Compose-Stack-Awareness\n\nRecognizes Docker Compose stacks and backs them up as atomic units with docker-compose.yml included.\n\n**Traditional vs. Kopi-Docka:**\n```\nTraditional:                    Kopi-Docka:\n├── wordpress_web_1            Stack: wordpress\n├── wordpress_db_1             ├── Containers: web, db, redis\n└── wordpress_redis_1          ├── Volumes: wordpress_data, mysql_data\n                               ├── docker-compose.yml\n❌ Context lost                └── Common backup_id\n                               ✅ Complete stack restorable\n```\n\n### 2. Disaster Recovery Bundles\n\nSingle encrypted ZIP files containing repository connection data, configuration, and auto-reconnect scripts:\n\n```bash\n# Create encrypted ZIP bundle (recommended, v6.2.0+)\nsudo kopi-docka disaster-recovery export ~/recovery.zip\n\n# Or stream via SSH (zero disk footprint on server)\nssh user@server \"sudo kopi-docka disaster-recovery export --stream --passphrase 'xxx'\" \u003e recovery.zip\n\n# In emergency (on new server):\n1. Extract ZIP (7-Zip, unzip, WinZip)\n2. Run sudo ./recover.sh\n3. kopi-docka restore\n4. docker compose up -d\n```\n\n**[Disaster Recovery guide →](docs/DISASTER_RECOVERY.md)**\n\n### 3. Tailscale Integration\n\nAutomatic peer discovery for P2P backups over WireGuard mesh network:\n\n```bash\nsudo kopi-docka advanced config new\n# → Select Tailscale\n# → Shows all devices in your Tailnet\n# → Auto-configures SSH keys\n# → Direct encrypted connection (no cloud costs)\n```\n\n### 4. Systemd Integration\n\nDaemon implementation with:\n- sd_notify status reporting\n- Watchdog monitoring\n- Security hardening (ProtectSystem, NoNewPrivileges, etc.)\n- PID locking (prevents parallel runs)\n- Structured logging to systemd journal\n\n**[See detailed features →](docs/FEATURES.md)**\n\n---\n\n## Backup Scopes\n\nKopi-Docka supports three backup scopes to balance speed, size, and restore capabilities:\n\n### Scope Comparison\n\n| Scope | What's Backed Up | Restore Capability | Use Case |\n|-------|------------------|-------------------|----------|\n| **minimal** | ✅ Volumes only | ⚠️ Data only - containers must be manually recreated | Fastest backups when you always have docker-compose files available |\n| **standard** | ✅ Volumes\u003cbr\u003e✅ Recipes (docker-compose.yml)\u003cbr\u003e✅ Networks (IPAM config) | ✅ Full container restore | **Recommended** - Complete restore capability |\n| **full** | ✅ Volumes\u003cbr\u003e✅ Recipes\u003cbr\u003e✅ Networks\u003cbr\u003e✅ Docker daemon config | ✅ Full restore + manual daemon config | Disaster recovery with Docker daemon settings |\n\n### Detailed Restore Matrix\n\n| Scope | Volumes | Container Configs | Networks | Docker Daemon Config |\n|-------|---------|-------------------|----------|---------------------|\n| **minimal** | ✅ Restored | ❌ Not backed up* | ❌ Not backed up | ❌ Not backed up |\n| **standard** | ✅ Restored | ✅ Restored | ✅ Restored | ❌ Not backed up |\n| **full** | ✅ Restored | ✅ Restored | ✅ Restored | ⚠️ Manual restore** |\n\n**Notes:**\n- \\* **Minimal scope limitation:** Only volume data is backed up. After restore, you **must manually recreate containers** using your original `docker-compose.yml` files or `docker run` commands. Networks must also be manually recreated.\n- \\*\\* **Docker config safety:** Docker daemon configuration (`/etc/docker/daemon.json`, systemd overrides) is backed up but **not automatically restored**. This prevents accidental production breakage. Review and manually apply configuration changes.\n\n### Usage Examples\n\n**Set default scope in config wizard:**\n```bash\nsudo kopi-docka advanced config new\n# → Interactive menu will prompt for scope selection\n# → Default: standard (recommended)\n```\n\n**Set scope in config file:**\n```json\n{\n  \"backup\": {\n    \"backup_scope\": \"standard\"\n  }\n}\n```\n\n**Override scope via CLI flag:**\n```bash\n# Minimal - Fastest, smallest backups (volumes only)\nsudo kopi-docka backup --scope minimal\n\n# Standard - Recommended (volumes + recipes + networks)\nsudo kopi-docka backup --scope standard\n\n# Full - Complete DR including Docker daemon config\nsudo kopi-docka backup --scope full\n```\n\n### ⚠️ Minimal Scope Warning\n\nIf you restore from a **minimal scope** backup, Kopi-Docka will show a prominent warning:\n\n```\n⚠️  MINIMAL Scope Backup Detected\n\nThis backup contains ONLY volume data.\nContainer recipes (docker-compose files) are NOT included.\n\nAfter restore:\n• Volumes will be restored\n• Containers must be recreated manually\n• Networks must be recreated manually\n\nConsider using --scope standard or --scope full for complete backups.\n```\n\n**Recovery steps for minimal scope backups:**\n1. `sudo kopi-docka restore` → Restores volume data\n2. Manually recreate containers: `docker compose up -d` (using your original docker-compose.yml)\n3. Manually recreate networks if needed: `docker network create ...`\n\n### 🔧 Docker Config Manual Restore\n\nFor **FULL scope** backups, Docker daemon configuration is backed up but requires manual restoration:\n\n**Extract docker_config snapshot:**\n```bash\n# List docker_config snapshots\nsudo kopi-docka list --snapshots | grep docker_config\n\n# Extract configuration to temp directory\nsudo kopi-docka show-docker-config \u003csnapshot-id\u003e\n```\n\n**What this command does:**\n- Extracts docker_config snapshot to `/tmp/kopia-docker-config-XXXXX/`\n- Displays safety warnings about manual restore\n- Shows extracted files (`daemon.json`, systemd overrides)\n- Displays `daemon.json` contents inline (if \u003c10KB)\n- Provides 6-step manual restore instructions\n\n**Why manual restore?**\n- Docker daemon configuration is extremely sensitive\n- Incorrect config can break Docker entirely\n- Must be reviewed before applying to production\n- Prevents accidental system breakage\n\n**Example output:**\n```\n✓ Extracted files:\n   • daemon.json (2.3 KB)\n   • docker.service.d/override.conf (0.5 KB)\n\n📄 daemon.json contents:\n{\n  \"log-driver\": \"json-file\",\n  \"log-opts\": {\n    \"max-size\": \"10m\",\n    \"max-file\": \"3\"\n  }\n}\n\n🔧 Manual Restore Instructions\nStep 1: Review extracted files\nStep 2: Backup current config\nStep 3: Apply configuration (CAREFULLY!)\nStep 4: Systemd overrides (if present)\nStep 5: Restart Docker daemon\nStep 6: Verify Docker is working\n```\n\n### Scope Selection Guidance\n\n**Choose minimal when:**\n- You need fastest possible backups\n- You always have access to original docker-compose files\n- You're comfortable manually recreating containers after restore\n- Storage space is extremely limited\n\n**Choose standard when (RECOMMENDED):**\n- You want complete restore capability\n- You prefer automated container recreation\n- You want network configurations preserved\n- You need reliable disaster recovery\n\n**Choose full when:**\n- You need complete disaster recovery capability\n- You have custom Docker daemon configuration\n- You use systemd service overrides for Docker\n- You want to preserve all Docker settings\n\n**Default:** `standard` (best balance for most users)\n\n---\n\n## Documentation\n\n📚 **Guides:**\n\n- **[Installation](docs/INSTALLATION.md)** - System requirements, installation options\n- **[Configuration](docs/CONFIGURATION.md)** - Wizards, config files, storage backends\n- **[Usage](docs/USAGE.md)** - CLI commands, workflows, how it works\n- **[Features](docs/FEATURES.md)** - Detailed feature documentation\n- **[Disaster Recovery](docs/DISASTER_RECOVERY.md)** - DR bundles, recovery workflow, SSH streaming\n- **[Hooks](docs/HOOKS.md)** - Pre/post backup hooks, examples\n- **[Troubleshooting](docs/TROUBLESHOOTING.md)** - Common issues, FAQ\n- **[Development](docs/DEVELOPMENT.md)** - Project structure, contributing\n- **[Architecture](docs/ARCHITECTURE.md)** - Code-driven architecture overview (authoritative)\n\n\n📁 **Examples:**\n\n- **[examples/config.json](examples/config.json)** - Sample configuration\n- **[examples/docker-compose.yml](examples/docker-compose.yml)** - Example stack\n- **[examples/hooks/](examples/hooks/)** - Hook script examples\n- **[examples/systemd/](examples/systemd/)** - Systemd setup guide\n\n---\n\n## CLI Commands\n\nKopi-Docka features a simplified CLI with top-level commands and an `admin` subcommand for advanced operations.\n\n### Top-Level Commands\n```bash\nsudo kopi-docka setup              # Complete setup wizard\nsudo kopi-docka backup             # Full backup (standard scope)\nsudo kopi-docka restore            # Interactive restore wizard\nsudo kopi-docka restore --yes      # Non-interactive restore (CI/CD)\nsudo kopi-docka show-docker-config \u003csnapshot-id\u003e  # Extract docker_config for manual restore\nsudo kopi-docka disaster-recovery export ~/recovery.zip  # Create DR bundle (ZIP)\nsudo kopi-docka dry-run            # Simulate backup (preview)\nsudo kopi-docka doctor             # System health check\nkopi-docka version                 # Show version\n```\n\n### Admin Commands\n```bash\n# Configuration\nsudo kopi-docka advanced config show      # Show config\nsudo kopi-docka advanced config new       # Create new config\nsudo kopi-docka advanced config edit      # Edit config\n\n# Repository\nsudo kopi-docka advanced repo init        # Initialize repository\nsudo kopi-docka advanced repo status      # Repository info\n\n# Snapshots \u0026 Units\nsudo kopi-docka advanced snapshot list              # List backup units\nsudo kopi-docka advanced snapshot list --snapshots  # List all snapshots\nsudo kopi-docka advanced snapshot estimate-size     # Estimate backup size\nsudo kopi-docka advanced snapshot manage            # Interactive management wizard\nsudo kopi-docka advanced snapshot delete \u003cid\u003e       # Delete a snapshot\nsudo kopi-docka advanced snapshot pin \u003cid\u003e          # Pin snapshot (protect from cleanup)\nsudo kopi-docka advanced snapshot unpin \u003cid\u003e        # Unpin snapshot\nsudo kopi-docka advanced snapshot maintenance       # Run maintenance\nsudo kopi-docka advanced snapshot prune-empty       # Expire snapshots (apply retention)\nsudo kopi-docka advanced snapshot retention show    # Show retention policy\nsudo kopi-docka advanced snapshot retention set \\\n  --latest 10 --daily 7 --weekly 4 --monthly 12    # Update retention policy\n\n# System \u0026 Service\nsudo kopi-docka advanced system install-deps    # Install dependencies\nsudo kopi-docka advanced service write-units    # Generate systemd units\nsudo kopi-docka advanced service daemon         # Run as daemon\n```\n\n**[Complete CLI reference →](docs/USAGE.md#cli-commands-reference)**\n\n---\n\n## Storage Backend Options\n\nKopi-Docka supports 8 different storage backends:\n\n1. **Local Filesystem** - Local disk or NAS mount\n2. **AWS S3** - Amazon S3 or S3-compatible (Wasabi, MinIO)\n3. **Backblaze B2** - ~$6/TB/month (includes egress)\n4. **Azure Blob** - Microsoft Azure storage\n5. **Google Cloud Storage** - GCS\n6. **SFTP** - Remote server via SSH\n7. **Tailscale** - P2P over WireGuard mesh network\n8. **Rclone** - Universal adapter (OneDrive, Dropbox, Google Drive, 70+ services) — ⚠️ **slow on Google Drive, [see issue #111](https://github.com/TZERO78/kopi-docka/issues/111)**\n\n\u003e **⚠️ Performance note for rclone + Google Drive users**: a known\n\u003e upstream limitation makes individual snapshot operations take 60-300\n\u003e seconds each (Kopia marks the rclone backend as `[Not maintained]`,\n\u003e Google Drive has high small-file write overhead). If you're seeing\n\u003e 30+ minute backups for a small amount of data, see\n\u003e **[pinned issue #111](https://github.com/TZERO78/kopi-docka/issues/111)**\n\u003e for measurements and recommended alternatives (any of the other 7\n\u003e backends will be an order of magnitude faster).\n\n**[Storage configuration →](docs/CONFIGURATION.md#storage-backends)**\n\n---\n\n## System Requirements\n\n- **OS:** Linux (Debian, Ubuntu, Arch, Fedora, RHEL/CentOS)\n- **Python:** 3.10 or newer\n- **Docker:** Docker Engine 20.10+\n- **Kopia:** \u003e= 0.13 (recommended; required for sparse-file support) (automatically checked)\n\n**[Detailed requirements →](docs/INSTALLATION.md#system-requirements)**\n\n---\n\n## Feature Comparison\n\n| Feature | Kopi-Docka | docker-volume-backup | Duplicati | Restic |\n|---------|------------|----------------------|-----------|--------|\n| **Docker-native** | ✅ | ✅ | ❌ | ❌ |\n| **Cold Backups** | ✅ | ✅ | ❌ | ❌ |\n| **Compose-Stack-Aware** | ✅ | ❌ | ❌ | ❌ |\n| **Network Backup*** | ✅ | ❌ | ❌ | ❌ |\n| **DR Bundles** | ✅ | ❌ | ❌ | ❌ |\n| **Tailscale Integration** | ✅ | ❌ | ❌ | ❌ |\n| **Rclone Support** | ✅ | ❌ | ❌ | ❌ |\n| **systemd Integration** | ✅ | ❌ | ❌ | ❌ |\n| **Pre/Post Hooks** | ✅ | ⚠️ | ❌ | ❌ |\n| **Storage Options** | 8 backends | Basic | Many | Many |\n| **Deduplication** | ✅ (Kopia) | ❌ | ✅ | ✅ |\n\n*Network Backup = Automatic backup of custom Docker networks with IPAM configuration (subnets, gateways)\n\n**Kopi-Docka's focus:** Stack-awareness, disaster recovery bundles, Tailscale P2P, and systemd hardening\n\n**[Full comparison →](docs/FEATURES.md#why-kopi-docka)**\n\n---\n\n## Project Status\n\n**Status:** Feature-Complete, Stabilization Phase  \n**Latest Release:** See badges above ↑\n\nThe current release includes all planned core features:\n- ✅ Backup scope selection (minimal/standard/full)\n- ✅ Docker network backup with IPAM\n- ✅ Pre/Post backup hooks\n- ✅ Disaster recovery bundles\n- ✅ Systemd integration with hardening\n\n**Current Focus:**\n- Bug fixing and edge-case handling\n- Test coverage expansion\n- Documentation improvements\n\n**Known Limitations:**\n- Single repository only (no parallel multi-cloud backup)\n- Hooks require careful configuration ([Safety Guide](docs/HOOKS.md#hook-safety-rules))\n- Restore edge-cases still being hardened\n\n**New major features:** Only after stable foundation\n\n[View Changelog](CHANGELOG.md) | [Development Roadmap](docs/DEVELOPMENT.md#planned-features)\n\n---\n\n## Thanks \u0026 Acknowledgments\n\n**Kopi-Docka** = **Kopi**a + **Docka**r – the name reflects what this project is: a bridge between two excellent tools.\n\nKopi-Docka would not exist without these excellent tools:\n\n- **Kopia** – the rock-solid backup engine providing encryption, deduplication\n  and snapshot management  \n  https://kopia.io\n\n- **Docker** – container runtime and ecosystem that makes reproducible\n  environments possible  \n  https://www.docker.com\n\n- **Tailscale** – secure WireGuard-based networking that enables simple\n  peer-to-peer offsite backups  \n  https://tailscale.com\n\n- **rclone** – universal storage adapter enabling access to many affordable\n  cloud and remote storage providers  \n  https://rclone.org\n\n- **Typer** – clean and readable CLI framework for Python\n  https://typer.tiangolo.com\n\n- **Pydantic** – data validation and settings management using Python type annotations\n  https://docs.pydantic.dev\n\n- **Apprise** – universal notification library supporting 100+ services\n  https://github.com/caronc/apprise\n\nAll of these tools remain under their respective licenses and are **not bundled**\nwith Kopi-Docka.\n\nThis project is built with deep respect for the open-source ecosystem.\n\n**Author:** Markus F. (TZERO78)  \n**Links:** [PyPI](https://pypi.org/project/kopi-docka/) | [GitHub](https://github.com/TZERO78/kopi-docka)\n\n---\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\nCopyright (c) 2025 Markus F. (TZERO78)\n\n---\n\n## Feedback \u0026 Support\n\nIf you find Kopi-Docka useful, feel free to leave a ⭐ on GitHub.\n\nI cannot test all storage backends and edge cases on my own, so feedback from\nreal-world setups is highly appreciated.\n\nIf something doesn't work as expected, please open an **Issue** and include\nyour environment details.\n\n- 📦 **PyPI:** [pypi.org/project/kopi-docka](https://pypi.org/project/kopi-docka/)\n- 📚 **Documentation:** [Complete docs](docs/)\n- 🐛 **Bug Reports:** [GitHub Issues](https://github.com/TZERO78/kopi-docka/issues)\n- 💬 **Discussions:** [GitHub Discussions](https://github.com/TZERO78/kopi-docka/discussions)\n- 🧑‍🤝‍🧑 **Code of Conduct:** [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftzero78%2Fkopi-docka","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftzero78%2Fkopi-docka","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftzero78%2Fkopi-docka/lists"}