Skip to main content

Par Term Emu TUI Rust

PyPI PyPI - Python Version Runs on Linux | MacOS | Windows Arch x86-64 | ARM | AppleSilicon PyPI - Downloads PyPI - License

A modern terminal emulator TUI built with Textual and par-term-emu-core-rust, featuring efficient rendering, comprehensive ANSI support, and advanced terminal features.

Screenshot

"Buy Me A Coffee"

What's New in v0.6.0

Graphics Protocol Support 🎨

  • Full Inline Graphics Rendering: Display images directly in the terminal
    • Sixel Graphics: DEC VT340 palette-based graphics protocol
    • Kitty Graphics Protocol: Modern PNG/RGB image transmission
    • iTerm2 Inline Images: Base64-encoded image display
    • Unicode Half-Block Rendering: Efficient 2:1 vertical compression using ▀ (U+2580)
    • Full RGB Color: 24-bit color with alpha channel transparency

Animation Support 🎬

  • Kitty Protocol Animations: Smooth graphics animation at ~60Hz
    • Multi-frame animation transmission
    • Frame delay control in milliseconds
    • Looping modes: infinite, finite, or single play
    • Animation controls: play, pause, stop
    • Automatic frame updates without manual refresh

Enhanced Text Selection 🖱️

  • Drag-to-Extend Multi-Click Selections: Powerful selection extension
    • Triple-click + drag to extend selection by full lines (upward or downward)
    • Anchor point tracking maintains original selection position during drag
    • Respects triple_click_selects_wrapped_lines configuration
    • Auto-copy on mouse up (when auto_copy_selection enabled)

Graphics Integration

  • Scrollback Preservation: Graphics scroll with text content and remain visible in history
  • Multiple Graphics: Display multiple images on screen simultaneously
  • Overlapping Support: Graphics overlay properly on text content
  • Testing Utilities:
    • scripts/display_image_sixel.py - Display images using Sixel protocol
    • scripts/test_kitty_animation.py - Test Kitty animation features

Use Cases

  • Image Viewers: Use terminal image viewers like viu, chafa, or img2sixel
  • Data Visualization: Display charts, graphs, and plots inline
  • Rich Media: Preview images, animations, and graphics without leaving the terminal
  • Documentation: Show diagrams and images in terminal-based documentation

See CHANGELOG.md for complete release history and v0.5.0 features.

Quick Start

# Clone and install
git clone https://github.com/paulrobello/par-term-emu-tui-rust.git
cd par-term-emu-tui-rust
uv sync

# Install components (recommended)
par-term-emu-tui-rust install all

# Run the TUI
make run

See the Quick Start Guide for detailed instructions.

Features

  • Efficient Rendering - Textual Line API for optimal performance
  • Full ANSI Support - 16/256/true color, bold, italic, underline, and more
  • Advanced Color System - Bold brightening and automatic contrast adjustment (iTerm2-compatible)
  • Graphics Protocol - Sixel, Kitty, and iTerm2 inline images with animation support
  • Interactive Configuration - Tabbed UI with widget-based and raw YAML editing modes
  • Session Recording - Record terminal sessions to asciicast or JSON with auto-export
  • Scrollback Buffer - Navigate history with keyboard and mouse (graphics scroll with text)
  • Mouse Support - Text selection, clickable URLs, and mouse tracking
  • Hyperlinks - OSC 8 hyperlinks and auto-detected plain text URLs
  • Notifications - OSC 9/777 notification support with toast messages and backend integration
  • Shell Integration - Working directory tracking, prompt navigation, command statistics
  • Screenshots - Multiple formats (PNG, SVG, HTML) with auto-capture and contrast control
  • Themes - 12 built-in themes with custom theme support
  • Clipboard - Cross-platform copy/paste with OSC 52 support and configurable limits
  • KITTY Protocol - Enhanced keyboard protocol with auto-detection

See Features for complete feature documentation.

Documentation

Getting Started

Reference

Advanced

Installation

Prerequisites

  • Python 3.12 or higher
  • uv package manager
  • Terminal with true color support

Install from Source

# Clone repository
git clone https://github.com/paulrobello/par-term-emu-tui-rust.git
cd par-term-emu-tui-rust

# Install dependencies
uv sync

# Install all components
par-term-emu-tui-rust install all

See Installation Guide for detailed instructions.

Basic Usage

# Run with default shell
par-term-emu-tui-rust

# Use custom shell
par-term-emu-tui-rust --shell /bin/zsh

# Apply theme
par-term-emu-tui-rust --theme solarized-dark

# Take screenshot
par-term-emu-tui-rust --screenshot 3 --auto-quit 5

Key Bindings

Shortcut Action
Ctrl+Shift+Q Quit application
Ctrl+Shift+S Take screenshot
Ctrl+Shift+R Toggle recording
Ctrl+Shift+C Copy selection
Alt+Ctrl+Shift+C Open configuration editor
Shift+PageUp/Down Scroll history
Shift+Home/End Jump to top/bottom

See Key Bindings for complete reference.

Configuration

Configuration file location: ~/.config/par-term-emu-tui-rust/config.yaml

Create default configuration:

par-term-emu-tui-rust --init-config

Essential settings:

# Theme & Colors
theme: "dark-background"
bold_brightening: false          # Use bright colors for bold text
minimum_contrast: 0.0            # Display contrast (0.0=off, 0.5=moderate, 1.0=max)
faint_text_alpha: 0.5            # Faint text alpha (0.0=hidden, 1.0=normal)

# Scrollback
scrollback_lines: 10000

# Clipboard
auto_copy_selection: true
middle_click_paste: true

# Screenshots
screenshot_format: "png"
screenshot_minimum_contrast: null # Screenshot contrast (null=inherits minimum_contrast)

# Keyboard Protocol
keyboard_protocol_enabled: false
keyboard_protocol_auto_detect: false

See Configuration Reference for all options.

Technology

  • Python 3.12+ - Application logic
  • Textual - TUI framework
  • par-term-emu-core-rust - Terminal emulation (Rust)
  • PyYAML - Configuration
  • pyperclip - Clipboard support
  • xdg-base-dirs - XDG compliance

Security & Safety Notes

Par Term Emu TUI Rust aims to provide sensible, configurable defaults for potentially sensitive features:

  • Clipboard access (OSC 52) Controlled by expose_system_clipboard:

    • When true (default), terminal applications can read/write the system clipboard via OSC 52 escape sequences.
    • When false, clipboard reads from applications are blocked.
  • Clickable URLs Clickable links (OSC 8 and auto-detected plain URLs) are allowed only for configured schemes:

    • allowed_url_schemes defaults to: http, https, ftp, ftps, file, mailto.
    • Unknown/unsupported schemes are blocked; when warn_on_unknown_url_scheme is true, a non-fatal warning is shown in the TUI instead of opening the link.
  • Escape sequence safety Some sequences can be powerful (and potentially dangerous). You can harden behavior with:

    • disable_insecure_sequences: when true, the Rust core filters out escape sequences considered risky.

See the Configuration Reference for details and recommended values for locked-down environments.

Architecture

graph TD
    App[TerminalApp]
    Widget[TerminalWidget]
    Core[Terminal Core Rust]
    Render[Rendering Engine]
    Display[Display]

    App --> Widget
    Widget --> Core
    Core --> Render
    Render --> Display

    style App fill:#e65100,stroke:#ff9800,stroke-width:3px,color:#ffffff
    style Widget fill:#1b5e20,stroke:#4caf50,stroke-width:2px,color:#ffffff
    style Core fill:#0d47a1,stroke:#2196f3,stroke-width:2px,color:#ffffff
    style Render fill:#4a148c,stroke:#9c27b0,stroke-width:2px,color:#ffffff
    style Display fill:#880e4f,stroke:#c2185b,stroke-width:2px,color:#ffffff

See Architecture for detailed system design.

Contributing

Contributions are welcome! Please read the Contributing Guide for:

  • Development setup
  • Code quality standards
  • Testing requirements
  • Pull request process

Development Setup

# Clone repository
git clone https://github.com/paulrobello/par-term-emu-tui-rust.git
cd par-term-emu-tui-rust

# Install dependencies
uv sync

# Install pre-commit hooks
uv run pre-commit install

# Run quality checks
make checkall

Resources

Troubleshooting

For common issues and solutions, see the Troubleshooting Guide.

Quick diagnostics:

# Enable debug logging
par-term-emu-tui-rust --debug

# Test with minimal config
par-term-emu-tui-rust --auto-quit 2

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

Paul Robello - probello@gmail.com

Acknowledgments

Metadata

Release files for par-term-emu-tui-rust 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for par-term-emu-tui-rust 0.6.0
File Size Uploaded
par_term_emu_tui_rust-0.6.0.tar.gz 954.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for par-term-emu-tui-rust 0.6.0
File Interpreter ABI Platform
par_term_emu_tui_rust-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.1 MB

Release files / par_term_emu_tui_rust-0.6.0.tar.gz

Download URL par_term_emu_tui_rust-0.6.0.tar.gz
Size 954.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3b86fb1c517f2f608d7296a4b5d7817c671f63f6259340c058803734382f5bc8
BLAKE2b-256 checksum
How to use checksums
9a685dff10272aec74a2bd4661da1ef6e38308dfb36f6cad830bdcd9ec62690b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 23, 2025.

Transparency log

Release files / par_term_emu_tui_rust-0.6.0-py3-none-any.whl

Download URL par_term_emu_tui_rust-0.6.0-py3-none-any.whl
Size 100.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e3077d9d17900c33c241478f442e565129f2af473a9399e686588ef5266956ce
BLAKE2b-256 checksum
How to use checksums
c19abfd54fb163c70a822ddc65fdf7bf8cffd0d98b7c617477ac2b13af994991
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 23, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release 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