flutter_alacritty
Flutter terminal widget powered by an Alacritty-based Rust engine, with PTY support via flutter_pty.
Screenshots

Requirements
- Flutter 3.3+
- Dart 3.11+
- Rust toolchain (for building the native engine)
- Linux, macOS, or Windows desktop (primary targets)
Use as a dependency
dependencies:
flutter_alacritty: ^2.1.0
Use as a library
flutter_alacritty ships three public types: a TerminalEngine (the
alacritty handle), a TerminalController (selection / search / scroll
state), and a TerminalView widget. Wire any PtyBackend to the engine
with two Stream subscriptions:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_alacritty/flutter_alacritty.dart';
import 'package:flutter_alacritty/src/rust/frb_generated.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await RustLib.init();
runApp(const MaterialApp(home: _TerminalScaffold()));
}
class _TerminalScaffold extends StatefulWidget {
const _TerminalScaffold();
@override
State<_TerminalScaffold> createState() => _TerminalScaffoldState();
}
class _TerminalScaffoldState extends State<_TerminalScaffold> {
late final _engine = TerminalEngine(config: TerminalConfig.defaults());
late final _controller = TerminalController()..attach(_engine);
late final PtyBackend _pty = FlutterPtyBackend(rows: 24, columns: 80);
late final StreamSubscription _ptyIn = _pty.output.listen(_engine.feed);
late final StreamSubscription _ptyOut = _engine.output.listen(_pty.write);
@override
void dispose() {
_ptyIn.cancel();
_ptyOut.cancel();
_pty.kill();
_controller.dispose();
_engine.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) => ValueListenableBuilder<String>(
valueListenable: _engine.title,
builder: (_, title, __) => Scaffold(
appBar: AppBar(title: Text(title)),
body: TerminalView(_engine, controller: _controller),
),
);
}
See docs/library-api.md for the full API
walkthrough: every TerminalEngine / TerminalController / TerminalView
member, shortcut customization patterns, callbacks, theming, and SSH /
remote-PTY wiring. The reference consumer with drag-and-drop, right-click
menu, restart overlay, and url_launcher integration lives at
lib/example/example_app.dart.
Clone (with Rust FFI submodule)
git clone --recurse-submodules https://github.com/hhoao/flutter_alacritty.git
# existing clone:
git submodule update --init --recursive
The rust_lib_flutter_alacritty plugin lives in packages/rust_lib_flutter_alacritty/ as a git submodule.
Package Linux (deb + AppImage)
See linux/packaging/README.md for detailed steps. Briefly:
dart pub global activate fastforge
git submodule update --init --recursive
flutter pub get
fastforge release --name dev
# Output: dist/{version}/flutter_alacritty-{version}-linux.deb, etc.
Run the demo app (from git checkout)
flutter pub get
flutter run -d linux # or macos / windows
Publishing to pub.dev
This repo ships two packages:
| Package | Directory | Publish first? |
|---|---|---|
rust_lib_flutter_alacritty |
packages/rust_lib_flutter_alacritty/ (submodule) |
Yes |
flutter_alacritty |
repo root | After the plugin is on pub.dev |
See PUBLISHING.md for the full checklist.
Projects using this library
| Project | Description |
|---|---|
| TeamPilot | Desktop client for terminal AI agent teams: per-member embedded terminals (local PTY or SSH), team/model configuration, and a multi-tab chat workbench. Built on flutter_alacritty for rendering. |
License
MIT — see LICENSE.
Libraries
- config/color_parse
- config/config_loader
- config/platform_font_defaults
- config/terminal_config
- controller/terminal_controller
- debug/terminal_scroll_trace
- engine/engine_binding
- engine/terminal_engine
- engine/terminal_engine_client
- example/example_app
- example/terminal_history_scrollbar
- example/terminal_scrollbar_geometry
- flutter_alacritty
- Flutter terminal UI backed by an Alacritty-based Rust engine.
- input/ime_key_routing
- input/ime_session
- input/key_bindings
- input/key_input
- input/mouse_input
- input/paste
- input/program_scroll_encoder
- input/scroll_accumulator
- input/scroll_destination
- input/term_mode
- links/link_overlay
- links/terminal_link_provider
- links/url_link_provider
- pty/flutter_pty_backend
- pty/pty_backend
- render/box_drawing
- render/cell_flags
- render/cell_metrics
- render/glyph_atlas
- render/glyph_cache
- render/mirror_grid
- render/terminal_painter
- theme/terminal_theme
- Public, immutable theme + text-style data slices over TerminalConfig.
- ui/preedit_overlay
- ui/search_bar
- ui/terminal_scroll_controller
- ui/terminal_shortcuts
- ui/terminal_view
- ui/terminal_viewport
- ui/terminal_viewport_controller
- ui/viewport_geometry
- ui/viewport_resolver