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: 4 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-01-30T17:16:59.000Z (4 months ago)
- Last Synced: 2026-01-31T07:44:45.189Z (4 months ago)
- Language: Dart
- Homepage: https://nocterm.dev
- Size: 20.9 MB
- Stars: 225
- Watchers: 2
- Forks: 15
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/norbert515/nocterm/actions/workflows/ci.yml)
[](https://pub.dev/packages/nocterm)
[](LICENSE)
[](https://docs.nocterm.dev)
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.4.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.
## 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