Skip to content

Repository files navigation

PEROQUET

Parlez librement. Même sans Internet.
Talk freely. Even without Internet.

PEROQUET is a premium peer-to-peer messaging application that enables secure, encrypted communication between nearby devices without requiring an Internet connection, SMS, or mobile data plan.

Features

  • Direct Messaging: Send text messages to contacts within ~50 meters
  • Voice Messages: Push-to-talk voice messages (5-15 seconds)
  • End-to-End Encryption: All messages are encrypted for maximum privacy
  • No Account Required: No phone number or email needed - just generate a local identity
  • QR Code Pairing: Easy and secure contact addition via QR code scanning
  • Offline First: Works completely without Internet using BLE and Wi-Fi Direct
  • Premium Design: Beautiful, modern UI with Material 3 design system
  • Multi-language: Supports French and English
  • Dark/Light Themes: Automatic or manual theme selection

Technical Stack

  • Framework: Flutter 3.x
  • State Management: Riverpod
  • Navigation: go_router
  • Database: sqflite
  • Localization: intl + ARB files
  • Cryptography: encrypt (AES-GCM)
  • Connectivity: BLE + Wi-Fi Direct (simplified demo version)
  • Permissions: permission_handler

Prerequisites

  • Flutter SDK >= 3.4.0
  • Dart SDK >= 3.4.0
  • Android SDK (for Android builds)
  • Git

Quick Start

Option 1: Using the Build Script

./build.sh

Option 2: Manual Build

# Clean and get dependencies
flutter clean
flutter pub get

# Generate localization files
flutter gen-l10n

# Generate launcher icons
flutter pub run flutter_launcher_icons:main

# Generate splash screen
flutter pub run flutter_native_splash:create

# Build release APK
flutter build apk --release

# Build release AAB (for Play Store)
flutter build appbundle --release

Setup

  1. Clone the repository

    git clone https://github.com/yourusername/peroquet.git
    cd peroquet
  2. Install dependencies

    flutter pub get
  3. Generate localization files

    flutter gen-l10n
  4. Generate launcher icons

    flutter pub run flutter_launcher_icons:main
  5. Run the app

    flutter run

Building

Android

Debug APK:

flutter build apk --debug

Release APK:

flutter build apk --release

Release AAB (for Play Store):

flutter build appbundle --release

The output files will be in:

  • APK: build/app/outputs/flutter-apk/
  • AAB: build/app/outputs/bundle/release/

Signing Configuration

The app is pre-configured with a debug keystore for testing. For production release:

  1. Create a new keystore:

    keytool -genkey -v -keystore peroquet-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias peroquet
  2. Update android/key.properties with your keystore details

  3. Build the release APK/AAB

Permissions

Android

The app requires the following permissions:

Permission Purpose
BLUETOOTH Discover and connect to nearby devices
BLUETOOTH_SCAN Scan for BLE devices (Android 12+)
BLUETOOTH_CONNECT Connect to BLE devices (Android 12+)
ACCESS_FINE_LOCATION Required for BLE scanning
ACCESS_WIFI_STATE Wi-Fi Direct connectivity
CHANGE_WIFI_STATE Enable/disable Wi-Fi
RECORD_AUDIO Voice message recording
READ_EXTERNAL_STORAGE Access audio files
WRITE_EXTERNAL_STORAGE Save audio files

Project Structure

lib/
├── core/
│   ├── app/              # App configuration
│   ├── l10n/             # Localization
│   ├── router/           # Navigation (go_router)
│   └── theme/            # Design system & themes
├── data/
│   ├── database/         # sqflite database
│   └── services/         # Business logic services
├── domain/
│   ├── enums/            # Enumerations
│   └── models/           # Data models
├── presentation/
│   ├── providers/        # Riverpod providers
│   ├── screens/          # UI screens
│   └── widgets/          # Reusable widgets
└── main.dart             # Entry point

Testing

Run all tests:

flutter test

Run unit tests:

flutter test test/unit

Run widget tests:

flutter test test/widget

Security

  • End-to-End Encryption: All messages are encrypted using AES-GCM
  • Local Storage: Private keys are encrypted at rest
  • No Server: No backend server required - pure P2P communication
  • Anti-Replay: Messages include timestamps and nonces

Localization

The app supports:

  • French (fr)
  • English (en)

To add a new language:

  1. Create assets/l10n/app_<locale>.arb
  2. Add translations
  3. Run flutter gen-l10n

Troubleshooting

BLE not working on Android

  • Ensure Location permission is granted
  • Enable Bluetooth and Location services
  • Check if device supports BLE

Build errors

flutter clean
flutter pub get
flutter pub run flutter_launcher_icons:main

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Flutter Team for the amazing framework
  • Riverpod for state management
  • All open-source contributors

PEROQUET - Talk freely. Even without Internet.

About

PEROQUET is a premium peer-to-peer messaging application that enables secure, encrypted communication between nearby devices without requiring an Internet connection, SMS, or mobile data plan.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages