We’re excited to announce Nocterm v0.4.3, the latest release of the Flutter-like TUI framework for Dart. This release focuses on rendering reliability, new component capabilities, experimental image support, and improvements to the testing framework.

Rendering Improvements

The core rendering pipeline has received attention in this release. The Unicode block encoder — used for drawing borders, box characters, and block elements — has been updated to handle edge cases that previously caused visual artifacts in certain CI environments and non-UTF-8 locales.

Differential rendering, which only redraws parts of the terminal that have actually changed, continues to be the default. In v0.4.3, we’ve tightened the diffing logic so that rapid setState() calls during animations produce fewer unnecessary redraws.

Image Support (Experimental)

One of the most requested features is now available as an experimental API. Nocterm can now render images directly in the terminal using protocols like Kitty and iTerm2 inline images.

class ImageDemo extends StatelessComponent {
  Component build(BuildContext context) {
    return Column(children: [
      Text('Image Preview:'),
      Image.file('assets/logo.png',
        width: 40,
        height: 20,
      ),
    ]);
  }
}

Image support is marked as experimental and the API may change in future releases. Terminal support varies — Kitty, iTerm2, and WezTerm offer the best experience. See the documentation for details.

Testing Framework Updates

The testNocterm() testing API has been refined based on community feedback. Key changes include:

await testNocterm(
  'responsive layout',
  (tester) async {
    await tester.pumpComponent(MyComponent());
    expect(tester.terminalState, containsText('Header'));
  },
  size: Size(40, 20),
  debugPrintAfterPump: true,
);

New and Updated Components

Container Enhancements

Container now supports gradient backgrounds via BoxDecoration. This lets you create more visually interesting panels without resorting to custom painting.

Improved ListView Performance

ListView.builder now lazily builds only the visible items plus a small buffer, reducing memory usage for lists with thousands of items. If you were already using ListView.builder, you get this improvement automatically.

TextField Improvements

The TextField component has received several quality-of-life improvements:

Breaking Changes

This release has no breaking changes. All existing code should work without modification. The image API is additive and marked experimental.

Upgrading

Update your pubspec.yaml:

dependencies:
  nocterm: ^0.4.3

Or run:

$ dart pub upgrade nocterm

What’s Next

We’re working on several features for upcoming releases:


Thanks to everyone who contributed bug reports, pull requests, and feedback. If you run into issues, please open an issue on GitHub.