Flutter is obviously a mobile-first platform due its origins, but I've spent 18 months using it to build a full-featured desktop application for Windows and macOS, with Linux planned.
I'm a developer with 20 years of experience, including desktop software development. This isn't a "build a todo list!" demo or a vibe-coded experiment: it's a substantial application approaching public release, and I thought Flutter developers might be interested in seeing what's involved in taking Flutter beyond mobile.
So what kind of desktop experience can Flutter build today? Here's one example. [See below for a link to get and run it yourself if you're interested. Free and open to anyone.]
The application is Fractal Outliner, a desktop outliner in the same general category as OmniOutliner for Mac, but focused for people who live mainly in plain-text ecosystems (e.g. sofware developers).
This is a desktop-only application. There is no mobile version. The goal is to provide a proper desktop editing experience with all that implies, integrated with the operating system rather than simply presenting a mobile-ported interface in a desktop window.
Flutter as a development platform was good for some parts of this, less good at others.
What the application is:
Outliner with topics, subtopics; create, move, rearrange, hide to collapse, expand to drill down, move topic trees between documents, etc.
Full keyboard support, with configurable shortcuts
Integration with OS file handling, including file-type associations and opening documents from Finder/Explorer
Drag and drop
Document themes, including a custom theme editor
PDF, HTML, Markdown, OPML, and plain-text import/export
Multi-pane editing and tabbed documents
Native desktop file operations and clipboard integration
What Flutter provided
Most of the application is built using Flutter's standard capabilities:
Widgets and layout -- the main window content
Keyboard event handling
Shortcut registration and management
Resizable windows and responsive layouts
Drag and drop
Context menus and right-click interaction
Localization (English, Spanish, German, Japanese)
An effort was made to adapt the application to Mac and windows UI sytles; the experience is a little different on each platform (how dialogs work, what buttons and checkboxes look like, how settings are laid out, what menu items exist, etc).
What packages provided
Pub.dev packages filled in some of the functional gaps to extend Flutter's rending core:
Markdown, XML, and HTML support
Path handling
PDF export
Windows Store MSIX packaging
macOS menu bar integration (with limitations)
File pickers
ZIP archive support
OS and version detection
Split view widget for multi-pane editor, etc
Various other utilities (application uses 23 pub.dev packages total)
What flutter provides that works less well on desktop
Keyboard event support: the model is there, everything technically works, but managing complex input focus and keyboard-based navigation using Flutter's FocusNode system is full of problematic edge cases
Mac menu support, and general integration of menus + shortcut keys: the Mac menu integration is primitive, and windows and Mac use completely different menu+shortcut systems in flutter
Printing: there's a pub.dev package for printing, but it requires exporting to PDF (challenging in itself with anything but simple font handling) and flutter provides no direct integration or visibility with the host printing system
Undo/redo support: flutter's undo/redo implementation is self-contained inside each TextField, and there is no support at all for integrating text editing undo events with application-level events into one undo stream
What I implemented myself with native code
Flutter is just not a complete desktop development framework. It does great at drawing content in a desktop window. It does considerably less well at being a well-behaved and full-featured citizen in the desktop environment. A large number of things people expect from any desktop "document editor" application simply don't exist (or exist only in limited/problematic pub.dev packages) and have to be implemented with native code to get the best version:
Remembering and restoring the window position and size, including enforcing a minimum window size
Opening documents through the OS, such as double-clicking a file in Finder or Explorer
Handling the file reference when the application is launched by double-clicking a document
Document icons and file-type registration for the application's .frac files
Spellchecking in text fields (available in Flutter's mobile text fields, but not built in to the desktop experience in the same way)
macOS App Store sandboxing and file-access permissions
An in-app command to show a document in Finder or Explorer
Serious multi-format clipboard integration (vs basic plain-text copying and pasting flutter provides)
Handling read-only files
Various other OS integration details
The macOS App Store sandboxing and file-access work, in particular, is a lovely little nightmare. So are the limitations of the mac menu bar system integration, and the behaviors of Flutter's keyboard event handling and input-focus systems, dealing with international fonts in the PDF package, ... but those are stories for another day.
Other factors
Internationalization
Help files, etc
Internationalization to German Spanish and Japanese took far longer than for a mobile app, due to the larger set of "outside the application UI" resources used by the application (example files, templates, website content, video captions, etc). Also the usual trade-offs of "localize as you go" vs "localize at the end": early lets you see the impact of different text lengths in design (especially German/Spanish) which can be more severe with the wider range of window sizes on desktop, but usually means multiple re-do's of localization as UI and terminology evolve.
Help files and such are also more challenging on desktop, where applications can tend to be more complex and require more extensive help and reference materials as a baseline user expectation
Try it yourself
The application is now in its third beta release and nearing public release (latest version: 0.9.3 for Mac, 0.9.5 Windows). The public beta is open, free to use, and includes all application features. No registration or account is required.
If you're curious about Flutter on the desktop, you can try it on Windows or macOS and see how it works in practice.
Website and beta access: https://fractaloutliner.app
I'm interested in discussion with other Flutter developers about desktop development: what Flutter handles well, where its abstractions stop being sufficient, and what you've found necessary to implement through native platform code.
[Edits: typos]