Flutter allows you to build beautiful native apps on iOS and Android from a single codebase.
The flutter engine itself doesn't know how to deal with desktop platforms (eg handling mouse/keyboard input). Instead, it exposes an abstraction layer for whatever platform to implement. This project implements the Flutter's Embedding API using a single code base that runs on Windows, macOS, and Linux. For rendering, GLFW fits the job because it provides the right abstractions over the OpenGL's Buffer/Mouse/Keyboard for each platform.
The choice of Golang comes from the fact that it has the same tooling on every platform. Plus Golang is a great language because it keeps everything simple and readable, which makes it easy to build cross-platform plugins.
The best way to get started is to install hover, the official go-flutter tool to set up, build and run Flutter apps on the desktop, including hot-reload.
If you want more in-depth information about go-flutter, read the wiki.
- Linux 🐧
- MacOS 🍎
- Windows 🏁
- Hot Reload
- Plugin system
- BinaryMessageCodec, BinaryMessageChannel
- StandardMessageCodec, JSONMessageCodec
- StandardMethodCodec, MethodChannel
- Plugin detection for supported plugins
- Importable as Go library into custom projects
- UTF-8 Text input
- Clipboard copy & paste
- Window title and icon
- Standard keyboard shortcuts
- ctrl-c ctrl-v ctrl-x ctrl-a
- Home End shift-Home shift-End
- Left ctrl-Left ctrl-shift-Left
- Right ctrl-Right ctrl-shift-Right
- Backspace ctrl-Backspace Delete
- RawKeyboard events
- Distribution format (windows-msi, mac-dmg, linux-appimage, and more)
- Cross-compiling using docker 🐳
Are you missing a feature? Open an issue!
A separate repository contains example Flutter apps that also run on the desktop. Go to github.com/go-flutter-desktop/examples to give them a try.
Some popular plugins are already implemented over at github.com/go-flutter-desktop/plugins. If you have implemented a plugin that you would like to share, feel free to open a PR on the plugins repository!
For a detailed tutorial on how to create a plugin, read the wiki.
Flutter itself is a relatively young project. Its framework and engine are updated often. The go-flutter project tries to stay compatible with the beta channel of Flutter.
This project uses go-gl/glfw for GLFW v3.3.