{"_id":"@dskuldeep/terminal-chat","_rev":"2-303e0c7aaf3798a21cd66e165d66ace2","name":"@dskuldeep/terminal-chat","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@dskuldeep/terminal-chat","version":"1.0.0","keywords":["p2p","webrtc","chat","encrypted","terminal","collaboration","electron","desktop-app","end-to-end-encryption","peer-to-peer"],"author":{"name":"Kuldeep Paul kuldeep.paul08@gmail.com"},"license":"MIT","_id":"@dskuldeep/terminal-chat@1.0.0","maintainers":[{"name":"dskuldeep","email":"kuldeep.paul08@gmail.com"}],"homepage":"https://github.com/dskuldeep/terminal-chat#readme","bugs":{"url":"https://github.com/dskuldeep/terminal-chat/issues"},"bin":{"terminal-chat":"bin/terminal-chat.js"},"dist":{"shasum":"d728b2f0652bbd65d0531ba3d7692330b65fbe5e","tarball":"https://registry.npmjs.org/@dskuldeep/terminal-chat/-/terminal-chat-1.0.0.tgz","fileCount":13,"integrity":"sha512-65M8Q9hZ9E3a6D3wuPmsISxFvhIe54vZ/AvPPCz4TuxbOzoP3esJpDhap/14bMQ6Xf3oaziQvme2R93Hkau29Q==","signatures":[{"sig":"MEYCIQCy5sZES1qvirNHpVFNG4mRbrdfQ980wGq5VQaychxiSQIhAJUlErG54ukk2ICVzoZC+B+R7sqDR+JY15fxz49TgU67","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":336426},"main":"electron/main.js","build":{"mac":{"icon":"public/terminal.svg","target":["dmg","zip"],"category":"public.app-category.social-networking"},"win":{"icon":"public/terminal.svg","target":["nsis","portable"]},"nsis":{"oneClick":false,"createDesktopShortcut":true,"createStartMenuShortcut":true,"allowToChangeInstallationDirectory":true},"appId":"com.terminalchat.app","files":["dist/**/*","electron/**/*","public/**/*"],"linux":{"icon":"public/terminal.svg","target":["AppImage","deb","rpm"],"category":"Network"},"directories":{"output":"release"},"productName":"Terminal Chat"},"gitHead":"f1c132af2acc1d93d1b6008f9d1b62768a2d2318","scripts":{"dev":"vite","dist":"npm run electron:build","build":"tsc && vite build","start":"npm run electron:dev","preview":"vite preview","electron":"electron .","postinstall":"electron-builder install-app-deps","electron:dev":"concurrently \"cross-env BROWSER=none npm run dev\" \"wait-on http://localhost:3000 && cross-env ELECTRON_START_URL=http://localhost:3000 electron .\"","electron:build":"npm run build && electron-builder","electron:build:mac":"npm run build && electron-builder --mac","electron:build:win":"npm run build && electron-builder --win","electron:build:linux":"npm run build && electron-builder --linux"},"_npmUser":{"name":"dskuldeep","email":"kuldeep.paul08@gmail.com"},"repository":{"url":"git+https://github.com/dskuldeep/terminal-chat.git","type":"git"},"_npmVersion":"10.9.2","description":"End-to-end encrypted P2P collaborative platform with terminal aesthetics","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":"^18.3.1","nanoid":"^5.0.7","peerjs":"^1.5.4","wait-on":"^9.0.1","zustand":"^4.5.2","electron":"^38.4.0","cross-env":"^10.1.0","react-dom":"^18.3.1","tweetnacl":"^1.0.3","react-icons":"^5.3.0","concurrently":"^9.2.1","tweetnacl-util":"^0.15.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.3.4","typescript":"^5.5.3","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","electron-builder":"^26.0.12","@vitejs/plugin-react":"^4.3.1"},"_npmOperationalInternal":{"tmp":"tmp/terminal-chat_1.0.0_1761161577454_0.5752393770378714","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dskuldeep/terminal-chat","version":"1.0.1","description":"End-to-end encrypted P2P collaborative platform with terminal aesthetics","main":"electron/main.js","bin":{"terminal-chat":"bin/terminal-chat.js"},"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","electron":"electron .","electron:dev":"concurrently \"cross-env BROWSER=none npm run dev\" \"wait-on http://localhost:3000 && cross-env ELECTRON_START_URL=http://localhost:3000 electron .\"","electron:build":"npm run build && electron-builder","electron:build:mac":"npm run build && electron-builder --mac","electron:build:win":"npm run build && electron-builder --win","electron:build:linux":"npm run build && electron-builder --linux","start":"npm run electron:dev","dist":"npm run electron:build"},"keywords":["p2p","webrtc","chat","encrypted","terminal","collaboration","electron","desktop-app","end-to-end-encryption","peer-to-peer"],"author":{"name":"Kuldeep Paul kuldeep.paul08@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/dskuldeep/terminal-chat.git"},"bugs":{"url":"https://github.com/dskuldeep/terminal-chat/issues"},"homepage":"https://github.com/dskuldeep/terminal-chat#readme","dependencies":{"nanoid":"^5.0.7","peerjs":"^1.5.4","react":"^18.3.1","react-dom":"^18.3.1","react-icons":"^5.3.0","tweetnacl":"^1.0.3","tweetnacl-util":"^0.15.1","zustand":"^4.5.2","electron":"^38.4.0","concurrently":"^9.2.1","cross-env":"^10.1.0","wait-on":"^9.0.1"},"devDependencies":{"@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1","electron-builder":"^26.0.12","typescript":"^5.5.3","vite":"^5.3.4"},"build":{"appId":"com.terminalchat.app","productName":"Terminal Chat","directories":{"output":"release"},"files":["dist/**/*","electron/**/*","public/**/*"],"mac":{"category":"public.app-category.social-networking","icon":"public/terminal.svg","target":["dmg","zip"]},"win":{"icon":"public/terminal.svg","target":["nsis","portable"]},"linux":{"icon":"public/terminal.svg","category":"Network","target":["AppImage","deb","rpm"]},"nsis":{"oneClick":false,"allowToChangeInstallationDirectory":true,"createDesktopShortcut":true,"createStartMenuShortcut":true}},"_id":"@dskuldeep/terminal-chat@1.0.1","gitHead":"f1c132af2acc1d93d1b6008f9d1b62768a2d2318","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-bV5zbv6ZZoZ1RXcAcpDHr8ukMalcSM85aGXoHhDiaz9jIl7ZyfwrgoTXjo18AKDqJDzF2nRHfe6pVvapwuaDBA==","shasum":"783ae787992f58b17c9429419d9ed85223205be5","tarball":"https://registry.npmjs.org/@dskuldeep/terminal-chat/-/terminal-chat-1.0.1.tgz","fileCount":14,"unpackedSize":342626,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD6Bs/Zmwz/AU+Sd/v8w8xm/9Bv6Gv3WCynIcAeYmZ3vgIhAJ2JuYLWEDWCN+9IoXHw/bCFaJnLkh7DSw9vm5dP64A8"}]},"_npmUser":{"name":"dskuldeep","email":"kuldeep.paul08@gmail.com"},"directories":{},"maintainers":[{"name":"dskuldeep","email":"kuldeep.paul08@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/terminal-chat_1.0.1_1761161927949_0.463978694430764"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-22T19:32:57.367Z","modified":"2025-10-22T19:38:48.371Z","1.0.0":"2025-10-22T19:32:57.692Z","1.0.1":"2025-10-22T19:38:48.156Z"},"bugs":{"url":"https://github.com/dskuldeep/terminal-chat/issues"},"author":{"name":"Kuldeep Paul kuldeep.paul08@gmail.com"},"license":"MIT","homepage":"https://github.com/dskuldeep/terminal-chat#readme","keywords":["p2p","webrtc","chat","encrypted","terminal","collaboration","electron","desktop-app","end-to-end-encryption","peer-to-peer"],"repository":{"type":"git","url":"git+https://github.com/dskuldeep/terminal-chat.git"},"description":"End-to-end encrypted P2P collaborative platform with terminal aesthetics","maintainers":[{"name":"dskuldeep","email":"kuldeep.paul08@gmail.com"}],"readme":"# Terminal Chat 🔒\n\nA developer-focused, end-to-end encrypted P2P collaborative platform with terminal aesthetics. Built with WebRTC, PeerJS, React, and Electron.\n\n**Available as both a web app and desktop application!**\n\n## Features\n\n✅ **Fully Peer-to-Peer** - No central server for data transfer (uses Google's free STUN servers for connection establishment)\n✅ **End-to-End Encryption** - All messages encrypted using NaCl (TweetNaCl)\n✅ **Friend Request System** - Privacy-focused connection model\n✅ **Real-time Messaging** - Instant P2P communication\n✅ **File Sharing** - Send images, documents, videos, and more\n✅ **Desktop App** - Native Electron application for macOS, Windows, and Linux\n✅ **Terminal Aesthetic** - Clean, developer-friendly UI with monospace fonts\n✅ **Persistent Identity** - Your encryption keys are stored locally\n✅ **No Registration** - Just enter a username and start chatting\n\n## Quick Start\n\n### Option 1: Install from npm (Easiest)\n\n```bash\n# Install globally\nnpm install -g terminal-chat\n\n# Run the app\nterminal-chat\n```\n\nThat's it! The app will launch as a desktop application.\n\n### Option 2: Run from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/terminal-chat.git\ncd terminal-chat\n\n# Install dependencies\nnpm install\n\n# Run the desktop app\nnpm start\n```\n\n### Option 3: Web App\n\n```bash\n# Install dependencies\nnpm install\n\n# Start web server\nnpm run dev\n```\n\nVisit `http://localhost:3000` in your browser\n\n### Option 4: Build Installers\n\n```bash\n# Build for your platform\nnpm run dist\n\n# Or build for specific platforms\nnpm run electron:build:mac    # macOS\nnpm run electron:build:win    # Windows\nnpm run electron:build:linux  # Linux\n```\n\nInstallers will be in the `release/` directory.\n\n📖 **See [ELECTRON.md](ELECTRON.md) for detailed Electron documentation**\n📦 **See [NPM_PUBLISH.md](NPM_PUBLISH.md) for publishing to npm**\n\n## How It Works\n\n### 1. **Initialization**\nWhen you first open the app:\n- Enter a username\n- The app generates a unique encryption key pair (public/private keys)\n- Keys are stored in your browser's localStorage\n- You get assigned a unique Peer ID\n\n### 2. **Connecting to Others**\n- Share your Peer ID with someone you want to chat with\n- They enter your ID and click \"Connect\"\n- A P2P connection is established using WebRTC\n- Public keys are exchanged automatically\n\n### 3. **Encrypted Communication**\n- All messages are encrypted with the recipient's public key\n- Only the recipient can decrypt with their private key\n- Even if intercepted, messages are unreadable without the private key\n\n### 4. **File Sharing**\n- Files are converted to base64 and encrypted\n- Sent directly peer-to-peer (no server storage)\n- Recipient can download decrypted files\n\n## Architecture\n\n### Tech Stack\n- **React + TypeScript** - UI framework\n- **PeerJS** - WebRTC abstraction\n- **TweetNaCl** - Encryption library (NaCl/libsodium)\n- **Zustand** - State management\n- **Vite** - Build tool\n\n### Key Components\n\n**Encryption Layer** (`src/lib/encryption.ts`)\n- Asymmetric encryption for 1-to-1 messages (NaCl box)\n- Symmetric encryption for group messages (NaCl secretbox)\n- Key generation and storage\n\n**P2P Connection Manager** (`src/lib/peerConnection.ts`)\n- WebRTC connection management via PeerJS\n- Message routing and handling\n- Peer discovery and status tracking\n\n**State Management** (`src/store/chatStore.ts`)\n- Global application state\n- Message history\n- Peer connections\n- User settings\n\n**UI Components** (`src/components/`)\n- Terminal-styled interface\n- Chat interface\n- Peer list\n\n### Network Architecture\n\n```\n┌─────────────┐         ┌──────────────────┐         ┌─────────────┐\n│   User A    │────────▶│  PeerJS Signaling│◀────────│   User B    │\n│             │         │     (Cloud)      │         │             │\n└─────────────┘         └──────────────────┘         └─────────────┘\n      │                                                      │\n      │                  Google STUN Servers                │\n      │                  (NAT Traversal)                    │\n      │                                                      │\n      └──────────────────────────────────────────────────────┘\n                    Direct P2P Connection\n                    (Encrypted Data Transfer)\n```\n\n## Security\n\n### Encryption Details\n- **Algorithm**: NaCl (Networking and Cryptography library)\n- **Key Exchange**: Curve25519\n- **Encryption**: XSalsa20-Poly1305\n- **Key Size**: 256-bit keys\n- **Nonce**: Random 24-byte nonce per message\n\n### Privacy Features\n- No server sees your messages\n- No message history on servers\n- Keys never leave your device\n- All data transfer is P2P\n\n### Security Considerations\n⚠️ **Important Notes:**\n- Keys are stored in localStorage (browser storage)\n- If you clear browser data, you lose your keys\n- Share Peer IDs only with trusted contacts\n- This is a demonstration project - not audited for production use\n\n## Configuration\n\n### Using Custom STUN/TURN Servers\n\nEdit `src/lib/peerConnection.ts`:\n\n```typescript\nthis.peer = new Peer({\n  config: {\n    iceServers: [\n      { urls: 'stun:your-stun-server.com:19302' },\n      {\n        urls: 'turn:your-turn-server.com:3478',\n        username: 'user',\n        credential: 'pass'\n      }\n    ],\n  },\n});\n```\n\n### Using Custom PeerJS Server\n\n```typescript\nthis.peer = new Peer({\n  host: 'your-peerjs-server.com',\n  port: 9000,\n  path: '/myapp',\n  // ... rest of config\n});\n```\n\n## Development\n\n### Project Structure\n\n```\nterminal-chat/\n├── src/\n│   ├── components/       # React components\n│   │   ├── Terminal.tsx  # Main UI component\n│   │   └── Terminal.css  # Component styles\n│   ├── lib/             # Core libraries\n│   │   ├── encryption.ts       # E2E encryption\n│   │   └── peerConnection.ts   # P2P networking\n│   ├── store/           # State management\n│   │   └── chatStore.ts\n│   ├── types/           # TypeScript types\n│   │   └── index.ts\n│   ├── App.tsx          # Root component\n│   ├── main.tsx         # Entry point\n│   └── index.css        # Global styles\n├── index.html\n├── package.json\n├── tsconfig.json\n└── vite.config.ts\n```\n\n### Adding Features\n\n**Video Calls**: Extend `peerConnection.ts` to handle WebRTC media streams\n**Group Chat**: Implement symmetric key distribution for group encryption\n**Voice Notes**: Add audio recording and playback components\n\n## Roadmap\n\n- [ ] Video/audio calls\n- [ ] Group chats with shared symmetric keys\n- [ ] Voice messages\n- [ ] Desktop notifications\n- [ ] Connection QR codes\n- [ ] Message search\n- [ ] Dark/light theme toggle\n- [ ] Custom terminal color schemes\n\n## Limitations\n\n- Requires both users to be online simultaneously\n- No message history when offline\n- File size limited by browser memory\n- May require TURN servers for restrictive NATs (10-15% of connections)\n\n## Troubleshooting\n\n**Cannot connect to peer?**\n- Check both users are online\n- Verify Peer ID is correct\n- Check firewall/network settings\n- May need TURN server for strict NATs\n\n**Messages not sending?**\n- Ensure connection is established (green dot)\n- Check browser console for errors\n- Try reconnecting\n\n**Lost encryption keys?**\n- Keys are stored in localStorage\n- Clearing browser data will reset keys\n- Export/backup feature coming soon\n\n## Contributing\n\nThis is a demonstration project. Feel free to fork and extend!\n\n## License\n\nMIT\n\n## Credits\n\nBuilt with:\n- [PeerJS](https://peerjs.com/) - Simple peer-to-peer with WebRTC\n- [TweetNaCl](https://tweetnacl.js.org/) - Cryptographic library\n- [Zustand](https://github.com/pmndrs/zustand) - State management\n- [React](https://react.dev/) - UI framework\n\n---\n\n**Note**: This is an educational project demonstrating P2P encrypted communication. For production use, consider professional security audits and additional hardening.\n","readmeFilename":"README.md"}