Skip to content

Latest commit

 

History

42 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PigCloud CLI

A command-line interface for managing your PigCloud storage.

PigCloud is end-to-end encrypted: files are encrypted on your device before upload and decrypted locally after download. The server never sees plaintext content, file names, or data keys. A familiar, Unix-style CLI lets you upload, download, share, and organise files straight from your terminal. Two-letter aliases, an interactive shell with tab-completion, and --json output make common workflows fast and scriptable.

Because decryption happens client-side, commands like gr (grep) and di (diff) can search and compare encrypted file contents, something the server and web UI cannot do.

Installation

Quick install

Linux and macOS:

curl -fsSL https://pigcloud.de/cli/install.sh | sh

Windows (PowerShell):

irm https://pigcloud.de/cli/install.ps1 | iex

The script downloads the right build for your platform, verifies its SHA-256, and installs pc and pigcloud.

Download Binary

Download the appropriate binary for your platform from the releases page.

Each release contains two binaries: pigcloud (full name) and pc (shorthand alias).

Linux / macOS

curl -sSL https://github.com/pigtech-de/pigcloud-cli/releases/latest/download/pigcloud-3.2.0-linux-amd64.tar.gz -o pigcloud.tar.gz
tar -xzf pigcloud.tar.gz
sudo install -m 755 pigcloud pc /usr/local/bin/

Windows

# Download and extract
Invoke-WebRequest -Uri "https://github.com/pigtech-de/pigcloud-cli/releases/latest/download/pigcloud-3.2.0-windows-amd64.zip" -OutFile pigcloud.zip
Expand-Archive pigcloud.zip -DestinationPath "$env:LOCALAPPDATA\pigcloud"

# Add to PATH (current user, persistent)
$path = [Environment]::GetEnvironmentVariable("Path", "User")
if ($path -notlike "*$env:LOCALAPPDATA\pigcloud*") {
    [Environment]::SetEnvironmentVariable("Path", "$path;$env:LOCALAPPDATA\pigcloud", "User")
}

Restart your terminal after adding to PATH.

Build from Source

Requires Go 1.25 or later.

cd cli
make build

Quick Start

# Authenticate: paste your API key when prompted
# (find it in the PigCloud web UI under Settings > API Keys)
pc login

# List files in the current directory
pc ls

# Upload a file
pc ul document.pdf /Documents/

# Upload from stdin
echo "Hello world" | pc ul - /hello.txt

# Download a file
pc dl /Documents/document.pdf ./

# Search file contents (sealed index by default)
pc gr "TODO"

# Diff between file versions
pc di /report.md 3 5

# Start an interactive shell session
pc shell

Authentication

Authentication is API-key based. Run pc login and paste the key from your PigCloud account settings. The key is stored locally in your config file and sent as a header with every request over HTTPS. No OAuth flow or browser redirect needed.

  • Each account has one active API key. Generating a new key revokes the previous one.
  • The key secret is hashed with Argon2id on the server; it cannot be recovered, only regenerated.
  • On Linux/macOS the config file is written with mode 0600 (owner-only). On Windows, standard user-directory ACLs apply.
  • Treat your config file like an SSH private key: don't share it or commit it to version control.

Security Model

PigCloud uses end-to-end encryption (E2EE): the CLI encrypts files locally before upload and decrypts them locally after download. The server stores only ciphertext and never has access to plaintext content or data keys.

End-to-End Encryption

Layer Algorithm Details
File content XChaCha20-Poly1305 (libsodium) Streamed in 1 MB chunks. Per-file random data key, nonce incremented per chunk. SHA-256 integrity check on decrypt.
Data key sealing X25519 crypto_box_seal Each file's data key is sealed to the user's public key. Only the user's private key can unseal it.
File names X25519 crypto_box_seal Each name is individually sealed. The server stores and returns opaque blobs; the CLI decrypts client-side.
Path resolution BLAKE2b-256 path tokens Client computes deterministic tokens for O(1) lookups without revealing directory structure.
Key pair X25519 (Curve25519) Generated at account setup. Private key encrypted with a password-derived key (Argon2id).
File sharing Re-seal per recipient Data key is unsealed with sender's private key, then re-sealed with recipient's public key.

E2EE keys are set up on first login and cached locally. The private key remains encrypted at rest and only decrypted in memory when needed. Use pc uk to unlock keys for a session and pc lk to lock them again.

Paths

Commands that take paths distinguish between remote (cloud) and local (OS) paths:

  • Remote paths are Unix-style and absolute (/Documents/report.pdf) or relative to the current cloud working directory (report.pdf). Use pc wd to see it, pc cd to change it.
  • Local paths are your OS file system paths (./downloads/, C:\Users\...).
  • In ul and dl, the first argument is always the source and the second is the destination. ul takes local then remote; dl takes remote then local.
  • Use - as the local path for ul to read from stdin (remote path required).

Commands

Use pc as a shorthand for pigcloud. All commands have two-letter aliases. The same tree is shown by pc hl at runtime.

COMMANDS

├── Authentication
│   ├── li, login        Sign in from your browser [--api-key]
│   ├── lk, lock         Lock encryption keys
│   ├── lo, logout       Remove stored credentials
│   ├── uk, unlock       Unlock encryption keys for this session [--stdin] [-t]
│   └── wh, whoami       Show current user info

├── Navigation
│   ├── cd               Change working directory
│   ├── fd, find         Find files by name [-a] [-F] [-i] [--larger-than] [-n] [--newer-than] [--older-than] [-E] [--smaller-than] [-t]
│   ├── gr, grep         Search file contents [-A] [-l] [-F] [-i] [-m] [-r] [-E]
│   ├── ls, list         List files and directories [-a] [--larger-than] [-n] [-l] [--newer-than] [-o] [--older-than] [-R] [--smaller-than] [-S] [-t]
│   ├── tr, tree         Display directory tree [-a] [-L] [-d]
│   └── wd, pwd          Print working directory

├── File Operations
│   ├── cp, copy         Copy a file or directory [-d]
│   ├── ct, cat          Display file content [-n] [-t]
│   ├── di, diff         Diff a file between versions [-l]
│   ├── dl, download     Download a file or folder from cloud storage [-x] [--overwrite] [--skip-existing] [-z]
│   ├── fv, favorite     Manage favorites
│   │   ├── add          Add paths to favorites
│   │   ├── ls           List all favorites
│   │   └── rm           Remove paths from favorites
│   │
│   ├── hd, hide         Hide or unhide files and folders
│   │   ├── add          Hide files or folders
│   │   ├── ls           List all hidden items
│   │   └── rm           Unhide files or folders
│   │
│   ├── mk, mkdir        Create a new directory [-p]
│   ├── mn, mount        Mount cloud storage as a local drive
│   │   ├── clean        Remove rejected (unsyncable) files from mount
│   │   ├── conflicts    List files changed both locally and remotely
│   │   ├── files        Show per-file sync status [--issues] [--tree]
│   │   ├── mv           Move the sync folder to a different location [-d] [-f]
│   │   ├── pin          Pin a file or folder for offline access [--list] [--remove]
│   │   ├── resolve      Settle a sync conflict [-f] [-k]
│   │   ├── start        Start the mount daemon [--cache-size] [--poll-interval] [--read-only] [--virtual]
│   │   ├── status       Show mount status and cache statistics
│   │   └── stop         Stop a mount daemon and unmount [-a]
│   │
│   ├── mv, move         Move or rename a file/directory [-d]
│   ├── rm, remove       Delete files or directories [-d] [-f] [-p]
│   ├── rs, restore      Restore an item from the recycling bin
│   ├── tb, trash        Manage recycling bin [-S] [-t]
│   │   ├── empty        Permanently delete all items in the recycling bin [-f]
│   │   └── ls           List recycling bin contents
│   │
│   ├── tc, touch        Create a new text file [-c]
│   ├── ul, upload       Upload a file or directory to cloud storage [-f] [-j] [--preserve-timestamps] [--skip-existing]
│   └── vh, versions     View and manage file version history
│       ├── dl           Download a specific version
│       ├── prune        Delete all but the last N versions [-k]
│       ├── rm           Delete a specific version [-f]
│       └── rs           Restore a file to a specific version

├── Sharing
│   ├── ch, chat         Send and receive E2EE chat messages [--before-id] [-n]
│   │   ├── ls           List conversations
│   │   ├── read         Mark conversation as read
│   │   ├── rm           Delete a sent message
│   │   ├── send         Send a chat message or share a file [-f]
│   │   └── unread       Show unread message counts
│   │
│   ├── fr, friend       Manage friends
│   │   ├── accept       Accept a friend request
│   │   ├── add          Send a friend request
│   │   ├── decline      Decline a friend request
│   │   ├── ls           List your friends
│   │   ├── pending      List pending friend requests
│   │   └── rm           Remove a friend
│   │
│   ├── pl, link         Create and manage public links
│   │   ├── add          Create a public link [-e] [--max-downloads] [-P] [--qr]
│   │   ├── ls           List all public links
│   │   ├── rm           Revoke a public link [-f]
│   │   └── set          Update public link settings [-e] [--max-downloads] [-P] [--remove-expiration] [--remove-max-downloads] [--remove-password]
│   │
│   └── sr, share        Manage shared files and folders
│       ├── accept       Accept a pending share
│       ├── add          Share a folder with a user [-f] [-p]
│       ├── decline      Decline a received share
│       ├── inbox        List shares you've received from others
│       ├── ls           List share recipients for a folder
│       ├── rm           Remove a specific share recipient [-f]
│       └── set          Update share settings (permission, password, expiry) [-e] [-P] [-p] [--remove-expiration] [--remove-password] [-u]

└── Info & Tools
    ├── ac, activity     View activity log and notifications [-f] [-n] [-m] [-o] [--since] [-t] [-u] [--until]
    ├── ak, apikeys      View or revoke your API key
    │   ├── ls           Show API key status
    │   └── revoke       Revoke the API key (logs this CLI out) [-f]
    │
    ├── cf, config       Manage CLI configuration
    │   ├── get          Get a configuration value
    │   ├── ls           Show all configuration values
    │   └── set          Set a configuration value
    │
    ├── cm, completion   Generate shell completion scripts
    ├── dr, doctor       Diagnose the CLI setup
    ├── du, usage        Show storage breakdown by file type
    ├── hi, welcome      Quickstart tour for the PigCloud CLI
    ├── hl, help         Show help for commands [-v]
    ├── in, info         Show file or directory info
    ├── op, open         Open a file or folder in the browser
    ├── rc, recents      List recently accessed files [-n]
    ├── sh, shell        Start an interactive shell
    ├── ss, sessions     Manage active sessions and devices
    │   ├── devices      List trusted devices
    │   ├── forget       Remove a trusted device
    │   ├── ls           List active sessions and devices
    │   ├── revoke       Revoke an active session
    │   └── revoke-all   Revoke all other sessions
    │
    ├── st, stats        Show storage statistics
    ├── vf, verify       Verify file signatures [-n]
    ├── vr, version      Show version information
    └── xp, export       Export all personal data [-o]

GLOBAL FLAGS
    --config       Use custom config file path
    --json         Output in JSON format
    --no-color     Disable colored output
    -q, --quiet    Suppress non-essential output
    --version      Show version

Run pc hl <command> for detailed help on any command (flags, examples, related commands).

Command Details

li (login): Sign in from your browser

Sign in to PigCloud.

By default 'pc login' opens your browser and asks you to approve this device, so there is no API key to copy. Approve it while signed in to the web app and the CLI finishes on its own.

For CI or headless machines, pass an API key instead: pc login --api-key # or pipe it: echo "" | pc login Generate the key in the web app under Settings > API access.

pc login                          # Approve this device in your browser

lk (lock): Lock encryption keys

Stop the background key agent and clear decrypted keys from memory.

After locking, commands that access encrypted files will prompt for your password again (or require 'pc uk' to unlock).

pc lk    # Lock encryption keys

lo (logout): Remove stored credentials

Remove stored API key and configuration from your system.

This will delete your local configuration file and require you to login again.

uk (unlock): Unlock encryption keys for this session

Unlock your encryption keys so subsequent commands don't prompt for a password.

Starts a background agent that holds your decrypted keys in memory. The agent automatically expires after the TTL (default: 1 hour).

Use 'pc lk' to lock (stop the agent) manually.

pc uk              # Unlock for 1 hour (default)
pc uk -t 8h          # Unlock for 8 hours
pc uk -t 30m         # Unlock for 30 minutes

wh (whoami): Show current user info

Display information about the currently authenticated user.

cd: Change working directory

Change the current working directory in your cloud storage.

The working directory is persisted across CLI sessions. Use '..' to go up one directory, or '/' to go to root.

fd (find): Find files by name

Search for files and directories matching a pattern.

By default the pattern uses glob matching:

  • matches any characters ? matches a single character

Use -E for regex matching or -F for literal substring matching.

pc fd "*.pdf"                     # Glob: find PDF files
pc fd "report*" /docs              # Glob: search in /docs
pc fd -t d "project"               # Glob: directories only
pc fd -E "report_\d{4}" /docs      # Regex: report_2024 etc.
pc fd -Fi "readme" /               # Fixed: case-insensitive substring
pc fd "*" --larger-than 100M       # Files over 100 MB
pc fd "*.jpg" --newer-than 2026-01-01   # Recent photos

gr (grep): Search file contents

Search for a pattern across your files.

Default mode walks the sealed full-text index; no file content is downloaded, only the per-file sealed token index (built on upload + backfill). Multiple tokens (space-separated) are AND'd, case-insensitive, two-character minimum. Files that aren't indexed yet are silently skipped; the web client backfills older uploads automatically.

Passing a [path] argument, -A/--all-files, -E (regex), or -F (fixed substring) switches to the per-file download + line-scan path. Slower but scopes to the given path, covers unindexed files, and supports regex or substring matches that cross token boundaries.

pc gr "TODO"                       # fast index search across all files
pc gr "function authenticate"      # AND tokens
pc gr -l "TODO"                    # show only file names
pc gr "fmt.Println" /src           # scoped scan (path arg triggers full scan)
pc gr -E "func\s+\w+" /src         # regex (triggers full scan)
pc gr -F "API_KEY" /configs        # literal substring (triggers full scan)

ls (list): List files and directories

List files and directories in your cloud storage.

If no path is specified, lists the current working directory. Use 'pc cd' to change the working directory.

Flags: -l Show detailed information (size in bytes, full timestamps) -R List directories recursively -S Sort by file size (largest first) -t Sort by modification time (newest first)

pc ls -l -S                      # List with details, sorted by size

tr (tree): Display directory tree

Display a tree view of directories and files.

If no path is specified, shows the tree from the current working directory.

wd (pwd): Print working directory

Display the current working directory in your cloud storage.

ct (cat): Display file content

Display the content of a text file from your cloud storage.

Only text files up to 1MB can be displayed. Binary files are not supported.

Flags: -n, --head N Show only the first N lines -t, --tail N Show only the last N lines

di (diff): Diff a file between versions

Show differences between two versions of a file, between a version and the current file, or between the cloud file and a local copy (--local).

Only works with text files. Downloads and decrypts the cloud side locally, then displays a unified diff.

pc di /report.md 3 5               # Diff version 3 vs version 5
pc di /report.md 3                 # Diff version 3 vs current
pc di /report.md -l ./report.md    # Diff cloud file vs local copy
pc di /report.md 3 -l ./report.md  # Diff version 3 vs local copy

dl (download): Download a file or folder from cloud storage

Download a file or folder from your cloud storage.

If local-path is not specified, downloads to the current directory. Use - as local-path to stream the decrypted file to stdout for piping.

Use --extract (-x) to download a folder's contents as individual files, preserving the directory structure locally instead of creating a ZIP.

Use --zip (-z) to download a folder's contents into a local ZIP archive. Files are decrypted before being added to the archive.

pc dl /Documents/report.pdf ./       # Download a file
pc dl /Documents ./docs -x              # Download folder contents individually
pc dl /Documents ./backup.zip --zip     # Download folder as ZIP archive
pc dl /backup.sql.gz - | gunzip         # Stream decrypted file to stdout

fv (favorite): Manage favorites

Manage your favorites list.

Without arguments, lists all favorites. With a path argument, toggles the favorite status.

pc fv                  # List favorites
pc fv /Documents         # Toggle favorite
pc fv add "*.jpg"        # Add all matches to favorites
pc fv rm /Documents      # Remove from favorites

hd (hide): Hide or unhide files and folders

Manage hidden files and folders.

Without arguments, lists all hidden items. With a path argument, toggles the hidden status.

pc hd                  # List hidden items
pc hd /Private           # Toggle hidden
pc hd add "*.bak"        # Hide all matches
pc hd rm /Private        # Unhide

mk (mkdir): Create a new directory

Create a new directory in your cloud storage.

By default, the parent directory must already exist. Use -p to create parent directories as needed.

mn (mount): Mount cloud storage as a local drive

Mount your PigCloud storage as a local filesystem.

Run 'pc mn' to check mount status. Use 'pc mn start' to mount.

Sync mode (default): files are downloaded to a local folder and kept in sync bidirectionally. The folder is mapped as a drive letter (Windows) or symlink (Linux/macOS). Reads and writes are instant, with no network latency.

Virtual mode (--virtual): FUSE/WinFsp network-backed mount where files are fetched on demand. Lower disk usage but higher latency.

Requires unlocked encryption keys (run 'pc uk' first).

pc mn                        # Show mount status
pc mn start /Photos P:       # Sync /Photos to P: drive (fast, local files)
pc mn start /Photos P: --virtual  # Virtual mount (network-backed)
pc mn start                  # Sync root at default location
pc mn stop                   # Unmount and stop sync
pc mn files --tree           # Show synced files as a tree
pc mn files --issues         # Show files with sync problems
pc mn conflicts              # List files changed on both sides
pc mn resolve <path> -k both # Settle a conflict, keeping both copies

mn mv: Move the sync folder to a different location

Move the local sync folder to a new directory. A running mount daemon is stopped during the move; restart it afterward with 'pc mn start '.

Use -f to skip the confirmation prompt.

pc mn mv -d D:\PigCloud
pc mn mv -d /mnt/data/pigcloud -f

mn resolve: Settle a sync conflict

Settle a conflict for a file that changed both locally and remotely.

--keep local upload your local edit (the remote copy stays in version history) --keep remote discard your local edit and re-download the remote file --keep both keep the local edit as a "(conflict )" copy and re-download

pc mn resolve Docs/notes.txt -k both
pc mn resolve Docs/notes.txt -k remote -f

mn status: Show mount status and cache statistics

pc mn status
pc mn status /Photos  # Detail for one of several mounts
pc mn status --json   # machine-readable: {"running", "mounts": [...]}

mn stop: Stop a mount daemon and unmount

pc mn stop            # Stop the only mount
pc mn stop /Photos    # Stop one of several mounts
pc mn stop -a         # Stop every running mount

mv (move): Move or rename a file/directory

Move files or directories to a new location, or rename one.

If target is a directory, sources are moved into it. If target doesn't exist, a single source is renamed to target.

Accepts multiple sources and glob patterns; the last argument is the target, which must be an existing directory when moving more than one source.

Flags: -d, --dry-run Show what would be moved without actually moving

pc mv /draft.txt /final.txt        # Rename
pc mv a.txt b.txt /Archive/         # Move several into a directory
pc mv "*.log" /logs/                # Move by glob

rm (remove): Delete files or directories

Delete files or directories from your cloud storage.

Accepts multiple paths and glob patterns (* ? [], last path segment only).

By default, items are moved to the recycling bin and can be restored later. Items in the recycling bin are automatically deleted after 30 days.

Use --permanent to bypass the recycling bin and delete immediately.

Flags: -p, --permanent Permanently delete, bypassing the recycling bin -d, --dry-run Show what would be deleted without actually deleting -f, --force Skip confirmation prompt

pc rm /old-report.pdf              # Trash one file
pc rm a.txt b.txt c.txt            # Trash several
pc rm "*.tmp"                      # Trash everything matching a glob
pc rm "/logs/*.log" -p -f          # Permanently delete, no prompt

rs (restore): Restore an item from the recycling bin

Restore a file or directory from the recycling bin to its original location.

Accepts either a path ('/photo.jpg') or a 32-char hex node ID from 'pc tb ls'. Paths are resolved against the recycling bin; if multiple deleted items share the same name, you'll be asked which to restore.

pc rs /report.pdf                 # Restore by path (prompts on collision)
pc rs abc123def456...           # Restore by node ID from 'pc tb' output

tb (trash): Manage recycling bin

Show all items in the recycling bin.

Use 'rs ' to restore items or 'tb empty' to empty the bin.

pc tb                    # List trash contents
pc rs <node-id>          # Restore an item by node ID
pc tb empty              # Empty the bin

tc (touch): Create a new text file

Create a new text file in your cloud storage.

The first argument is either a full path (/Documents/notes.txt) or a bare name combined with an optional directory argument.

Content can be provided via --content flag or piped from stdin. With neither, an empty file is created. The file is encrypted client-side before upload (E2EE).

If no extension is given, .txt is appended automatically. Only text file types are allowed.

pc tc /Documents/notes.txt -c "Hello world"
pc tc notes.txt /Documents --content "Hello world"
echo "piped content" | pc tc log.txt /Logs
pc tc readme.md --content "# Title"

ul (upload): Upload a file or directory to cloud storage

Upload a local file or directory to your cloud storage.

If remote-path is not specified, uploads to the current working directory. If remote-path is a directory, the file keeps its original name. If a directory is given, all files are uploaded recursively.

Use '-' as the local path to read from stdin. Remote path is required when uploading from stdin.

pc ul report.pdf /Documents/     # Upload a file
pc ul ./my-folder /Backups/      # Upload a directory recursively
echo "hello" | pc ul - /hello.txt  # Upload from stdin

vh (versions): View and manage file version history

View, restore, or delete file version history.

Subcommands: vh List versions (default) vh rs Restore a specific version vh rm Delete a specific version

pc vh /report.pdf             # List versions
pc vh rs /report.pdf 42       # Restore version #42
pc vh rm 42                   # Delete version #42

vh dl: Download a specific version

pc vh dl /report.pdf 42 ./        # Download version #42
pc vh dl /report.pdf 42 old.pdf  # Download to specific file

vh prune: Delete all but the last N versions

pc vh prune /report.pdf --keep 3    # Keep last 3 versions
pc vh prune /report.pdf --keep 0    # Delete all versions

ch (chat): Send and receive E2EE chat messages

Encrypted chat with other PigCloud users (requires friendship).

When called with no arguments, lists conversations. With a username, shows recent messages. With a username and message, sends a message.

Use subcommands for more control:

ch List conversations ch Show messages ch "hello" Send a message (shorthand) ch send "message" Send (explicit, supports stdin pipe) ch send -f /file Share a file in chat ch rm Delete own message ch read Mark conversation as read ch unread Show unread counts

pc ch                            # List conversations
pc ch alice                      # Show messages with alice
pc ch alice "hello!"             # Send message to alice
echo "hi" | pc ch send alice     # Pipe message
pc ch send alice -f /Photos      # Share a file

fr (friend): Manage friends

pc fr                    # List your friends
pc fr add alice           # Send a friend request
pc fr accept alice        # Accept a friend request
pc fr decline alice       # Decline a friend request
pc fr rm alice            # Remove a friend
pc fr pending             # List pending friend requests

pl (link): Create and manage public links

Manage public links for files and directories.

With a path argument, shows existing link details (or "no link" if none exists). Use subcommands to create, update, or revoke links.

pc pl /report.pdf                         # Show link details
pc pl add /report.pdf                     # Create public link
pc pl add /report.pdf -P secret123        # Create with password
pc pl add /report.pdf --qr                # Print a scannable QR code
pc pl set /report.pdf --max-downloads 50  # Set download limit
pc pl rm /report.pdf                      # Revoke link

sr (share): Manage shared files and folders

Manage shared files and folders.

Without arguments, shows shares you've received (inbox). With a path, shows share recipients for that folder.

pc sr                            # Show shares you've received
pc sr /Shared                    # List recipients for /Shared
pc sr add alice /Shared          # Share with alice
pc sr rm /Shared alice           # Revoke alice's access
pc sr set /Shared -P secret      # Add password

sr accept: Accept a pending share

pc sr accept /Documents alice     # Accept a share from alice

sr add: Share a folder with a user

pc sr add alice /Documents    # Share with alice

sr inbox: List shares you've received from others

pc sr inbox                      # Show folders shared with you

sr set: Update share settings (permission, password, expiry)

Update settings on an existing share.

Update a recipient's permission level: sr set /Docs -u bob -p edit

Set or change share password/expiration: sr set /Docs --password secret123 sr set /Docs --expires "2026-12-31"

Remove password/expiration: sr set /Docs --remove-password sr set /Docs --remove-expiration

ac (activity): View activity log and notifications

View your recent activity and notifications.

pc ac                             # Show recent activity
pc ac -u                          # Show only unread notifications
pc ac -n 5                        # Show last 5 events
pc ac -t login,share_sent         # Filter by event type(s)
pc ac --since 2026-05-01          # Only events on or after a date
pc ac -f                          # Follow: print new events as they happen
pc ac -m all                      # Mark all as read
pc ac -m 42                       # Mark a specific event as read

ak (apikeys): View or revoke your API key

Show the status of your PigCloud API key, or revoke it.

PigCloud issues a single API key per account, the same key this CLI uses to authenticate. 'pc ak' shows its identifier, creation time, and last use.

'pc ak revoke' invalidates the key server-side so it stops working everywhere, then clears it from this machine. Create a new key in account settings on the web, then run 'pc li' to log back in.

pc ak                 # Show API key status
pc ak revoke          # Revoke the API key (logs this CLI out)

cf (config): Manage CLI configuration

View and modify CLI configuration settings.

Subcommands: list (ls) Show all configuration values get Get a specific configuration value set Set a configuration value

Valid configuration keys: api_key - Your API key for authentication endpoint - The PigCloud API endpoint URL cwd - Current working directory in cloud storage default_json - Always output JSON (true/false) default_quiet - Suppress non-essential output (true/false) no_color - Disable colored output (true/false) language - Server message language: en or de (default en)

cf get: Get a configuration value

Get a specific configuration value.

Valid keys: api_key, endpoint, cwd, default_json, default_quiet, no_color, language

cf set: Set a configuration value

Set a configuration value.

Valid keys: api_key, endpoint, cwd, default_json, default_quiet, no_color, language

pc cf set cwd /Documents          # Set a configuration value
pc cf set endpoint https://custom.example.com/api

cm (completion): Generate shell completion scripts

Generate shell completion scripts for PigCloud CLI.

To load completions:

Bash: $ source <(pigcloud completion bash)

To load completions for each session, add to your bashrc:

$ echo 'source <(pigcloud completion bash)' >> ~/.bashrc

Zsh: $ source <(pigcloud completion zsh)

To load completions for each session, add to your zshrc:

$ echo 'source <(pigcloud completion zsh)' >> ~/.zshrc

Fish: $ pigcloud completion fish | source

To load completions for each session:

$ pigcloud completion fish > ~/.config/fish/completions/pigcloud.fish

PowerShell: PS> pigcloud completion powershell | Out-String | Invoke-Expression

To load completions for each session, add to your profile:

PS> pigcloud completion powershell >> $PROFILE

dr (doctor): Diagnose the CLI setup

Check the local CLI setup: credentials, endpoint reachability, encryption keys, the key agent, mount backends, and the mount daemon. Exits non-zero when a check fails.

pc dr
pc dr --json

du (usage): Show storage breakdown by file type

Analyze storage usage broken down by file type.

Shows how much space each category (images, documents, videos, etc.) uses.

pc du    # Show storage breakdown

hi (welcome): Quickstart tour for the PigCloud CLI

Print a quickstart tour covering identity, common commands, and power features. Re-run anytime to refresh your memory.

pc hi                             # Friendly walkthrough of the CLI

hl (help): Show help for commands

Display help information about PigCloud CLI commands.

in (info): Show file or directory info

Display detailed information about a file or directory.

Shows size, dates, type, sharing status, and recipients for shared folders.

op (open): Open a file or folder in the browser

Open a file or folder in your default web browser.

If no path is specified, opens the current working directory.

pc op                             # Open current directory
pc op /                           # Open root directory
pc op /photos                     # Open the photos folder

rc (recents): List recently accessed files

Show files and folders you've recently opened or accessed.

pc rc              # List recent items
pc rc -n 10        # Show last 10 recent items

sh (shell): Start an interactive shell

Start an interactive shell for running multiple commands.

The shell shows your current working directory in the prompt. Type 'exit' or 'quit' to leave the shell. Press Ctrl+C to cancel the current line, Ctrl+D to exit.

Example session: / > ls / > cd Documents /Documents > ct readme.txt /Documents > exit

ss (sessions): Manage active sessions and devices

View and manage active login sessions and trusted devices.

Without arguments, lists all sessions and trusted devices. Use subcommands to revoke sessions or forget devices.

pc ss                          # List sessions and devices
pc ss revoke <session-id>      # Revoke a session
pc ss revoke-all               # Revoke all other sessions
pc ss devices                  # List trusted devices only
pc ss forget <device-id>       # Remove a trusted device

st (stats): Show storage statistics

Display storage usage statistics for your account.

vf (verify): Verify file signatures

Download every file under a path and run the strict-AND signature check (owner-key pin, or TEE signatures for sanitized files). Bytes are verified in memory and discarded; nothing is written to disk.

Reports tampered or unverifiable files and exits non-zero if any fail. Files uploaded before the signing rollout are reported as unsigned, not failed.

pc vf                # Verify everything
pc vf /Documents     # Verify one folder
pc vf -n 100         # Stop after 100 files

vr (version): Show version information

Display the version, commit hash, and build date of the CLI.

xp (export): Export all personal data

Download all personal data associated with your account as a JSON file.

Includes account info, file metadata, shares, activity log, and more. File contents are NOT included (encrypted at rest and too large).

pc xp                    # Export to pigcloud-export-YYYY-MM-DD.json
pc xp -o backup.json     # Export to a specific file

Configuration

Configuration is stored in:

  • Linux / macOS: ~/.config/pigcloud/config.json
  • Windows: %APPDATA%\pigcloud\config.json
{
  "api_key": "pc_live_abc123...",
  "endpoint": "https://pigcloud.de/cloud/actions.php",
  "cwd": "/Documents",
  "e2ee_public_key": "base64...",
  "e2ee_private_key": "base64...(encrypted)"
}
Key Description
api_key Your API key for authentication
endpoint The PigCloud API endpoint URL
cwd Current working directory in cloud storage
e2ee_* End-to-end encryption keys (fetched automatically on first use)

Manage config from the CLI:

pc cf list                        # Show all values
pc cf get cwd                     # Get a single value
pc cf set cwd /Documents          # Set a value

Troubleshooting

Problem Solution
Authentication required Run pc login to set your API key. Keys can be generated in the PigCloud web UI under Settings > API Keys.
Connection refused / timeouts Check your network and that the endpoint in pc cf get endpoint is reachable.
Upload fails for large files Files up to your plan's storage limit are supported. Check remaining space with pc st.
File not found on a path you can see in the web UI Your CLI working directory may differ. Run pc wd to check and pc cd / to reset.
Destructive command prompts Most destructive commands (rm, vh rm, pl rm, tb empty) prompt for confirmation. Use -f to skip, or -d (dry run) to preview.

Source, issues, and license

This repository is a source mirror of the CLI as shipped in each release, published for review and reproducible builds. It does not accept pull requests; bug reports and feature requests go to pigcloud-issues.

The source is available under the PolyForm Internal Use License 1.0.0: you may read, audit, and build it for your own internal or personal use. Any other use, including redistribution, needs written permission from PigTech. Official binaries are provided under the PigCloud Terms of Service.

About

Command-line client for PigCloud, the end-to-end encrypted cloud storage. Source mirror and releases.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages