Skip to content

A powerful, Flutter-inspired Terminal User Interface framework for building beautiful command-line applications in Dart.

License

Notifications You must be signed in to change notification settings

Norbert515/nocterm

Repository files navigation

CI Pub Version License Website Documentation

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.

Nocterm Demo

Installation

dependencies:
  nocterm: ^0.5.1

Quick Start

import 'package:nocterm/nocterm.dart';

void main() {
  runApp(const Counter());
}

class Counter extends StatefulComponent {
  const Counter({super.key});

  @override
  State<Counter> createState() => _CounterState();
}

class _CounterState extends State<Counter> {
  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:

dart --enable-vm-service your_app.dart

Testing

Test your TUI components just like Flutter widgets:

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 for guides on components, state management, testing, and more.

Community

Packages

Package Description
nocterm_bloc Bloc state management for Nocterm
nocterm_lints IDE assists — wrap with, swap, move, convert to stateful/stateless

Built with Nocterm

Project Description
vide_cli Multi-agent coding IDE for the terminal
nocterm_3d Experimental 3D renderer for the terminal
cow Local LLM chat client powered by llama.cpp
snake Classic Snake for the command line
minesweeper Classic Minesweeper for the command line

Built something with Nocterm? Open an issue to get it listed here!

Contributing

Git Hooks

We use hooksman to manage git hooks. To install the hooks, run:

dart run hooksman

License

MIT

About

A powerful, Flutter-inspired Terminal User Interface framework for building beautiful command-line applications in Dart.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 8