FontStory is a fantasy-powered, open-source Flutter app that lets you create, remix, and share beautifully styled text using layered effects and custom fonts — all powered by simple JSON.
| Platform | Link |
|---|---|
| 📦 Google Play | Google Play |
| 📁 APK | Download Latest APK |
| 🌐 Web | Coming Soon |
No account. No ads. Just pure, creative fun — online or offline.
- 🖋️ Custom Fonts – Browse or contribute your own fonts (TTF, OTF)
- 🎨 Layered Styling – Combine shadows, strokes, and effects
- 🌈 Visual Themes – Swap colors and gradients easily
- 🧃 JSON-Powered – Styles defined entirely in editable JSON
- 🔁 Import / Export – Share styles with friends or the community
- 💖 Community Friendly – Easy to contribute fonts or styles
- 🔓 100% Open Source – No closed data or limits
- Flutter SDK
- Dart >= 3.0
- Android Studio or VS Code (recommended)
Clone the repository and run the app:
git clone https://github.com/FontStory/font-story-app.git
cd font-story-app
flutter pub get
flutter runFont Story supports optional AdMob integration for rewarded ads. The app loads these settings securely using flutter_dotenv.
If you want to enable rewarded ads, create a .env file by copying the sample:
cp .env.sample .envThen fill in your rewarded ad unit ID and ad toggle:
# .env
REWARDED_AD_ID=your-admob-rewarded_id
NO_ADS=false
⚠️ If you don’t want ads, setNO_ADS=true.
✅ The app skips ad code if ads are disabled.
Also, ensure .env is added to .gitignore to avoid committing secrets:
.envFont Story is built and optimized for mobile:
- ✅ Android (device or emulator)
- 🌐 Web – Usable in mobile view only
Other platforms are not officially supported, but you can still run the app for development or experimentation:
- 🧪 iOS (macOS required for build)
- 🖥️ macOS, Linux, and Windows (via Flutter desktop)
⚠️ These platforms may have UI/UX issues or limited compatibility.
lib/ # All Dart source code
├── app.dart # Root app widget
├── main.dart # App's entry point
├── splash.dart # Initial loading screen
│
├── config/ # App configuration files
│ ├── routes/ # Navigation and routing logic
│ ├── themes/ # App themes and visual styles
│ └── values/ # Static values
│
├── core/ # Shared code for all features
│ ├── common/ # Common utilities and models
│ ├── components/ # Shared, reusable UI widgets
│ ├── constants/ # App-wide constants
│ ├── error/ # Custom error and failure handling
│ ├── extensions/ # Dart extension methods
│ ├── helpers/ # Helper functions and classes
│ ├── services/ # Abstract service contracts/interfaces
│ └── usecase/ # Core business logic units
│
├── features/ # Contains all feature modules.
│ └── font_story/ # The "Font Story" feature module
│ ├── data/ # Data layer
│ ├── domain/ # Domain layer
│ └── presentation/ # Presentation layer
│
└── locator/ # Dependency injection setupThis Flutter app, FontStory, uses a wide range of packages to provide powerful features, localization, networking, state management, UI components, and more.
| Package | Purpose |
|---|---|
flutter |
Flutter SDK core |
easy_localization |
Internationalization and localization support |
dio |
Powerful HTTP client for REST API calls |
flutter_dotenv |
Load environment variables from .env files |
get_it |
Dependency injection container |
injectable |
Code generation for dependency injection |
logger |
Advanced logging utility |
dartz |
Functional programming utilities |
isolate_manager |
Manage Dart isolates for heavy computation |
equatable |
Simplify value equality |
bloc & flutter_bloc |
State management based on BLoC pattern |
skeletonizer |
Skeleton loading animations |
loading_animation_widget |
Pre-built loading animations |
cached_network_image |
Efficient image caching and displaying |
flutter_colorpicker |
Color picker widgets |
screenshot |
Take screenshots of widgets |
iconsax_flutter |
Icons package |
hydrated_bloc |
Persist and restore BLoC state |
path_provider |
File system paths |
flutter_svg |
SVG rendering |
super_clipboard |
Clipboard utilities |
pasteboard |
Clipboard support |
permission_handler |
Manage app permissions |
device_info_plus |
Device information |
url_launcher |
Launch URLs, apps, or browser |
image_gallery_saver |
Save images to gallery (custom fork from GitHub) |
hive & hive_flutter |
Lightweight local database |
connectivity_plus |
Network connectivity status |
cupertino_icons |
iOS-style icons |
| Package | Purpose |
|---|---|
flutter_test |
Flutter testing framework |
isolate_manager_generator |
Code generator for isolate_manager |
injectable_generator |
Code generator for injectable |
build_runner |
Dart code generation runner |
flutter_lints |
Recommended lint rules for Flutter projects |
The app loads styles and fonts from a separate data repository:
📦
font-story-data
Contains all styles, fonts, thumbnails, and contributors.
You can contribute styles and fonts without writing Flutter code →
See the font-story-data repo for instructions.
Love Flutter? Help improve FontStory:
# Fork and clone
git clone https://github.com/FontStory/font-story-app.git
# Create a new branch
git checkout -b feature/your-feature
# Make your changes and test
flutter run
# Commit and push
git commit -m "feat: added my feature"
git push origin feature/your-feature
# Open a Pull RequestWe're open to:
- Bug fixes
- New features
- UI improvements
- Performance optimization
| Maintainer | Telegram | X / Twitter | Gmail | ||
|---|---|---|---|---|---|
| @ariaramin | 🐦 X/Twitter | 📬 Gmail |
This project is licensed under the Apache License 2.0.
You may freely use, modify, and distribute the styles and fonts, but the use of the name or logo “FontStory” is strictly prohibited in any form.
See the LICENSE file for full details.
