A beautiful, open-source manga reader app built with Flutter. Browse, search, and read manga from multiple sources with a modern, customizable UI.
Features β’ Screenshots β’ Installation β’ Architecture β’ Contributing
- π Multi-Source Support - Browse manga from multiple providers (MangaDex, MangaKakalot, and more)
- π Multi-Language Support - Read chapters in 50+ languages
- π¨ Customizable Themes - Dynamic accent colors and AMOLED dark mode
- π Advanced Reader - Vertical/horizontal reading modes, zoom, auto-scroll
- π Smart Search - Filter by genre, status, source, country, and more
- π± Cross-Platform - Android, iOS, Web, Windows, macOS, and Linux
- β‘ Optimized Performance - Image caching, lazy loading, and rate limiting
- π― Modern UI - Material Design 3 with smooth animations
lib/
βββ main.dart # App entry point
βββ api/
β βββ api.dart # Main API service class
β βββ providers/ # Manga source providers
β βββ base_provider.dart
β βββ mangadex.dart
β βββ mangakakalot.dart
β βββ provider_manager.dart
βββ Classes/ # Data models
β βββ manga_class.dart
β βββ Chapters_class.dart
β βββ character_class.dart
βββ components/ # Reusable UI components
β βββ carousel.dart
β βββ horizontal_list.dart
βββ models/ # State models
β βββ search_filter_state.dart
βββ pages/ # App screens
β βββ home.dart
β βββ search.dart
β βββ infopage.dart
β βββ chapters_page.dart
β βββ reading_page.dart
β βββ catagory_page.dart
β βββ character_info.dart
βββ providers/ # State management
β βββ theme_provider.dart
βββ utils/ # Utilities
β βββ constants.dart
β βββ utils.dart
βββ widgets/ # Custom widgets
βββ cached_image.dart
βββ filter_bottom_sheet.dart
βββ skeleton_loaders.dart
Represents a manga with all its metadata:
class MangaClass {
String? id; // Unique identifier (prefixed by source)
String? title; // Manga title
String? coverImage; // Cover image URL
String? description; // Synopsis/description
String? bannerImage; // Banner image URL
String? status; // RELEASING, FINISHED, HIATUS, etc.
String? author; // Author name
List? genre; // List of genres
int? chaptersCount; // Total chapters
double? rating; // Rating (0-10)
List<CharacterPreview>? characters;
List<RelatedManga>? recommendations;
List<String>? synonyms; // Alternative titles
}Represents a manga chapter:
class ChaptersClass {
String? chapterName; // Chapter number/title
String? chapterId; // Unique chapter ID
String? chapterUrl; // API endpoint URL
String? translatedLanguage; // Language code (en, ja, ko, etc.)
}MangaX uses a flexible provider system to support multiple manga sources.
abstract class MangaProvider {
String get name;
String get baseUrl;
Future<List<ChaptersClass>> getAllChapters(String mangaId, {int offset, String? language});
Future<List<ChaptersClass>> getChapters(String query, {String? language});
Future searchManga(String query);
Future<List<String>> getChapterPages(String chapterId);
// Language support
String get selectedLanguage;
void setLanguage(String languageCode);
Map<String, String> get supportedLanguages;
}- Create a new file in
lib/api/providers/:
import 'base_provider.dart';
class MyNewProvider extends MangaProvider {
@override
String get name => 'MyProvider';
@override
String get baseUrl => 'https://api.myprovider.com';
@override
Future<List<ChaptersClass>> getAllChapters(String mangaId, {int offset = 0, String? language}) async {
// Implementation
}
// Implement other required methods...
}- Register in
provider_manager.dart:
static final List<MangaProvider> _providers = [
Mangadex(),
MangaKakalot(),
MyNewProvider(), // Add your provider here
];| Provider | Status | Features |
|---|---|---|
| MangaDex | β Full | 50+ languages, ratings, statistics |
| MangaKakalot | π§ Partial | English only, basic functionality |
The main Api class (lib/api/api.dart) provides methods for fetching manga data:
// Trending & Popular
Future<List<MangaClass>> getTrendingManga(int page, int perPage)
Future<List<MangaClass>> getPopularManga(int page, int perPage)
Future<List<MangaClass>> getTrendingByCountry(String country, int page, int perPage)
// Search & Discovery
Future<List<MangaClass>> searchManga(String query, {filters})
Future<List<MangaClass>> getMangaByGenre(String genre, int page, int perPage)
// Details
Future<MangaClass> getMangaDetails(String mangaId)
Future<List<ChaptersClass>> getChapters(String mangaId)
Future<List<String>> getChapterPages(String chapterId)
// Statistics
Future<Map<String, double>> getMangaStatistics(List<String> mangaIds)The API implements automatic rate limiting for MangaDex requests (500ms minimum between requests) to comply with API guidelines.
MangaX uses Material Design 3 with dynamic theming.
class TheameProvider extends ChangeNotifier {
// Customizable accent color
void setAccentColor(Color color);
// AMOLED black mode
void setIsAmmoled(bool isAmmoled);
// Get current theme
ThemeData getTheme();
}Settings are persisted using SharedPreferences:
accentColor- Custom accent colorisAmmoled- AMOLED dark mode toggle
- Featured manga carousel
- Popular manga horizontal list
- Trending Manhwa (Korean) section
- Trending Manhua (Chinese) section
- Pull-to-refresh functionality
- Real-time search with debouncing
- Advanced filters:
- Source type (Manga, Web Novel, Light Novel, etc.)
- Genres (19 categories)
- Status (Releasing, Finished, Hiatus, etc.)
- Sort options (Popularity, Rating, Latest, etc.)
- Country of origin
- Infinite scroll pagination
- Detailed manga information
- Chapter list with language selection
- Recommendations section
- Character previews
- Action buttons (Read, Bookmark, Share)
- Vertical and horizontal reading modes
- Pinch-to-zoom
- Auto-scroll with adjustable speed
- Progress tracking
- Continuous chapter loading
- Immersive fullscreen mode
- Browse by genre
- Grid/list view toggle
- Sorting options
A featured manga carousel with:
- Auto-advancement
- Smooth page transitions
- Gradient overlays
- Tap-to-view functionality
A horizontal scrollable list for manga collections with:
- Lazy image loading
- Shimmer loading effects
- Quick navigation
Optimized network image widget with:
- Disk caching via
cached_network_image - Placeholder shimmer effect
- Error handling
Beautiful loading states using shimmer package for:
- Carousel skeleton
- Info page skeleton
- List item skeletons
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8 # iOS-style icons
provider: ^6.1.5 # State management
shared_preferences: ^2.5.3 # Local storage
http: ^1.4.0 # HTTP client
cached_network_image: ^3.3.1 # Image caching
shimmer: ^3.0.0 # Loading effects
dev_dependencies:
flutter_lints: ^5.0.0 # Code quality
change_app_package_name: ^1.5.0
rename_app: ^1.6.3- Flutter SDK ^3.7.2
- Dart SDK ^3.7.2
- Android Studio / VS Code with Flutter extensions
-
Clone the repository
git clone https://github.com/yourusername/mangax.git cd mangax -
Install dependencies
flutter pub get
-
Run the app
# Debug mode flutter run # Release mode flutter run --release
# Android APK
flutter build apk --release
# Android App Bundle
flutter build appbundle --release
# iOS
flutter build ios --release
# Web
flutter build web --release
# Windows
flutter build windows --release
# macOS
flutter build macos --release
# Linux
flutter build linux --releaseWe welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
flutter test - Commit:
git commit -m 'Add amazing feature' - Push:
git push origin feature/amazing-feature - Open a Pull Request
- Create a new provider in
lib/api/providers/ - Implement the
MangaProviderinterface - Register in
ProviderManager - Test thoroughly with various manga IDs
- Submit a PR with documentation
- Follow Effective Dart guidelines
- Use the included
analysis_options.yamlfor linting - Write meaningful commit messages
- Add comments for complex logic
- Use the GitHub issue tracker
- Include device/OS information
- Provide steps to reproduce
- Include error logs if available
This project is open source and available under the MIT License.
- MangaDex API for providing manga data
- Flutter team for the amazing framework
- All contributors who help improve this project
- Create an issue for bug reports or feature requests
- Star β this repo if you find it useful!