PINGO is a secure, peer-to-peer (P2P) desktop messaging application built with modern technologies. It enables users to communicate directly with each other over a local network (LAN) or the internet with end-to-end encryption, file transfers, screen sharing, and instant messaging capabilities.
- π¬ Real-time Messaging - Send instant messages with automatic delivery confirmation
- π End-to-End Encryption - All communications encrypted using AES-GCM and X25519
- π File Transfer - Share files seamlessly between peers
- πΊ Screen Sharing - Real-time screen capture and sharing capabilities
- π LAN Discovery - Automatic peer discovery on local networks
- π Notifications - Real-time desktop notifications for new messages
- π₯οΈ Minimalist UI - Clean, intuitive React-based interface
- β‘ Cross-Platform Ready - Built with Tauri for Windows, Mac, and Linux support
- π Auto-Start - Optional auto-launch on system startup
- React 19 - Modern UI library
- Vite - Fast build tool and dev server
- React Router - Client-side routing
- React Icons - UI icon library
- CSS - Custom styling
- Rust - High-performance, memory-safe backend
- Tauri 2 - Desktop app framework
- Tokio - Async runtime
- SQLite - Local database with SQLite3
- WebRTC - Real-time communication protocol
- AES-GCM - Military-grade encryption
- X25519-Dalek - Elliptic Curve cryptography
Follow these steps in order to set up your development environment:
Node.js is required for frontend development and package management.
- Download from: π https://nodejs.org/ (LTS version - 18.0 or higher)
- Run the installer and follow the prompts
- Accept all defaults
- Restart your terminal/PowerShell
Verify installation:
node --version
npm --versionpnpm is a faster alternative to npm for managing dependencies (already configured for PINGO).
npm install -g pnpm@10.29.3Verify installation:
pnpm --version
# Should output: 10.29.3 or higherRust is the backend for Tauri - this is why apps are super lightweight π
Option A: Using winget (Recommended for Windows)
winget install --id Rustlang.RustupOption B: Manual Installation Visit: π https://rustup.rs
Then run the installer and select default options.
After installation, RESTART YOUR PC
Verify installation:
rustc -V
# Should output: rustc 1.70.0 or higher
cargo -V
# Should output: cargo 1.70.0 or higher- Download: π https://visualstudio.microsoft.com/visual-cpp-build-tools/
- Run the installer
- Select ONLY the following:
- β Desktop Development with C++
- β MSVC v143 (or latest available)
- β Windows 10/11 SDK
- Complete the installation
- Restart your PC after installation
Why this is needed: Tauri needs a C++ compiler to build native Rust components for Windows.
WebView2 is the runtime that Tauri uses for the UI (instead of Chromium - much lighter! π)
Download and install from: π https://developer.microsoft.com/en-us/microsoft-edge/webview2/
Why this is needed: Tauri uses the system WebView for rendering your React app, making the app size tiny (~50MB instead of 200+MB)
Now install the Tauri command-line tool:
npm install -g @tauri-apps/cliVerify installation:
tauri -v
# Should show version infoOpen PowerShell and verify all tools are installed:
# Check all critical tools
node --version # Node.js
npm --version # npm
pnpm --version # pnpm
rustc --version # Rust compiler
cargo --version # Cargo package manager
tauri -v # Tauri CLI
# All should show version numbers without errorsβ If all commands work, you're ready to proceed!
If you've already cloned the PINGO repository:
# Navigate to project directory
cd pingo
# Install all dependencies
pnpm install
# Verify Tauri installation
pnpm tauri --version
# Start development
pnpm devIf you're starting fresh, follow these complete steps:
npm create vite@latest my-pingo-app -- --template react
cd my-pingo-app# Install with pnpm (faster and recommended)
pnpm install
# Or with npm if you prefer
npm installpnpm add --save-dev @tauri-apps/cli @tauri-apps/api# Initialize Tauri configuration
npx tauri init
# This will create:
# - src-tauri/ directory (Rust backend)
# - tauri.conf.json (configuration file)
# - Cargo.toml (Rust dependencies)# This starts both frontend dev server and Tauri desktop app
npm run tauri devOr with pnpm:
pnpm tauri devWhat happens next:
- Rust backend compiles (first time takes 2-5 minutes β)
- Frontend dev server starts on http://localhost:1420
- Desktop app window opens with hot-reload enabled
- Make changes to see them instantly!
# Start development with hot reload
pnpm dev
pnpm tauri dev
# Build frontend assets only
pnpm build
# Build production desktop app (creates EXE/installer)
pnpm tauri build
# Check Tauri CLI version
pnpm tauri --version
# View Tauri configuration
pnpm tauri info
# Run in production mode locally
pnpm tauri dev --releaseIf pnpm tauri dev doesn't work:
# Clear cache and node_modules
rm -r node_modules
rm pnpm-lock.yaml
# Reinstall everything
pnpm install
# Try again
pnpm tauri devIf Rust compilation fails:
# Update Rust
rustup update
# Try building again
pnpm tauri devTo start developing with hot-reload enabled:
pnpm devThis command:
- Starts the Vite dev server (frontend on http://localhost:1420)
- Launches the Tauri desktop application
- Enables hot-reload for both frontend and backend changes
pingo/
βββ src/ # Frontend (React)
β βββ components/ # Reusable Vue components
β β βββ Aside.jsx
β β βββ Profile.jsx
β β βββ ImageLightbox.jsx
β β βββ NotificationCenter.jsx
β β βββ ScreenshotCrop.jsx
β β βββ UserAvatar.jsx
β βββ pages/ # Page components
β β βββ chat.jsx
β β βββ meetings.jsx
β β βββ notes.jsx
β β βββ settings.jsx
β βββ context/ # React Context API
β β βββ AppContext.jsx
β βββ hooks/ # Custom React hooks
β β βββ useApp.js
β βββ lib/ # Utility libraries
β β βββ api.js # Tauri API wrapper
β β βββ webrtc.js # WebRTC communication
β β βββ meeting_rtc_api.js # Meeting/call handling
β β βββ screenShare.js # Screen sharing
β β βββ notifications.js # Notification system
β β βββ avatarCache.js # Avatar caching
β β βββ cryptography.js
β βββ App.jsx # Root component
β βββ App.css # Global styles
β βββ main.jsx # Vite entry point
β
βββ src-tauri/ # Backend (Rust)
β βββ src/
β β βββ main.rs # Application entry point
β β βββ lib.rs # Library initialization
β β βββ commands.rs # Tauri IPC commands
β β βββ db.rs # SQLite database
β β βββ crypto.rs # Encryption & security
β β βββ webrtc.js # WebRTC implementation
β β βββ file_transfer.rs # File transfer protocol
β β βββ file_server.rs # File serving
β β βββ discovery.rs # LAN peer discovery
β β βββ signaling.rs # Signaling server
β β βββ screen_capture.rs # Screen capture functionality
β β βββ tray.rs # System tray integration
β βββ Cargo.toml # Rust dependencies
β βββ tauri.conf.json # Tauri configuration
β βββ build.rs # Build script
β
βββ public/ # Static assets
β βββ fonts/
βββ dist/ # Build output (generated)
βββ index.html # HTML entry point
βββ package.json # Node.js configuration
βββ pnpm-lock.yaml # Dependency lock file
βββ vite.config.js # Vite configuration
βββ README.md # This file
To create production builds for your platform:
# For Windows (creates installer)
pnpm tauri build
# On macOS
pnpm tauri build
# On Linux
pnpm tauri buildThe build artifacts will be created in:
- Windows:
src-tauri/target/release/bundle/nsis/(NSIS installer) - macOS:
src-tauri/target/release/bundle/macos/(DMG package) - Linux:
src-tauri/target/release/bundle/deb/(DEB package)
pnpm buildThis generates optimized frontend assets in the dist/ directory.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PINGO Application β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ€
β β β
β FRONTEND (React) β BACKEND (Rust/Tauri) β
β β β
β β’ UI Components β β’ IPC Commands Handler β
β β’ State Management β β’ Crypto/Encryption β
β β’ WebRTC Client β β’ Database (SQLite) β
β β’ Notifications β β’ File Transfer Protocol β
β β’ File Handling β β’ Screen Capture β
β β β’ LAN Discovery β
β β β’ Signaling Server β
β β β’ System Tray β
β β β’ Auto-start β
ββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββ
β
IPC Bridge (Tauri)
- User Action β React component captures user interaction
- Message Processing β Data sent to Rust backend via Tauri IPC
- Encryption β Message encrypted using AES-GCM with X25519 keys
- Network Transmission β Encrypted data sent via WebRTC or HTTP
- Peer Reception β Remote peer receives encrypted data
- Decryption β Data decrypted using exchange keys
- Database Storage β Message saved to local SQLite database
- UI Update β React state updated, component re-renders
- Uses network interface scanning
- Broadcasts presence on local network
- Discovers other PINGO peers
- Key Exchange: X25519 elliptic curve
- Message Encryption: AES-GCM-256
- Ensures only sender and receiver can read messages
- Peer-to-peer data channel
- Video/audio streaming capabilities
- Falls back to signaling server if needed
- Chunks large files for transfer
- Checksum verification
- Resume capability for interrupted transfers
-
Frontend Changes
# Edit files in src/ # Changes auto-reload in dev mode
-
Backend Changes
# Edit files in src-tauri/src/ # The app will automatically rebuild and reload
-
Configuration Changes
# Edit src-tauri/tauri.conf.json # Restart dev server: Ctrl+C then pnpm dev
# Unit tests (when available)
cargo test --manifest-path src-tauri/Cargo.toml
# Frontend tests (when available)
pnpm test- Frontend: Open DevTools in the running app (F12 or Ctrl+Shift+I)
- Backend: Check console output in terminal where
pnpm devis running - Logs: Check
src-tauri/target/debug/for build artifacts
-
Update Version
Edit package.json and src-tauri/Cargo.toml -
Build Release
pnpm tauri build --release
-
Code Signing (Optional but recommended)
- Windows: Code sign with Microsoft Authenticode
- macOS: Sign with Apple Developer Certificate
- Linux: GPG sign
-
Distribution
- Create GitHub releases
- Upload build artifacts
- Provide installation instructions
# Reinstall Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Reload environment
$PROFILE # On PowerShell, or source ~/.bashrc on Linux- Download and install from: https://visualstudio.microsoft.com/visual-cpp-build-tools/
- Or install Visual Studio Community with C++ workload
# Install pnpm globally
npm install -g pnpm@10.29.3
# Verify
pnpm --version# Clear cache and reinstall
pnpm install
rm -r src-tauri/target
pnpm dev# Ensure only one instance is running
# Kill all previous instances of Pingo
# Then restart- Check firewall settings
- Ensure both peers are on same network or have valid relay servers configured
- Check signaling server connectivity
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is FREE TO USE
- Development Team: PINGO Contributors
For issues, feature requests, or feedback:
- Open an issue on GitHub
- Check existing issues for solutions
- Read the Contributing Guide
- Cross-platform support (macOS, Linux)
- Message search functionality
- User profiles and settings
- Message reactions and emojis
- Video/voice calls
- Future advanced features
Made with β€οΈ by the VBMCODER