CyaniTalk is a diversified, cross-platform social client built with Flutter. It bridges the gap between Misskey (decentralized micro-blogging) and Flarum (structured community forums), offering a unified experience for both casual social interaction and deep technical discussions.
Designed with a Responsive Shell, CyaniTalk adapts seamlessly between mobile (iOS/Android) and desktop (Windows/macOS/Linux) environments, providing native-tier features like real-time streaming and advanced administrative tools.
CyaniTalk decouples the navigation logic from the content to provide an ergonomic experience on any device:
- Mobile: Classic Bottom Navigation Bar for one-handed use.
- Desktop: Vertical Navigation Rail for wide screens, utilizing a Master-Detail view for efficient browsing.
- Unified Sections: Access Misskey, Forum, Drive, Messages, and Profile seamlessly.
- Real-time Streaming: Connects to the Misskey WebSocket (
streaming) to deliver notes, notifications, and messaging instantly. - MFM Renderer: Full Markup Language For Misskey rendering support including emoji, search, links, and more syntax elements.
- Misskey Drive: A dedicated visual interface for managing cloud files and images.
- AiScript & API: Support for running basic AiScript interactions and an embedded API Console.
- Structured Discussions: Browse tags, discussions, and posts with a clean reading experience.
- Community interaction: Create discussions, reply to posts, and manage your forum identity.
- Authentication: Seamless JSON:API based login and token management.
- Global Search: Unified search across Misskey and Flarum platforms.
- Notification System: Unified management system supporting multiple notification types.
- Cache Management: Integrated note and image cache management for improved performance.
- Audio Engine: Audio playback powered by
audioplayers.
- Unified Dashboard: Detects admin privileges to reveal hidden control panels.
- Misskey Control Panel: View instance health, stats, and moderate users.
- Flarum Management: Basic moderation tools and backend management.
- API Console: A built-in developer tool to test endpoints and inspect JSON responses directly within the app.
- Framework: Flutter (Dart)
- State Management: Riverpod (with
@riverpodannotations for type-safety). - Networking:
dio(REST API calls).web_socket_channel(Misskey Streaming).
- Routing:
go_routerwith support for Master-Detail views on Desktop. - Audio:
audioplayersfor high-quality audio playback. - UI Components:
flutter_adaptive_scaffold, custom Material Design 3 theme system. - Data Models:
freezed&json_serializable. - Storage:
flutter_secure_storagefor credentials,shared_preferencesfor settings.
- Initialize Flutter project.
- Implement the Responsive Shell (Bottom Nav vs. Nav Rail).
- Create skeleton pages for the 5 main tabs.
- Implement MiAuth flow for Misskey.
- Implement Token retrieval for Flarum.
- Create the Unified Login Manager.
- Establish WebSocket connections for Misskey.
- Implement global event distribution (Notifications/New Notes).
- Build the "Messages" tab aggregation.
- Misskey: Timeline rendering and Posting interface.
- MFM Renderer: Full syntax support.
- Flarum: Discussion list and Thread view.
- Drive: File grid view and upload functionality.
- Advanced drafting and rich media uploads.
- Build the API Console.
- Implement Global Search Service.
- Audio Engine integration.
- Implement Admin-only route protection.
- Desktop-specific optimizations (keyboard shortcuts, window management).
Prerequisites: Flutter SDK installed.
-
Clone the repository:
git clone https://github.com/CyaniAgent/CyaniTalk.git cd CyaniTalk -
Install dependencies:
flutter pub get
-
Code Generation:
dart run build_runner build --delete-conflicting-outputs
-
Run the app:
# For Mobile flutter run # For Desktop (macOS/Windows/Linux) flutter run -d windows # or macos/linux
Note: After changing dependencies, you need to run "dart run dart_pubspec_licenses:generate" to update the open-source license file.
This project is moving towards its first stable release. Contributions, especially regarding UI refinement and Flarum JSON:API edge cases, are welcome!