A comprehensive terminal emulator library in Rust with Python bindings - supports true color, alt screen, mouse reporting, bracketed paste, and full Unicode
Project description
Par Term Emu Core Rust
A comprehensive terminal emulator library written in Rust with Python bindings for Python 3.12+. Provides VT100/VT220/VT320/VT420/VT520 compatibility with PTY support, matching iTerm2's feature set.
What's New in 0.19.4
๐ง Python SDK Sync
- Python SDK aligned with Rust SDK: All streaming features now available in Python bindings
StreamingConfig.enable_http/web_root- HTTP server configuration (getter/setter)StreamingServer.max_clients()- Query maximum allowed clientsStreamingServer.create_theme_info()- Create theme dictionaries for protocolencode_server_message("pong")- Pong message encoding supportencode_server_message("connected", theme=...)- Theme support in connected messages
from par_term_emu_core_rust import StreamingConfig, StreamingServer, encode_server_message
# Configure HTTP serving
config = StreamingConfig(enable_http=True, web_root="/var/www/terminal")
# Create theme for connected message
theme = StreamingServer.create_theme_info(
name="my-theme",
background=(0, 0, 0),
foreground=(255, 255, 255),
normal=[(0,0,0), (255,0,0), (0,255,0), (255,255,0), (0,0,255), (255,0,255), (0,255,255), (200,200,200)],
bright=[(128,128,128), (255,128,128), (128,255,128), (255,255,128), (128,128,255), (255,128,255), (128,255,255), (255,255,255)]
)
# Encode messages
pong = encode_server_message("pong")
connected = encode_server_message("connected", cols=80, rows=24, session_id="abc", theme=theme)
What's New in 0.19.2
๐ Bug Fixes
- Streaming Server Hang on Shell Exit: Fixed server hanging indefinitely when the shell exits
- Added shutdown signal mechanism to gracefully terminate the broadcaster loop
- Prevents blocking indefinitely when shell exits in some conditions
What's New in 0.19.1
๐ Bug Fixes
- Streaming Server Ping/Pong: Fixed application-level ping/pong handling
- Server was sending WebSocket-level pong frames instead of protobuf
Pongmessages - Frontend heartbeat mechanism now properly receives pong responses
- Fixes stale connection detection that was failing due to missing pong responses
- Server was sending WebSocket-level pong frames instead of protobuf
What's New in 0.19.0
๐ New Features
-
Automatic Shell Restart: Streaming server now automatically restarts the shell when it exits
- Default behavior: shell is restarted automatically when it exits
- New
--no-restart-shellCLI option to disable automatic restart - New
PAR_TERM_NO_RESTART_SHELLenvironment variable support - When restart is disabled, server exits gracefully when the shell exits
-
Header/Footer Toggle in On-Screen Keyboard: Layout toggle button in keyboard header
- Show/hide header and footer directly from the on-screen keyboard
- Blue indicator shows when header/footer is visible
- Convenient for maximizing terminal space on mobile
-
Font Size Controls in On-Screen Keyboard: Plus/minus buttons in keyboard header
- Adjust font size (8-32px) without opening the header panel
๐ง Changes
- StreamingServer API:
set_pty_writernow uses interior mutability for shell restart support - UI Improvements: Font size controls moved to keyboard header; floating buttons repositioned side by side
What's New in 0.18.2
๐ New Features
-
Font Size Control: User-adjustable terminal font size in web frontend
- Plus/minus buttons in header (8px to 32px range)
- Persisted to localStorage across sessions
-
Heartbeat/Ping Mechanism: Stale WebSocket connection detection
- Sends ping every 25s, expects pong within 10s
- Automatically closes and reconnects stale connections
๐ Security Hardening
- Web Terminal Security Fixes: Comprehensive security audit remediation
- Reverse-tabnabbing prevention: Terminal links now open with
noopener,noreferrer - Zip bomb protection: Added decompression size limits (256KB compressed, 2MB decompressed)
- Localhost probe fix: WebSocket preconnect hints gated to development mode only
- Snapshot size guard: 1MB limit on screen snapshots to prevent UI freezes
- Reverse-tabnabbing prevention: Terminal links now open with
๐ Bug Fixes
- WebSocket URL Changes: Properly disconnects and reconnects when URL changes
- Invalid URL Handling: Displays friendly error instead of crashing
- Next.js Config: Merged duplicate config files into single file
- Toggle Button Overlap: Moved button left to avoid scrollbar overlap
What's New in 0.18.1
๐ Bug Fixes
- Web Terminal On-Screen Keyboard: Fixed device virtual keyboard appearing when tapping on-screen keyboard buttons on mobile devices
- Added
tabIndex={-1}to all buttons to prevent focus acquisition that triggered device keyboard
- Added
What's New in 0.18.0
๐ New Features
-
Environment Variable Support: All CLI options now support environment variables with
PAR_TERM_prefix- Examples:
PAR_TERM_HOST,PAR_TERM_PORT,PAR_TERM_THEME,PAR_TERM_HTTP_USER - Configuration via environment for containerized deployments
- Examples:
-
HTTP Basic Authentication: New password protection for the web frontend
--http-user- Username for HTTP Basic Auth--http-password- Clear text password--http-password-hash- htpasswd format hash (bcrypt, apr1, SHA1, MD5 crypt)--http-password-file- Read password from file (auto-detects hash vs clear text)
๐งช Test Coverage
- Comprehensive Streaming Test Suite: 94 new tests for streaming functionality
- Protocol message constructors, theme info, HTTP Basic Auth configuration
- Binary protocol encoding/decoding with compression
- Event types, streaming errors, JSON serialization
- Unicode content and ANSI escape sequence preservation
๐ง Improvements
- Python Bindings: Binary protocol functions now properly exported (
encode_server_message,decode_server_message,encode_client_message,decode_client_message)
Usage Examples
# Environment variables
export PAR_TERM_HOST=0.0.0.0
export PAR_TERM_HTTP_USER=admin
export PAR_TERM_HTTP_PASSWORD=secret
par-term-streamer --enable-http
# CLI with htpasswd hash
par-term-streamer --enable-http --http-user admin --http-password-hash '$apr1$...'
What's New in 0.17.0
๐ New Features
-
Web Terminal Macro System: New macro tab in the on-screen keyboard for creating and playing terminal command macros
- Create named macros with multi-line scripts (one command per line)
- Quick select buttons to run macros with a single tap
- Playback with 200ms delay before each Enter key for reliable command execution
- Edit and delete existing macros via hover menu
- Stop button to abort macro playback mid-execution
- Macros persist to localStorage across sessions
- Visual feedback during playback (pulsing animation, stop button)
- Option to disable sending Enter after each line (for text insertion macros)
- Template commands for advanced scripting:
[[delay:N]],[[enter]],[[tab]],[[esc]],[[space]],[[ctrl+X]],[[shift+X]],[[ctrl+shift+X]],[[shift+tab]],[[shift+enter]]
-
On-Screen Keyboard Enhancements:
- Permanent symbols grid on the right side with all keyboard symbols (32 keys)
- Added Space, Enter, http://, and https:// buttons to modifier row
- Added tooltips to Ctrl shortcut buttons
- Expanded symbol keys with full punctuation set
๐ง Improvements
- On-Screen Keyboard Layout: Reorganized for better usability with more compact vertical layout and persistent symbols grid
๐ฆ Dependency Updates
- Web Frontend: Updated @types/node (25.0.1 โ 25.0.2)
What's New in 0.16.3
๐ Bug Fixes
- Web Terminal tmux/TUI Fix: Fixed control characters (
^[[?1;2c^[[>0;276;0c) appearing when running tmux or other TUI applications in the web terminal. The issue was caused by xterm.js generating Device Attributes responses when the backend terminal emulator already handles these queries.
๐ Performance Optimizations
- jemalloc Allocator: New optional
jemallocfeature for 5-15% server throughput improvement (non-Windows only) - TCP_NODELAY: Disabled Nagle's algorithm for lower keystroke latency (up to 40ms improvement)
- Output Batching: Time-based batching at 60fps reduces WebSocket overhead by 50-80% during burst output
- Compression Threshold: Lowered to 256 bytes to compress more typical terminal output
- WebSocket Preconnect: Reduces initial connection latency by 100-200ms
- Font Preloading: Eliminates layout shift and font flash
๐ฆ Dependency Updates
- Web Frontend: Updated Next.js and type definitions
- Pre-commit Hooks: Updated ruff linter
What's New in 0.16.2
๐ง Compatibility Fix
- TERM Environment Variable: Changed default
TERMfromxterm-kittytoxterm-256colorfor better compatibility with systems lacking kitty terminfo
What's New in 0.16.0
๐ TLS/SSL Support
- Secure WebSocket Connections for production deployments:
- New CLI options:
--tls-cert,--tls-key,--tls-pem - Supports separate cert/key files or combined PEM
- Enables HTTPS and WSS (secure WebSocket)
- New CLI options:
# Using separate cert and key files
par-term-streamer --enable-http --tls-cert cert.pem --tls-key key.pem
# Using combined PEM file
par-term-streamer --enable-http --tls-pem combined.pem
๐ Performance: Binary Protocol
- BREAKING: Protocol Buffers for WebSocket Streaming:
- Replaced JSON with binary Protocol Buffers encoding
- ~80% smaller messages for typical terminal output
- Optional zlib compression for large payloads (screen snapshots)
- Wire format: 1-byte header + protobuf payload
๐ Python Bindings
- TLS Configuration:
StreamingConfigmethods for TLS setup - Binary Protocol Functions:
encode_server_message(),decode_server_message(),encode_client_message(),decode_client_message()
See CHANGELOG.md for complete version history.
What's New in 0.15.0
๐ New Features
- Streaming Server CLI Enhancements:
--download-frontendoption to download prebuilt web frontend from GitHub releases--frontend-versionoption to specify version to download (default: "latest")--use-tty-sizeoption to use current terminal size from TTY- No longer requires Node.js/npm to use web frontend - can download prebuilt version
Quick Start
# Build the streaming server
make streamer-build-release
# Download prebuilt web frontend (no Node.js required!)
./target/release/par-term-streamer --download-frontend
# Run server with frontend
./target/release/par-term-streamer --enable-http
# Open browser to http://127.0.0.1:8099
What's New in 0.14.0
๐ New Features
-
Web Terminal Onscreen Keyboard: Mobile-friendly virtual keyboard for touch devices
- Special keys missing from iOS/Android keyboards: Esc, Tab, arrow keys, Page Up/Down, Home, End, Insert, Delete
- Function keys F1-F12 (toggleable), symbol keys (|, , `, ~, {, }, etc.)
- Modifier keys (Ctrl, Alt, Shift) that combine with other keys
- Quick Ctrl shortcuts: ^C, ^D, ^Z, ^L, ^A, ^E, ^K, ^U, ^W, ^R
- Glass morphism design, haptic feedback, auto-shows on mobile
-
OSC 9;4 Progress Bar Support (ConEmu/Windows Terminal style):
- Terminal applications can report progress that can be displayed in tab bars, taskbars, or window titles
What's New in 0.13.0
๐ New Features
-
Streaming Server Enhancements:
--sizeCLI option for specifying terminal size inCOLSxROWSformat (e.g.,--size 120x40or-s 120x40)--command/-cCLI option to execute a command after shell startup (with 1 second delay for prompt settling)initial_colsandinitial_rowsconfiguration options inStreamingConfigfor both Rust and Python APIs
-
Python Bindings Enhancements:
- New
MouseEncodingenum for mouse event encoding control (Default, Utf8, Sgr, Urxvt) - Direct screen buffer control:
use_alt_screen(),use_primary_screen() - Mouse encoding control:
mouse_encoding(),set_mouse_encoding() - Mode setters:
set_focus_tracking(),set_bracketed_paste(),set_title() - Bold brightening control:
bold_brightening(),set_bold_brightening() - Color getters for all theme colors (link, bold, cursor guide, badge, match, selection)
- New
What's New in 0.12.0
๐ Bug Fixes
- Terminal Reflow Improvements: Multiple fixes to scrollback and grid reflow behavior during resize
What's New in 0.11.0
๐ New Features
- Full Terminal Reflow on Width Resize: Both scrollback AND visible screen content now reflow when terminal width changes
- Previously, width changes cleared scrollback and clipped visible content
- Now implements intelligent reflow similar to xterm and iTerm2:
- Scrollback: Preserves all history with proper line wrapping/unwrapping
- Visible Screen: Content wraps instead of being clipped when narrowing
- Width increase: Unwraps soft-wrapped lines into longer lines
- Width decrease: Re-wraps lines that no longer fit
- Preserves all cell attributes (colors, bold, italic, etc.)
- Handles wide characters (CJK, emoji) correctly at line boundaries
- Significant UX improvement for terminal resize operations
What's New in 0.10.0
๐ New Features
-
Emoji Sequence Preservation: Complete support for complex emoji sequences and grapheme clusters
- โ ๏ธ vs โ - Variation selectors (emoji vs text style)
- ๐๐ฝ - Skin tone modifiers (Fitzpatrick scale)
- ๐จโ๐ฉโ๐งโ๐ฆ - ZWJ sequences (family emoji)
- ๐บ๐ธ ๐ฌ๐ง - Regional indicator flags
- รฉ - Combining diacritics and marks
- New
graphememodule for Unicode cluster detection - Enhanced Python bindings export full grapheme clusters
-
Web Terminal Frontend: Modern Next.js-based web interface
- Built with Next.js, TypeScript, and Tailwind CSS v4
- Theme support with configurable color palettes
- Nerd Font support for file/folder icons
- New Makefile targets for web frontend development
-
Terminal Sequence Support:
- CSI 3J - Clear scrollback buffer command
- Improved cursor positioning for snapshot exports
๐ Bug Fixes
- Graphics now properly preserved when scrolling into scrollback buffer
- Sixel content saved to scrollback during large scrolling operations
- Kitty Graphics Protocol animation parsing fixes (base64 encoding, frame actions)
โ ๏ธ Breaking Changes (Rust API only)
Cellstruct no longer implementsCopy(nowCloneonly)- Required for variable-length grapheme cluster storage
- All cell copy operations now require explicit
.clone()calls - Python bindings are unaffected - no changes needed in Python code
- Performance impact is minimal due to efficient cloning
What's New in 0.9.1
- Theme Rendering Fix: Fixed theme color palette application in Python bindings
What's New in 0.9.0
-
Graphics Protocol Support: Comprehensive multi-protocol graphics implementation
- iTerm2 Inline Images (OSC 1337): PNG, JPEG, GIF support with base64 encoding
- Kitty Graphics Protocol (APC G): Advanced image placement with reuse and animations
- Sixel Graphics: Enhanced with unique IDs and configurable cell dimensions
- Unified
GraphicsStorewith scrollback support and memory limits - Animation support with frame composition and timing control
- Graphics dropped event tracking for resource management
-
Pre-built Streaming Server Binaries: Download ready-to-run binaries from GitHub Releases
- Linux (x86_64, ARM64), macOS (Intel, Apple Silicon), Windows (x86_64)
- No compilation needed - just download and run
- Includes separate web frontend package (tar.gz/zip) for serving the terminal interface
- Published to crates.io for Rust developers:
cargo install par-term-emu-core-rust --features streaming
See CHANGELOG.md for complete version history.
Features
Core Terminal Emulation
- VT100/VT220/VT320/VT420/VT520 Support - Comprehensive terminal emulation matching iTerm2
- Rich Color Support - 16 ANSI colors, 256-color palette, 24-bit RGB (true color)
- Text Attributes - Bold, italic, underline (5 styles), strikethrough, blink, reverse, dim, hidden
- Advanced Cursor Control - Full VT cursor movement and positioning
- Line/Character Editing - VT220 insert/delete operations
- Rectangle Operations - VT420 fill/copy/erase/modify rectangular regions (DECFRA, DECCRA, etc.)
- Scrolling Regions - DECSTBM for restricted scrolling areas
- Tab Stops - Configurable tab stops (HTS, TBC, CHT, CBT)
- Unicode Support - Full Unicode including complex emoji sequences and grapheme clusters
- Variation selectors (emoji vs text presentation)
- Skin tone modifiers (Fitzpatrick scale U+1F3FB-U+1F3FF)
- Zero Width Joiner (ZWJ) sequences for multi-emoji glyphs
- Regional indicators for flag emoji
- Combining characters and diacritical marks
Modern Features
- Alternate Screen Buffer - Full support with automatic cleanup
- Mouse Support - Multiple tracking modes and encodings (X10, Normal, Button, Any, SGR, URXVT)
- Bracketed Paste Mode - Safe paste handling
- Focus Tracking - Focus in/out events
- OSC 8 Hyperlinks - Clickable URLs in terminal (full TUI support)
- OSC 52 Clipboard - Copy/paste over SSH without X11
- OSC 9/777 Notifications - Desktop-style alerts and notifications
- Shell Integration - OSC 133 (iTerm2/VSCode compatible)
- Kitty Keyboard Protocol - Progressive keyboard enhancement with auto-reset on alternate screen exit
- Synchronized Updates (DEC 2026) - Flicker-free rendering
- Tmux Control Protocol - Control mode integration support
Graphics Support
- Sixel Graphics - DEC VT340 compatible bitmap graphics with half-block rendering
- iTerm2 Inline Images - OSC 1337 protocol for PNG, JPEG, GIF images
- Kitty Graphics Protocol - APC G protocol with image reuse, animations, and advanced placement
- Unicode Placeholders - Virtual placements insert U+10EEEE characters for inline image display
- Unified Graphics Store - Protocol-agnostic storage with scrollback support
- Animation Support - Frame-based animations with timing and composition control
- Resource Management - Configurable memory limits and graphics dropped tracking
PTY Support
- Interactive Shell Sessions - Spawn and control shell processes
- Bidirectional I/O - Send input and receive output
- Process Management - Start, stop, and monitor child processes
- Dynamic Resizing - Resize with SIGWINCH signal
- Environment Control - Custom environment variables and working directory
- Event Loop Integration - Non-blocking update detection
- Cross-Platform - Linux, macOS, and Windows via portable-pty
Terminal Streaming (WebSocket)
- Standalone Server - Pure Rust streaming server binary (no Python required)
- Real-time Streaming - Sub-100ms latency terminal streaming over WebSocket
- Multiple Clients - Support for concurrent viewers per session
- Authentication - Optional API key authentication (header or URL param)
- Configurable Themes - Multiple built-in color themes (iTerm2, Monokai, Dracula, Solarized)
- Auto-resize - Client-initiated terminal resizing with SIGWINCH support
- Browser Compatible - Works with any WebSocket client (xterm.js recommended)
- Modern Web Frontend - Next.js/React application with Tailwind CSS v4 and xterm.js
Screenshots and Export
- Multiple Formats - PNG, JPEG, BMP, SVG (vector), HTML
- Embedded Font - JetBrains Mono bundled - no installation required
- Programming Ligatures - =>, !=, >=, and other code ligatures
- True Font Rendering - High-quality antialiasing for raster formats
- Color Emoji Support - Full emoji rendering with automatic font fallback
- Session Recording - Record/replay sessions (asciicast v2, JSON)
- Export Functions - Plain text, ANSI styled, HTML export
Macro Recording and Playback
- YAML Format - Human-readable macro storage format
- Friendly Key Names - Intuitive key combinations (
ctrl+shift+s,enter,f1, etc.) - Keyboard Events - Record and replay keyboard input with precise timing
- Delays - Control timing between events
- Screenshot Triggers - Trigger screenshots during playback
- Playback Controls - Play, pause, resume, stop, and speed control
- Macro Library - Store and manage multiple macros
- Recording Conversion - Convert terminal recording sessions to macros
Utility Functions
- Text Extraction - Smart word/URL detection, selection boundaries, bracket matching
- Content Search - Find text with case-sensitive/insensitive matching
- Buffer Statistics - Memory usage, cell counts, graphics count and memory tracking
- Color Utilities - 18+ color manipulation functions (iTerm2-compatible)
- NTSC brightness, contrast adjustment, WCAG accessibility checks
- Color space conversions (RGB, HSL, Hex, ANSI 256)
- Saturation/hue adjustment, color mixing
Documentation
- API Reference - Complete Python API documentation
- VT Sequences - Comprehensive ANSI/VT sequence reference
- Advanced Features - Detailed feature guides
- Architecture - Internal architecture details
- Security - PTY security best practices
- Building - Build instructions and requirements
- Configuration Reference - Configuration options
- Cross-Platform Notes - Platform-specific information
- VT Technical Reference - Detailed VT compatibility and implementation
- Fonts - Font configuration and rendering
- Macros - Macro recording and playback system
- Streaming - WebSocket terminal streaming
- Rust Usage - Using the library in pure Rust projects
- Graphics Testing - Testing graphics protocol implementations
Installation
From PyPI
uv add par-term-emu-core-rust
# or
pip install par-term-emu-core-rust
From Source
Requires Rust 1.75+ and Python 3.12+:
# Install maturin (build tool)
uv tool install maturin
# Build and install
maturin develop --release
Building a Wheel
maturin build --release
uv add --find-links target/wheels par-term-emu-core-rust
# or
pip install target/wheels/par_term_emu_core_rust-*.whl
Using as a Rust Library
The library can be used in pure Rust projects without Python. Choose your feature combination:
| Use Case | Cargo.toml | What's Included |
|---|---|---|
| Rust Only | par-term-emu-core-rust = { version = "0.10", default-features = false } |
Terminal, PTY, Macros |
| Rust + Streaming | par-term-emu-core-rust = { version = "0.10", default-features = false, features = ["streaming"] } |
+ WebSocket/HTTP server |
| Python Only | par-term-emu-core-rust = "0.10" |
+ Python bindings |
| Everything | par-term-emu-core-rust = { version = "0.10", features = ["full"] } |
All features |
Download pre-built streaming server (recommended):
Pre-built binaries and web frontend packages are available from GitHub Releases:
# Download binary (Linux example)
wget https://github.com/paulrobello/par-term-emu-core-rust/releases/latest/download/par-term-streamer-linux-x86_64
chmod +x par-term-streamer-linux-x86_64
# Download web frontend
wget https://github.com/paulrobello/par-term-emu-core-rust/releases/latest/download/par-term-web-frontend-v0.10.0.tar.gz
tar -xzf par-term-web-frontend-v0.10.0.tar.gz -C ./web_term
# Run
./par-term-streamer-linux-x86_64 --web-root ./web_term
Available binaries: Linux (x86_64, ARM64), macOS (Intel, Apple Silicon), Windows (x86_64)
Or install from crates.io:
cargo install par-term-emu-core-rust --features streaming
Or build from source:
cargo build --bin par-term-streamer --no-default-features --features streaming --release
./target/release/par-term-streamer --help
See docs/RUST_USAGE.md for detailed Rust API documentation and examples.
Optional Components
Terminfo Installation
For optimal terminal compatibility, install the par-term terminfo definition:
# Install for current user
./terminfo/install.sh
# Or install system-wide
sudo ./terminfo/install.sh --system
# Then use
export TERM=par-term
export COLORTERM=truecolor
See terminfo/README.md for details.
Shell Integration
Enhances terminal with semantic prompt markers, command status tracking, and smart selection:
cd shell_integration
./install.sh # Auto-detects bash/zsh/fish
See shell_integration/README.md for details.
Quick Start
Basic Terminal Emulation
from par_term_emu_core_rust import Terminal
# Create terminal
term = Terminal(80, 24)
# Process ANSI sequences
term.process_str("Hello, \x1b[31mWorld\x1b[0m!\n")
term.process_str("\x1b[1;32mBold green text\x1b[0m\n")
# Get content and cursor position
print(term.content())
col, row = term.cursor_position()
print(f"Cursor at: ({col}, {row})")
PTY (Interactive Shell)
from par_term_emu_core_rust import PtyTerminal
import time
# Create PTY terminal and spawn shell
with PtyTerminal(80, 24) as term:
term.spawn_shell()
# Send commands
term.write_str("echo 'Hello from shell!'\n")
time.sleep(0.2)
# Get output
print(term.content())
# Resize terminal
term.resize(100, 30)
# Exit shell
term.write_str("exit\n")
# Automatic cleanup
Screenshots
term = Terminal(80, 24)
term.process_str("\x1b[1;31mHello, World!\x1b[0m\n")
# Save screenshot
term.screenshot_to_file("output.png")
term.screenshot_to_file("output.svg", format="svg") # Vector graphics!
term.screenshot_to_file("output.html", format="html") # Styled HTML
# Custom configuration
term.screenshot_to_file(
"output.png",
font_size=16.0,
padding=20,
include_scrollback=True,
minimum_contrast=0.5 # iTerm2-compatible contrast adjustment
)
Color Utilities
from par_term_emu_core_rust import (
perceived_brightness_rgb, adjust_contrast_rgb,
contrast_ratio, meets_wcag_aa,
rgb_to_hex, hex_to_rgb, mix_colors
)
# iTerm2-compatible contrast adjustment
adjusted = adjust_contrast_rgb((64, 64, 64), (0, 0, 0), 0.5)
# WCAG accessibility checks
ratio = contrast_ratio((0, 0, 0), (255, 255, 255))
print(f"Contrast ratio: {ratio:.1f}:1")
print(f"Meets WCAG AA: {meets_wcag_aa((0, 0, 0), (255, 255, 255))}")
# Color conversions
hex_color = rgb_to_hex((255, 128, 64)) # "#FF8040"
rgb = hex_to_rgb("#FF8040") # (255, 128, 64)
mixed = mix_colors((255, 0, 0), (0, 0, 255), 0.5) # Purple
Macro Recording and Playback
from par_term_emu_core_rust import Macro, PtyTerminal
import time
# Create a macro manually
macro = Macro("git_status")
macro.set_description("Check git status and show branch")
macro.add_key("g")
macro.add_key("i")
macro.add_key("t")
macro.add_key("space")
macro.add_key("s")
macro.add_key("t")
macro.add_key("a")
macro.add_key("t")
macro.add_key("u")
macro.add_key("s")
macro.add_key("enter")
macro.add_delay(500) # Wait 500ms
macro.add_screenshot("git_status.png") # Trigger screenshot
# Save to YAML
macro.save_yaml("git_status.yaml")
# Load and play back
term = PtyTerminal(80, 24)
term.spawn_shell()
# Load macro from file
loaded_macro = Macro.load_yaml("git_status.yaml")
term.load_macro("git_check", loaded_macro)
# Play the macro
term.play_macro("git_check", speed=1.0) # Normal speed
# Tick to execute macro events
while term.is_macro_playing():
if term.tick_macro(): # Returns True if event was processed
time.sleep(0.01) # Small delay for visual effect
# Check for screenshot triggers
triggers = term.get_macro_screenshot_triggers()
for label in triggers:
term.screenshot_to_file(label)
# Convert a recording to a macro
term.start_recording("test session")
term.write_str("ls -la\n")
time.sleep(0.5)
session = term.stop_recording()
# Convert and save
macro = term.recording_to_macro(session, "ls_command")
macro.save_yaml("ls_command.yaml")
Examples
See the examples/ directory for comprehensive examples:
Basic Examples
basic_usage_improved.py- Enhanced basic usagecolors_demo.py- Color supportcursor_movement.py- Cursor controltext_attributes.py- Text stylingunicode_emoji.py- Unicode/emoji supportscrollback_demo.py- Scrollback buffer usage
Advanced Features
alt_screen.py- Alternate screen buffermouse_tracking.py- Mouse eventsbracketed_paste.py- Bracketed pastesynchronized_updates.py- Flicker-free renderingshell_integration.py- OSC 133 integrationtest_osc52_clipboard.py- SSH clipboardtest_kitty_keyboard.py- Kitty keyboard protocolhyperlink_demo.py- Clickable URLsnotifications.py- Desktop notificationsrectangle_operations.py- VT420 rectangle ops
Graphics and Export
display_image_sixel.py- Sixel graphicstest_sixel_simple.py- Simple sixel examplestest_sixel_display.py- Advanced sixel displayscreenshot_demo.py- Screenshot featuresfeature_showcase.py- Comprehensive TUI showcase
PTY Examples
pty_basic.py- Basic PTY usagepty_shell.py- Interactive shellspty_resize.py- Dynamic resizingpty_event_loop.py- Event loop integrationpty_mouse_events.py- Mouse in PTYpty_custom_env.py- Custom environment variablespty_multiple.py- Multiple PTY sessionspty_with_par_term.py- Integration with par-term
Terminal Streaming
streaming_demo.py- Python WebSocket streaming serverstreaming_client.html- Browser-based terminal client
Macros and Automation
demo.yaml- Example macro definition
Standalone Rust Server:
# Build and run (default: ws://127.0.0.1:8080)
make streamer-run
# Run with authentication
make streamer-run-auth
# Or use cargo directly
cargo build --bin par-term-streamer --no-default-features --features streaming --release
./target/release/par-term-streamer --port 8080 --theme dracula
# With authentication
./target/release/par-term-streamer --api-key my-secret --theme monokai
# Install globally
make streamer-install
par-term-streamer --help
Available Themes: iterm2-dark, monokai, dracula, solarized-dark
Web Terminal Frontend
Using Pre-built Package (Recommended):
Download the pre-built static web frontend from GitHub Releases:
# Download and extract
wget https://github.com/paulrobello/par-term-emu-core-rust/releases/latest/download/par-term-web-frontend-v0.10.0.tar.gz
tar -xzf par-term-web-frontend-v0.10.0.tar.gz -C ./web_term
# Run streamer with web frontend
par-term-streamer --web-root ./web_term
# Open browser to http://localhost:8080
See web_term/README.md for detailed usage instructions.
Building from Source:
A modern Next.js-based web terminal frontend source is in web-terminal-frontend/:
cd web-terminal-frontend
# Install dependencies
npm install
# Development server (runs on port 8030)
npm run dev
# Build for production (outputs to out/)
npm run build
# Copy to web_term for serving
cp -r out/* ../web_term/
Features:
- Modern UI with Tailwind CSS v4
- xterm.js terminal emulator
- WebSocket connection to streaming server
- Theme selection and synchronization
- Responsive design
- Terminal resize support
See web-terminal-frontend/README.md for detailed setup and configuration.
TUI Demo Application
A full-featured TUI (Text User Interface) application is available in the sister project par-term-emu-tui-rust.
Installation: uv add par-term-emu-tui-rust or pip install par-term-emu-tui-rust
GitHub: https://github.com/paulrobello/par-term-emu-tui-rust
Technology
- Rust (1.75+) - Core library implementation
- Python (3.12+) - Python bindings
- PyO3 - Zero-cost Python/Rust bindings
- VTE - ANSI sequence parsing
- portable-pty - Cross-platform PTY support
Running Tests
# Run Rust tests
cargo test
# Run Python tests
uv sync # Install dependencies including pytest
pytest tests/
Performance
- Zero-copy operations where possible
- Efficient grid representation
- Fast ANSI parsing with VTE crate
- Minimal Python/Rust boundary crossings
See docs/ARCHITECTURE.md for implementation details.
Security
When using PTY functionality, follow security best practices to prevent command injection and other vulnerabilities.
See docs/SECURITY.md for comprehensive security guidelines.
Contributing
Contributions are welcome! Please submit issues or pull requests on GitHub.
Development Setup
git clone https://github.com/paulrobello/par-term-emu-core-rust.git
cd par-term-emu-core-rust
make setup-venv # Create virtual environment
make pre-commit-install # Install pre-commit hooks (recommended)
make dev # Build library
make checkall # Run all quality checks
Code Quality
All contributions must pass:
- Rust formatting (
cargo fmt) - Rust linting (
cargo clippy) - Python formatting (
make fmt-python) - Python linting (
make lint-python) - Type checking (
pyright) - Tests (
make test-python)
TIP: Use make pre-commit-install to automate all checks on every commit!
See CLAUDE.md for detailed development instructions.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Paul Robello - probello@gmail.com
Links
- PyPI: https://pypi.org/project/par-term-emu-core-rust/
- Crates.io: https://crates.io/crates/par-term-emu-core-rust
- GitHub: https://github.com/paulrobello/par-term-emu-core-rust
- TUI Application: https://github.com/paulrobello/par-term-emu-tui-rust
- Documentation: See docs/ directory
- Examples: See examples/ directory
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file par_term_emu_core_rust-0.19.4.tar.gz.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90ac428309fbe7586dd1a08d80ed3577212db62c3b911d6b4b1a882802e1976d
|
|
| MD5 |
d218945d24e4d3d53ac202c9fd5d8aa8
|
|
| BLAKE2b-256 |
fce0fb46efcf71aa188860a9d66ee0fc01b39c28acadc7c79df7649efc6bc061
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4.tar.gz:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4.tar.gz -
Subject digest:
90ac428309fbe7586dd1a08d80ed3577212db62c3b911d6b4b1a882802e1976d - Sigstore transparency entry: 769302023
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1faf1bdb5903b46e87dd5df3a7c2c569893e29772424498dbe342120fd3dcb2a
|
|
| MD5 |
ea2ae8e0d9329a02a30f4d900681d0db
|
|
| BLAKE2b-256 |
a5bbba75f40fa1fe4d03d71256889dfc275a73ab64eeed0f6edd8cd7520d67f7
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp314-cp314-win_amd64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp314-cp314-win_amd64.whl -
Subject digest:
1faf1bdb5903b46e87dd5df3a7c2c569893e29772424498dbe342120fd3dcb2a - Sigstore transparency entry: 769302099
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f85846f9cf8e7c9e43e12d1c939b24eba476de6df4f126b48d0091f70456976
|
|
| MD5 |
dc287aa89fd2c197f164071013132dcc
|
|
| BLAKE2b-256 |
f9f25378cc0d27484840a3a16f993120e6435b3181f2c7d2920417c1d73913a2
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
9f85846f9cf8e7c9e43e12d1c939b24eba476de6df4f126b48d0091f70456976 - Sigstore transparency entry: 769302071
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a59c70a404233ac056e5ec8b1f323a01ba71941702a0dfac004813980513e3b5
|
|
| MD5 |
9236a9431147052f742e856d8dc83ced
|
|
| BLAKE2b-256 |
852991f4f5654e7d3a577b04ecdcc85fa2d2a8a31c3dfb788e0e0648c1cbfc16
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
a59c70a404233ac056e5ec8b1f323a01ba71941702a0dfac004813980513e3b5 - Sigstore transparency entry: 769302185
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.14, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
929b84445ce130c7a22887772a6958ee64cb47b32f26f85495afb193bab9dc53
|
|
| MD5 |
deffdb866d2853bac722d329199189c9
|
|
| BLAKE2b-256 |
74ea285231fe82cd167301d1338ec7b6bba5d6ed040d0ca9afefad950762e5ca
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.whl -
Subject digest:
929b84445ce130c7a22887772a6958ee64cb47b32f26f85495afb193bab9dc53 - Sigstore transparency entry: 769302054
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 6.6 MB
- Tags: CPython 3.14, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c2576d8c6e0b50bfce0f7b455f86ac11cf503f15799d95acdd3fbd924ff5f28
|
|
| MD5 |
b8452de304a0f46c380d2f380e9bdad9
|
|
| BLAKE2b-256 |
f8059778f0793717baf6b8034c5ce81bac97acffec594fa24e9933ed303e8d0f
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
3c2576d8c6e0b50bfce0f7b455f86ac11cf503f15799d95acdd3fbd924ff5f28 - Sigstore transparency entry: 769302273
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47b9887bc6b06b08eec622755553c24eb0beed79e7936c617b7f203cf03e9ed2
|
|
| MD5 |
b45bf64a14e432a388176b74a1fb0101
|
|
| BLAKE2b-256 |
b1d39da6d3fe4ee87259d11465243133d2ec752069900cf0f6af28cc45be67dd
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp313-cp313-win_amd64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp313-cp313-win_amd64.whl -
Subject digest:
47b9887bc6b06b08eec622755553c24eb0beed79e7936c617b7f203cf03e9ed2 - Sigstore transparency entry: 769302114
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73b6a61c35275251335aa52671843d48de3133e9256193914c21032f15a36887
|
|
| MD5 |
2ec63bd34cbee7b84a76e333a438a875
|
|
| BLAKE2b-256 |
e3277e0fd8ba8cf3e01e432686987b99674359ed50ba44d01439391b76c1d72b
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
73b6a61c35275251335aa52671843d48de3133e9256193914c21032f15a36887 - Sigstore transparency entry: 769302202
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.3 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
083c0870edd45b3d1a4ed67e031f5117591a2031e8354ce8af073fec9cc07364
|
|
| MD5 |
113ac85a36b8776038781073ecc162ab
|
|
| BLAKE2b-256 |
7667f86e87d19cb58c12aa9a45f81e68f328cc9b3bf9dc3a5c7ee48c0250b65e
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
083c0870edd45b3d1a4ed67e031f5117591a2031e8354ce8af073fec9cc07364 - Sigstore transparency entry: 769302294
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e94bae73d1e26df0bfe89060ccf28b78c93001f7a2311945b5baa010bbb014a
|
|
| MD5 |
2ba52e166f73b7c736416c329293a352
|
|
| BLAKE2b-256 |
798485e38ac7676aa2c4100761ccbef96d414fd9b6bd06c317bdde95e55c61d4
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.whl -
Subject digest:
7e94bae73d1e26df0bfe89060ccf28b78c93001f7a2311945b5baa010bbb014a - Sigstore transparency entry: 769302085
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 6.6 MB
- Tags: CPython 3.13, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3a1a0e9c6c929b0abb215d6ead58cc99ca83a0d50e807396763a982c8c73222
|
|
| MD5 |
df4599a0345f34a84f8ef5cb9bd64cec
|
|
| BLAKE2b-256 |
dc4312a6192f43b07c4b72e262b37f1f929a477394896e77e63fa3548bfacd8b
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
d3a1a0e9c6c929b0abb215d6ead58cc99ca83a0d50e807396763a982c8c73222 - Sigstore transparency entry: 769302173
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9641e703c32eaf4430947eaa92497085ec20034055a2cab579b955772d8df39
|
|
| MD5 |
c825b644313e3e63ba129c91e30f8cf8
|
|
| BLAKE2b-256 |
02b7577facccf6c975454c735f1dd0d31666ea2c5fce68a8251528a35a8eee82
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp312-cp312-win_amd64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp312-cp312-win_amd64.whl -
Subject digest:
a9641e703c32eaf4430947eaa92497085ec20034055a2cab579b955772d8df39 - Sigstore transparency entry: 769302134
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9b95ea1ca2a58da8af5f6657824e07d876e74da8f30586352cf5ed0cca8c443
|
|
| MD5 |
a06b81508b6d4c17598a87f4e7625933
|
|
| BLAKE2b-256 |
e5f04752450915c17f1d577cfa241b6527b691dc74f37180e50a88acf5d5e5e6
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
a9b95ea1ca2a58da8af5f6657824e07d876e74da8f30586352cf5ed0cca8c443 - Sigstore transparency entry: 769302254
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.3 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0481ad3d15a13e8a4994b86e3a7789b44d246ef7cdf82f1e0e667fab32623aa
|
|
| MD5 |
0e6ef902f051695e61a0e45f0f470348
|
|
| BLAKE2b-256 |
092998ac0e2cec6601a08b6221a6d68eecd155a9a406617f758b00d018d6cf6c
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
b0481ad3d15a13e8a4994b86e3a7789b44d246ef7cdf82f1e0e667fab32623aa - Sigstore transparency entry: 769302242
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 3.4 MB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
267fb6237ca9a962f367e802cfa946f6e3b19d655730dfc490ece3a1d0feab69
|
|
| MD5 |
f4953bb07c5d99af902ebab6121873f6
|
|
| BLAKE2b-256 |
995962f6bd8a800caa733db4e48cc7de53b9d0dbc26bf14023f7c10cad8b88e8
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
267fb6237ca9a962f367e802cfa946f6e3b19d655730dfc490ece3a1d0feab69 - Sigstore transparency entry: 769302152
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 6.6 MB
- Tags: CPython 3.12, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
936bcad39210b63ab6a16d672a083271fe14ddf6af9af72348c1e19809fa4e41
|
|
| MD5 |
e831fa0ab6eeaa04974a4810edd1c45f
|
|
| BLAKE2b-256 |
ca90fce43c3e52110e7bf569336936be5381e3a6ff4072747df05d6c08740d26
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
deployment.yml on paulrobello/par-term-emu-core-rust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
par_term_emu_core_rust-0.19.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
936bcad39210b63ab6a16d672a083271fe14ddf6af9af72348c1e19809fa4e41 - Sigstore transparency entry: 769302219
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@4497b92c7059f7e5ace386083070895308e680cb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/paulrobello
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
deployment.yml@4497b92c7059f7e5ace386083070895308e680cb -
Trigger Event:
workflow_dispatch
-
Statement type: