{"id":27152663,"url":"https://github.com/anoncam/dedpaste","last_synced_at":"2026-02-28T03:51:45.378Z","repository":{"id":280921864,"uuid":"943618032","full_name":"anoncam/dedpaste","owner":"anoncam","description":"terminal pastebin with e2e encryption.","archived":false,"fork":false,"pushed_at":"2025-11-27T20:15:15.000Z","size":53003,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-30T11:35:37.550Z","etag":null,"topics":["cli","cloudflare","cloudflare-workers","e2ee","pastebin","r2"],"latest_commit_sha":null,"homepage":"https://paste.d3d.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anoncam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-03-06T02:05:28.000Z","updated_at":"2025-11-27T20:13:22.000Z","dependencies_parsed_at":"2025-09-19T22:04:10.885Z","dependency_job_id":"f3a82274-1c72-49de-9c0e-85bf5272144e","html_url":"https://github.com/anoncam/dedpaste","commit_stats":null,"previous_names":["anoncam/dedpaste"],"tags_count":57,"template":false,"template_full_name":null,"purl":"pkg:github/anoncam/dedpaste","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoncam%2Fdedpaste","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoncam%2Fdedpaste/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoncam%2Fdedpaste/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoncam%2Fdedpaste/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anoncam","download_url":"https://codeload.github.com/anoncam/dedpaste/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoncam%2Fdedpaste/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28698374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T17:25:48.045Z","status":"ssl_error","status_checked_at":"2026-01-23T17:25:47.153Z","response_time":59,"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","cloudflare","cloudflare-workers","e2ee","pastebin","r2"],"created_at":"2025-04-08T15:53:23.169Z","updated_at":"2026-02-28T03:51:45.371Z","avatar_url":"https://github.com/anoncam.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DedPaste 🔐\n\nA secure, privacy-focused pastebin CLI application powered by Cloudflare Workers and R2 storage with advanced encryption capabilities and a modern Material-UI web interface.\n\n## ✨ Features\n\n### 🔒 Security \u0026 Privacy\n- **End-to-end encryption** - All encryption happens client-side\n- **One-time pastes** - Self-destructing content after first view\n- **PGP/GPG support** - Full integration with existing PGP infrastructure\n- **RSA key pairs** - Support for PEM format keys\n- **Friend-to-friend encryption** - Manage keys for trusted contacts\n- **Keybase integration** - Import keys with proof verification\n- **GitHub integration** - Fetch GPG keys directly from GitHub profiles\n- **Recipient groups** - Create groups for easy multi-recipient encryption\n- **Smart prefix shortcuts** - Use `gh:` and `kb:` for quick GitHub/Keybase access\n- **Auto-PGP detection** - No more manual `--pgp` flags - encryption type auto-detected\n- **Zero-knowledge architecture** - Server never sees unencrypted content\n\n### 🛠️ Developer Features\n- **CLI-first design** - Powerful command-line interface\n- **Script integration** - Easy to use in automation workflows\n- **Binary file support** - Upload any file type with proper MIME detection\n- **Interactive key management** - Enhanced mode for complex operations\n- **Multiple encryption methods** - RSA, PGP, symmetric encryption\n- **Markdown rendering** - Automatic syntax highlighting for code\n\n### 🎨 User Interface\n- **Modern Material-UI design** - Clean, responsive web interface\n- **Dark theme** - Easy on the eyes for extended use\n- **Mobile-friendly** - Works great on all devices\n- **Syntax highlighting** - Support for 15+ programming languages\n- **Copy-to-clipboard** - One-click copying of content\n\n### 📦 Infrastructure\n- **Cloudflare Workers** - Global edge deployment\n- **R2 Storage** - Cost-effective object storage\n- **SBOM included** - Software Bill of Materials with each release\n- **TypeScript** - Fully typed for better developer experience\n\n## Installation\n\n### Using npm (recommended)\n\n```bash\nnpm install -g dedpaste\n```\n\nThis will install the CLI globally, allowing you to use the `dedpaste` command from anywhere.\n\n### From source\n\n1. Clone this repository\n2. Install dependencies:\n   ```bash\n   npm install\n   ```\n3. Link for local development:\n   ```bash\n   npm link\n   ```\n\n### Shell Auto-Completion\n\nDedPaste includes built-in commands to set up shell completion for Bash and Zsh:\n\n#### For Bash\n\n```bash\n# Generate the completion script\ndedpaste completion --bash \u003e ~/.dedpaste-completion.bash\n\n# Add this to your ~/.bashrc\necho 'source ~/.dedpaste-completion.bash' \u003e\u003e ~/.bashrc\n\n# Apply changes to current session\nsource ~/.bashrc\n```\n\n#### For Zsh\n\n```bash\n# Generate the completion script\ndedpaste completion --zsh \u003e ~/.dedpaste-completion.zsh\n\n# Add this to your ~/.zshrc\necho 'source ~/.dedpaste-completion.zsh' \u003e\u003e ~/.zshrc\n\n# Apply changes to current session\nsource ~/.zshrc\n```\n\n## 🚀 Quick Start\n\n```bash\n# Install globally\nnpm install -g dedpaste\n\n# Create your first paste\necho \"Hello, World!\" | dedpaste\n\n# Generate encryption keys (one-time setup)\ndedpaste keys --gen-key\n\n# Create an encrypted paste\necho \"Secret message\" | dedpaste send --encrypt\n\n# Create a self-destructing paste\necho \"Confidential\" | dedpaste send --one-time\n```\n\n## 📖 Usage\n\nDedPaste CLI has six main command modes:\n\n1. **Default mode** - Basic paste operations (no subcommand)\n2. **`keys`** - Key management operations\n3. **`keys:enhanced`** - Enhanced interactive key management (recommended)\n4. **`send`** - Create and send encrypted pastes\n5. **`get`** - Retrieve and decrypt pastes\n6. **`completion`** - Generate shell auto-completion scripts\n\n### Basic Usage (Default Command)\n\n```bash\n# Post content from stdin\necho \"Hello, world!\" | dedpaste\n\n# Post content from a file\ndedpaste \u003c file.txt\n\n# Post with a specific file (using --file flag)\ndedpaste --file path/to/file.txt\n\n# Post one-time content (deleted after first view)\necho \"Secret message\" | dedpaste --temp\n\n# Post with custom content type\ndedpaste --type application/json \u003c data.json\n\n# Output only the URL (useful for scripts)\necho \"content\" | dedpaste --output\n\n# Post encrypted content (for yourself)\necho \"Secret data\" | dedpaste --encrypt\n```\n\n### Key Management (`keys` and `keys:enhanced` Commands)\n\n```bash\n# Generate a new key pair (required before encryption)\ndedpaste keys --gen-key\n\n# List all your keys (yours and friends')\ndedpaste keys --list\n\n# Add a friend's public key\ndedpaste keys --add-friend alice --key-file alice_public.pem\n\n# Export your public key to share with friends\ndedpaste keys --export\n\n# Output your public key to the console\ndedpaste keys --my-key\n\n# Remove a friend's key\ndedpaste keys --remove alice\n\n# Interactive key management (menu-driven interface)\ndedpaste keys --interactive\n\n# Enhanced interactive key management (recommended - full TUI interface)\ndedpaste keys:enhanced\n```\n\n### PGP Integration\n\n```bash\n# Add a PGP key from keyservers by email\ndedpaste keys --pgp-key user@example.com\n\n# Add a PGP key from keyservers by key ID\ndedpaste keys --pgp-key 0x1234ABCD\n\n# Add with custom name\ndedpaste keys --pgp-key user@example.com --pgp-name alice\n\n# Send with native PGP encryption (IMPORTANT: requires --for parameter)\necho \"secret\" | dedpaste send --encrypt --for user@example.com --pgp\n\n# Decrypt a paste with PGP key\ndedpaste get https://paste.d3d.dev/e/AbCdEfGh --pgp-key-file key.pgp\n```\n\n### Keybase Integration\n\n```bash\n# Add a Keybase user's key\ndedpaste keys --keybase username\n\n# Add with custom name\ndedpaste keys --keybase username --keybase-name bob\n\n# Skip verification of proofs\ndedpaste keys --keybase username --no-verify\n\n# Send to a Keybase user (traditional syntax)\necho \"secret\" | dedpaste send --encrypt --for keybase:username\n\n# Send to a Keybase user (NEW: short syntax - auto-detects PGP!)\necho \"secret\" | dedpaste send --encrypt --for kb:username\n```\n\n### GitHub Integration\n\n```bash\n# Add a GitHub user's GPG key\ndedpaste keys --github torvalds\n\n# Add with custom name\ndedpaste keys --github torvalds --github-name linus\n\n# Send to a GitHub user (traditional syntax)\necho \"secret\" | dedpaste send --encrypt --for github:torvalds\n\n# Send to a GitHub user (NEW: short syntax - auto-detects PGP!)\necho \"secret\" | dedpaste send --encrypt --for gh:torvalds\n```\n\n### Recipient Groups (NEW!)\n\n```bash\n# Create a group of recipients\ndedpaste keys --group-create team gh:alice kb:bob charlie@example.com\n\n# Add members to an existing group\ndedpaste keys --group-add team gh:dave\n\n# Remove members from a group\ndedpaste keys --group-remove team kb:bob\n\n# List all groups\ndedpaste keys --group-list\n\n# Delete a group\ndedpaste keys --group-delete team\n\n# Encrypt for an entire group\necho \"Team announcement\" | dedpaste send --encrypt --for team\n```\n\n### Sending Encrypted Pastes (`send` Command)\n\n```bash\n# List available friends for encryption\ndedpaste send --list-friends\n\n# Send an encrypted message to a friend\necho \"Secret message for Alice\" | dedpaste send --encrypt --for alice\n\n# NEW: Send to GitHub/Keybase users with short prefixes\necho \"Quick message\" | dedpaste send --encrypt --for gh:torvalds\necho \"Quick message\" | dedpaste send --encrypt --for kb:username\n\n# NEW: Send to multiple recipients (space-separated)\necho \"Team update\" | dedpaste send --encrypt --for gh:alice kb:bob charlie@example.com\n\n# NEW: Send to a group\necho \"Group message\" | dedpaste send --encrypt --for team\n\n# Send an encrypted one-time message to a friend\necho \"Secret one-time message\" | dedpaste send --encrypt --for alice --temp\n\n# Send an encrypted file to a friend\ndedpaste send --encrypt --for alice --file secret.txt\n\n# Interactive mode for sending encrypted messages\ndedpaste send --interactive --encrypt\n```\n\n### Retrieving Pastes (`get` Command)\n\n```bash\n# Get and display a regular paste\ndedpaste get https://paste.d3d.dev/AbCdEfGh\n\n# Get and decrypt an encrypted paste\ndedpaste get https://paste.d3d.dev/e/AbCdEfGh\n\n# Get a paste using just the ID\ndedpaste get AbCdEfGh\n\n# Get an encrypted paste using a specific private key file\ndedpaste get https://paste.d3d.dev/e/AbCdEfGh --key-file /path/to/private.pem\n```\n\n## Documentation\n\nDocumentation for DedPaste is organized in the `docs/` directory:\n\n- [Contributing Guide](docs/CONTRIBUTING.md) - How to contribute to the project\n- [Release Process](docs/RELEASE-PROCESS.md) - How releases are managed\n- [Testing Guide](docs/TESTING.md) - How to test the application\n- [Encryption Implementation Plan](docs/encryption-implementation-plan.md) - Details on the encryption design\n- [Encryption Implementation Summary](docs/encryption-implementation-summary.md) - Overview of encryption features\n- [Shell Completion](docs/completion/README.md) - Documentation for shell completion scripts\n\n## Troubleshooting\n\nFor detailed troubleshooting information, please see the [Troubleshooting Guide](docs/troubleshooting.md).\n\n### Common Errors and Solutions\n\n#### PGP Encryption Issues\n\n- **Error**: `PGP encryption requires a recipient, use --for \u003crecipient\u003e to specify one`\n  **Solution**: Always include a recipient when using PGP encryption:\n  ```bash\n  echo \"secret\" | dedpaste send --encrypt --for user@example.com --pgp\n  ```\n\n- **Error**: `Failed to find PGP key for recipient`\n  **Solution**: Make sure you've added the recipient's PGP key first:\n  ```bash\n  dedpaste keys --pgp-key user@example.com\n  ```\n\n## Security Considerations\n\n- **End-to-End Encryption**: All encryption happens client-side; the server never sees your unencrypted content\n- **Key Storage**: Keep your private keys secure; if lost, encrypted content cannot be recovered\n- **One-Time Pastes**: Use `--temp` for sensitive content to ensure it's deleted after viewing\n- **Key Verification**: Always verify key fingerprints for critical communications\n- **Passphrase Protection**: Consider using passphrase-protected keys for additional security\n\n## Configuration\n\nYou can configure the CLI using environment variables:\n\n- `DEDPASTE_API_URL`: Set the URL of your deployed Cloudflare Worker (default is https://paste.d3d.dev)\n  ```bash\n  export DEDPASTE_API_URL=\"https://your-worker.example.com\"\n  ```\n\n\n## 🎨 UI Development\n\nThe web interface uses **Material-UI (MUI)** design system for a modern, responsive experience. The UI features:\n\n- **Dark theme** optimized for readability\n- **Responsive design** that works on all devices\n- **Interactive components** with smooth animations\n- **Syntax highlighting** for code and markdown\n- **Accessibility** built into every component\n\n### Development\n\n```bash\n# Start the development server\nnpm run dev\n\n# Build for production\nnpm run build\n\n# Deploy to Cloudflare Workers\nnpm run deploy\n```\n\n## 🔧 Technical Stack\n\n- **Backend**: Cloudflare Workers (Edge computing)\n- **Storage**: Cloudflare R2 (S3-compatible object storage)\n- **UI Framework**: Material-UI with custom theming\n- **Languages**: TypeScript for type safety\n- **Encryption**: RSA, PGP/GPG, AES-256\n- **CLI**: Node.js with Commander.js\n\n## 📦 Releases\n\nEach release includes:\n- Pre-built CLI binaries\n- Comprehensive Software Bill of Materials (SBOM)\n- Detailed release notes\n- NPM package with provenance\n- **Cryptographic attestations** for supply chain security with immutable releases\n\n### 🔐 Verifying Releases\n\nAll releases include signed build provenance attestations and are immutable (preventing modification or deletion of artifacts and tags). Release immutability is enabled in this repository's settings. \n\nYou can verify the authenticity and integrity of releases using the GitHub CLI:\n\n```bash\n# Install GitHub CLI if you haven't already\n# See: https://cli.github.com/\n\n# Verify a release artifact\ngh attestation verify \u003cartifact-path\u003e --owner anoncam --repo dedpaste\n\n# Example: Verify the SBOM\ngh attestation verify bom.json --owner anoncam --repo dedpaste\n```\n\nThis ensures that:\n- Release artifacts have not been tampered with\n- Artifacts were built by the official GitHub Actions workflow\n- The build is traceable to specific commits and workflows\n\nView all releases: [GitHub Releases](https://github.com/anoncam/dedpaste/releases)\n\n## 🤝 Contributing\n\nContributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## 📄 License\n\nMIT License - see [LICENSE](LICENSE) file for details\n\n## 🙏 Acknowledgments\n\n- Cloudflare Workers team for the excellent edge platform\n- Material-UI team for the beautiful component library\n- The open-source community for various encryption libraries\n\n---\n\n\u003cp align=\"center\"\u003e\n  Made with ❤️ for privacy enthusiasts\n  \u003cbr\u003e\n  \u003ca href=\"https://paste.d3d.dev\"\u003epaste.d3d.dev\u003c/a\u003e • \u003ca href=\"https://github.com/anoncam/dedpaste\"\u003eGitHub\u003c/a\u003e • \u003ca href=\"https://www.npmjs.com/package/dedpaste\"\u003eNPM\u003c/a\u003e\n\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanoncam%2Fdedpaste","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanoncam%2Fdedpaste","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanoncam%2Fdedpaste/lists"}