Flutter Quill: The Ultimate Rich Text Editor for Your Flutter Apps
FlutterPulseThis article was translated specially for the channel FlutterPulseYou'll find lots of interesting things related to Flutter on this channel. Don't hesitate to subscribe!π

Build powerful, customizable rich text editors in your Flutter apps with ease.

π Introduction
If you've ever tried building a note-taking app, blog editor, or CMS in Flutter, you know the pain of handling rich text. Formatting, bold/italic text, embedding images, and saving content β these are far from trivial problems.
That's where Flutter Quill shines. It's a powerful, customizable, and production-ready rich text editor inspired by Quill.js. Whether you're building a Notion-like editor, collaborative writing app, or rich chat input, Flutter Quill can be your go-to solution.
In this guide, we'll cover everything from installation to advanced customization, so by the end, you'll be ready to ship a production-ready editor in your Flutter app.

π What is Flutter Quill?
Flutter Quill is a rich text editor for Flutter, inspired by the popular web-based Quill.js. It's designed to be powerful yet flexible, giving you:
- A WYSIWYG (What You See Is What You Get) editing experience
- Support for iOS, Android, Web, and Desktop
- A JSON-based document model called Quill Delta for saving/loading content
- A customizable toolbar and editor with rich formatting options
Think of it as Google Docs-lite, but embedded inside your Flutter app.
π Fun fact: It's actively maintained and has 1,000+ stars on GitHub, a strong community backing, and regular updates.
β¨ Why Developers Love Flutter Quill
Here's why Flutter Quill is popular among Flutter devs:
- Rich Formatting: Bold, italic, underline, strikethrough, headers, lists, quotes, and more.
- Media Embeds: Support for images, videos, and custom widgets.
- Toolbar Customization: Pick exactly which formatting buttons appear.
- Quill Delta Format: Easy to serialize/deserialize editor content.
- Cross-Platform: Same code works across mobile, web, and desktop.
- Extendable: You can add custom embeds (math, charts, polls, etc.).
- Collaboration Ready: Pair with Firebase or WebSockets for real-time editing.
β‘ Quick Start Guide
Let's get practical.
πΉInstall Flutter Quill
Getting Flutter Quill into your project is a breeze. Open your pubspec.yamlfile and add the latest version of the package. As of my last check, it's something like this:
dependencies:
flutter_quill: ^10.7.0 # Double-check the latest version on pub.dev
Then run:
flutter pub get
π οΈ Platform Setup
Flutter Quill works across platforms, but some setups need a little extra love, especially for web and desktop. Here's the lowdown from the GitHub README:
- Web: If you're targeting the web, you'll need to include the Quill JavaScript library in your index.html file. Add this to the
<head>section:
<script src="https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js"></script>
- Desktop: For macOS, Windows, or Linux, no special setup is required β Flutter Quill just works out of the box with Flutter's desktop support.
- Android β If you want image picking/embedding, configure a
FileProviderin yourAndroidManifest.xmland add afile_paths.xmlunderres/xml. - iOS β Ensure
NSPhotoLibraryUsageDescriptionis added toInfo.plistfor image/video insertion.
If you're using embeds like images or videos, you might need additional packages (like image_picker for mobile). Check the GitHub README for any platform-specific dependencies.
π Usage
Here's a simple example to get a working editor with a toolbar:
import 'package:flutter/material.dart';
import 'package:flutter_quill/flutter_quill.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Flutter Quill Demo')),
body: const QuillEditorPage(),
),
);
}
}
class QuillEditorPage extends StatefulWidget {
const QuillEditorPage({super.key});
@override
QuillEditorPageState createState() => QuillEditorPageState();
}
class QuillEditorPageState extends State<QuillEditorPage> {
final QuillController _controller = QuillController.basic();
@override
Widget build(BuildContext context) {
return Column(
children: [
QuillToolbar.simple(
controller: _controller,
configurations: const QuillSimpleToolbarConfigurations(),
),
Expanded(
child: QuillEditor.basic(
controller: _controller,
configurations: const QuillEditorConfigurations(),
),
),
],
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
Run this, and you'll see a toolbar with formatting options (bold, italic, lists, etc.) and an editable text area. It's that simple to get started!
π€ Input / Output
Flutter Quill uses the Quill Delta format to handle content, which is a JSON-based way to represent rich text. This makes it super easy to save, load, or sync content with a backend. Here's how you can work with input and output:
// Save to JSON
final json = _controller.document.toDelta().toJson();
// Load from JSON
_controller.document = Document.fromJson(json);
This makes it seamless to store data in Firestore, Supabase, or any backend.
βοΈ Configurations
Flutter Quill is all about flexibility. You can customize the toolbar and editor to fit your app's needs. For example, to tweak the toolbar buttons:
QuillToolbar.simple(
controller: _controller,
configurations: QuillSimpleToolbarConfigurations(
multiRowsDisplay: false, // Single-row toolbar
showBoldButton: true,
showItalicButton: true,
showUnderLineButton: true,
showListBullets: true,
showListNumbers: true,
showLink: true,
),
),
You can also style the editor itself, like adjusting fonts or padding:
QuillEditor.basic(
controller: _controller,
configurations: QuillEditorConfigurations(
padding: const EdgeInsets.all(16.0),
customStyles: DefaultStyles(
paragraph: DefaultTextBlockStyle(
const TextStyle(fontSize: 16.0, color: Colors.black87),
const VerticalSpacing(6.0, 0.0),
const VerticalSpacing(0.0, 0.0),
null,
),
),
),
),
π¦ Embed Blocks
Want more than text? Flutter Quill supports images, videos, and custom embeds.
QuillEditor.basic(
controller: _controller,
configurations: QuillEditorConfigurations(
embedBuilders: [
...FlutterQuillEmbeds.builders(),
],
),
);
You can even define your own embeds (math equations, polls, widgets).
π Delta Conversion
The Quill Delta format is the backbone of Flutter Quill's content management. It's a lightweight, JSON-based format that describes text and formatting changes. You can convert Deltas to other formats (like HTML or Markdown) using additional packages like quill_delta or custom logic. For example:
- To HTML: Use a package like
quill_delta_to_htmlto convert Deltas to HTML for web display. - From Markdown: Parse Markdown into a Delta for editing.
import 'package:flutter_quill_delta_to_html/flutter_quill_delta_to_html.dart';
final converter = QuillDeltaToHtmlConverter(
_controller.document.toDelta().toList(),
);
final html = converter.convert();
π Rich Text Paste
Ever pasted text into an editor and had the formatting go haywire? Flutter Quill handles rich text pasting beautifully, preserving styles like bold, italic, and links when users paste content from other sources. This works automatically in most cases, but you can fine-tune how pasted content is handled using the QuilEditorConfigurations options
β οΈ Note: Some complex styles (nested lists, tables) may lose fidelity when pasted. Always test for your use case.
π Translation
Want your editor to feel at home in multiple languages? Flutter Quill supports translation for the toolbar, so you can localize button labels and tooltips. You'll need to provide translations for the toolbar strings, which you can do by overriding the default locale or using a localization package like intl.
QuillToolbar.simple(
controller: _controller,
configurations: QuillSimpleToolbarConfigurations(
locale: const Locale('es'),
),
);
This makes your editor global-ready.
π§ͺ Testing
Testing your Flutter Quill integration is straightforward, thanks to its widget-based design. You can use Flutter's testing framework to write unit and widget tests for your editor. For example, you can test the QuillController to ensure content is saved correctly:
testWidgets('Editor renders initial text', (tester) async {
final controller = QuillController.basic();
controller.document.insert(0, 'Hello Flutter Quill!');
await tester.pumpWidget(
MaterialApp(
home: QuillEditor.basic(
controller: controller,
configurations: const QuillEditorConfigurations(),
),
),
);
expect(find.text('Hello Flutter Quill!'), findsOneWidget);
});π‘ Real-World Use Cases
Here are a few ways developers use Flutter Quill:
- Note-taking apps β Notion, Google Keep clones
- Blogging platforms β Draft and publish styled posts
- Collaboration tools β Real-time team docs with Firebase
- Survey/feedback forms β Rich input fields
- CMS dashboards β Content management with media embeds
π§ Pro Tips for Power Users
- Lazy Mode β Use
enableInteractiveSelection: falsefor performance in long docs - Custom Embeds β Insert widgets like equations, polls, or charts
- Internationalization β Toolbar supports multiple locales
- Theming β Align colors and typography with your brand
- Syncing β Use Firebase Firestore or Supabase for Google Docs-style collaboration
π Alternatives to Flutter Quill
While Flutter Quill is the most feature-rich, here are some alternatives worth exploring:
- Pub Points: 130
- Likes: 700+
- Downloads: 13.6k+
- Last Updated: 2024
- A document-style editor with a focus on structured editing and layout control.
- Pub Points: 150
- Likes: 600+
- Downloads: 28.9k+
- Last Updated: 2025
- Great for apps needing HTML-rich content editing, especially web-heavy apps.
- Pub Points: 160
- Likes: 170+
- Downloads: 7.27k+
- Last Updated: 2025
- A lightweight editor built on Quill Delta, designed to be simple and minimal. If you want fewer dependencies and a smaller footprint, this is a good alternative.
- Pub Points: 150
- Likes: 480+
- Downloads: 3.93k+
- Last Updated: 2025
- The same editor that powers AppFlowy, an open-source Notion alternative. It's designed for collaborative, structured documents and may be overkill for smaller apps, but perfect for building productivity tools.
π My take: If you want the most community support + features, stick with Flutter Quill. But if you need something minimal (Fleather) or something structured and collaborative (AppFlowy Editor), these alternatives might be a better fit.
π― Wrapping Up
Flutter Quill is like a Swiss Army knife for text editing in Flutter apps. It's open-source, powerful, and customizable β perfect whether you need a simple notes field or a full-blown collaborative document editor.
If you're curious, I'd recommend:
- Check out the Flutter Quill GitHub repo
- Explore the official documentation
- Experiment with custom toolbars and embeds
Once you try it, you'll see why so many devs love integrating it.
π Give it a spin, and let me know what cool projects you end up building with it!
Happy coding β¨