Free, open-source, offline-first AAC communication for everyone.
Augmentative and Alternative Communication (AAC) refers to methods, tools, and strategies used to supplement or replace spoken or written communication for people who have difficulty with those skills. AAC users include individuals with autism spectrum disorder, cerebral palsy, ALS, aphasia, Angelman syndrome, Down syndrome, and many other conditions.
AltComms is a full-featured AAC application built to be a genuine free alternative to commercial tools like Proloquo2Go, TD Snap, TouchChat, Grid 3, and Avaz — which often cost hundreds of dollars per year. AltComms stores all data locally on the device with no account, no subscription, and no internet connection required.
Who is AltComms for?
- AAC users who need a reliable, always-available communication tool
- Families and caregivers seeking an accessible, no-cost solution
- Speech-Language Pathologists (SLPs) looking for a customisable platform for clients
- Schools and clinics with limited budgets
- Developers and researchers who want an open, extensible AAC foundation
- Symbol board — grid-based AAC boards with ARASAAC symbol library integration, board navigation, and custom board creation
- Keyboard mode — type-to-speak with a full keyboard, accessible inline via the bottom navigation bar
- Word prediction — offline bigram engine that learns from usage patterns without sending data anywhere
- Message bar — build sentences symbol-by-symbol before speaking
- Board editor — create, rearrange, and customise boards and symbols
- Multiple profiles per device — each user gets their own communication setup
- Custom avatars for easy profile identification
- Per-profile settings: button shape, label position, TTS voice, and accent colour
- Quick phrases — save frequently used phrases for one-tap access
- Emergency flag — mark critical phrases for prominent display
- Emergency page — full-screen, high-contrast, one-tap emergency communication with direct
tel:dialling
- Feelings / Emotions — 16-emotion grid for expressing how you feel
- Pain scale — visual pain rating tool
- Sensory meter — communicate sensory overload levels
- Energy tracker — show current energy levels
- Social battery — indicate how much social interaction you can handle
- Crisis mode — simplified interface for high-stress moments
- Dedicated boards for symptoms, doctor visits, hospital stays, and emergencies
- Structured vocabulary for medical appointments
- Visual schedules — daily routines with emoji support
- Social stories — prepare for new situations with a page-by-page story viewer
- Education — flashcard system, core word reference, and progress tracking
- Usage analytics — charts of communication patterns and vocabulary use (powered by fl_chart)
- Caregiver dashboard — goal tracking, vocabulary growth reports, and SLP guidance
- Goal tracking — set and monitor communication goals
- 5 themes — System, Light, Dark, High Contrast, and Calm
- Dyslexia-friendly font — OpenDyslexic support (see Configuration)
- Switch scanning — auto-advance symbol scanning with configurable interval
- Font scaling — independent from system font size
- Reduce motion — disable animations for sensory sensitivity
- Backup / Restore — ZIP-based export and import of all data
- PIN lock — protect profiles with a PIN
- Biometric unlock — fingerprint / Face ID unlock
- Offline-first — all data lives on-device in SQLite; no cloud required
Screenshots will be added here once the UI stabilises. To contribute screenshots, see Contributing.
| Requirement | Minimum version |
|---|---|
| Flutter | 3.41.4 |
| Dart | 3.11.1 |
| Android SDK | API 21 (Android 5.0) |
| Xcode | 15+ (for iOS / macOS builds) |
Install Flutter by following the official Flutter installation guide.
Verify your setup:
flutter doctorgit clone https://github.com/your-org/altcomms.git
cd altcommsflutter pub get# Run on a connected device or emulator
flutter run
# Run on a specific platform
flutter run -d chrome # Web
flutter run -d windows # Windows desktop
flutter run -d macos # macOS desktop
flutter run -d linux # Linux desktopAltComms uses a feature-first clean architecture with clear separation between domain logic, data access, and presentation.
lib/
├── main.dart # Entry point
├── app.dart # Root widget, theme, router
├── bootstrap.dart # Async app initialisation
│
├── core/ # App-wide infrastructure
│ ├── database/ # SQLite schema, DAOs (profiles, boards,
│ │ └── daos/ # symbols, events, goals, quick_phrases)
│ ├── router/ # GoRouter route definitions
│ ├── theme/ # Colour tokens, text styles, spacing, themes
│ ├── constants/ # Route names, app-wide constants
│ ├── errors/ # Failure types
│ ├── storage/ # SharedPreferences wrapper
│ └── utils/ # Logger, haptics helpers
│
├── features/ # One folder per product feature
│ ├── boards/ # Symbol board, grid, board editor
│ ├── communication/ # Message bar, communication page
│ ├── profiles/ # Profile selection, editor, settings
│ ├── tts/ # Text-to-speech service & voice settings
│ ├── prediction/ # Offline bigram word prediction
│ ├── quick_phrases/ # Saved phrases with emergency flag
│ ├── emergency/ # Emergency communication page
│ ├── feelings/ # Emotions grid, pain scale, sensory meter
│ ├── neurodiversity/ # Energy / social battery / crisis mode
│ ├── healthcare/ # Medical communication boards
│ ├── keyboard_mode/ # Type-to-speak keyboard
│ ├── schedules/ # Visual daily schedules
│ ├── social_stories/ # Social story viewer
│ ├── education/ # Flashcards, core words, progress
│ ├── analytics/ # Usage charts (fl_chart)
│ ├── caregiver/ # Dashboard, goals, SLP guidance
│ ├── symbols/ # ARASAAC symbol service
│ ├── settings/ # App settings, backup/restore, security
│ └── onboarding/ # First-run onboarding flow
│
└── shared/ # Cross-feature widgets
└── presentation/
└── widgets/ # LoadingIndicator, ErrorView, EmptyState
| Concern | Choice | Reason |
|---|---|---|
| State management | Riverpod 2.6.1 (manual, no codegen) | Compile-safe providers, testable, no build_runner overhead |
| Navigation | GoRouter 14.x | Declarative deep-link-ready routing |
| Local storage | sqflite | Mature SQLite wrapper, works on all platforms except web |
| TTS | flutter_tts | Wraps native TTS on every platform |
| Charts | fl_chart | Lightweight, no network dependency |
| Secure storage | flutter_secure_storage | Keychain / Keystore backed PIN storage |
| Biometrics | local_auth | Fingerprint / Face ID via platform APIs |
| Platform | Status |
|---|---|
| Android | Supported |
| iOS | Supported |
| Web | Supported |
| Windows | Supported |
| macOS | Supported |
| Linux | Supported |
| ChromeOS | Runs as Android app |
Note: switch scanning and biometric unlock depend on platform hardware availability.
flutter testflutter analyze lib/# Android APK
flutter build apk --release
# Android App Bundle (Play Store)
flutter build appbundle --release
# iOS (requires macOS + Xcode)
flutter build ios --release
# Web
flutter build web --release
# Windows
flutter build windows --release
# macOS (requires macOS + Xcode)
flutter build macos --release
# Linux
flutter build linux --release- Feature folders follow the pattern
lib/features/<name>/{data,domain,presentation}/ - Providers live in
presentation/providers/inside their feature - Pages live in
presentation/pages/ - Widgets live in
presentation/widgets/ - Database access goes through DAOs in
lib/core/database/daos/ - No code generation — all Riverpod providers are written manually
ARASAAC provides a free REST API for searching and downloading pictograms. The service is used in lib/features/symbols/data/arasaac_service.dart.
The ARASAAC API does not require an API key for basic access. No configuration is needed for the default symbol search to work. If you self-host the pictogram set or integrate a private API, set your base URL in lib/core/constants/app_constants.dart.
AltComms supports the OpenDyslexic font for users who find it easier to read. The font is not bundled by default (licence requires redistribution care). To enable it:
-
Download the OpenDyslexic font files from opendyslexic.org or your preferred source:
OpenDyslexic-Regular.otfOpenDyslexic-Bold.otfOpenDyslexic-Italic.otf
-
Place the files in
assets/fonts/. -
Open
pubspec.yamland uncomment the font block near the bottom:
fonts:
- family: OpenDyslexic
fonts:
- asset: assets/fonts/OpenDyslexic-Regular.otf
- asset: assets/fonts/OpenDyslexic-Bold.otf
weight: 700
- asset: assets/fonts/OpenDyslexic-Italic.otf
style: italic- Run
flutter pub getand rebuild the app.
Users can then select "OpenDyslexic" in Settings → Accessibility → Font.
Contributions are welcome. This project follows standard GitHub flow:
- Fork the repository and create a feature branch from
main. - Make your changes, keeping commits focused and descriptive.
- Run
flutter analyze lib/andflutter test— both must pass cleanly. - Open a pull request describing what changed and why.
Areas where help is especially valued:
- Additional symbol sets — integration with other free/open symbol libraries
- Translations — the app uses
flutter_localizations; adding locale files is self-contained - Platform testing — particularly Linux, ChromeOS, and older Android devices
- Accessibility audits — feedback from actual AAC users and SLPs is invaluable
- Test coverage — unit and widget tests for features that currently lack them
Please open an issue before starting large changes so the approach can be discussed first.
This project is licensed under the MIT License. See LICENSE for the full text.
- ARASAAC — The Aragonese Centre for Augmentative and Alternative Communication provides the pictogram library used in this app. ARASAAC symbols are available under a Creative Commons BY-NC-SA licence. AltComms is a non-commercial open-source project.
- Flutter — Google's open-source UI framework that makes true cross-platform development possible from a single codebase.
- Riverpod — Remi Rousselet's state management library.
- GoRouter — Declarative routing for Flutter.
- OpenDyslexic — The open-source font designed to improve readability for readers with dyslexia.
- Every AAC user, caregiver, and SLP whose feedback shapes what communication tools should actually look like.