Skip to main content

flet-terminal

Download Flet Terminal PyPI Flet

A native, GPU-accelerated terminal control for Flet, built on top of xterm.dart.

flet-terminal provides high-performance VT100/ANSI terminal emulation across Windows, Linux, macOS, Android, and Web, utilizing low-latency binary DataChannel streaming to render thousands of lines per second without UI freezing.


Download Flet Terminal

Try the standalone Flet Terminal desktop application directly on your OS:

Platform Download Notes
🪟 Windows (x64) FletTerminal_windows_x64.zip Portable Windows executable (.exe)
🐧 Linux (x86_64) FletTerminal_linux_x86_64.tar.gz Universal Linux tarball (tar -xzf)
📦 All Releases View Releases Page Changelog and release notes

Features

  • High-Throughput Binary Streaming: Routes terminal data over Flet DataChannel directly to the xterm.dart canvas, bypassing string/MsgPack serialization overhead.
  • Cross-Platform Compatibility: Full feature parity across Desktop (pty / winpty), Mobile (Android), and Web (WASM / Pyodide).
  • Responsive Mobile Wrapper & Zoom Controls: MobileTerminal includes zoom_in(), zoom_out(), reset_zoom(), and a customizable virtual accessory keyboard (ESC, TAB, CTRL, ALT, arrows) with sticky modifier toggles and collapsible state.
  • Dynamic Checkmarks & Built-in Themes: Supports instant switching between built-in color schemes (Dracula, JetBrains Dark, Matrix Green), customizable font families (JetBrains Mono), cursor shapes (block, underline, bar), and cursor blink. Settings popup displays accurate checkmarks (checked=True) that dynamically tick as options change.
  • Interactive Search & Selection: Built-in buffer search (search), scrollback control, and clipboard integration (select_all, clear_selection, right-click copy/paste).

Installation

Install via pip:

pip install flet-terminal

Or using uv:

uv add flet-terminal

Quickstart

1. Basic Terminal (Terminal)

import flet as ft
from flet_terminal import Terminal, BUILTIN_THEMES

def main(page: ft.Page):
    page.theme_mode = ft.ThemeMode.DARK

    term = Terminal(
        scrollback=10000,
        font_family="JetBrains Mono",
        font_size=13.0,
        cursor_style="block",
        cursor_blink=True,
        theme=BUILTIN_THEMES["Dracula"],
        expand=True,
    )

    # Handle incoming bytes typed or pasted into the terminal
    def on_terminal_input(data: bytes):
        # Echo back or forward to a local OS shell / PTY process
        term.send_bytes(data)

    term.set_on_bytes(on_terminal_input)

    page.add(term)
    term.write("\x1b[1;32mWelcome to FletTerminal!\x1b[0m\r\n> ")

ft.run(main)

2. Responsive Mobile Wrapper (MobileTerminal)

MobileTerminal combines the core Terminal with a virtual extra-keys bar, sticky modifier buttons (CTRL, ALT), settings menu, and search bar:

import flet as ft
from flet_terminal import MobileTerminal, BUILTIN_THEMES

def main(page: ft.Page):
    mt = MobileTerminal(
        show_extra_keys=True,
        show_search=True,
        show_settings=True,
        scrollback=10000,
        font_family="JetBrains Mono",
        font_size=13.0,
        theme=BUILTIN_THEMES["JetBrains Dark"],
        expand=True,
    )

    def on_bytes(payload: bytes):
        mt.send_bytes(payload)

    mt.set_on_bytes(on_bytes)
    page.add(mt)

ft.run(main)

API Reference

Terminal Properties

Property Type Default Description
scrollback int 10000 Maximum number of scrollback lines retained in the ring buffer.
font_family str "JetBrains Mono" Monospace font family for rendering text.
font_size float 13.0 Font point size.
cursor_style str "block" Cursor shape ("block", "underline", or "bar").
cursor_blink bool True Whether the terminal cursor blinks continuously.
theme dict None Dictionary mapping ANSI color keys to hex/int colors.
read_only bool False When True, disables user keyboard input into the terminal canvas.
auto_focus bool True Automatically focuses the terminal when mounted.

Terminal Methods

Method Arguments Description
send_bytes(payload) bytes Sends binary data directly over the DataChannel to the terminal canvas.
write(data) str | bytes Writes text or escape sequences to the terminal.
clear() Clears the terminal scrollback and visible screen buffer.
focus() Requests keyboard focus on the terminal control.
search(query, start) str, int Highlights and selects matching text in the scrollback buffer.
select_all() Selects all text currently in the buffer.
clear_selection() Clears any active selection.

Terminal Events

Event Handler Description
on_data Callable[[ft.ControlEvent], None] Triggered when string-based text input occurs.
on_resize Callable[[ft.ControlEvent], None] Fired when dimensions change. Event data contains JSON {"cols": int, "rows": int}.
on_title_change Callable[[ft.ControlEvent], None] Triggered when OSC 0/2 title escape sequences are received.
on_bell Callable[[ft.ControlEvent], None] Triggered when the bell character (\a / 0x07) is received.
on_selection_change Callable[[ft.ControlEvent], None] Fired when selection or search matches update.

Built-in Themes

You can import and pass built-in presets from flet_terminal.themes:

from flet_terminal import BUILTIN_THEMES, get_theme

# Available: "Dracula", "JetBrains Dark", "Matrix Green"
my_theme = get_theme("Dracula")

License

This project is licensed under the MIT License. See LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flet_terminal-0.3.1.tar.gz (22.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flet_terminal-0.3.1-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

File details

Details for the file flet_terminal-0.3.1.tar.gz.

File metadata

  • Download URL: flet_terminal-0.3.1.tar.gz
  • Upload date:
  • Size: 22.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for flet_terminal-0.3.1.tar.gz
Algorithm Hash digest
SHA256 8dae30f7cec160bd892eccc8fa46aefada17cd4fdf8a5e124121e7815d78c285
MD5 b93ae0967698f5d2cbaa7c133eabc30c
BLAKE2b-256 ad30288872bfd03112b331fabb3bbd8f237ec5f1a2de4019ce32a3844bccfc8d

See more details on using hashes here.

Provenance

The following attestation bundles were made for flet_terminal-0.3.1.tar.gz:

Publisher: publish.yml on Nwokike/flet-terminal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file flet_terminal-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: flet_terminal-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 24.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for flet_terminal-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e6661f4b6f898ffa218b5b020110b25182562f845132d42bd3738aba92772023
MD5 81a33e5e2c539b0b69402d34db7fb21f
BLAKE2b-256 f241218411ae4a357ea7fdd0238994bbe2db53616bf88fb9f5eca5b1fbff6ca6

See more details on using hashes here.

Provenance

The following attestation bundles were made for flet_terminal-0.3.1-py3-none-any.whl:

Publisher: publish.yml on Nwokike/flet-terminal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.8

2 files

0.3.7

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

This release

0.3.1 This release

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page