{"id":49580648,"url":"https://github.com/retyc/retyc-cli","last_synced_at":"2026-05-03T19:09:19.045Z","repository":{"id":340354166,"uuid":"1161539631","full_name":"retyc/retyc-cli","owner":"retyc","description":"Official CLI client for Retyc - written in Go","archived":false,"fork":false,"pushed_at":"2026-04-24T10:13:12.000Z","size":630,"stargazers_count":19,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-24T10:32:49.796Z","etag":null,"topics":["cli","dataroom","docker","encryption","file-sharing"],"latest_commit_sha":null,"homepage":"https://retyc.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/retyc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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":"2026-02-19T08:19:41.000Z","updated_at":"2026-04-24T10:05:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/retyc/retyc-cli","commit_stats":null,"previous_names":["retyc/retyc-cli"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/retyc/retyc-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retyc%2Fretyc-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retyc%2Fretyc-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retyc%2Fretyc-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retyc%2Fretyc-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/retyc","download_url":"https://codeload.github.com/retyc/retyc-cli/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retyc%2Fretyc-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32581161,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: 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":["cli","dataroom","docker","encryption","file-sharing"],"created_at":"2026-05-03T19:09:18.310Z","updated_at":"2026-05-03T19:09:19.039Z","avatar_url":"https://github.com/retyc.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg width=\"200\" src=\".media/Retyc_Logo_Blue.png\" alt=\"Retyc logo\" /\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/retyc/retyc-cli/actions/workflows/main.yml\"\u003e\u003cimg src=\"https://github.com/retyc/retyc-cli/actions/workflows/main.yml/badge.svg\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/retyc/retyc-cli\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/retyc/retyc-cli\" alt=\"GoReportCard\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/retyc/retyc-cli/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/retyc/retyc-cli\" alt=\"Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n# Retyc CLI\n\n\u003e Official command-line interface for [Retyc](https://retyc.com) - send transfers and manage datarooms directly from your terminal.\n\n\u003cimg src=\".media/demo_0.0.2.gif\" width=\"500\" alt=\"Retyc CLI demo\" /\u003e\n\n---\n\n## What is Retyc?\n\n[Retyc](https://retyc.com) is a European sovereign file-sharing platform with end-to-end post-quantum encryption. Data stays in Europe, GDPR-compliant by design.\n\n`retyc-cli` lets you integrate Retyc transfers and datarooms into your scripts, pipelines and workflows - no browser required.\n\n---\n\n## Installation\n\n### Pre-compiled binaries (recommended)\n\nDownload the binary for your platform from the [latest release](https://github.com/retyc/retyc-cli/releases/latest).\n\n### With `go install`\n\n```sh\ngo install -tags prod github.com/retyc/retyc-cli@latest\n```\n\n### From source\n\n```sh\ngit clone https://github.com/retyc/retyc-cli.git\ncd retyc-cli\ngo build -tags prod -ldflags \"-X github.com/retyc/retyc-cli/cmd.Version=$(git describe --tags --always)\" -o retyc .\n```\n\n### With Docker\n\n```sh\n# Docker Hub\ndocker pull retyc/retyc-cli:latest\n# GitHub Container Registry\ndocker pull ghcr.io/retyc/retyc-cli:latest\n```\n\n---\n\n## Quick start\n\n```sh\n# 1. Authenticate (opens a browser tab, no password stored)\nretyc auth login\n\n# 2. Send a file\nretyc transfer create report.pdf\n\n# 3. List your transfers\nretyc transfer ls\n\n# 4. Download a transfer\nretyc transfer download \u003ctransfer-id\u003e\n```\n\n---\n\n## Commands\n\n### Auth\n\n| Command | Description |\n|---|---|\n| `retyc auth login` | Authenticate via OIDC device flow |\n| `retyc auth login --offline` | Authenticate and print an offline token for CI/CD use |\n| `retyc auth status` | Check authentication status (silently refreshes token) |\n| `retyc auth logout` | Sign out |\n\n### Transfer\n\n| Command | Description |\n|---|---|\n| `retyc transfer create \u003cfile\u003e` | Create and send a new transfer (`--generate-passphrase` to auto-generate a secure passphrase) |\n| `retyc transfer info \u003cid\u003e` | Get transfer details |\n| `retyc transfer ls` | List sent and received transfers |\n| `retyc transfer download \u003cid\u003e` | Download a transfer |\n| `retyc transfer enable \u003cid\u003e` | Enable a transfer |\n| `retyc transfer disable \u003cid\u003e` | Disable a transfer |\n\n### Dataroom\n\nDatarooms are persistent, end-to-end encrypted shared spaces for files and folders.\nAll paths use the `retyc://dataroom-id/path` URI scheme.\nGlob patterns (`*`, `?`, `[...]`) are supported in remote paths.\n\n| Command | Description |\n|---|---|\n| `retyc dataroom ls` | List all your datarooms |\n| `retyc dataroom ls retyc://\u003cid\u003e[/path]` | List nodes at a path (supports globs) |\n| `retyc dataroom create --title \u003ctitle\u003e` | Create a new dataroom |\n| `retyc dataroom info \u003cid\u003e` | Show dataroom details, stats and members |\n| `retyc dataroom cp \u003clocal…\u003e retyc://\u003cid\u003e/\u003cdest\u003e` | Upload files or directories |\n| `retyc dataroom cp retyc://\u003cid\u003e/\u003cpath\u003e \u003clocal-dir\u003e` | Download a file |\n| `retyc dataroom mv retyc://\u003cid\u003e/\u003csrc\u003e retyc://\u003cid\u003e/\u003cdst\u003e` | Rename or move a node |\n| `retyc dataroom rm retyc://\u003cid\u003e` | Delete the entire dataroom |\n| `retyc dataroom rm retyc://\u003cid\u003e/\u003cpath\u003e` | Delete a node (supports globs) |\n| `retyc dataroom mkdir retyc://\u003cid\u003e/\u003cpath\u003e` | Create a folder |\n| `retyc dataroom user add \u003cid\u003e \u003cemail\u003e [--role viewer\\|editor\\|admin]` | Add a member |\n| `retyc dataroom user rm \u003cid\u003e \u003cuser-id\u003e` | Remove a member |\n\n```sh\n# Create a dataroom (title is required)\nretyc dataroom create --title \"Project Alpha\"\n\n# Upload a release directory\nretyc dataroom cp ./dist/ retyc://019d3de3-.../releases/\n\n# List contents\nretyc dataroom ls retyc://019d3de3-.../releases/\n\n# Download a specific file\nretyc dataroom cp retyc://019d3de3-.../releases/binary ./\n\n# Download all PDFs from a folder\nretyc dataroom cp retyc://019d3de3-.../docs/*.pdf ./local/\n\n# Delete all log files\nretyc dataroom rm retyc://019d3de3-.../*.log\n\n# Delete the entire dataroom\nretyc dataroom rm retyc://019d3de3-...\n\n# Add a collaborator\nretyc dataroom user add 019d3de3-... alice@example.com --role editor\n```\n\n---\n\n## Docker\n\nConfig and tokens are persisted in a named volume. The `-it` flags are required for interactive prompts (device flow, passphrase).\n\n```sh\n# Authenticate\ndocker run -it --rm -v retyc-config:/home/retyc/.config/retyc retyc/retyc-cli:latest auth login\n\n# Send / list / download (mount current directory for file access)\ndocker run -it --rm \\\n  -v retyc-config:/home/retyc/.config/retyc \\\n  -v \"$(pwd)\":/data \\\n  retyc/retyc-cli:latest transfer create /data/report.pdf\n```\n\n\u003e **Tip:** `alias retyc='docker run -it --rm -v retyc-config:/home/retyc/.config/retyc -v \"$(pwd)\":/data retyc/retyc-cli:latest'`\n\n\u003e **Note:** kernel keyring caching is not available in Docker (blocked by the default seccomp profile). The passphrase will be prompted on each invocation.\n\n---\n\n## CI / CD\n\n`retyc-cli` can run fully non-interactively for authentication and key-unlock flows in pipelines. Set the following environment variables to avoid credential and key passphrase prompts:\n\n| Variable | Description |\n|---|---|\n| `RETYC_TOKEN` | Offline refresh token used instead of reading credentials from disk |\n| `RETYC_KEY_PASSPHRASE` | Passphrase for your AGE private key, used instead of an interactive passphrase prompt |\n\n\u003e **Note:** Other interactive prompts (for example, transfer confirmation unless you pass `-y`) may still appear and must be disabled using the appropriate CLI flags when running in CI.\n\n### Setup (one-time, on your machine)\n\n```sh\n# Authenticate and print an offline token\nretyc auth login --offline\n```\n\nCopy the printed token and store it as a secret in your CI provider alongside your key passphrase.\n\n### Usage in a pipeline\n\n```sh\nexport RETYC_TOKEN=\u003coffline_token\u003e\nexport RETYC_KEY_PASSPHRASE=\u003ckey_passphrase\u003e\n\n# Send build artifacts\nretyc transfer create -y --title \"Release v1.2.3\" ./dist/app.tar.gz\n\n# Download a transfer\nretyc transfer download -y \u003ctransfer-id\u003e\n```\n\nThe offline token is a long-lived refresh token. At each invocation the CLI exchanges it for a short-lived access token — nothing is written to disk.\n\n---\n\n## Configuration\n\nCredentials and config are stored in a platform-specific directory:\n\n| Build | Config directory |\n|---|---|\n| Production (`-tags prod`) | `~/.config/retyc/` (XDG Base Dir) |\n| Development (default) | `.retyc/` in the current directory |\n\nOverride at any time:\n\n```sh\nexport RETYC_CONFIG_DIR=/path/to/config\n```\n\n### Environment variables\n\n| Variable | Description |\n|---|---|\n| `RETYC_CONFIG_DIR` | Override the config directory |\n| `RETYC_TOKEN` | Offline refresh token (bypasses disk credentials — see [CI / CD](#ci--cd)) |\n| `RETYC_KEY_PASSPHRASE` | AGE key passphrase (bypasses interactive prompt — see [CI / CD](#ci--cd)) |\n\nCreate `config.yaml` to override defaults:\n\n```yaml\napi:\n  base_url: https://api.retyc.com\n```\n\n### Global flags\n\n| Flag | Short | Description |\n|---|---|---|\n| `--config \u003cfile\u003e` | | Use a specific config file |\n| `--insecure` | `-k` | Skip TLS certificate verification |\n| `--debug` | | Enable debug mode |\n\n---\n\n## Security\n\n- **Authentication**: OIDC device flow - no password ever stored locally\n- **File data + metadata**: end to end encrypted with [AGE](https://github.com/FiloSottile/age) post-quantum hybrid keys\n- **Private key caching** (Linux only): the decrypted AGE identity is stored in the kernel session keyring and is never written to disk. It is scoped to the current terminal session, isolated from other users and sessions, and uses a sliding TTL (default: 60 seconds). Each access refreshes the expiration timer.\n- **Transport**: TLS enforced by default\n\n---\n\n## Roadmap\n\n### Transfer\n\n| Feature | Status |\n|---|---|\n| Create | ✅ |\n| Info | ✅ |\n| List (inbox / sent) | ✅ |\n| Download | ✅ |\n| Enable/Disable | ✅ |\n\n### Dataroom\n\n| Feature | Status |\n|---|---|\n| Create / Info / List | ✅ |\n| User management (add / remove + rekey) | ✅ |\n| Upload (files + recursive directories) | ✅ |\n| Download (single file + glob) | ✅ |\n| Move / Rename | ✅ |\n| Delete (single + glob) | ✅ |\n| Create folder | ✅ |\n| Versioning (promote / manage) | 🔜 |\n\n### User\n\n| Feature | Status |\n|---|---|\n| Get data | ✅ |\n| Get quota | ✅ |\n\n### Organization\n\n| Feature | Status |\n|---|---|\n| User management (invitations, roles) | 🔜 |\n\n---\n\n## Development\n\n```sh\n# Run in dev mode\ngo run . --help\n\n# Run tests\ngo test -race ./...\n\n# Production build\ngo build -tags prod -ldflags \"-X github.com/retyc/retyc-cli/cmd.Version=v0.1.0\" -o retyc .\n```\n\n---\n\n## License\n\n[MIT](LICENSE) - © Retyc / TripleStack SAS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fretyc%2Fretyc-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fretyc%2Fretyc-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fretyc%2Fretyc-cli/lists"}