https://github.com/Norbert515/nocterm
A powerful, Flutter-inspired Terminal User Interface framework for building beautiful command-line applications in Dart.
https://github.com/Norbert515/nocterm
Last synced: 3 months ago
JSON representation
A powerful, Flutter-inspired Terminal User Interface framework for building beautiful command-line applications in Dart.
- Host: GitHub
- URL: https://github.com/Norbert515/nocterm
- Owner: Norbert515
- License: mit
- Created: 2025-09-03T20:14:16.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2026-02-15T11:43:26.000Z (4 months ago)
- Last Synced: 2026-02-17T05:55:54.226Z (4 months ago)
- Language: Dart
- Homepage: https://nocterm.dev
- Size: 21.1 MB
- Stars: 254
- Watchers: 3
- Forks: 16
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-tuis - nocterm - like TUI framework for **Dart** with hot reload, 45+ components, and declarative UI patterns. (Table of Contents)
README
[](https://github.com/norbert515/nocterm/actions/workflows/ci.yml)
[](https://pub.dev/packages/nocterm)
[](LICENSE)
[](https://nocterm.dev)
[](https://docs.nocterm.dev)
Website |
Docs |
pub.dev |
Quick Start
**If you know Flutter, you know Nocterm.** Build terminal UIs with the same patterns—`StatefulComponent`, `setState()`, `Column`, `Row`, and hot reload.

## Installation
```yaml
dependencies:
nocterm: ^0.5.1
```
## Quick Start
```dart
import 'package:nocterm/nocterm.dart';
void main() {
runApp(const Counter());
}
class Counter extends StatefulComponent {
const Counter({super.key});
@override
State createState() => _CounterState();
}
class _CounterState extends State {
int _count = 0;
@override
Component build(BuildContext context) {
return Focusable(
focused: true,
onKeyEvent: (event) {
if (event.logicalKey == LogicalKey.space) {
setState(() => _count++);
return true;
}
return false;
},
child: Center(
child: Text('Count: $_count'),
),
);
}
}
```
Run with hot reload:
```bash
dart --enable-vm-service your_app.dart
```
## Testing
Test your TUI components just like Flutter widgets:
```dart
await testNocterm('counter test', (tester) async {
await tester.pumpComponent(Counter());
await tester.sendKey(LogicalKey.space);
expect(tester.terminalState, containsText('Count: 1'));
});
```
## Documentation
See the [full documentation](https://docs.nocterm.dev) for guides on components, state management, testing, and more.
## Community
### Packages
| Package | Description |
|---------|-------------|
| [nocterm_bloc](https://pub.dev/packages/nocterm_bloc) | Bloc state management for Nocterm |
| [nocterm_lints](https://pub.dev/packages/nocterm_lints) | IDE assists — wrap with, swap, move, convert to stateful/stateless |
### Built with Nocterm
| Project | Description |
|---------|-------------|
| [vide_cli](https://github.com/Norbert515/vide_cli) | Multi-agent coding IDE for the terminal |
| [nocterm_3d](https://github.com/Norbert515/nocterm_3d) | Experimental 3D renderer for the terminal |
| [cow](https://github.com/jolexxa/cow) | Local LLM chat client powered by llama.cpp |
| [snake](https://github.com/mrgnhnt96/snake) | Classic Snake for the command line |
| [minesweeper](https://github.com/mrgnhnt96/minesweeper) | Classic Minesweeper for the command line |
> Built something with Nocterm? [Open an issue](https://github.com/norbert515/nocterm/issues) to get it listed here!
## Contributing
### Git Hooks
We use [hooksman](https://pub.dev/packages/hooksman) to manage git hooks. To install the hooks, run:
```bash
dart run hooksman
```
## License
MIT