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
What's New in 0.4.0
Sixel Resource Limits and Safety
Version 0.4.0 adds comprehensive resource management for Sixel graphics to prevent memory exhaustion from untrusted or malformed content:
- Configurable Resource Limits: Control maximum bitmap dimensions (width/height), repeat counts, and in-memory graphics count
- Per-Terminal Limits: Each terminal instance can have its own safety limits
- Hard Safety Ceilings: Built-in maximum limits (4096x4096 pixels, 10,000 repeat count) that cannot be exceeded
- Drop Tracking: Monitor how many graphics were dropped due to resource limits
- Statistics API: New methods to inspect and tune Sixel resource usage:
get_sixel_limits()/set_sixel_limits(max_width, max_height, max_repeat)get_sixel_graphics_limit()/set_sixel_graphics_limit(max_graphics)get_dropped_sixel_graphics()get_sixel_stats()- comprehensive statistics dictionary
Grid Resize Improvements
- Fixed Scrollback Handling: Scrollback buffer is now properly managed during terminal resize
- Width Change Safety: Scrollback is cleared when terminal width changes to prevent indexing errors and misaligned lines
- Height Preservation: Scrollback content is preserved when only terminal height changes
- Enhanced Tests: Added comprehensive tests for resize behavior with scrollback
Documentation Enhancements
- Sixel Safety Guide: Extensive documentation on resource limits and safety best practices in
docs/ADVANCED_FEATURES.md - PTY Integration: Clear examples of applying Sixel limits to PTY-backed terminals
- API Reference Updates: Complete documentation for all new Sixel management methods
Description
A comprehensive terminal emulator library written in Rust with Python bindings for Python 3.12+. Provides VT100/VT220/VT320/VT420 compatibility with PTY support, matching iTerm2's feature set.
Table of Contents
- What's New in 0.4.0
- Description
- Technology
- Prerequisites
- Features
- Installation
- Quick Start
- Usage Examples
- API Reference
- Supported ANSI/VT Sequences
- Examples
- TUI Demo Application
- Security
- Running Tests
- Performance
- Architecture
- Contributing
- License
- Author
Technology
- Rust (1.75+)
- Python (3.12+)
- PyO3 for Python bindings
- VTE for ANSI parsing
- portable-pty for cross-platform PTY support
Prerequisites
- Rust 1.75 or higher
- Python 3.12 or higher
- uv package manager
- maturin (for building Python wheels)
Features
Core VT Compatibility (iTerm2 Feature Parity)
- VT100/VT220/VT320/VT420 Support: Comprehensive terminal emulation matching iTerm2's capabilities
- Rich Color Support:
- Basic 16 ANSI colors
- 256-color palette
- 24-bit RGB (true color)
- Text Attributes: Bold, italic, underline (with styles: straight, double, curly, dotted, dashed), strikethrough, blink, reverse, dim, and hidden
- Advanced Cursor Control: Full VT100 cursor movement and positioning
- Line/Character Editing: VT220 insert/delete operations (IL, DL, ICH, DCH, ECH)
- Rectangle Operations: VT420 fill/copy/erase/modify rectangular regions (DECFRA, DECCRA, DECSERA, DECERA, DECCARA, DECRARA, DECRQCRA, DECSACE)
- Scrolling Regions: DECSTBM for restricted scrolling areas
- Tab Stops: Configurable tab stops (HTS, TBC, CHT, CBT)
- Terminal Modes:
- Application cursor keys (DECCKM)
- Origin mode (DECOM)
- Auto wrap mode (DECAWM)
- Multiple alternate screen variants (47, 1047, 1049)
- Mouse Support: Multiple mouse tracking modes (X10, Normal, Button, Any) and encodings (Default, UTF-8, SGR, URXVT)
- Modern Features:
- Alternate screen buffer
- Bracketed paste mode
- Focus tracking
- OSC 8 hyperlinks (full support - clickable in TUI)
- OSC 52 clipboard operations (copy/paste over SSH without X11)
- OSC 9 / OSC 777 notifications (desktop-style alerts)
- Shell integration (OSC 133)
- Sixel graphics (DCS format with half-block rendering)
- Kitty Keyboard Protocol (progressive enhancement for keyboard handling)
- Scrollback Buffer: Configurable history of scrolled lines
- Terminal Resizing: Dynamic size adjustment
- Unicode Support: Full Unicode including emoji and wide characters
- High Performance: Written in Rust for speed and safety
- Python Integration: Easy-to-use Python API via PyO3
PTY Support
- Interactive Shell Sessions: Spawn and control shell processes
- Bidirectional I/O: Send input and receive output from running processes
- Process Management: Start, stop, and monitor child processes
- Dynamic Resizing: Resize terminal and send SIGWINCH to child process
- Environment Control: Custom environment variables and working directory
- Event Loop Integration: Non-blocking update detection for efficient event loops
- Context Manager Support: Automatic cleanup with Python
withstatements - Cross-Platform: Works on Linux, macOS, and Windows via portable-pty
Utility Functions
- Text Extraction: Smart word/URL detection, line unwrapping, selection boundaries
- Content Search: Find text with case-sensitive/insensitive matching, "find next" support
- Buffer Statistics: Get detailed metrics (memory usage, cell counts, graphics count)
- Static Utilities: Strip ANSI codes, measure text width, parse colors from strings
Screenshot Support
- Multiple Formats: PNG, JPEG, BMP, SVG (vector graphics!), and HTML
- Embedded Font: JetBrains Mono bundled - no font installation required!
- Programming Ligatures: Supports =>, !=, >=, and other code ligatures
- Box Drawing: Perfect rendering of box drawing characters (┌─┐│└┘)
- High-Quality Rendering: True font rendering with antialiasing for raster formats
- SVG Vector Output: Infinitely scalable screenshots with selectable text
- HTML Output: Styled HTML with full color support and text attributes (includes full document or content-only mode)
- Color Emoji Support: Full color emoji rendering with automatic font fallback (NotoColorEmoji, Apple Color Emoji, Segoe UI Emoji)
- Flag Emoji Support: Proper rendering of flag emojis (🇺🇸 🇨🇳 🇯🇵) via text shaping
- Cursor Rendering: Capture cursor position with 3 styles (Block, Underline, Bar) and custom colors
- Sixel Graphics: Inline graphics rendering with full alpha blending support
- Configurable: Custom fonts, sizes, padding, and quality settings
- Full Styling: Preserves all colors, text attributes, and decorations
- Wide Character Support: Renders CJK characters and emoji correctly
- Python & Rust APIs: Easy-to-use interfaces for both languages
- TUI Integration: Built-in
Ctrl+Shift+Shotkey in the TUI application
Installation
From Source
Requires Rust 1.75+ and Python 3.12+:
# Install maturin (build tool) using uv
uv tool install maturin
# Build and install the package
maturin develop --release
Building a Wheel
maturin build --release
uv pip install target/wheels/par_term_emu_core_rust-*.whl
Terminfo Installation (Optional)
For optimal terminal compatibility, you can install the par-term terminfo definition. This allows applications to fully utilize all terminal capabilities (true color, Sixel graphics, etc.):
# Install for current user
./terminfo/install.sh
# Or install system-wide (requires sudo)
sudo ./terminfo/install.sh --system
# Then use the terminal type
export TERM=par-term
export COLORTERM=truecolor
See terminfo/README.md for detailed information.
Note: If not installed, the terminal defaults to xterm-256color compatibility mode, which works well with most applications.
Shell Integration (Optional but Recommended)
Shell integration enhances your terminal experience with semantic prompt markers. This enables features like prompt navigation, command status tracking, and smart selection.
# Install for your current shell (auto-detects bash/zsh/fish)
cd shell_integration
./install.sh
# Or install for all available shells
./install.sh --all
# Or install for a specific shell
./install.sh bash # or zsh, or fish
After installation, restart your shell or run:
source ~/.par_term_emu_core_rust_shell_integration.bash # for bash
source ~/.par_term_emu_core_rust_shell_integration.zsh # for zsh
source ~/.par_term_emu_core_rust_shell_integration.fish # for fish
See shell_integration/README.md for detailed information, advanced usage, and customization options.
Quick Start
from par_term_emu_core_rust import Terminal
# Create a terminal with 80 columns and 24 rows
term = Terminal(80, 24)
# Process some text with ANSI codes
term.process_str("Hello, \x1b[31mWorld\x1b[0m!\n")
term.process_str("\x1b[1;32mBold green text\x1b[0m\n")
# Get the content
print(term.content())
# Check cursor position
col, row = term.cursor_position()
print(f"Cursor at: ({col}, {row})")
PTY Quick Start
from par_term_emu_core_rust import PtyTerminal
import time
# Create a terminal and spawn a shell
with PtyTerminal(80, 24) as term:
term.spawn_shell()
# Send a command
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 on exit
Usage Examples
Basic Text Processing
from par_term_emu_core_rust import Terminal
term = Terminal(80, 24)
# Write plain text
term.process_str("Hello, Terminal!\n")
# Write bytes
term.process(b"Binary data\n")
# Get content
content = term.content()
print(content)
Colors and Styling
term = Terminal(80, 24)
# Basic colors (30-37 for foreground, 40-47 for background)
term.process_str("\x1b[31mRed text\x1b[0m\n")
term.process_str("\x1b[42mGreen background\x1b[0m\n")
# Bright colors (90-97, 100-107)
term.process_str("\x1b[91mBright red\x1b[0m\n")
# 256-color palette
term.process_str("\x1b[38;5;208mOrange text\x1b[0m\n")
# 24-bit RGB colors
term.process_str("\x1b[38;2;255;128;0mRGB orange\x1b[0m\n")
# Text attributes
term.process_str("\x1b[1mBold\x1b[0m ")
term.process_str("\x1b[3mItalic\x1b[0m ")
term.process_str("\x1b[4mUnderline\x1b[0m\n")
Cursor Control
term = Terminal(80, 24)
# Position cursor at row 5, column 10 (1-indexed)
term.process_str("\x1b[5;10HHello")
# Move cursor
term.process_str("\x1b[2A") # Up 2 rows
term.process_str("\x1b[3B") # Down 3 rows
term.process_str("\x1b[4C") # Forward 4 columns
term.process_str("\x1b[5D") # Back 5 columns
# Hide/show cursor
term.process_str("\x1b[?25l") # Hide
term.process_str("\x1b[?25h") # Show
# Check cursor state
visible = term.cursor_visible()
col, row = term.cursor_position()
Screen Manipulation
term = Terminal(80, 24)
term.process_str("Some content\n")
# Clear operations
term.process_str("\x1b[2J") # Clear entire screen
term.process_str("\x1b[K") # Clear from cursor to end of line
term.process_str("\x1b[1K") # Clear from beginning of line to cursor
term.process_str("\x1b[2K") # Clear entire line
# Scroll
term.process_str("\x1b[5S") # Scroll up 5 lines
term.process_str("\x1b[5T") # Scroll down 5 lines
Scrollback Buffer
term = Terminal(40, 10, scrollback=1000)
# Write more lines than terminal height
for i in range(20):
term.process_str(f"Line {i}\n")
# Get scrollback
scrollback = term.scrollback()
print(f"Scrollback has {len(scrollback)} lines")
for line in scrollback:
print(f"Scrolled: {line}")
Terminal Resizing
term = Terminal(80, 24)
# Write some content
term.process_str("Content before resize\n")
# Resize terminal
term.resize(100, 30)
# Content is preserved
print(term.size()) # (100, 30)
Cell Inspection
term = Terminal(80, 24)
term.process_str("\x1b[1;31mRed bold text\x1b[0m")
# Get character at position
char = term.get_char(0, 0)
print(f"Character: {char}")
# Get colors
fg_color = term.get_fg_color(0, 0)
bg_color = term.get_bg_color(0, 0)
if fg_color:
r, g, b = fg_color
print(f"Foreground: RGB({r}, {g}, {b})")
# Get attributes
attrs = term.get_attributes(0, 0)
if attrs:
print(f"Bold: {attrs.bold}")
print(f"Italic: {attrs.italic}")
print(f"Underline: {attrs.underline}")
Buffer Export
term = Terminal(80, 24, scrollback=1000)
# Write multiple lines with styling
for i in range(50):
term.process_str(f"\x1b[1;{31 + i % 7}mLine {i}\x1b[0m\n")
# Export as plain text (no styling)
plain_text = term.export_text()
with open("session.txt", "w") as f:
f.write(plain_text)
# Export with ANSI styling preserved
styled_text = term.export_styled()
with open("session.ansi", "w") as f:
f.write(styled_text)
# Export as HTML with full styling
html_output = term.export_html(include_styles=True)
with open("session.html", "w") as f:
f.write(html_output) # Full HTML document with styles
# Export HTML content only (for embedding)
html_content = term.export_html(include_styles=False)
# Returns just the styled <span> elements, no <html>/<head>/<body>
# Also works with PTY sessions
with PtyTerminal(80, 24) as pty:
pty.spawn_shell()
pty.write_str("ls -la\n")
time.sleep(0.5)
# Save entire session (scrollback + screen)
session_log = pty.export_styled()
with open("pty_session.log", "w") as f:
f.write(session_log)
Screenshots
Take high-quality screenshots of terminal output with true font rendering:
from par_term_emu_core_rust import Terminal
term = Terminal(80, 24)
# Add some colorful content
term.process_str("\x1b[1;31mHello, World!\x1b[0m\n")
term.process_str("\x1b[32m✓ Success\x1b[0m\n")
# Take screenshot as PNG bytes (default)
png_bytes = term.screenshot()
# Save to file (format auto-detected from extension)
term.screenshot_to_file("output.png")
# Or explicitly specify format
term.screenshot_to_file("output.jpg", format="jpeg", quality=90)
# SVG format for infinitely scalable vector graphics
term.screenshot_to_file("output.svg", format="svg") # Selectable text!
# HTML format for styled terminal output (embeddable or standalone)
term.screenshot_to_file("output.html", format="html") # Full HTML document
# Custom configuration
term.screenshot_to_file(
"output.png",
font_size=16.0, # Larger text
padding=20, # More padding around edges
include_scrollback=True # Include scrollback history
)
# Capture scrolled view (e.g., 10 lines back from current position)
term.screenshot_to_file(
"output.png",
scrollback_offset=10 # Capture from 10 lines back
)
# Customize theme colors
term.screenshot_to_file(
"output.png",
link_color=(0, 123, 255), # Custom hyperlink color
bold_color=(255, 255, 0), # Custom bold text color
use_bold_color=True # Apply custom bold color
)
# Specify custom font (for raster formats)
term.screenshot_to_file(
"output.png",
font_path="/path/to/font.ttf"
)
Supported Formats
- PNG: Lossless, best for text and screenshots (default)
- JPEG: Smaller file size, configurable quality (1-100)
- BMP: Uncompressed, large file size
- SVG: Vector format with infinitely scalable, selectable text - perfect for documentation!
- HTML: Styled HTML output with full color support and text attributes - embeddable or standalone document
TUI Integration
Note: TUI integration features are available in the sister project par-term-emu-tui-rust, which includes screenshot hotkeys and other interactive features.
Text Extraction & Smart Selection
Extract words, URLs, and lines with intelligent boundary detection:
term = Terminal(80, 24)
term.process_str("Visit https://example.com for more info\n")
term.process_str("Use snake_case or kebab-case naming\n")
term.process_str("Function call: foo(bar, {x: 1, y: \"hello\"})\n")
# Extract word at cursor position
word = term.get_word_at(5, 0) # "https://example.com"
# Detect and extract URLs
url = term.get_url_at(10, 0) # "https://example.com"
# Get word boundaries for double-click selection
bounds = term.select_word(5, 1)
if bounds:
(start_col, start_row), (end_col, end_row) = bounds
print(f"Word spans from ({start_col}, {start_row}) to ({end_col}, {end_row})")
# Custom word characters (default is iTerm2-compatible: "/-+\~_.")
# For snake_case/identifiers, you might want to include additional chars:
word = term.get_word_at(4, 1, word_chars="_-") # "snake_case"
# Get full logical line (following wraps)
full_line = term.get_line_unwrapped(0)
# Find matching bracket/parenthesis
term.process_str("if (condition) { action(); }\n")
match_pos = term.find_matching_bracket(3, 3) # Click on opening '('
if match_pos:
col, row = match_pos
print(f"Matching bracket at ({col}, {row})") # Position of closing ')'
# Select content within delimiters (semantic selection)
term.process_str('message = "Hello, World!"\n')
content = term.select_semantic_region(15, 4, '"') # Click inside quotes
print(content) # "Hello, World!"
# Works with multiple delimiter types
term.process_str("data = {key: 'value', num: [1, 2, 3]}\n")
content = term.select_semantic_region(10, 5, "{}[]'\"") # Click inside braces
print(content) # "key: 'value', num: [1, 2, 3]"
Content Search
Search terminal content with case-sensitive or case-insensitive matching:
term = Terminal(80, 24)
for i in range(20):
term.process_str(f"Line {i}: Error in module_{i}\n")
# Find all occurrences
matches = term.find_text("Error", case_sensitive=True)
print(f"Found {len(matches)} matches: {matches}") # [(8, 0), (8, 1), ...]
# Case-insensitive search
matches = term.find_text("error", case_sensitive=False)
# Find next occurrence from position
next_match = term.find_next("Error", from_col=0, from_row=5)
if next_match:
col, row = next_match
print(f"Next match at ({col}, {row})")
# Implement "find next" button
current_pos = (0, 0)
while True:
match = term.find_next("pattern", current_pos[0], current_pos[1])
if not match:
break
print(f"Match at {match}")
current_pos = match
Buffer Statistics & Analysis
Get comprehensive statistics about terminal content:
term = Terminal(80, 24, scrollback=10000)
# Get detailed statistics
stats = term.get_stats()
print(f"Dimensions: {stats['cols']}x{stats['rows']}")
print(f"Scrollback: {stats['scrollback_lines']}/{stats['total_cells']} cells")
print(f"Non-empty lines: {stats['non_whitespace_lines']}")
print(f"Graphics: {stats['graphics_count']}")
print(f"Memory: ~{stats['estimated_memory_bytes']} bytes")
# Count content lines (excluding empty lines)
content_lines = term.count_non_whitespace_lines()
print(f"Lines with content: {content_lines}")
# Check scrollback usage
used, capacity = term.get_scrollback_usage()
print(f"Scrollback: {used}/{capacity} lines ({used/capacity*100:.1f}%)")
Static Utility Methods
Use standalone utility functions for text processing:
# Strip ANSI codes from text
colored = "\x1b[31mRed\x1b[0m text"
clean = Terminal.strip_ansi(colored)
print(clean) # "Red text"
# Measure display width (accounts for wide chars)
text = "Hello 世界"
width = Terminal.measure_text_width(text)
print(f"Display width: {width} columns") # 11 (5 + 1 + 2 + 2 + 1)
# Handle ANSI codes in width calculation
text_with_ansi = "\x1b[31mHello\x1b[0m"
width = Terminal.measure_text_width(text_with_ansi)
print(f"Width: {width}") # 5 (ANSI codes don't count)
# Parse colors from various formats
rgb = Terminal.parse_color("#FF5733") # (255, 87, 51)
rgb = Terminal.parse_color("rgb(255, 87, 51)") # (255, 87, 51)
rgb = Terminal.parse_color("red") # (180, 60, 42) - iTerm2 red
rgb = Terminal.parse_color("invalid") # None
API Reference
Terminal Class
Constructor
Terminal(cols: int, rows: int, scrollback: int = 10000)
Create a new terminal with specified dimensions.
cols: Number of columns (width)rows: Number of rows (height)scrollback: Maximum number of scrollback lines (default: 10000)
Methods
process(data: bytes): Process byte data (can contain ANSI sequences)process_str(text: str): Process a string (convenience method)content() -> str: Get terminal content as a stringsize() -> tuple[int, int]: Get terminal dimensions (cols, rows)resize(cols: int, rows: int): Resize the terminalreset(): Reset terminal to default statetitle() -> str: Get terminal titlecursor_position() -> tuple[int, int]: Get cursor position (col, row)cursor_visible() -> bool: Check if cursor is visiblekeyboard_flags() -> int: Get current Kitty Keyboard Protocol flagsset_keyboard_flags(flags: int, mode: int = 1): Set Kitty Keyboard Protocol flags (mode: 0=disable, 1=set, 2=lock)query_keyboard_flags(): Query keyboard flags (response in drain_responses())push_keyboard_flags(flags: int): Push flags to stack and set new flagspop_keyboard_flags(count: int = 1): Pop flags from stackclipboard() -> str | None: Get clipboard content (OSC 52)set_clipboard(content: str | None): Set clipboard content programmaticallyallow_clipboard_read() -> bool: Check if clipboard read is allowedset_allow_clipboard_read(allow: bool): Set clipboard read permission (security flag)scrollback() -> list[str]: Get scrollback buffer as list of stringsscrollback_len() -> int: Get number of scrollback linesget_line(row: int) -> str | None: Get a specific lineget_line_cells(row: int) -> list | None: Get cells for a specific line with full metadataget_char(col: int, row: int) -> str | None: Get character at positionget_fg_color(col: int, row: int) -> tuple[int, int, int] | None: Get foreground color (RGB)get_bg_color(col: int, row: int) -> tuple[int, int, int] | None: Get background color (RGB)get_underline_color(col: int, row: int) -> tuple[int, int, int] | None: Get underline color (RGB)get_attributes(col: int, row: int) -> Attributes | None: Get text attributesget_hyperlink(col: int, row: int) -> str | None: Get hyperlink URL at position (OSC 8)is_line_wrapped(row: int) -> bool: Check if line is wrapped from previous lineis_alt_screen_active() -> bool: Check if alternate screen buffer is activebracketed_paste() -> bool: Check if bracketed paste mode is enabledfocus_tracking() -> bool: Check if focus tracking mode is enabledmouse_mode() -> str: Get current mouse tracking modeinsert_mode() -> bool: Check if insert mode is enabledline_feed_new_line_mode() -> bool: Check if line feed/new line mode is enabledsynchronized_updates() -> bool: Check if synchronized updates mode is enabled (DEC 2026)cursor_style() -> CursorStyle: Get cursor style (block, underline, bar)cursor_color() -> tuple[int, int, int] | None: Get cursor color (RGB)default_fg() -> tuple[int, int, int] | None: Get default foreground colordefault_bg() -> tuple[int, int, int] | None: Get default background colorset_cursor_style(style: CursorStyle): Set cursor styleset_cursor_color(r: int, g: int, b: int): Set cursor color (RGB)set_default_fg(r: int, g: int, b: int): Set default foreground colorset_default_bg(r: int, g: int, b: int): Set default background colorquery_cursor_color(): Query cursor color (response in drain_responses())query_default_fg(): Query default foreground color (response in drain_responses())query_default_bg(): Query default background color (response in drain_responses())current_directory() -> str | None: Get current working directory (OSC 7)accept_osc7() -> bool: Check if OSC 7 (CWD) is acceptedset_accept_osc7(accept: bool): Set whether to accept OSC 7 sequencesdisable_insecure_sequences() -> bool: Check if insecure sequences are disabledset_disable_insecure_sequences(disable: bool): Disable insecure/dangerous sequencesshell_integration_state() -> ShellIntegration: Get shell integration state (OSC 133)get_paste_start() -> tuple[int, int] | None: Get bracketed paste start positionget_paste_end() -> tuple[int, int] | None: Get bracketed paste end positionpaste(text: str): Simulate bracketed pasteget_focus_in_event() -> str: Get focus-in event sequenceget_focus_out_event() -> str: Get focus-out event sequencedrain_responses() -> list[str]: Drain all pending terminal responses (DA, DSR, etc.)drain_notifications() -> list[tuple[str, str]]: Drain OSC 9/777 notifications (title, message)take_notifications() -> list[tuple[str, str]]: Take notifications without removinghas_pending_responses() -> bool: Check if responses are pendinghas_notifications() -> bool: Check if notifications are pendingresize_pixels(width_px: int, height_px: int): Resize terminal by pixel dimensionsgraphics_count() -> int: Get count of Sixel graphics storedgraphics_at_row(row: int) -> list[Graphic]: Get Sixel graphics at specific rowclear_graphics(): Clear all Sixel graphicscreate_snapshot() -> ScreenSnapshot: Create snapshot of current screen stateflush_synchronized_updates(): Flush synchronized updates buffer (DEC 2026)simulate_mouse_event(...): Simulate mouse event for testingexport_text() -> str: Export entire buffer (scrollback + current screen) as plain text without stylingexport_styled() -> str: Export entire buffer (scrollback + current screen) with ANSI stylingexport_html(include_styles: bool = True) -> str: Export current screen as HTML with full styling (full document or content only)screenshot(format, font_path, font_size, include_scrollback, padding, quality, render_cursor, cursor_color, sixel_mode, scrollback_offset, link_color, bold_color, use_bold_color) -> bytes: Take screenshot and return image bytesscreenshot_to_file(path, format, font_path, font_size, include_scrollback, padding, quality, render_cursor, cursor_color, sixel_mode, scrollback_offset, link_color, bold_color, use_bold_color): Take screenshot and save to file
Text Extraction Utilities
get_word_at(col: int, row: int, word_chars: str | None = None) -> str | None: Extract word at cursor position (default word_chars: "/-+~_." iTerm2-compatible)get_url_at(col: int, row: int) -> str | None: Detect and extract URL at cursor positionget_line_unwrapped(row: int) -> str | None: Get full logical line following wrappingselect_word(col: int, row: int, word_chars: str | None = None) -> tuple[tuple[int, int], tuple[int, int]] | None: Get word boundaries for smart selection (default word_chars: "/-+~_." iTerm2-compatible)find_matching_bracket(col: int, row: int) -> tuple[int, int] | None: Find matching bracket/parenthesis. Supports (), [], {}, <>. Returns position of matching bracket or Noneselect_semantic_region(col: int, row: int, delimiters: str) -> str | None: Extract content between delimiters. Supports (), [], {}, <>, "", '', ``. Returns content or None
Content Search
find_text(pattern: str, case_sensitive: bool = True) -> list[tuple[int, int]]: Find all occurrences of text in visible screenfind_next(pattern: str, from_col: int, from_row: int, case_sensitive: bool = True) -> tuple[int, int] | None: Find next occurrence from position
Buffer Statistics
get_stats() -> dict[str, int]: Get terminal statistics (cols, rows, scrollback_lines, total_cells, non_whitespace_lines, graphics_count, estimated_memory_bytes)count_non_whitespace_lines() -> int: Count lines containing non-whitespace charactersget_scrollback_usage() -> tuple[int, int]: Get scrollback usage (used_lines, max_capacity)
Static Utility Methods
These methods can be called on the class itself (e.g., Terminal.strip_ansi(text)):
Terminal.strip_ansi(text: str) -> str: Remove all ANSI escape sequences from textTerminal.measure_text_width(text: str) -> int: Measure display width accounting for wide characters and ANSI codesTerminal.parse_color(color_string: str) -> tuple[int, int, int] | None: Parse color from hex (#RRGGBB), rgb(r,g,b), or name
PtyTerminal Class
A terminal emulator with PTY (pseudo-terminal) support for running interactive shell sessions.
Constructor
PtyTerminal(cols: int, rows: int, scrollback: int = 10000)
Create a new PTY-enabled terminal with specified dimensions.
cols: Number of columns (width)rows: Number of rows (height)scrollback: Maximum number of scrollback lines (default: 10000)
PTY-Specific Methods
spawn(cmd: str, args: list[str] = [], env: dict[str, str] | None = None, cwd: str | None = None): Spawn a command with argumentsspawn_shell(shell: str | None = None): Spawn a shell (defaults to /bin/bash)write(data: bytes): Write bytes to the PTYwrite_str(text: str): Write string to the PTY (convenience method)is_running() -> bool: Check if the child process is still runningwait() -> int | None: Wait for child process to exit and return exit codetry_wait() -> int | None: Non-blocking check if child has exitedkill(): Forcefully terminate the child processupdate_generation() -> int: Get current update generation counterhas_updates_since(generation: int) -> bool: Check if terminal updated since generationsend_resize_pulse(): Send SIGWINCH to child process after resizeget_default_shell() -> str: Get the default shell path
Note: PtyTerminal inherits all methods from Terminal class listed above.
Context Manager Support
with PtyTerminal(80, 24) as term:
term.spawn_shell()
term.write_str("echo 'Hello'\n")
# Automatic cleanup on exit
Attributes Class
Represents text attributes for a cell.
Properties
bold: bool: Bold textdim: bool: Dim textitalic: bool: Italic textunderline: bool: Underlined textblink: bool: Blinking textreverse: bool: Reverse videohidden: bool: Hidden textstrikethrough: bool: Strikethrough text
CursorStyle Enum
Cursor display styles (DECSCUSR):
CursorStyle.BlinkingBlock: Blinking block cursor (default)CursorStyle.SteadyBlock: Steady block cursorCursorStyle.BlinkingUnderline: Blinking underline cursorCursorStyle.SteadyUnderline: Steady underline cursorCursorStyle.BlinkingBar: Blinking bar/I-beam cursorCursorStyle.SteadyBar: Steady bar/I-beam cursor
UnderlineStyle Enum
Text underline styles:
UnderlineStyle.None_: No underlineUnderlineStyle.Straight: Straight underline (default)UnderlineStyle.Double: Double underlineUnderlineStyle.Curly: Curly underline (for spell check)UnderlineStyle.Dotted: Dotted underlineUnderlineStyle.Dashed: Dashed underline
ShellIntegration Class
Shell integration state (OSC 133 and OSC 7):
in_prompt: bool: True if currently in prompt (marker A)in_command_input: bool: True if currently in command input (marker B)in_command_output: bool: True if currently in command output (marker C)current_command: str | None: The command that was executedlast_exit_code: int | None: Exit code from last command (marker D)cwd: str | None: Current working directory from OSC 7
Graphic Class
Sixel graphic metadata:
row: int: Display rowcol: int: Display columnwidth: int: Width in pixelsheight: int: Height in pixelsdata: bytes: Image data
ScreenSnapshot Class
Immutable snapshot of screen state:
content() -> str: Get full screen contentcursor_position() -> tuple[int, int]: Cursor position at snapshot timesize() -> tuple[int, int]: Terminal dimensions
Supported ANSI/VT Sequences
This terminal emulator provides comprehensive VT100/VT220/VT320/VT420 compatibility, matching iTerm2's feature set.
Cursor Movement (VT100)
ESC[<n>A: Cursor up n lines (CUU)ESC[<n>B: Cursor down n lines (CUD)ESC[<n>C: Cursor forward n columns (CUF)ESC[<n>D: Cursor back n columns (CUB)ESC[<n>E: Cursor next line (CNL)ESC[<n>F: Cursor previous line (CPL)ESC[<n>G: Cursor horizontal absolute (CHA)ESC[<row>;<col>H: Cursor position (CUP)ESC[<row>;<col>f: Cursor position (HVP - alternative)ESC[<n>d: Line position absolute (VPA)ESC[s: Save cursor position (ANSI.SYS)ESC[u: Restore cursor position (ANSI.SYS)ESC 7: Save cursor (DECSC)ESC 8: Restore cursor (DECRC)
Display Control (VT100)
ESC[<n>J: Erase in display (ED)n=0: Clear from cursor to endn=1: Clear from beginning to cursorn=2: Clear entire screenn=3: Clear entire screen and scrollback
ESC[<n>K: Erase in line (EL)n=0: Clear from cursor to end of linen=1: Clear from beginning of line to cursorn=2: Clear entire line
Line/Character Editing (VT220)
ESC[<n>L: Insert n blank lines (IL)ESC[<n>M: Delete n lines (DL)ESC[<n>@: Insert n blank characters (ICH)ESC[<n>P: Delete n characters (DCH)ESC[<n>X: Erase n characters (ECH)
Rectangle Operations (VT420)
Advanced text editing operations that work on rectangular regions of the screen:
-
ESC[<Pc>;<Pt>;<Pl>;<Pb>;<Pr>$x: Fill Rectangular Area (DECFRA)Pc: Character code to fill (e.g., 88 for 'X', 42 for '*')Pt: Top row (1-indexed)Pl: Left column (1-indexed)Pb: Bottom row (1-indexed)Pr: Right column (1-indexed)- Fills rectangle with specified character using current text attributes
-
ESC[<Pts>;<Pls>;<Pbs>;<Prs>;<Pps>;<Ptd>;<Pld>;<Ppd>$v: Copy Rectangular Area (DECCRA)Pts,Pls,Pbs,Prs: Source rectangle (top, left, bottom, right)Pps: Source page (use 1 for current screen)Ptd,Pld: Destination position (top, left)Ppd: Destination page (use 1 for current screen)- Copies rectangular region to new location
-
ESC[<Pt>;<Pl>;<Pb>;<Pr>${: Selective Erase Rectangular Area (DECSERA)Pt: Top row (1-indexed)Pl: Left column (1-indexed)Pb: Bottom row (1-indexed)Pr: Right column (1-indexed)- Selectively erases rectangle (respects character protection attribute)
-
ESC[<Pt>;<Pl>;<Pb>;<Pr>$z: Erase Rectangular Area (DECERA)Pt: Top row (1-indexed)Pl: Left column (1-indexed)Pb: Bottom row (1-indexed)Pr: Right column (1-indexed)- Unconditionally erases rectangle (ignores protection)
-
ESC[<Pt>;<Pl>;<Pb>;<Pr>;<Ps>$r: Change Attributes in Rectangular Area (DECCARA)Pt,Pl,Pb,Pr: Rectangle coordinates (top, left, bottom, right)Ps: SGR attributes to apply (0=reset, 1=bold, 4=underline, 5=blink, 7=reverse, 8=hidden)- Changes text attributes in rectangle
-
ESC[<Pt>;<Pl>;<Pb>;<Pr>;<Ps>$t: Reverse Attributes in Rectangular Area (DECRARA)Pt,Pl,Pb,Pr: Rectangle coordinates (top, left, bottom, right)Ps: Attributes to reverse (0=all, 1=bold, 4=underline, 5=blink, 7=reverse, 8=hidden)- Toggles attributes in rectangle
-
ESC[<Pi>;<Pg>;<Pt>;<Pl>;<Pb>;<Pr>*y: Request Checksum of Rectangular Area (DECRQCRA)Pi: Request IDPg: Page number (use 1 for current screen)Pt,Pl,Pb,Pr: Rectangle coordinates- Response:
DCS Pi ! ~ xxxx ST(16-bit checksum in hex)
-
ESC[<Ps>*x: Select Attribute Change Extent (DECSACE)Ps = 0or1: Stream mode (attributes wrap at line boundaries)Ps = 2: Rectangle mode (strict rectangular boundaries, default)- Affects how DECCARA and DECRARA apply attributes
Use Cases: Efficient text manipulation in editors (vim, emacs), drawing box characters, clearing specific screen regions without affecting surrounding content, attribute modification without changing text, verification of screen regions via checksums.
Scrolling (VT100/VT220)
ESC[<n>S: Scroll up n lines (SU)ESC[<n>T: Scroll down n lines (SD)ESC[<top>;<bottom>r: Set scrolling region (DECSTBM)ESC M: Reverse index (RI) - scroll down at topESC D: Index (IND) - scroll up at bottomESC E: Next line (NEL)
Colors and Attributes (VT100/ECMA-48)
ESC[0m: Reset all attributes (SGR 0)ESC[1m: BoldESC[2m: DimESC[3m: ItalicESC[4m: Underline (basic, defaults to straight)ESC[4:0m: No underline (explicit)ESC[4:1m: Straight underline (default)ESC[4:2m: Double underlineESC[4:3m: Curly underline (spell check, errors)ESC[4:4m: Dotted underlineESC[4:5m: Dashed underlineESC[5m: BlinkESC[7m: ReverseESC[8m: HiddenESC[9m: StrikethroughESC[22m: Normal intensity (not bold or dim)ESC[23m: Not italicESC[24m: Not underlinedESC[25m: Not blinkingESC[27m: Not reversedESC[28m: Not hiddenESC[29m: Not strikethroughESC[30-37m: Foreground colors (basic)ESC[40-47m: Background colors (basic)ESC[90-97m: Bright foreground colors (aixterm)ESC[100-107m: Bright background colors (aixterm)ESC[38;5;<n>m: 256-color foregroundESC[48;5;<n>m: 256-color backgroundESC[38;2;<r>;<g>;<b>m: RGB/true color foregroundESC[48;2;<r>;<g>;<b>m: RGB/true color backgroundESC[39m: Default foreground colorESC[49m: Default background color
Tab Stops (VT100)
ESC H: Set tab stop at current column (HTS)ESC[<n>g: Tab clear (TBC)n=0: Clear tab at current columnn=3: Clear all tabs
ESC[<n>I: Cursor forward tabulation (CHT)ESC[<n>Z: Cursor backward tabulation (CBT)
Terminal Modes (DEC Private Modes)
ESC[?1h/l: Application cursor keys (DECCKM)ESC[?6h/l: Origin mode (DECOM)ESC[?7h/l: Auto wrap mode (DECAWM)ESC[?25h/l: Show/hide cursor (DECTCEM)ESC[?47h/l: Alternate screen bufferESC[?1047h/l: Alternate screen buffer (alternate)ESC[?1048h/l: Save/restore cursorESC[?1049h/l: Save cursor and use alternate screen
Mouse Support (xterm)
ESC[?1000h/l: Normal mouse trackingESC[?1002h/l: Button event mouse trackingESC[?1003h/l: Any event mouse trackingESC[?1005h/l: UTF-8 mouse encodingESC[?1006h/l: SGR mouse encodingESC[?1015h/l: URXVT mouse encoding
Advanced Features
ESC[?1004h/l: Focus trackingESC[?2004h/l: Bracketed paste modeESC[?2026h/l: Synchronized updates (DEC 2026) - Batch screen updates for flicker-free rendering
Kitty Keyboard Protocol
Progressive enhancement for keyboard handling with flags for disambiguation and event reporting:
CSI = flags ; mode u: Set keyboard protocol modeflags: Bitmask (1=disambiguate, 2=report events, 4=alternate keys, 8=report all, 16=associated text)mode: 0=disable, 1=set, 2=lock, 3=report
CSI ? u: Query current keyboard flags (response:CSI ? flags u)CSI > flags u: Push current flags to stack and set new flagsCSI < count u: Pop flags from stack (count times)
Note: Flags are maintained separately for main and alternate screen buffers with independent stacks.
Device Queries (VT100/VT220)
ESC[<n>n: Device Status Report (DSR)ESC[c: Device Attributes (DA)
OSC Sequences
OSC 0;<title>ST: Set window title (icon + title)OSC 2;<title>ST: Set window titleOSC 7;<cwd>ST: Set current working directoryOSC 8;;<url>ST: Hyperlinks (iTerm2/VTE compatible) - Full support with clickable TUI renderingOSC 52;c;<data>ST: Clipboard operations (xterm/iTerm2 compatible) - Works over SSH without X11!<data>: base64 encoded text to copy to clipboard?: Query clipboard (requiresset_allow_clipboard_read(true)for security)- Empty data clears clipboard
OSC 133;<marker>ST: Shell integration (iTerm2/VSCode)A: Prompt startB: Command startC: Command executedD;<exit_code>: Command finished
OSC 9;<message>ST: Notifications (iTerm2/ConEmu style) - Send desktop-style notifications- Simple format with message only (no title)
OSC 777;notify;<title>;<message>ST: Notifications (urxvt style) - Structured notifications- Supports both title and message
- Use for desktop notifications, alerts, or completion notices
Control Characters
BEL(0x07): BellBS(0x08): BackspaceHT(0x09): Horizontal tabLF(0x0A): Line feedCR(0x0D): Carriage return
Reset Sequences
ESC c: Reset to initial state (RIS)
Examples
See the examples/ directory for complete usage examples:
Terminal Emulation Examples
Basic Examples
basic_usage_improved.py: Enhanced basic usage with visual outputcolors_demo.py: Color support demonstrationcursor_movement.py: Cursor control examplesscrollback_demo.py: Scrollback buffer usagetext_attributes.py: Text styling examplesunicode_emoji.py: Unicode and emoji support demonstration
Advanced Features
alt_screen.py: Alternate screen buffermouse_tracking.py: Mouse event handlingbracketed_paste.py: Bracketed paste mode demonstrationsynchronized_updates.py: Synchronized updates (DEC 2026) for flicker-free renderingshell_integration.py: Shell integration (OSC 133)test_osc52_clipboard.py: OSC 52 clipboard operations (SSH clipboard support)test_kitty_keyboard.py: Kitty Keyboard Protocol demonstrationtest_underline_styles.py: Underline styles (SGR 4:x) for modern text decorationnotifications.py: OSC 9 / OSC 777 notification support (desktop-style alerts)rectangle_operations.py: VT420 rectangle operations (DECFRA, DECCRA, DECSERA, DECERA, DECCARA, DECRARA, DECRQCRA, DECSACE)hyperlink_demo.py: OSC 8 hyperlinks (clickable URLs in terminal)
Graphics and Visual
display_image_sixel.py: Display images using Sixel graphicstest_sixel_simple.py: Simple Sixel graphics demonstrationtest_sixel_display.py: Advanced Sixel graphics testingscreenshot_demo.py: Comprehensive screenshot feature demonstration
TUI Applications
test_tui_clipboard.py: TUI clipboard integration demonstrationfeature_showcase.py: Comprehensive feature showcase with TUI
PTY Examples
pty_basic.py: Basic PTY usage - spawn commands and capture outputpty_shell.py: Interactive shell sessionspty_custom_env.py: Custom environment variables and working directorypty_resize.py: Dynamic terminal resizing with SIGWINCHpty_with_par_term.py: Using custom par-term terminfo for optimal compatibilitypty_multiple.py: Managing multiple concurrent PTY sessionspty_event_loop.py: Event loop integration with update trackingpty_mouse_events.py: Mouse event handling in PTY sessions
TUI Demo Application
Note: A full-featured TUI (Text User Interface) application for this terminal emulator is available in the sister project par-term-emu-tui-rust. The TUI provides an interactive terminal application with themes, clipboard integration, and more.
Installation: pip install par-term-emu-tui-rust
Security
Important: When using PTY functionality, follow security best practices to prevent command injection and other vulnerabilities.
See SECURITY.md for detailed security guidelines including:
- Command injection prevention
- Environment variable security
- Input validation
- Resource limits
- Privilege management
Running Tests
# Run Rust tests
cargo test
# Run Python tests (requires pytest)
uv pip install pytest
pytest tests/
Performance
The library is implemented in Rust for high performance:
- Zero-copy operations where possible
- Efficient grid representation
- Fast ANSI sequence parsing using the
vtecrate - Minimal Python/Rust boundary crossings
Architecture
The library consists of several key components:
Terminal Emulation Core
- Cell: Represents a single terminal cell with character, colors, and attributes
- Grid: Manages the 2D terminal buffer and scrollback
- Cursor: Tracks cursor position and visibility
- Color: Handles various color formats (named, 256-color, RGB)
- Terminal: Main terminal emulator that ties everything together
PTY Support
- PtySession: Manages PTY and child process lifecycle
- PtyError: Error types for PTY operations
- Reader Thread: Background thread that processes PTY output
- Update Generation: Efficient change detection for event loops
Python Bindings
- PyTerminal: Python wrapper for Terminal (ANSI parsing)
- PyPtyTerminal: Python wrapper for PtySession (interactive shells)
- PyO3: Zero-cost bindings between Rust and Python
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
Development Setup
-
Clone the repository and set up the environment:
git clone https://github.com/paulrobello/par-term-emu-core-rust.git cd par-term-emu-core-rust make setup-venv # Create virtual environment and install dependencies
-
Install pre-commit hooks (recommended):
make pre-commit-installThis will automatically run all quality checks (formatting, linting, type checking, tests) before each commit.
-
Build and test:
make dev # Build the library in development mode make test-python # Run tests
Code Quality
All contributions must pass the following checks:
- Rust formatting:
cargo fmt - Rust linting:
cargo clippy -- -D warnings - Python formatting:
make fmt-python - Python linting:
make lint-python - Python type checking:
pyright - Python tests:
make test-python
TIP: Use make pre-commit-install to automate all these checks on every commit!
For more detailed development instructions, see CLAUDE.md.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Paul Robello - probello@gmail.com
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.4.0.tar.gz.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0.tar.gz
- Upload date:
- Size: 872.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6db25782810ace15ffeb144a6c6bc1a715bdc49e1c7822771f312f5bec86d16
|
|
| MD5 |
7f4d2b6bb985fce8b46b693912a95d4d
|
|
| BLAKE2b-256 |
1d5ad451b6df603712eba21122afef411511ca888de1b6339ccdf8073ce8e711
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0.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.4.0.tar.gz -
Subject digest:
b6db25782810ace15ffeb144a6c6bc1a715bdc49e1c7822771f312f5bec86d16 - Sigstore transparency entry: 704729867
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 1.7 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 |
2b678969095b44994739adb83c583ccc296ea51d42e01dd4d50c288d9f915a4b
|
|
| MD5 |
e5887129ced247b2bfa261414f915669
|
|
| BLAKE2b-256 |
d5bf557524b1a63068c12dec3d467db1f70b8cc68e46acca42454a65d9e8b4f9
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp314-cp314-win_amd64.whl -
Subject digest:
2b678969095b44994739adb83c583ccc296ea51d42e01dd4d50c288d9f915a4b - Sigstore transparency entry: 704729931
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.8 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 |
f77dfe30ba86f40d46fb6adb5fefe579c5cba56b9020d8c899e821f43a4d2307
|
|
| MD5 |
2660e581881339c131e15ad4b294bdfc
|
|
| BLAKE2b-256 |
ea13f5a5bba29acb9076e629e2aa5868c4529d239fc6d95ea3d6bc325b5aa45a
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
f77dfe30ba86f40d46fb6adb5fefe579c5cba56b9020d8c899e821f43a4d2307 - Sigstore transparency entry: 704729879
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.7 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 |
94a243c8aa652e8fa8312806194f14149d70f76ccfd04715308d9b4562a04f89
|
|
| MD5 |
702392f048419476854af53c0b111273
|
|
| BLAKE2b-256 |
8162670e1d5ef2359e58fdbb5dbe21797a8c6fd2f1d6074825c0892f46037883
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
94a243c8aa652e8fa8312806194f14149d70f76ccfd04715308d9b4562a04f89 - Sigstore transparency entry: 704729893
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp314-cp314-macosx_10_12_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp314-cp314-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.7 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 |
8033a472ed8a1a65d0b25923b5b7f8091a7b33c0415369f8276d567e19764b2b
|
|
| MD5 |
a36ea9ebe8921d965eb1d7d58797acf6
|
|
| BLAKE2b-256 |
88a44e1224be8f6d9360991c46ff022ee8438bd233ff44a5a2326a0e0babbad2
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp314-cp314-macosx_10_12_x86_64.whl -
Subject digest:
8033a472ed8a1a65d0b25923b5b7f8091a7b33c0415369f8276d567e19764b2b - Sigstore transparency entry: 704729884
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-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.4.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.3 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 |
f29c34e0ef88c4f04454d3bdbf17dd3c04042e2aa558267ce5d22499d975975d
|
|
| MD5 |
1b21fb97d649643faa94c9268c545b2e
|
|
| BLAKE2b-256 |
b60d284687b0ac945001dd3e17b3e3c5a57e4bf2d23d73fbd9be768d33e85f08
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
f29c34e0ef88c4f04454d3bdbf17dd3c04042e2aa558267ce5d22499d975975d - Sigstore transparency entry: 704729904
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.7 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 |
ea9e6add1ba39c2606c187b64c6e0f0d182f10a1c5a21202dca41bfa2f2ab68f
|
|
| MD5 |
25db87d4f42341e3f27660fa315ad624
|
|
| BLAKE2b-256 |
2d2dbdedc0761d7b1862d88ff22176fd6962bfd88962b78683d56a5cc59a75c9
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp313-cp313-win_amd64.whl -
Subject digest:
ea9e6add1ba39c2606c187b64c6e0f0d182f10a1c5a21202dca41bfa2f2ab68f - Sigstore transparency entry: 704729873
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.7 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 |
e7b2d21a140699e088968f5ca00e63946c6cfe6ae34c9b43e64bf7f03bcf31c0
|
|
| MD5 |
049fa041b525f2082a3b5decb70a06ce
|
|
| BLAKE2b-256 |
164c521c73449fcf4ec959afe68506f08d21a9f15f8bcad8e40ae35b701a22a8
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
e7b2d21a140699e088968f5ca00e63946c6cfe6ae34c9b43e64bf7f03bcf31c0 - Sigstore transparency entry: 704729909
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.7 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 |
887774dcf12e1a9928038fd3616990f8adcb8aefd63eb4672b2eca1fe8720a13
|
|
| MD5 |
2f08570e5386d02acb974fb79cf9e552
|
|
| BLAKE2b-256 |
051feb718b3b8b91d408772a5fc51b08ccf8ac6e5244762ecf82e9b279e2aa63
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
887774dcf12e1a9928038fd3616990f8adcb8aefd63eb4672b2eca1fe8720a13 - Sigstore transparency entry: 704729948
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.7 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 |
20e8c7fbb671fdf8384f27316534f914906ef6b185f011b1f0b2e3d0dfd6038b
|
|
| MD5 |
f381957a236ba94122412147cc619e86
|
|
| BLAKE2b-256 |
84977c50f721cc07642bed77c11ea405e0c391eff3b6663419cc3fb19e699fa2
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp313-cp313-macosx_10_12_x86_64.whl -
Subject digest:
20e8c7fbb671fdf8384f27316534f914906ef6b185f011b1f0b2e3d0dfd6038b - Sigstore transparency entry: 704729955
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-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.4.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.3 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 |
68d87f4c3edeb6356e4cc791d44984c0a95ddc19359f1b15db2109bee5d0d9fc
|
|
| MD5 |
20920192d6ec4c180d55892f867870ab
|
|
| BLAKE2b-256 |
c2ce74507209659dbd536ee97145e9fde8a14b32810f405c0e7902f13567c048
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
68d87f4c3edeb6356e4cc791d44984c0a95ddc19359f1b15db2109bee5d0d9fc - Sigstore transparency entry: 704729967
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.7 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 |
f66220c19941875427185b5e8fce3dcfc5cd7b9aea97d5c85c787cb8b0b7a1f1
|
|
| MD5 |
c0f3bdfba989e551df26074943869ca0
|
|
| BLAKE2b-256 |
c0bc346fefd14ec00c5e38f17f39fb7064c307d87d3e843d5aeab8dbbb8e4a0b
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp312-cp312-win_amd64.whl -
Subject digest:
f66220c19941875427185b5e8fce3dcfc5cd7b9aea97d5c85c787cb8b0b7a1f1 - Sigstore transparency entry: 704729917
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.7 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 |
4cfccffa5409dc5210ac7b14e0b34df6864effe68e75895ac18b7148fc88b3df
|
|
| MD5 |
2ab237d655ac4eddfd3223d39a84ea78
|
|
| BLAKE2b-256 |
838339e1d8be9ee97222ec360d827977b4f4ec9cec56544e7520b8a966b8ed97
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
4cfccffa5409dc5210ac7b14e0b34df6864effe68e75895ac18b7148fc88b3df - Sigstore transparency entry: 704729962
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.7 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 |
f59168429f57bf74be71a9d10cac45bba35c62c174143e1162ebf3df17df377c
|
|
| MD5 |
fb4f5eaaef61a3c7d29f34eaadc4b325
|
|
| BLAKE2b-256 |
8091ea083d354d23cfceabf932162475b2b6e175c252ac2dca292242df742ab4
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
f59168429f57bf74be71a9d10cac45bba35c62c174143e1162ebf3df17df377c - Sigstore transparency entry: 704729925
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: par_term_emu_core_rust-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.7 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 |
5355f402937722662a24943c3b3040087457d0f739238724ddfcc9339343cd81
|
|
| MD5 |
4b2f82fc161a2dfe60ea015777c5df34
|
|
| BLAKE2b-256 |
6e90134e507e7ffd5d034601b769232fb86d509d50577f49d67719a2556c78d3
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp312-cp312-macosx_10_12_x86_64.whl -
Subject digest:
5355f402937722662a24943c3b3040087457d0f739238724ddfcc9339343cd81 - Sigstore transparency entry: 704729941
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file par_term_emu_core_rust-0.4.0-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.4.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 3.3 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 |
1188bd8514c5cf4323a21b42f4540e9e4cae3721172905d45e9d2dfcc0eeeb6a
|
|
| MD5 |
a63926f985ef6902b239c1b690c7c23e
|
|
| BLAKE2b-256 |
a9e18ec1c0eeb8f3d4cf7f3250fce2563b55b2050e8227c41a39136286906b71
|
Provenance
The following attestation bundles were made for par_term_emu_core_rust-0.4.0-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.4.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
1188bd8514c5cf4323a21b42f4540e9e4cae3721172905d45e9d2dfcc0eeeb6a - Sigstore transparency entry: 704729890
- Sigstore integration time:
-
Permalink:
paulrobello/par-term-emu-core-rust@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
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@5633bca5c452ca3ea1c888e3776d975e11bd5c8b -
Trigger Event:
workflow_dispatch
-
Statement type: