{"id":49895034,"url":"https://github.com/zz-drop/zz-drop","last_synced_at":"2026-05-15T23:05:58.919Z","repository":{"id":356067826,"uuid":"1221090776","full_name":"zz-drop/zz-drop","owner":"zz-drop","description":"Minimalist CLI for one-shot file transfer to a configured cloud destination. Nextcloud, Google Drive, OneDrive, Dropbox.","archived":false,"fork":false,"pushed_at":"2026-05-12T20:17:16.000Z","size":648,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-12T20:26:54.098Z","etag":null,"topics":["argon2","cli","cloud-storage","dropbox","e2e-encryption","e2ee","google-drive","nextcloud","oauth","onedrive","ratatui","rust","tui","webdav","xchacha20"],"latest_commit_sha":null,"homepage":"https://zz-drop.net","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zz-drop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-25T18:34:58.000Z","updated_at":"2026-05-12T20:20:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zz-drop/zz-drop","commit_stats":null,"previous_names":["gibbio/zz-drop","zz-drop/zz-drop"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/zz-drop/zz-drop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zz-drop%2Fzz-drop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zz-drop%2Fzz-drop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zz-drop%2Fzz-drop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zz-drop%2Fzz-drop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zz-drop","download_url":"https://codeload.github.com/zz-drop/zz-drop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zz-drop%2Fzz-drop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33082807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["argon2","cli","cloud-storage","dropbox","e2e-encryption","e2ee","google-drive","nextcloud","oauth","onedrive","ratatui","rust","tui","webdav","xchacha20"],"created_at":"2026-05-15T23:05:58.066Z","updated_at":"2026-05-15T23:05:58.912Z","avatar_url":"https://github.com/zz-drop.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zz-drop\n\n[![build](https://github.com/zz-drop/zz-drop/actions/workflows/build.yml/badge.svg)](https://github.com/zz-drop/zz-drop/actions/workflows/build.yml)\n[![release](https://img.shields.io/github/v/release/zz-drop/zz-drop?include_prereleases\u0026sort=semver)](https://github.com/zz-drop/zz-drop/releases)\n[![license](https://img.shields.io/badge/license-MIT_OR_Apache--2.0-blue)](#license)\n\nMinimalist CLI to put files into — and get files from — a\nconfigured safe cloud destination. Four providers, one command,\nend-to-end encryption on every credential the tool stores.\n\n![zz-drop CLI demo](.github/assets/cli-demo.gif)\n\nzz-drop is **not** a sync tool, **not** a mount tool, **not** a\ngeneric cloud file manager. One-shot uploads, one-shot downloads,\nexplicit, fast.\n\n## Install\n\n```bash\n# macOS — Homebrew tap (preferred). Installs `zz-drop` + `zz-tui`,\n# wires bash/zsh/fish completions, links `zz` to `zz-drop` if free.\nbrew install zz-drop/zz-drop/zz-drop\n\n# Linux \u0026 WSL — signed binaries via curl-installer (preferred).\n# Also works on macOS if you prefer no package manager.\ncurl -fsSL https://github.com/zz-drop/zz-drop/releases/latest/download/zz-drop-installer.sh | sh\n```\n\nNo install path needs root.\n\nEvery release artifact is signed with [minisign](https://jedisct1.github.io/minisign/);\nthe public key is [`release-key.pub`](release-key.pub).\n\nBuild from source: see [`docs/build.md`](docs/build.md).\n\n## Quickstart\n\n```bash\nzz c            # one-off setup (configuration TUI)\nzz file.md      # upload\nzz d file.md    # download\nzz z            # unlock the agent for the session\nzz q            # lock the agent\n```\n\n```text\n$ zz readme.md\nuploaded readme.md 12 KiB → casa-nc · cloud.example.org/zz-drop\n\n$ zz d leggimi.txt\ndownloaded leggimi.txt 34 KiB ← casa-nc · cloud.example.org/zz-drop\n```\n\nOutput always names the active alias and the destination. Sizes\nare binary (`KiB` / `MiB` / `GiB`). Colors only on a TTY, with\n`NO_COLOR` / `CLICOLOR=0` honored.\n\n## What you get\n\n- **Four destinations**: Nextcloud (WebDAV), Google Drive\n  (OAuth device flow), OneDrive (OAuth device flow + Microsoft\n  Graph), Dropbox (OAuth paste-code + PKCE, App folder).\n- **Encrypted profile container** (`profile-local.zz`):\n  XChaCha20-Poly1305 + Argon2id; passphrase never leaves the\n  device. The server side (when used in v2) sees only an\n  opaque encrypted blob.\n- **Local per-user agent** in the same binary: holds the\n  decrypted profile in RAM only, TTL 10 min, idle locked-exit\n  after 5 min, Unix socket bound per-UID.\n- **Composable verb grammar** for power users:\n  `zz sx file.md` (zstd compress), `zz sa dir/` (bulk\n  top-level), `zz sar dir/` (recursive), `zz sarx dir/`\n  (recursive + tar.zst). The `d` family mirrors it.\n\n## TAB completion that knows your state\n\n`zz` ships its own shell completion — SACS, state-aware\ncontextual suggestions. It doesn't just list verbs: it asks the\nlocal agent for the *actual* state of your data and ranks\ncandidates accordingly.\n\n![zz-drop SACS in action](.github/assets/sacs-demo.gif)\n\n`zz d \u003cTAB\u003e` shows remote files; `zz z \u003cTAB\u003e` shows the inner\nprofiles inside your unlocked container; `zz s \u003cTAB\u003e` falls\nback to the local filesystem like every other CLI.\n\nThe script itself is tiny (~30 lines per shell); the brain is\nthe `zz` binary, so rebuilding the tool updates the suggestions\n— the script never changes. zsh styling (group headers, menu\nselect, filename colors) is opt-in via six lines in `~/.zshrc`,\nscoped to `zz` only so it leaves `git`, `ls`, `cd`'s TAB\nbehaviour untouched.\n\nBrew install handles this for you. Manual install (other paths,\nor to override):\n\n```bash\nzz --completions bash | source\nzz --completions zsh  \u003e ~/.zfunc/_zz       # then `compinit`\nzz --completions fish \u003e ~/.config/fish/completions/zz.fish\n```\n\nFull installation guide, zsh styling block and the\ndownload-glob wrapper for `zz d 'Q*'`:\n[`docs/sacs.md`](docs/sacs.md).\n\n## TUI\n\nThe configuration TUI is a separate binary, `zz-tui`, shipped\nin the same release tarball as `zz-drop`. `zz c` exec's it.\n\n![zz-drop TUI walkthrough](.github/assets/tui-demo.gif)\n\nUse the TUI to:\n\n- onboard a cloud destination (provider OAuth, Nextcloud Login\n  Flow, or Nextcloud app-password)\n- set or rotate the master passphrase\n- add / remove inner profiles inside the container\n- run diagnostics\n\nThe TUI is **setup-only**. Daily file moves stay in the CLI.\n\n## Scope (v1)\n\nIn: explicit one-shot upload / download, one configured cloud\ntarget per profile, the local agent, the configuration TUI.\n\nOut: file sync, mount-as-FS, public share links, generic remote\nfile manager, team / org access.\n\nThe next features in flight are listed in the [project\nroadmap](https://github.com/zz-drop).\n\n## Documentation\n\n- [`COMMANDS.md`](COMMANDS.md) — every command, examples,\n  exit codes, parser rule\n- [`SECURITY.md`](SECURITY.md) — threat model, server-side\n  guarantees and non-claims, supported crypto\n- [`docs/build.md`](docs/build.md) — build from source, BYO\n  OAuth client IDs, shell completion install\n- [`docs/agent.md`](docs/agent.md) — agent protocol, socket\n  layout, token handshake, lock / TTL semantics\n- [`docs/sacs.md`](docs/sacs.md) — state-aware completion\n  internals\n- [`docs/profile-format.md`](docs/profile-format.md) —\n  `profile.zz` envelope and payload schema\n- [`docs/providers/`](docs/providers/) — per-provider notes\n  (Nextcloud, Google Drive, OneDrive, Dropbox)\n\n## License\n\nDual: [MIT](LICENSE-MIT) OR [Apache-2.0](LICENSE-APACHE) at your\noption.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzz-drop%2Fzz-drop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzz-drop%2Fzz-drop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzz-drop%2Fzz-drop/lists"}