docs/FEATURES.mdVer o original ↗
Nesta página

Features and limitations

Documentation index · Project overview

This reference describes the development tree on main. Published releases may trail it; changes not yet released are listed under [Unreleased] in the changelog. Configuration keys and defaults are maintained in Configuration; the user guide says where each feature lives and how to use it.

Terminal and text

  • A Swift VT parser with true colour, alternate screens, scrollback, query responses, synchronized output and bracketed paste.
  • Unicode text, East Asian widths, combining marks and emoji, with Core Text font fallback. AppKit IME composition is drawn outside the terminal grid.
  • Metal 4 rendering — one render pass per frame — with a glyph atlas, instanced quads and line damage tracking. Needs a GPU with Metal 4: every Apple silicon Mac; not a virtual machine's paravirtual GPU.
  • OSC 8 hyperlinks, focus reporting and the Kitty keyboard protocol.

Speed and efficiency

  • Measured core-feed throughput of 317.3 MiB/s, with printable runs classified 16 bytes at a time with NEON. This benchmark excludes PTY I/O, rendering and display; it is not an end-to-end application throughput. The screen follows at the display's pace.
  • Scroll regions, history scrolling and inserted or deleted lines shift the rendered rows instead of rebuilding them; scrolling allocates no screen rows.
  • Cold scrollback compressed in memory as it arrives: 100,000 lines of 120 columns added about 11 MiB of resident memory in the measured workload. Search, reflow and copy read history in place; other text and workloads can compress differently.
  • Typing, paste and input-method text request the panel's maximum frame rate (120 Hz on ProMotion); Low Power Mode, an inactive window and thermal pressure lower it otherwise.
  • An idle blinking cursor is animated by Core Animation; an idle shell causes no periodic wakeups; a hidden pane's reader runs at background priority after two seconds; an occluded window does not draw.
  • Glyph atlases and GPU instance buffers sized to what is on screen: a 24-byte quad, atlases that grow on demand.
  • iTerm2 imgcat inline PNG and animated GIF's first frame (OSC 1337), including multipart transmission, cell/pixel/percent/auto sizing and aspect preservation. The same sandboxed decoder, placement table, erase/scroll semantics and image budgets as kitty graphics; downloads are refused.
  • iTerm2 cwd/host reports, marks, clear history, cursor shape, background Dock attention, numeric cell-size reports and permission-gated clipboard copy; VS Code OSC 633 command boundaries/cwd and ConEmu OSC 9;12 prompt marks.
  • Kitty OSC 21 colours, OSC 22 mouse shapes with a bounded per-screen stack, and OSC 5522 text clipboard writes under the OSC 52 permission and size cap. See the OSC verdict table for deliberate limitations, accepted no-ops and refusals.
  • Kitty graphics with direct RGB, RGBA and PNG transmission and placement, zlib-compressed or not (o=z, what kitten icat sends for an image it scales to fit). Erasing the main screen (clear, ⌃L, Clear Screen) removes the images on it; erasing the scrollback (clear's ED 3, Clear History) removes the ones in history — as kitty does. An image wholly inside a scroll region moves with it and is cropped at its margins; one straddling a margin stays put, as kitty's page rule says. Up to 8192 pixels a side and 16 million pixels an image.

Protocol coverage and dated verification results are in Conformance. Rendering measurements and their conditions are in Performance.

Windows and navigation

  • Split panes, pane zoom, font zoom and restoration of window arrangements and working directories. Reopening a closed pane restores its arrangement, not the terminated process.
  • A full-screen window with one pane is presented directly to the display, not through the window server's compositor: about a frame less from keypress to glass. A split, or anything AppKit draws over the text, brings the compositor back while it shows.
  • Scrollback search with case-sensitive and regular-expression modes, in a find bar that narrows with a split pane and moves to the bottom while the cursor or the current match is under it; text selection, copy and export. Clear Screen, Clear History and Reset Terminal are separate commands with different effects. At a ready integrated prompt, Clear Screen keeps the complete editor display and input cursor at the top without sending input to the shell. Alternate-screen programs and editors whose prompt has scrolled into history are left intact.
  • A command palette (⇧⌘P), configurable shortcuts, themes and a native Settings window — a sidebar of eight categories, System Settings style — backed by ~/.config/corta/config.
  • Rounded glass surfaces for the command palette, connection form, command history, directory candidates and centered stopped/failed pane panels. Connect to Host scrolls in small windows; About and Command History open centered over the invoking window, within its display's usable bounds.
  • Working-directory commands (reveal, copy, cd to the parent or project root, open a pane there), shell/directory/environment presets, and local path:line:column references that can open in an editor.

Claude Code state and generic program notifications

  • Claude Code is currently the only CLI with a dedicated task-state integration. Development and real acceptance used Claude Code 2.1.310; other versions need independent verification. Its OSC 7501 reports distinguish working, waiting, done, idle and failure on tabs, the Dock and the Agents list.
  • Generic OSC 9/777/99 notifications and OSC 9;4 progress are available to any program. They do not establish completion or permission state. Claude's own message channels require explicit selection in Claude's settings; Corta's default identity does not enable Claude's OSC 9;4 progress. OSC 21337 is generic metadata; Claude 2.1.310 leaves its sender disabled.
  • Other coding CLIs have no dedicated task-state adapter. A recognised foreground process can be listed as State unknown; process detection does not mean its turns, failures or permission requests are integrated. Corta does not install hooks or tool configuration automatically.

See the user guide and verification limits.

Shell and remote work

  • OSC 133 shell integration: prompt marks (an empty Return draws none), command history, command-output copy/export, navigation between commands and long-task notifications. Standard local zsh sessions load the bundled hooks automatically with directory-completion = true or history-suggestions = true. For explicit startup-file installation in zsh, bash or fish, use Settings ▸ Terminal ▸ Shell Integration.
  • Built-in directory suggestions for standard local zsh sessions, with faint alternatives and inline previews, Left/Right selection and Tab acceptance, including consecutive subdirectory levels. Up/Down keep command history navigation; Shift+Tab passes through. Disable the optional feature in Settings or with directory-completion = false (usage). Local hooks load without changing the user's startup files.
  • Built-in local zsh history suggestions: the most recent prefix match appears as a faint suffix. Right/End accepts without executing, Esc dismisses, and Tab and history navigation keep native bindings. No history-file reads or startup-file edits; zsh-autosuggestions takes precedence. Disable with history-suggestions = false (usage).
  • Optional command-status rules in the prompt margin, with textual tooltips and gray interrupted marks for exit status 130.
  • Remote context reported by shell integration, a host indicator and reconnect action. SSH connections use system OpenSSH, including its configuration, agent and ProxyJump; Corta does not provide its own SSH implementation.
  • One connect sheet for a terminal (SSH) and for files (SFTP), behind one toolbar button, with host, user, port and private-key fields, each passed to OpenSSH as its own argument; empty ones fall to ~/.ssh/config. It suggests recent connections, with the fields they used and when, and the Host names in ~/.ssh/config (read, never executed), leaving out hosts that only take git. A terminal connection is remembered once established — ssh has a terminal on the server — not when Connect is pressed. From a remote pane it offers that host's files first. A pane opened from it names that destination in its title until the remote shell reports its own.
  • A session that ends, a connection that drops and a pane that fails show one panel over the dimmed, still-readable output (selectable once the session has ended): what ended, how, the raw reason under Details, and Reconnect, New Session or Try Again — which start at the pane's size and font size.
  • An SFTP browser for listing, transferring, renaming and deleting remote files and directories, with managed local copies for editing: Back and Forward, a breadcrumb path, sortable columns, hidden files on request, a row menu, drag and drop to upload (the listing or folder row outlined, naming the destination) and to Finder, and transfers in a toolbar popover with speed and time left. The first connection to a host in a run requires confirmation; a remote report alone cannot open it. Passwords, key passphrases, one-time codes and new host keys are asked in a dialog through OpenSSH's SSH_ASKPASS and never saved; cancelling a password ends the connection attempt, cancelling a key's passphrase skips the key. A failed connection says why in a sentence, ssh's diagnostics under Details.
  • Optional OSC 52 clipboard writes, disabled by default. Clipboard reads from terminal output are not implemented.

See Security for the boundaries between terminal output, local files, remote connections and child-process input.

macOS integration

  • Open and focus Shortcuts actions. These actions do not send commands to a shell.
  • Secure Keyboard Entry under Shell, with an indicator of engaged state.
  • Persistent input-source status (A, 中, あ, 한 and other language codes) in an independent upper-right toolbar group. Automatic display follows enabled non-Latin keyboard layouts and IMEs; Latin-only setups hide it. Settings also offer prompt-right placement with long-command avoidance, custom colors and always/off modes. The toolbar badge stays while a program runs — Claude Code, an editor on the alternate screen; shell integration hides only the prompt-placed badge during execution. Private IME modes that macOS does not expose use neutral styling.
  • Sparkle updates through Corta ▸ Check for Updates…, plus an optional daily background check.

Appearance and system status

  • A bottom status bar, off by default, with individually selectable local CPU, load, memory, network rates, home-volume free space and four thermal levels. Click for host, macOS version, chip, core count and total memory. Windows share one sampler; hidden bars stop polling. SSH panes still show local data.
  • A graphical theme editor in Appearance settings, with separate light/dark previews, color pickers and HEX fields, save/cancel and source-color reset. It saves through the existing configuration file; manual editing remains supported. Built-ins are copied, while custom themes can be edited.
  • View → Local host details and Terminal settings expose host configuration even with the bar disabled. View → Theme editor opens color editing directly.
  • System Monospaced is the default font; Settings ▸ Appearance also lists every installed monospaced family whose four faces keep one width (D12), grouped as Apple's or the user's and labelled when it carries CJK, in Light, Regular or Medium, at 10–24 pt (13 by default) and a line spacing of 1.0–1.4 (1.18). A CJK font of the user's choice can lead the fallback (font-family-cjk), monospaced or not; otherwise CJK fallback follows the system language (PingFang SC / TC, Hiragino Sans, Apple SD Gothic Neo; kana and Hangul always their own face), wide fallback glyphs are centred in their cells, emoji can draw monochrome where a text face has the glyph, fallback can be switched off, and East Asian Ambiguous characters can be two cells, with configurable size and fixed fallback for missing characters. A configured family that is missing or uneven draws as System Monospaced, and the Font Status row says why.
  • Cursor shapes are block, bar and underline, with independent blinking; the default is a nonblinking block. Programs retain temporary DECSCUSR control.

How Corta compares

All three offer native macOS interfaces and GPU rendering. Corta combines a Swift terminal core, one shared configuration for text and GUI editing, and an integrated SSH, SFTP and remote-editing workflow. Here is how their implementation and integration choices compare.

CortaiTerm2Ghostty
Main implementationSwiftObjective-C and SwiftZig core; Swift on macOS, GTK on Linux
App platformsmacOSmacOSmacOS and Linux
Native UIAppKit, with SwiftUI settingsNative macOS appSwiftUI on macOS; GTK on Linux
RenderingMetal 4, with Core Text shaping and font fallbackMetal GPU renderer, configurableMetal on macOS; OpenGL on Linux
SettingsOne text file, also edited by the native Settings windowSettings UI and profiles; dynamic profilesText configuration, with support for multiple files
Integration examplesShortcuts, OpenSSH, SFTP browser and managed remote editingtmux control-mode integration, Python API and triggersmacOS Shortcuts and AppleScript; embeddable libghostty libraries

Last checked 2026-10-13. Other terminals change faster than this page; treat a row as a snapshot and follow the links for the current state. The competitor rows were checked against the official iTerm2 repository, settings documentation, dynamic profiles, tmux integration, Python API and features, and the official Ghostty repository, features, configuration and AppleScript guide.

For native tmux -CC integration or a Python scripting API, consider iTerm2. For a terminal app that also runs on Linux, consider Ghostty; its macOS app also offers AppleScript automation from 1.3.0. Corta's macOS-only scope and exclusion of tmux control mode, built-in AI and a scripting engine are settled decisions. Ordinary tmux sessions run inside Corta as terminal programs.

Known limits

  • VT conformance is incomplete. The 2026-10-07 esctest2 run recorded 131 passed, 334 known bugs and 102 failed out of 567. The historical 82.0% figure combines passes and known bugs; it is not a pass rate. Raw results retain the failing names.
  • Windowed input latency is above target. Full screen with one pane measured 49.1–50.8 ms p50 and 82.9–84.2 ms p99 for a person typing on one M5 MacBook Air with a 60 Hz panel (2026-10-13). Windowed panes use the compositor; the full-screen improvement is a measured comparison on that setup, not a guaranteed difference on every Mac. See Performance §5.17 for the method and hardware.
  • Bundled shell integration covers zsh, bash and fish. Other shells need their own OSC 133 hooks for command boundaries; without them notifications use a heuristic.
  • Emoji presentation sequences take two columns. Standardized text-default characters with VS16 (⚠️, ✍️, 🖼️) occupy a wide pair, including at a line boundary. Programs must count the full sequence, not each scalar.
  • Kitty graphics support direct transmission only. File-based transmission is rejected by design. Animation and Unicode-placeholder placement are absent.
  • Prompt marks are not nested. Inside ssh to a host whose shell marks its own prompts (OSC 133), the remote commands are recorded as commands of their own, the ssh command itself is never recorded as finished, and its exit status marks the last remote prompt.
  • Remote editing uses managed local copies, not general directory sync. Preserve any local edits before removing Corta's application data.
  • Input and accessibility reports remain open. A Settings shortcut failure has not been reproduced; VoiceOver selection reading needs a follow-up listening pass. See Conformance and the changelog.

Built-in multiplexing, cross-platform support, tmux control mode, built-in AI, RTL text and terminal title queries are outside the current scope. The rationale is maintained in Design and Decisions.

Remote-edit uploads check the remote content as well as size and modification time. Each upload sends the version approved in the prompt. If the local copy changes after that prompt, Corta asks for a new decision; further saves during an upload remain pending edits. Once connected, a remote-edit operation that runs past 120 seconds is stopped and its upload offered again. Managed copies remain on disk with private file modes. Restored sessions retain arrangement and directory metadata, with restore-windows = true by default, and start fresh processes without restoring terminal text. See data-at-rest policy.