Read Medium articles without a subscription
Your paywall breakthrough for Medium!
Freedium Mobile is an Android application that bypasses Medium's paywall, allowing you to read member-only articles for free. The app redirects Medium articles through Freedium.cfd to provide unrestricted access.
Built with Flutter and featuring Material You design, Freedium Mobile offers a native reading experience with dynamic theming and dark mode support.
screen-20251004-182443.mp4
- Paywall Bypass - Read any Medium article without hitting the paywall or needing a subscription
- Local Reading History - Keep track of articles you've read, with offline storage and easy history management
- Share Integration - Share Medium articles directly to Freedium from Chrome, Twitter, or any browser
- Clipboard Detection - Automatically detects Medium URLs in your clipboard for quick access
- Configurable Mirrors - Multiple Freedium server mirrors with automatic failover
- Material You Theming - Dynamic color schemes that adapt to your Android 12+ wallpaper
- Dark Mode - Comfortable reading with automatic or manual theme switching
- Font Size Control - Adjust text size for better readability
- Auto-Update Checker - Get notified when new versions are available
- Go to the Releases page
- Download the latest APK file
- Install on your Android device
- Launch the app and start reading!
Note: You may need to enable "Install from unknown sources" in your device settings.
Method 1: Paste URL (Recommended)
- Copy a Medium article URL
- Open Freedium Mobile
- The URL will be auto-detected in the input field
- Tap "Read Article"
Method 2: Share from Browser or App
- Open a Medium article in any browser or app
- Tap the Share button
- Select "Freedium" from the share menu
- Article opens automatically
Method 3: Manual Entry
- Open Freedium Mobile
- Type or paste any Medium article URL
- Tap "Read Article"
- Flutter SDK 3.44.0 or higher
- Dart SDK 3.12.0 or higher (included with Flutter)
- Android Studio or VS Code with Flutter extensions
- Git
# Clone the repository
git clone https://github.com/AmanSikarwar/freedium_mobile.git
cd freedium_mobile
# Install dependencies
flutter pub get
flutter run# Debug build
flutter run
# Release APK
flutter build apk --release
# Release APK with obfuscation (recommended for production)
flutter build apk --release --obfuscate --split-debug-info=obfuscate
# Format code
dart format .
# Analyze code
flutter analyzeOutput location:
build/app/outputs/flutter-apk/
lib/
├── app.dart # App widget, intent handling, global navigator
├── main.dart # Entry point
├── core/
│ ├── constants/
│ │ └── app_constants.dart # App metadata, package name, default mirrors
│ ├── services/
│ │ ├── clipboard_service.dart # Clipboard URL detection
│ │ ├── font_size_service.dart # Font size persistence
│ │ ├── intent_service.dart # Share-to-app handling
│ │ └── update_service.dart # GitHub release checker
│ ├── theme/
│ │ ├── app_theme.dart # Material You theme config
│ │ ├── theme_provider.dart # Dynamic color provider
│ │ └── util.dart # Theme utilities
│ └── utils/
│ ├── article_url_parser.dart # Shared URL extraction
│ ├── external_url_launcher.dart
│ └── http_url_normalizer.dart
├── features/
│ ├── bookmarks/
│ │ ├── application/
│ │ │ ├── bookmarks_provider.dart
│ │ │ └── bookmarks_service.dart
│ │ ├── domain/
│ │ │ └── bookmarked_article.dart
│ │ └── presentation/
│ │ └── bookmarks_screen.dart
│ ├── history/
│ │ ├── application/
│ │ │ ├── history_provider.dart
│ │ │ └── history_service.dart
│ │ ├── domain/
│ │ │ └── reading_history.dart
│ │ └── presentation/
│ │ └── history_screen.dart
│ ├── home/
│ │ ├── application/
│ │ │ └── home_provider.dart # Home state management
│ │ ├── domain/
│ │ │ └── home_state.dart
│ │ └── presentation/
│ │ ├── home_screen.dart
│ │ └── widgets/
│ ├── onboarding/
│ │ ├── application/
│ │ │ └── onboarding_provider.dart
│ │ └── presentation/
│ │ └── onboarding_screen.dart
│ ├── settings/
│ │ ├── application/
│ │ │ ├── settings_service.dart
│ │ │ └── settings_provider.dart # Settings state & mirror management
│ │ ├── domain/
│ │ │ └── settings_state.dart # Settings & FreediumMirror models
│ │ └── presentation/
│ │ └── settings_screen.dart
│ └── webview/
│ ├── application/
│ │ ├── freedium_article_url_builder.dart
│ │ ├── initial_mirror_resolver.dart
│ │ ├── theme_injector_service.dart # CSS injection for theming
│ │ └── webview_provider.dart # WebView controller & state
│ ├── domain/
│ │ └── webview_state.dart
│ └── presentation/
│ ├── webview_screen.dart
│ └── widgets/
└── shared/
├── utils/
│ └── date_utils.dart
└── widgets/
└── article_card.dart
The app follows a feature-based architecture with Riverpod 3.0 for state management:
- Features - Organized by functionality (
bookmarks,history,home,onboarding,settings,webview) - Application - Riverpod Notifiers and business logic
- Presentation - UI screens and widgets
- Domain - State classes with
copyWith() - Core - Shared services, constants, and theming
- State Management: Riverpod 3.x Notifier API (not StateNotifier)
- Theme Injection: Flutter → CSS variables → WebView DOM
- Intent Handling: Two-phase (initial + streaming) with duplicate prevention
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes following the existing code style
- Test your changes on Android devices
- Commit with clear messages (
git commit -m 'Add amazing feature') - Push to your fork (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the existing code architecture and patterns
- Use Riverpod 3.0 Notifier API for state management
- Always use
copyWith()for state updates - Use
debugPrint()instead ofprint()for logging - Test changes thoroughly on Android devices
- Keep pull requests focused on a single feature or fix
Found a bug? Open an issue with:
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Device model and Android version
This project is licensed under the MIT License. See the LICENSE file for details.
- Report bugs: GitHub Issues
- Star this repo if you find it useful!
Made with ❤️ by Aman Sikarwar
Keywords: Medium paywall bypass, read Medium free, Medium article reader, Android Medium app, Flutter app, open source, Medium subscription alternative, paywall remover, free Medium access