kterm is a high-performance terminal emulator engine for Flutter applications, with support for mobile and desktop platforms.
This package requires Flutter version >=3.0.0
|
|
|
|
- π¦ Works out of the box No special configuration required.
- π Fast Renders at 60fps.
- π Wide character support Supports CJK and emojis.
- βοΈ Customizable
- β Frontend independent: The terminal core can work without flutter frontend.
- πΌοΈ Kitty Graphics Protocol: Support for inline images (PNG, JPEG, RGBA)
- β¨οΈ Kitty Keyboard Protocol: Full support for modern key combinations
- π₯οΈ Modern Key Support: Full Kitty Keyboard Protocol implementation.
- π Progressive Enhancement: Supports CSI > n u stack (push/pop) for nested terminal modes.
- π Zero Ambiguity: No more Tab vs Ctrl+I confusion in Neovim/Helix β modifier keys are always distinguishable.
- π Search: Built-in search with regex, case sensitivity, and whole word matching support.
What's new in 3.0.0:
- π± Enhanced support for mobile platforms.
- β¨οΈ Integrates with Flutter's shortcut system.
- π¨ Allows changing theme at runtime.
- πͺ Better performance. No tree rebuilds anymore.
- ποΈ Works with IMEs.
1. Add this to your package's pubspec.yaml file:
dependencies:
...
kterm: ^1.0.02. Create the terminal:
import 'package:kterm/kterm.dart';
...
terminal = Terminal();Listen to user interaction with the terminal by simply adding a onOutput callback:
terminal = Terminal();
terminal.onOutput = (output) {
print('output: $output');
}3. Create the view, attach the terminal to the view:
import 'package:kterm/flutter.dart';
...
child: TerminalView(terminal),4. Write something to the terminal:
terminal.write('Hello, world!');Done!
import 'package:kterm/kterm.dart';
import 'package:kterm/flutter.dart';
final terminal = Terminal();
final controller = TerminalController();
TerminalView(
terminal,
controller: controller,
);import 'package:kterm/kterm.dart';
import 'package:kterm/flutter.dart';
final terminal = Terminal(
graphicsManager: GraphicsManager(),
);
final controller = TerminalController();
TerminalView(
terminal,
controller: controller,
);terminal.setKittyMode(true);kterm includes built-in search functionality with support for:
- Case sensitive search
- Regular expression patterns
- Whole word matching
The simplest way to enable search - automatically sets up callbacks and keyboard shortcuts.
import 'package:kterm/kterm.dart';
import 'package:kterm/flutter.dart';
final terminal = Terminal();
final controller = TerminalController();
TerminalView(
terminal,
controller: controller,
showSearchBar: true, // Enables search bar and keyboard shortcuts
);Keyboard shortcuts:
| Shortcut | Action |
|---|---|
Ctrl+F / Cmd+F |
Open search |
F3 / Cmd+G |
Next match |
Shift+F3 / Cmd+Shift+G |
Previous match |
Escape |
Close search |
import 'package:kterm/kterm.dart';
import 'package:kterm/flutter.dart';
final terminal = Terminal();
final controller = TerminalController();
// Setup search text provider
controller.onGetText = () => terminal.buffer.getText();
Column(
children: [
TerminalSearchBar(
controller: controller,
onClose: () => controller.closeSearch(),
),
Expanded(
child: TerminalView(terminal, controller: controller),
),
],
);// Open search mode
controller.openSearch();
// Perform a search
controller.search('pattern');
// Navigate results
controller.searchNext();
controller.searchPrevious();
// Set search options
controller.setSearchOptions({
SearchOption.caseSensitive,
SearchOption.regex,
SearchOption.wholeWord,
});
// Toggle individual options
controller.toggleSearchOption(SearchOption.caseSensitive);
// Close search
controller.closeSearch();| Property | Type | Description |
|---|---|---|
isSearching |
bool |
Whether search mode is active |
searchPattern |
String? |
Current search pattern |
searchResults |
List<BufferRange> |
All matching results |
currentSearchIndex |
int |
Index of current result (-1 if none) |
searchResultCount |
int |
Total number of matches |
hasSearchResults |
bool |
Whether any matches found |
-
Write a simple terminal in ~100 lines of code: https://github.com/lbp0200/kterm.dart/blob/master/example/lib/main.dart
-
Write a SSH client in ~100 lines of code with dartssh2: https://github.com/lbp0200/kterm.dart/blob/master/example/lib/ssh.dart
For a complete project built with kterm, check out TerminalStudio.
Please file feature requests and bugs at the issue tracker.
Contributions are always welcome!
This project is licensed under an MIT license.



