Zip and share files from the terminal — no browser needed.
Project description
shrip
Zip and share files from the terminal — no browser needed.
shrip bundles files and folders into a compressed archive and uploads it to gofile.io, giving you a temporary public download link instantly. No accounts, no configuration, no context-switching.
Installation
Ubuntu / Debian:
sudo apt install pipx
pipx ensurepath # adds ~/.local/bin to PATH (one-time setup, restart terminal after)
pipx install shrip
macOS:
brew install pipx
pipx ensurepath
pipx install shrip
Windows:
pip install pipx
pipx ensurepath
pipx install shrip
With pip (any OS):
pip install shrip
On Ubuntu 23.04+ and other modern distros,
pip installis blocked by default to protect the system Python. Usepipxinstead — it installsshripin an isolated environment and adds it to your PATH automatically.
From GitHub:
pip install git+https://github.com/nbfrodri/shrip.git
Requires Python 3.9 or higher. Works on Windows, macOS, and Linux.
Updating
# If installed with pipx
pipx upgrade shrip
# If installed with pip
pip install --upgrade shrip
Uninstalling
# If installed with pipx
pipx uninstall shrip
# If installed with pip
pip uninstall shrip
Usage
# Share a single file
shrip report.pdf
# Share multiple files and folders
shrip ./src/ README.md logo.png --name project-handover
# Custom archive name
shrip ./build/ -n release-v2
# Copy the link to clipboard
shrip file.txt --copy
# Open in browser after upload
shrip file.txt --open
# Skip compression (faster for ISOs, videos, archives, etc.)
shrip ubuntu.iso --fast
# Upload to a specific region (eu or na)
shrip bigfile.tar.gz --zone na
# Combine flags
shrip ./dist/ -n release -c -o
Exclude patterns
Skip files and directories by glob pattern:
# Skip a single pattern
shrip ./my-project/ --exclude 'node_modules'
# Multiple patterns
shrip ./my-project/ -e 'node_modules' -e '*.log' -e '.env'
# .gitignore patterns are automatically respected
# Use .shripignore for additional patterns (same syntax)
echo '*.log' >> .shripignore
shrip ./my-project/
# Skip .shripignore and .gitignore processing
shrip ./my-project/ --no-ignore
Preview before uploading
# See what would be archived without uploading
shrip ./my-project/ --dry-run
# Combine with exclude to fine-tune
shrip ./my-project/ --dry-run -e 'node_modules' -e '.git'
Encryption
Protect archives with AES-256 encryption:
# Interactive password prompt
shrip secrets.txt --password
# Read password from a file
shrip secrets.txt --password-file keyfile.txt
# Read password from environment variable
SHRIP_PASSWORD=secret shrip secrets.txt --password-env
Multiple upload services
# Default (gofile.io — no size limit, ~10 days retention)
shrip file.txt
# Upload to transfer.sh (14-day retention)
shrip file.txt --service transfer
# Upload to 0x0.st (512 MB limit, 30 days–1 year retention)
shrip file.txt --service 0x0
# List available services
shrip --list-services
JSON output
Machine-readable output for scripting and CI/CD:
# JSON output
shrip file.txt --json
# Use with jq
URL=$(shrip file.txt --json | jq -r '.url')
# JSON dry run
shrip ./project/ --json --dry-run
Example output:
Compressing 3 items (4.8 MB) into project-handover.zip...
⠋ Compressing ████████████████████████████████████ 100% 4.8/4.8 MB
Compressed to 1.2 MB (75% smaller). Uploading...
⠋ Uploading ████████████████████████████████████ 1.2/1.2 MB 850.3 kB/s
╭──────────── Ready to share ────────────╮
│ │
│ https://gofile.io/d/AbCd123 │
│ │
│ SHA256: a1b2c3... │
│ MD5: d4e5f6... (gofile) │
│ │
╰──────── Link copied! ─────────────────╯
(Files are automatically deleted after a period of inactivity.)
Options
| Flag | Short | Description | Default |
|---|---|---|---|
--name |
-n |
Custom archive name (without .zip) |
shrip_archive |
--copy |
-c |
Copy the download link to clipboard | off |
--open |
-o |
Open the download link in your browser | off |
--fast |
-f |
Skip compression (faster for pre-compressed files) | off |
--zone |
-z |
Upload region: eu (Europe) or na (North America) |
auto |
--exclude |
-e |
Glob pattern to exclude (repeatable) | none |
--dry-run |
Preview what would be archived | off | |
--json |
Output results as JSON | off | |
--password |
-p |
Encrypt archive with AES-256 (interactive prompt) | off |
--password-file |
Read encryption password from a file | none | |
--password-env |
Read password from SHRIP_PASSWORD env var |
off | |
--service |
-s |
Upload service: gofile, transfer, or 0x0 |
gofile |
--list-services |
List available upload services and exit | ||
--no-ignore |
Skip .shripignore and .gitignore processing |
off | |
--version |
-v |
Show version and exit | |
--help |
Show usage help |
Environment Variables
| Variable | Description | Example |
|---|---|---|
SHRIP_NAME |
Default archive name | SHRIP_NAME=build |
SHRIP_FAST |
Enable fast mode | SHRIP_FAST=1 |
SHRIP_COPY |
Auto-copy link to clipboard | SHRIP_COPY=1 |
SHRIP_ZONE |
Default upload zone | SHRIP_ZONE=eu |
SHRIP_SERVICE |
Default upload service | SHRIP_SERVICE=transfer |
SHRIP_EXCLUDE |
Comma-separated exclude patterns | SHRIP_EXCLUDE=*.log,.git |
SHRIP_PASSWORD |
Encryption password (with --password-env) |
SHRIP_PASSWORD=secret |
NO_COLOR |
Disable colored output | NO_COLOR=1 |
Exit Codes
| Code | Meaning |
|---|---|
0 |
Success |
1 |
Error (invalid path, upload failure, bad arguments) |
130 |
Interrupted (Ctrl+C) |
Upload Services
| Service | Max Size | Retention | Auth |
|---|---|---|---|
| gofile.io (default) | Unlimited | ~10 days inactive | No |
| transfer.sh | ~10 GB | 14 days | No |
| 0x0.st | 512 MB | 30 days – 1 year | No |
How It Works
- Validates that all provided paths exist.
- Checks disk space in the temp directory and warns if low.
- Compresses everything into a temporary
.ziparchive — directories are walked recursively, preserving folder structure. Already-compressed formats (.iso,.mp4,.zip,.jpg, etc.) are stored without compression to save time. Files matching--excludepatterns,.shripignore, and.gitignorerules are skipped. - Uploads the archive to the selected service (anonymous, no account needed). Supports streaming upload for large files with minimal memory usage.
- Prints the download URL with SHA256/MD5 checksums (and copies/opens it if requested).
- Deletes the temporary zip file automatically — even if the upload fails or you hit Ctrl+C.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shrip-1.0.1.tar.gz.
File metadata
- Download URL: shrip-1.0.1.tar.gz
- Upload date:
- Size: 33.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66586f8cbfec3a3f05b343905e6bed596ed02b115fd6a42228fab32c4b7894f3
|
|
| MD5 |
ffd83ed8ea39d9103216b9fd0c373137
|
|
| BLAKE2b-256 |
42f097fdb74f11b195caa6cd9affe49403c9fe3321c41deec8af2b2558959df2
|
Provenance
The following attestation bundles were made for shrip-1.0.1.tar.gz:
Publisher:
publish.yml on nbfrodri/shrip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shrip-1.0.1.tar.gz -
Subject digest:
66586f8cbfec3a3f05b343905e6bed596ed02b115fd6a42228fab32c4b7894f3 - Sigstore transparency entry: 1069337711
- Sigstore integration time:
-
Permalink:
nbfrodri/shrip@1345b031e957a7df05cfc21d4478fe143b6bedc6 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/nbfrodri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1345b031e957a7df05cfc21d4478fe143b6bedc6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file shrip-1.0.1-py3-none-any.whl.
File metadata
- Download URL: shrip-1.0.1-py3-none-any.whl
- Upload date:
- Size: 24.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f1e5a781facce07cad45563d251f1843216e844f1ade716d31164f8cd2b94d0
|
|
| MD5 |
a47a86a0cbd323119099e7d1902f1f39
|
|
| BLAKE2b-256 |
7920e83132f3e37ee608bf81d21e231c4d85c68821791904b896b1a2d3a95f51
|
Provenance
The following attestation bundles were made for shrip-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on nbfrodri/shrip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shrip-1.0.1-py3-none-any.whl -
Subject digest:
2f1e5a781facce07cad45563d251f1843216e844f1ade716d31164f8cd2b94d0 - Sigstore transparency entry: 1069337793
- Sigstore integration time:
-
Permalink:
nbfrodri/shrip@1345b031e957a7df05cfc21d4478fe143b6bedc6 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/nbfrodri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1345b031e957a7df05cfc21d4478fe143b6bedc6 -
Trigger Event:
push
-
Statement type: