Gossip is a privacy-first, secure messaging application built with React, TypeScript, and Vite. It provides end-to-end encrypted communication with local data storage, ensuring your conversations remain private and secure.
- 🔐 Privacy First: All messages are encrypted and stored locally on your device
- 💬 Secure Messaging: End-to-end encryption for all communications
- 📱 Progressive Web App: Install as a native app on any device
- 🏠 Local Storage: Your data never leaves your device
- 👤 User Profiles: Create and manage your secure identity
- 🎨 Modern UI: Clean, responsive interface built with Tailwind CSS
- Frontend: React 19 + TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- State Management: Zustand
- Database: Dexie (IndexedDB wrapper)
- PWA: Vite PWA Plugin
- Blockchain: Massa Web3 SDK
- Node.js (version specified in
.nvmrc) - npm or yarn
- Clone the repository:
git clone <repository-url>
cd gossip- Install dependencies:
npm install- Start the development server:
npm run dev- Open your browser and navigate to
http://localhost:5173
npm run buildThe built files will be in the dist directory, ready for deployment.
The React app configures the SDK at startup via configureSdk to inject the
runtime adapters (stores, db, preferences, notification handler). It also
sets the protocol base URL via setProtocolBaseUrl.
WASM bindings are generated via the root script:
npm run wasm:buildOutput is written to gossip-sdk/src/assets/generated/wasm and consumed by
both the SDK and the React app. The React app now imports WASM wrappers from
gossip-sdk/src/wasm.
To configure the message transfer protocol setting:
mv .env.example .envSet VITE_GOSSIP_API_URL to the API base URL used for message transfer.
The SDK defaults to https://api.usegossip.com and the app overrides it at
runtime via setProtocolBaseUrl during startup.
src/
├── components/ # React components
│ ├── ErrorBoundary.tsx
│ ├── DiscussionList.tsx
│ ├── OnboardingFlow.tsx
│ └── AccountCreation.tsx
├── stores/ # State management
│ └── accountStore.tsx
├── db.ts # Database schema and operations
├── App.tsx # Main application component
└── main.tsx # Application entry point (configures SDK adapters)
Gossip uses Dexie (IndexedDB) for local data storage with the following entities:
- UserProfile: User account information and blockchain credentials
- Contacts: Contact list with usernames and public keys
- Messages: Encrypted message storage with metadata
- Conversations: Chat thread management
- Settings: Application preferences
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
This project uses ESLint with TypeScript support. The configuration can be found in eslint.config.js.
Gossip can be built as a native iOS app using Capacitor. This allows you to distribute the app through the App Store and provides native iOS features and performance.
- Xcode: Download from the Mac App Store (requires macOS)
- iOS Simulator: Included with Xcode
- CocoaPods: Install with
sudo gem install cocoapods - Apple Developer Account: Required for App Store distribution
- Install Capacitor CLI (if not already installed):
npm install -g @capacitor/cli- Add iOS Platform (already done):
npm run cap:sync:ios- Open Xcode Project:
npm run cap:open:ios- Start the development server:
npm run dev- In a new terminal, sync changes to iOS:
npm run cap:sync:ios- Open iOS Simulator from Xcode (Cmd + Shift + 2) or run:
npm run cap:run:ios- Build the web app:
npm run build- Sync to iOS:
npm run cap:sync:ios- Open in Xcode:
npm run cap:open:ios- Run on simulator or device from Xcode
| Command | Description |
|---|---|
npm run cap:sync:ios |
Build web assets and sync to iOS project |
npm run cap:open:ios |
Open iOS project in Xcode |
npm run cap:run:ios |
Build, sync, and run on iOS simulator |
npm run cap:build:ios |
Build web assets and sync to iOS |
npm run cap:copy:ios |
Copy web assets to iOS without rebuilding |
The app is configured in capacitor.config.ts with iOS-specific settings:
- App ID:
net.massa.gossip - App Name:
Gossip - Scheme:
Gossip - Background Color: Black (
#000000) - Content Inset: Automatic
- Scroll Enabled: True
- Open Xcode project:
npm run cap:open:ios - Select a simulator device from the dropdown
- Click the play button (
▶️ ) or press Cmd + R - The app will launch in the iOS Simulator
- Connect an iOS device to your Mac
- Trust the device when prompted
- In Xcode, select your device from the dropdown
- Click play to build and run on device
- Use Safari's Web Inspector: Safari → Develop → [Your Device] → [App Name]
- Console logs and debugging work the same as web development
-
Update App Information:
- Open
ios/App/App/Info.plist - Update app name, version, and bundle ID
- Open
-
Generate App Icons:
- Icons are automatically generated from
assets/icon.svg - Custom icons can be placed in
ios/App/App/Assets.xcassets/AppIcon.appiconset/
- Icons are automatically generated from
-
Configure Signing:
- In Xcode: Select target → Signing & Capabilities
- Choose your development team
- Enable required capabilities (if any)
-
Build for App Store:
- In Xcode: Product → Archive
- Upload to App Store Connect via Xcode Organizer
CocoaPods Issues:
cd ios/App
pod installBuild Errors:
- Clean build folder: Cmd + Shift + K in Xcode
- Clean derived data: Xcode → Settings → Locations → Derived Data → Delete
Simulator Not Launching:
- Restart Xcode
- Reset simulator: Simulator → Device → Erase All Content and Settings
Plugin Issues:
- Re-sync plugins:
npm run cap:sync:ios - Update pods:
cd ios/App && pod update
The app uses these Capacitor plugins:
- @capacitor/status-bar: Controls status bar appearance
- @aparajita/capacitor-biometric-auth: Biometric authentication support
- Test on actual devices for accurate performance metrics
- Monitor memory usage in Xcode Instruments
- Use Safari Web Inspector for performance profiling
- Consider using
CapacitorHttpfor native HTTP requests when needed
App not loading in simulator:
- Check that web server is running (
npm run dev) - Re-sync:
npm run cap:sync:ios - Clean and rebuild in Xcode
Blank screen on device:
- Check device logs in Xcode console
- Verify network permissions
- Test with a simple HTML page to isolate issues
Build failures:
- Update Xcode to latest version
- Clear derived data
- Reinstall pods:
cd ios/App && pod deintegrate && pod install
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and linting
- Submit a pull request
Gossip prioritizes user privacy and security:
- All data is stored locally on your device
- Messages are encrypted before storage
- No data is transmitted to external servers
- Built with modern security best practices
- Real-time messaging implementation
- Contact discovery and management
- File sharing capabilities
- Voice and video calling
- Group messaging
- Message backup and restore