Skip to content

Releases

Corta v1.5.1

Choose a tag to compare

@github-actions github-actions released this 27 Oct 07:07
55cb3f7

Corta v1.5.1

Changed

  • About Corta opens in the middle of its display, as other apps' About
    windows do, instead of over the window it was opened from. Command
    History still opens centered over its window.

Tests and tooling

  • SwiftLint now reports nothing over the project's sources, tests and
    scripts (1,813 findings before). Each rule kept or adjusted in
    .swiftlint.yml says why; the generated CharacterWidth.swift is
    excluded, and the pane controller's file length is judged by
    docs/DESIGN.md §4.1 instead. Long functions and types were split into
    named steps, extensions and Type+Area.swift files, tuples became named
    types, and try! became thrown or reported errors. Behaviour is
    unchanged; the frame-CPU baseline is at parity.
  • The build has no compiler warnings, and Periphery's two scans read
    together report no dead code: unused imports, an unused sort overload,
    the canvas clearColor and an unused clipboard accessor are gone.
    docs/TESTING.md explains the package scan on a toolchain whose SwiftPM
    builds with swiftbuild.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.5.1.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.5.1.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  9941ec782f387ff8e03e49f251af8dffcf118be4d4f2edd68c7bd135b52dddb7
Built with Xcode 26.6 (17F113)

Corta v1.5.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 14:51
4a21abf

Corta v1.5.0

Added

  • Terminal compatibility: title save/restore, live dark/light reports, coloured
    single/double/curly underlines, XTGETTCAP capability answers, and Neovim's
    underline-style probe. Programs can set/query/reset selection colours and
    restore default text, background and cursor colours to the live theme.

  • Built-in history suggestions for standard local zsh: type a command prefix
    to see the most recent matching suffix faintly, accept with Right/End or
    dismiss with Esc. Tab and shell history navigation stay native. Enabled
    by default, configurable with history-suggestions and a Terminal settings
    toggle; yields to zsh-autosuggestions and leaves startup files unchanged.

  • OSC ecosystem coverage (#411): iTerm2 inline PNG/GIF first-frame images,
    multipart transfer, host/cwd, marks, clear history, cursor, attention and
    clipboard extensions; VS Code shell-integration marks; ConEmu prompt marks;
    kitty colour, pointer and bounded text clipboard protocols. A tested OSC
    verdict table records implemented forms, no-ops, refusals and limits.

  • Claude Code task-state integration on native tabs and the Dock, with a
    pane-jumping Agents list in the command palette and Window menu. Claude
    Code is currently the only CLI with a dedicated task-state integration;
    other tools have process detection and generic protocol support only.
    OSC 7501 status,
    OSC 9/777/99 notifications, OSC 9;4 progress and OSC 21337 tab metadata
    are bounded and sanitised. Background attention uses fixed Corta text;
    program notices are labelled pane messages and coalesced per pane. Claude
    Code’s done signal is distinct from idle; process-only detection shows
    unknown state, and ordinary messages or bells do not imply permission or
    completion. Tab indicators remain centered when the native tab strip
    resizes their accessory. Delayed program notices do not repeat an already
    announced wait for permission, and notification authorization includes Dock
    badges.

  • Right-click a pane to find text, copy the clicked command’s output, or
    open/copy a link or file reference under the pointer.

  • Paste warnings for shell pipes, sudo, recursive forced deletion,
    backslash continuations and concealed Unicode characters, including with
    bracketed paste enabled. Review a visible text preview, cancel, or suppress
    warnings for that pane; paste-warning selects dangerous, always or off.

Fixed

  • Clear Screen (⌘K) immediately keeps a ready integrated shell's prompt and
    unsubmitted input visible, with the editing cursor intact. Multiline
    prompts, wrapped input, wide characters and deferred wrapping keep their
    cell data. No keystrokes are sent to the child and no command is executed.
    Scrollback is kept; Clear History and Reset Terminal keep their separate
    roles. Alternate-screen applications and editors taller than the screen
    are left intact.

  • About and Command History open centered over the invoking window, within
    the current display's usable area. A window already open stays where the
    user put it. Command History uses a fixed size to keep its filters usable,
    and shows a localized empty state and command count.

  • Rounder Liquid Glass across Corta's floating surfaces. Connect to Host
    (and the file browser's host step) has a glass capsule host field, a large
    Terminal / Files switch, glass cards for Advanced and suggestions, and glass
    Cancel / Connect buttons. The command palette is rounder with a search
    glyph and soft row highlights; Command History has a glass search field,
    toggles, row buttons and results card; a pane's stopped/failed card is glass
    with glass buttons; directory candidates sit in a glass capsule. Connect to
    Host is never taller than its window: in a small one it scrolls.

  • Stopped and failed session panels are centered in their pane, with the
    primary recovery action still receiving keyboard focus. Connection labels
    use Host and Open in consistently across the terminal and file browser.

  • In zsh vi insert mode (bindkey -v), Esc over a history or directory
    suggestion now dismisses it and enters command mode in one press.

  • A finished-command mark printed by a live full-screen program, such as a
    log viewed in less -R, no longer turns off its bracketed paste or
    keyboard protocol; a crashed program's shell still ends the command at
    its next prompt.

  • Paste warnings also catch a shell fed without a pipe: bash <(curl …),
    source <(…) and sh -c "$(curl …)". Very large warned pastes preview
    their first 64 KiB instead of stalling before the dialog.

  • Typing past the end of zsh history no longer rescans the whole history on
    every key while history suggestions are on.

  • Eight unfinished kitty (OSC 99) notifications no longer block every later
    one for the rest of the session; the stalest incomplete message is dropped.

  • The command palette no longer selects an agent pane by default, so Return
    runs a command; agent matches sort after commands while searching.

  • Moving the mouse no longer resets the cursor on every move, which fought
    the split divider's resize cursor; a program-chosen pointer shape is kept.

  • Copy Command Output is disabled on the alternate screen, where it could
    copy an unrelated earlier command's output.

  • Clicking a notification from a pane that has since closed brings its
    window forward instead of doing nothing.

  • The cursor image used for the caret follows program cursor and colour
    changes (OSC 10/11/12) like the live cursor.

  • A refused or failed kitty clipboard write (OSC 5522) now replies with a
    fixed EPERM or EIO status, so a waiting program does not hang.

  • Marks set with iTerm2's OSC 1337;SetMark are now stops for Previous /
    Next Command (⌘↑ / ⌘↓), even without shell integration.

  • Closing one kitty notification no longer discards another program notice
    that arrived just before it.

  • A program's wait for permission after a terminal reset (RIS) is announced
    again instead of being taken for the wait already announced.

  • A selection colour set by a program (OSC 17, kitty OSC 21) keeps the
    theme's translucency, so box drawing and underlines inside the selection
    stay visible.

  • With directory-completion = false, cd input now gets history
    suggestions instead of no hint at all.

  • An iTerm2 inline image is limited to 4096 cells across and down, as kitty
    placements are.

  • Spaces typed after underlining ends no longer keep an invisible underline
    colour, which kept them from being trimmed as blank.

  • Directory candidates now appear in a compact, bordered panel beside the
    input, flipping above it near the bottom and staying within the pane's
    horizontal bounds. The panel no longer paints a full-width strip over
    previous output; inline previews and terminal row counts are unchanged.

  • Clear stale agent waiting, subtask and progress metadata at reported shell
    command boundaries after an abrupt CLI exit, including a CLI left on the
    alternate screen. Preserve explicit completion
    on clean exit; interruption is Idle and a known failed exit is Failed.

  • Cancel resolved fixed attention notices, recheck visibility before delivery,
    and deduplicate BEL and kind changes within the same waiting episode.
    Generic bells cannot overwrite a pending program message; late cancelled
    submissions finish before replacement delivery.

  • Reserve a main status slot alongside 32 subtasks. Keep generic OSC 21337
    decoration separate so it cannot hide Done or compete with typed state.

  • Match development and acceptance version Claude Code 2.1.310 in captured
    wire regressions. Document the supported task states and notification
    channels, actual sending conditions, unsupported features and verification
    limits; other Claude versions are not guaranteed.

Tests and tooling

  • Regression checks now assert visible prompt/input cells and cursor state
    after Clear Screen, plus continued editing in real shells. Local zsh
    completion is verified through three consecutive directory levels;
    no completion defect was reproduced and its logic is unchanged.
  • Limit the existing SwiftLint source inventory to project sources and
    scripts, excluding generated build trees; no lint cleanup is included.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.5.0.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.5.0.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  91ec83bfe10887e0ddaf0a6801b044918578b42a13f91447bcd98f8791c4ed32
Built with Xcode 26.6 (17F113)

Corta v1.4.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 17:51
2722ed4

Corta v1.4.0

Added

  • The project overview, the user guide and troubleshooting are now available
    in every language the app speaks: Simplified and Traditional Chinese,
    Japanese, Korean, German, French, Spanish and Brazilian Portuguese. A
    language bar with flags at the top of each switches between them, and each
    translation says which English version it follows.

Changed

  • Run PNG decoding in an independently signed App Sandbox helper app,
    replacing the deprecated runtime sandbox interface.

  • A pane whose session ended, whose connection dropped or that stopped
    working now shows one panel over its dimmed output, which stays
    readable — and, once the session has ended, selectable: what ended and
    how in a sentence — a dropped
    ssh connection names its host and explains exit code 255 — with the
    raw reason under Details. Reconnect and New Session start at
    once; the panel says the output is cleared, instead of asking again.
    Settings… is offered only where a setting can be the cause.

  • Connect to Host replaces the separate SSH and Remote Files sheets:
    one toolbar button, a Terminal / Files switch, the user, port and key
    under Advanced, and recent hosts with their port, key and when they were
    last used — forget one with its ✕ or its menu. Hosts that only take git
    (github.com, a Host with User git) are no longer suggested. From a
    remote pane the sheet offers that host's files first.

  • The SFTP password dialog says once whom it is for, names what the field
    wants (password, passphrase or answer), and its Cancel reads Cancel
    Connection
    . A failed SFTP connection says why — sign-in refused, host
    unreachable, host key unknown or changed, no SFTP — with Try Again and
    Edit Connection, and ssh's output under Details.

Fixed

  • Discard cancelled or superseded font scans and SSH host suggestions.
  • Rebuilding Corta reuses one Metal pipeline archive path instead of adding
    a new path to Metal's bounded usage index on every build, which could
    eventually log MDB_MAP_FULL. Routine accessibility query logs now
    require an explicit diagnostic switch instead of filling Xcode's console.
  • Large SFTP listings convert and sort in the background; superseded work
    cannot replace a newer directory or sort order.
  • Opening remote editing no longer hashes the old cache on the main thread.
    Cleanup runs in the background with a per-run work budget.
  • Remote-edit operations time out after 120 seconds once connected, releasing
    a stuck upload and offering its approval again for retry.
  • Idle block-cursor capture resumes from GPU completion without blocking
    the main thread or holding the renderer lock; failed captures back off.
  • Release SFTP stderr listeners with their channels and prevent PTY signals
    from racing child-process reaping.
  • Cancelling an SFTP password prompt no longer opens it again. OpenSSH
    read the cancelled prompt as an empty password, tried it and asked again,
    up to three times or more; Cancel now ends that connection attempt.
    Cancelling a key's passphrase still only skips that key.
  • Dropping files from Finder on the SFTP browser uploads them again — into
    the folder shown, or the folder row they land on. The drop never reached
    the listing.
  • A terminal connection made from the connect sheet is remembered as a
    recent host once it is established, not when Connect is pressed: a host
    that refused the connection, or offers no shell, no longer appears.
  • Reconnect and New Session start the new session at the pane's
    size and font size. The child started at the configured window size and
    was resized afterwards, so a remote banner and prompt were laid out at
    the wrong width, and a ⌘+ zoom was lost.
  • A pane's failure page is no longer white in a dark window: its colours
    were resolved against the app's appearance instead of the window's.
  • The failure page no longer mentions a Try Again button it does not show.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.4.0.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.4.0.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  dc0aebd53e160fdef4071d00be47dee7c7c724353f0bd40eb9ac9cb3fbfd52ca
Built with Xcode 26.6 (17F113)

Corta v1.3.1

Choose a tag to compare

@github-actions github-actions released this 21 Oct 15:44
155ce98

Corta v1.3.1

Fixed

  • A large Kitty graphics image no longer freezes every window while it
    arrives. Its base64 and zlib were decoded while the pane's state was
    locked, and each frame waits for that lock: a 4K kitten icat held
    the whole app for about 110 ms. The decode now runs with the lock
    released, and the image is placed at the same point in the output.
  • A screen of Chinese, Japanese or Korean text Corta has not drawn
    before — a new tab, a zoom step, a page of new output — no longer holds
    every window for tens of milliseconds while its characters are drawn
    for the first time. New characters are drawn about 8 ms' worth per
    screen refresh, shared by every pane, and the rest appear over the next
    few frames.
  • On macOS 26, every terminal window now renders offscreen and presents its
    drawable through a classic Metal queue. This avoids the normal Metal 4
    drawable presentation path suspected in the repeated WindowServer crashes
    of #380. The reporter confirmed a diagnostic build launches normally
    on the affected Mac; macOS 27 keeps its measured presentation behavior.
    Thanks to @FrankChen-CLC for the investigation and the fix (#386).

Security

  • Exported terminal text and Corta's private state — recent hosts,
    directory history, window state, the remote-edit manifest — drop any ACL
    entry the folder hands down before a byte is written. 0600 set the mode
    bits only: a folder granting another account inherited read access passed
    it on to each file, and the rename and chmod kept it.
  • Updating a shell rc file or the config file keeps its permissions from
    the first byte. The new copy was written at the umask and chmoded
    after, so a private ~/.zshrc holding exported tokens was readable by
    other accounts for a moment, and for good if the chmod failed.
  • Directory suggestions believe only the pane's own zsh. Any output — a
    catted file, a remote shell over ssh — could forge the prompt marks
    and a suggestion report, and the overlay that appeared took Tab,
    Left/Right and Esc from every prompt after it and drew the attacker's
    text beside the cursor as if typed. The automatic zsh bootstrap now signs
    each report with a per-session secret. A folder name's bidi overrides and
    zero-width characters show as U+FFFD, as in the terminal itself.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.3.1.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.3.1.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  229808795792083b98ab95ca4070f7d7a4b8880683927035dcd0ab28ab0ff1aa
Built with Xcode 26.6 (17F113)

Corta v1.3.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 03:35
ad805e3

Corta v1.3.0

Added

  • Settings ▸ Appearance ▸ Font chooses the terminal font again: System
    Monospaced, or any installed monospaced family whose regular, bold and
    italic faces keep one width, grouped as Apple's or yours, with a line
    saying where the chosen font comes from and whether it carries its own
    CJK design. The list follows fonts installed while Corta runs (#372). A
    family whose rows are one em tall, as many CJK families declare, gets at
    least the configured line spacing, so rows no longer touch.
  • Typography preferences in Settings ▸ Appearance and the config file:
    font-weight (light, regular, medium), line-spacing (1.0–1.4,
    default 1.18), font-fallback and emoji-rendering (color,
    monochrome); and in Settings ▸ Terminal, ambiguous-width (narrow,
    wide) for East Asian Ambiguous characters, where box drawing then spans
    both its cells.
  • Chinese, Japanese and Korean fall back to the face for the system
    language — PingFang SC, PingFang TC, Hiragino Sans or Apple SD Gothic Neo
    — and kana and Hangul always to their own script's face, so Japanese
    kanji are no longer drawn in Chinese forms on a Japanese Mac.
  • Settings ▸ Appearance ▸ CJK Font and font-family-cjk choose the font
    Chinese, Japanese and Korean are drawn in — any installed font with CJK
    characters, monospaced or not — ahead of the system language's (#374).
  • Double (SGR 21, 4:2) and curly (SGR 4:3) underlines, and the ITU
    T.416 colon forms of SGR colours (38:2::r:g:b). Other sequences with a
    colon are still ignored whole. An underline colour (SGR 58) is
    consumed rather than misread as attributes.

Changed

  • Config file: font-size now defaults to 13 and takes 10–24 in whole
    points; a value outside that range is clamped to it the next time Corta
    writes the file. Set it again if you used a size above 24 or below 10.
  • The terminal's side padding is 10 pt on each side (the left was 14).
  • SGR 21 turns on a double underline, as xterm, VTE and kitty read it,
    instead of being ignored.

Fixed

  • A symbol the font lacks, such as a prompt's ❯, is no longer drawn bold
    beside regular text, nor below the line: macOS answered SF Mono Medium
    with Menlo Bold. Arrows, dingbats, geometric and technical symbols from a
    fallback font are now drawn in its regular weight and centred where the
    font centres its own; braille, Powerline and Nerd Font icons, and pieces
    whose height is their meaning (scan lines, bracket pieces, corner
    triangles), keep their place.
  • System Monospaced is drawn in its Regular weight, as every other family
    and the CJK and symbol fallbacks are, so text and its fallbacks share one
    weight. It was Medium, which left Chinese and Japanese a step lighter
    beside it.
  • CJK in bold text is bold: it was drawn in PingFang SC Regular whatever
    the style, and now uses PingFang SC Semibold under a bold face.
  • font-family in the config file is no longer replaced with system. A
    family that is not installed, or not one width, draws as System
    Monospaced and Settings shows a Font Status row saying why (#372).

Security

  • Command History's Run sends Return only for a command its row showed
    whole, measured as drawn. The check counted up to 80 characters, more
    than the column shows at the window's default width, and a wide
    character counted as one: a forged history entry could hide the end of
    the command it ran. Run also fills, rather than runs, a command whose
    row output rewrote after the list last showed it.
  • Hovering a line built of combining-mark clusters no longer freezes the
    window: joining a row's text took time in the square of its width, and
    a link or file-reference check on such a line ran for seconds on every
    mouse move. Such a cluster also no longer shifts where a match on the
    rest of the line is drawn.
  • A keyboard-protocol pop (CSI < n u) costs the depth of the stack, not
    the n the program asked for: a stream of large pops kept the pane
    busy far beyond its size.
  • A long-task notification is titled with the tab's name you gave it, or
    its directory. It used the window title, which a program sets with OSC
    0 or 2, so any output could post a notification worded as Corta's own.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.3.0.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.3.0.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  2080b19158df17d446fc5efd3b849e1dbd74e9085829dc4c5c73f122c46f1686
Built with Xcode 26.6 (17F113)

Corta v1.2.3

Choose a tag to compare

@github-actions github-actions released this 19 Oct 13:53
b464e42

Corta v1.2.3

Added

  • The user guide has a Coming from another terminal section: the Corta key
    for each habit carried over from iTerm2, Ghostty or Terminal.app (⌥ as
    Meta, copy on select, a hotkey window, OSC 52 writes), and what has no
    equivalent.
  • README.zh-CN.md, a Simplified Chinese summary of the README's first
    screen and installation steps.
  • docs/DECISIONS.md opens with an index of every decision and its status.

Changed

  • The README is shorter: one table of measured figures, each naming the
    release it was measured on, and the comparison with iTerm2 and Ghostty
    moved to the feature reference. "What is planned" links to the open
    issues instead of an empty milestones page.

Fixed

  • Rapid clicks on New Tab always append and select the rightmost tab, even
    while the previous tab's selection transition is still in progress;
    toolbar actions keep their owning window throughout the transition.
  • SFTP rename, new-folder and upload dialogs keep the directory they opened
    for when navigation finishes behind them, and refuse a replacement
    connection. Remote-edit change detection, upload snapshots and saving a
    copy elsewhere process file contents off the main thread; an older change
    check cannot replace a newer edit or an approved baseline.
  • A pane no longer stops drawing for good after a few ordinary pauses. A frame
    dropped just before the window was minimised, covered, moved to another
    Space or put to sleep was taken for a stalled GPU when drawing resumed, and
    the fourth time in a pane's life it showed the renderer failure. Only a
    queue that finishes nothing for a second counts now, and a rebuilt one that
    draws for ten seconds starts the count again.
  • Waits that end in a failure no longer count time the Mac spent asleep: a
    shell starting, an image decoding or a remote file opening across a closed
    lid is not reported as timed out on wake.
  • quick-terminal-key refuses a Shift-only key such as shift+a, which would
    have taken capital A away from every application.
  • A connection that drops on its first request after connecting is reported
    by its real cause, not as a lost connection. Closing an SFTP browser or
    remote edit no longer waits on the main thread for ssh to exit, and a
    dropped connection no longer ties up a thread per pending request while its
    cause is read.
  • The idle block cursor gives up on a GPU busy with other work after 100 ms
    instead of holding the window for up to two seconds.
  • zsh history is saved to ~/.zsh_history again with directory completion
    on. macOS's /etc/zshrc set HISTFILE while ZDOTDIR still named Corta's
    temporary startup folder, so history went there and was deleted with it.
    Each zsh session's startup folder is now removed when the session ends,
    not only when Corta quits.
  • Clicking a task notification handles the click on the main thread whichever
    thread the system delivers it on.

Security

  • A dropped file path, and the directory typed by Go to Parent Directory and
    Go to Project Root, is quoted by Unicode scalar. An apostrophe or backslash
    joined to a combining mark in a file or folder name was written unescaped,
    which closed the quotes and let the rest of the name run as a command.
  • An SFTP upload, including saving a remote edit, keeps the mode of the file
    it replaces — and its group where the server allows — and a file reached
    through a symbolic link keeps its target's mode. Replacing a file used to
    leave it at the server's default mode, so a private (0600) file such as
    .env could become readable by other users on the host. A new remote file
    asks for the local file's permissions, narrowed by the server's umask.
    Uploaded files also keep a real access time instead of 1970.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.2.3.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.2.3.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  acbbc747fe76bd49a7b3c446beafcf6a719b322b6a9471307af5ddbd897746bb
Built with Xcode 26.6 (17F113)

Corta v1.2.2

Choose a tag to compare

@github-actions github-actions released this 15 Oct 16:05
a0e5b9d

Corta v1.2.2

Changed

  • Building a frame's instances takes a third or more less CPU when the whole
    screen changes: the per-cell reads of the terminal core and the glyph
    cache's ASCII hits are inlined. Text joined by combining marks, emoji
    modifiers or flag pairs no longer allocates per character as it arrives.

Removed

  • Directory-history favourites. Nothing in the app could ever mark a
    directory as one, so the history now ranks by frecency alone; a history
    file that still carries the old flag loads as before.
  • The experimental per-window render thread (CORTA_RENDER_THREAD=1), which
    was off by default and never shown to save power. Every window renders on
    the main thread, as it always has by default.

Fixed

  • A selection disappears when the program running in the pane rewrites the
    text it covers. Claude Code's in-place redraws left a highlight lying
    across unrelated text that a click could not remove (#341).
  • The input-source badge beside the prompt takes its text colour from the
    terminal theme, as the directory hint does, so a theme darker or lighter
    than macOS no longer draws it dark on dark (#348).
  • After a crash, restored tabs keep the tab that was selected and the names
    given to them: switching or renaming a tab now saves the arrangement, as
    moving or resizing a window already did.
  • A pane no longer risks drawing its whole session in a fallback font
    with no letters when macOS's font service hiccups as the pane opens: the
    terminal font's fallback list is applied to the font already loaded
    instead of looking the font up again.
  • A split's focus ring, and the settings rows' status icons, follow
    Increase Contrast when it is switched while Corta runs, instead of
    keeping the width and colour they had until the focus next moved.
  • The cd directory-completion hint takes its colour from the theme —
    built-in or defined in the config file — instead of the system label
    colour, which drew the alternatives almost black on a dark theme while
    macOS itself was in Light mode. A theme change recolours a hint already
    showing, and Increase Contrast strengthens it.
  • The user guide and configuration reference no longer promise a directory
    switcher: directory history is recorded and can be cleared in Settings,
    but nothing in the app lists it yet. Troubleshooting entries that had
    drifted below "Going back to your old terminal" are back under their
    topics, and release-specific notes read as current behaviour.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.2.2.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.2.2.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  e5e1aa71a4e0ff0fe02aa2a25b055363b8a21951fc568318db67028025e85685
Built with Xcode 26.6 (17F113)

Corta v1.2.1

Choose a tag to compare

@github-actions github-actions released this 14 Oct 07:43
5d6f064

Corta v1.2.1

Added

  • The SFTP browser and remote editing ask for a password, a key passphrase,
    a one-time code or a new host key in a dialog, through OpenSSH's own
    SSH_ASKPASS, so a host that takes only a password can be browsed and a
    new host no longer has to be accepted in a terminal first. Nothing is
    saved; the host-key dialog shows the fingerprint and defaults to Cancel.
  • The SSH and SFTP connect sheet has user, port and private-key fields
    beside the host, the same for both: SFTP can now reach a non-default port
    without a ~/.ssh/config alias, and a chosen key is offered first, with
    other ssh-agent keys left out. Recent connections remember the fields they were made with.

Changed

  • The remote badge at the front of a window title reads Remote: instead
    of the ⟂ symbol, and a connection opened from the connect sheet names
    the destination you typed instead of host unknown. Browse Remote Files…
    in such a pane connects to that destination without asking for it again.

Fixed

  • Configuration and user guides now include every scalar setting in the
    complete example and distinguish automatic zsh hooks, remote editing and
    protocol queries from older behaviour; documented defaults are checked
    against the implementation.
  • Release preparation and packaging checks accept version-independent README
    download instructions, so editing installation prose no longer breaks the
    release pipeline.
  • Renaming a tab and then clicking or switching to another tab, closing a
    tab or entering full screen saves the name, instead of leaving the tab
    blank and its editor stranded where the tab used to be.
  • SFTP and remote editing work for a host whose ~/.ssh/config entry has a
    RemoteCommand, which made ssh refuse the file channel, and no longer
    inherit RequestTTY force or become a ControlMaster themselves.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.2.1.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.2.1.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  a3d731e48b8df06e04f4e7dcab3bb00358226b884d339dc5b4a086ed94585257
Built with Xcode 26.6 (17F113)

Corta v1.2.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 14:20
881afd0

Corta v1.2.0

Corta 1.2 is a performance release: faster from the byte a program writes
to the pixel on the panel, lighter in memory, and quieter when nothing is
happening. Figures are from one Apple M5 MacBook Air, before and after on
the same machine and toolchain; Performance has each
method and what it does not show.

Changed

  • 2.3× the output throughput. The parser and grid take 355.9 MiB/s,
    up from 158.0, and output arriving from a shell 317.3 MiB/s, up from
    137.2. Runs of printable text are classified 16 bytes at a time with NEON;
    common CJK text skips the width table (+23%), and yes runs 70% faster.
  • A frame less from keypress to glass in full screen. A full-screen
    window with one pane presents its frames directly to the display instead
    of through the window server's compositor. A person typing sees the median
    drop from 64–68 ms to 49–51 ms and the worst cases halve (p99 154–180 →
    83–84 ms). Nothing visible changes; CORTA_DIRECT_FULLSCREEN=0 turns it
    off for a comparison.
  • The panel's full refresh rate while you type. Typing, committed
    input-method text, paste and mouse reports lift the frame-rate ceiling to
    the panel's maximum — 120 Hz on ProMotion — and it settles a second after
    the last key. Critical thermal pressure still limits it.
  • Scrolling reuses what is already drawn. Scroll regions, history and
    inserted or deleted lines shift the rendered rows instead of rebuilding
    them: a one-line region scroll takes 0.026 ms of CPU a frame instead of
    0.130, and output arriving while you read history 0.010 ms instead of
    0.096. Screen rows keep their memory as they scroll.
  • Scrollback in a fraction of the memory. Cold history is compressed in
    memory as it arrives, off the terminal lock: 100,000 lines of 120 columns
    take 11.4 MiB instead of 185. Search, resize and reflow read it in place.
  • Smaller GPU footprint. A rendered quad is 24 bytes instead of 48, and
    glyph atlases grow on demand: four panes at a prompt hold about 1 MiB of
    atlas instead of 81 MiB. The atlas's rectangle table is uploaded only when
    it changes.
  • Quieter at rest. An idle blinking cursor is animated by Core Animation
    instead of redrawn every half second; an idle shell no longer wakes its
    reader four times a second; a pane you cannot see drops its reader to
    background priority after two seconds, and returns to interactive
    priority the moment you type or paste.
  • Kitty images are decoded by the sandboxed helper straight into memory the
    GPU reads, with no copy through the app, then moved into GPU-private
    storage; raw RGB/RGBA images are converted in place.
  • The disk image is an APFS volume compressed with lzma, about 15% smaller
    to download than 1.1.9's. Opening it shows a fixed window with Corta, an
    arrow and the Applications folder.
  • Changing the font size (⌘= / ⌘− / ⌘0, a pinch or Settings) keeps the
    window's frame; only the rows and columns refit, as in full screen and
    with splits.
  • An ended session shows a compact, centred card with accessible
    New Session and Close Pane buttons that fit narrow panes.
  • An opt-in per-window render thread (CORTA_RENDER_THREAD=1) is available
    for testing; it stays off by default.

Fixed

  • With View ▸ Show Tab Bar on, a new window opens at the configured rows
    instead of two or three rows short.
  • Kitty images inside a scroll region — and lines inserted or deleted around
    them, as vim, less and tmux do — move with their text and are cropped at
    the region's edge, including in the alternate screen and with scrollback
    off.
  • A Kitty image near the 16-million-pixel limit whose width needed padding
    for the GPU was refused; it now shows. Narrow images and many small ones
    no longer fill the image budget early, and an image whose upload met a
    busy GPU is retried instead of staying blank.
  • In full screen, a frame whose rendering failed is redrawn instead of
    being presented as drawn.
  • Square table corners stop at the strokes they join instead of protruding
    past the border, at every display scale.
  • Directory suggestions hide while an input method composes text, so they
    no longer overlap the preedit or the candidate window.
  • Input-method and accessibility cell positions match what is drawn while a
    live resize briefly makes the grid taller than its pane.
  • Idle blinking cursors give way to the drawn cursor before new output
    renders, so a cursor is never shown twice.
  • Automatic focus reports no longer raise a hidden pane's reader priority;
    only your input does.
  • With CORTA_RENDER_THREAD=1, a GPU that stops responding no longer takes
    the app down when a pane closes or the font changes.

Security

  • The image decoder's sandbox is verified by the test suite instead of by a
    deliberate denied file read on every image, which logged a sandbox
    violation for each picture shown.
  • Every pull request is scanned by CodeQL (Swift, C, Python and workflows)
    and dependency review before it can merge.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.2.0.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.2.0.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  5c4d825b1d1c92496b716f58be24587e238540f35229a55735a095ccdf8b3e59
Built with Xcode 26.6 (17F113)

Corta v1.1.9

Choose a tag to compare

@github-actions github-actions released this 09 Oct 04:58
3e9f996

Corta v1.1.9

Changed

  • Future releases use a signed, notarised disk image (.dmg) for installation
    and automatic updates. Earlier releases keep their original ZIP files.

Added

  • Discussions now have forms for questions and early ideas; bug reports ask
    for diagnostic information when Corta freezes or crashes.

Fixed

  • Cancelled SFTP uploads keep only their confirmed contiguous prefix before
    resuming; out-of-order in-flight writes could leave a hole that a retry
    skipped by trusting the partial file length.
  • Focusing a window by its Shortcuts identity brings the requested window
    forward even while macOS is still activating the application.
  • A screen overflowing the glyph atlas no longer makes every unrelated cell
    change re-shape an entire frame of text; deferred first paints that fit
    still fill in across frames.

Security

  • Inline images (the Kitty graphics protocol) are decoded in a separate,
    sandboxed process with no access to files or the network, so a flaw in
    the system's PNG decoder can no longer reach anything Corta has been
    allowed to read.

  • Updates are checked harder: Corta refuses an update feed that is not
    signed with its update key, with no grace period, and checks a
    downloaded update's signature before unpacking it rather than after. The
    feed's notes, links and flags were not covered by any signature before.

  • The update feed's own check now refuses an entry that carries release
    notes, a link or an update flag, which Sparkle would act on and the
    update's signature does not cover; the feed has never published any. The
    release check also refuses an app in which any part could be debugged,
    load another developer's libraries, or search outside the app for them.

  • The SFTP browser and remote editing no longer forward your SSH agent, X11
    or ports to the host, and never run a LocalCommand, whatever
    ~/.ssh/config says for it — as sftp itself does. A ForwardAgent yes
    meant for interactive logins reached a host named by a remote shell's own
    report.

  • Retrying a failed transfer after Change Host no longer sends it to the
    new host. The row named the host it was queued for, and Retry ran on
    whichever host the browser was connected to by then.

  • Run in the command history fills, rather than runs, a command the
    list cannot show whole: more than one line, longer than 80 characters, or
    holding a tab. The records come from shell-integration marks that any
    program's output can imitate, so a part you never saw could run.

  • A working-directory report (OSC 7) is believed only where the kernel puts
    the shell or the running program. Any output — a remote shell, or cat of
    a file — could name a local folder by leaving out the host, and new tabs,
    splits, restored windows and the directory history followed it.

  • Editing a remote file by ⌘-click or Edit copies at most 64 MB, and any
    download stops if the server sends more than the size it stated, or more
    than a READ asked for. A server that gave no size could fill the disk with
    no progress row to cancel from.

  • The SFTP browser shows control, right-to-left and zero-width characters in
    a remote name as �, and saves them as _, so invoice\u{202E}fdp.sh no
    longer reads as invoicehs.pdf.

  • Remote-edit copies are removed 30 days after their last use (when remote
    editing is next used), unless they hold an edit not yet uploaded or
    dismissed. A file opened once stayed in
    Application Support, and its backups, for good.

  • Exported output and selections are written readable by you only (0600).

  • A remote-edit copy from 1.0.x, which recorded no content digest, now asks
    the conflict question before its first upload, as the security notes
    always said; size and time alone miss a same-size change within the
    second. Upload Anyway records the digest for next time.

Added

  • A pane whose session has ended says so until you act: a bar names the
    exit code or the signal, and offers New Session (or Reconnect for
    an ssh-style command) and Close Pane. The last output stays readable
    and selectable, and no caret is drawn. A program that exits back to the
    shell's prompt is not the session ending, and shows nothing.

Fixed

  • Two uploads to the same remote file no longer share one partial file. The
    second could finish and report success while the first, still writing
    through its own handle, changed the file it had committed. Transfers to
    one destination now take turns, from any browser window, folder transfer
    or remote-edit save, and a transfer from zero writes a partial of its own.
  • On a server without posix-rename, a failed overwrite can no longer lose
    both files. The old file is renamed aside rather than removed, put back if
    the new one cannot take its name, and removed only once it has; if even
    putting it back fails, the error says where both copies are.
  • Save Local Copy Elsewhere no longer deletes the file you agreed to
    replace when the copy then fails. The copy is made beside it first and
    only then renamed over it.
  • A transfer whose source shrinks, grows, is rewritten or replaced while it
    is read now fails, and leaves the destination as it was. It used to
    commit what it had read — a truncated or mixed file — and report success.
  • Ctrl-C reaches a program that stopped reading in the middle of a paste's
    last chunk. With nothing of the paste still queued, Ctrl-C waited behind
    the blocked write instead of interrupting the program.
  • Opening a remote file no longer waits forever on a server whose SFTP
    service never answers: the connection is given up after 30 seconds, a
    cancelled open stops waiting at once, closing the pane cancels its opens,
    and the next open connects afresh.
  • The Quick Terminal no longer disappears just after it was summoned, when
    the summon came while an earlier hide was still sliding out.
  • A setting changed in Settings no longer writes over an edit to the config
    file made a moment earlier, before Corta had read it.
  • Changing the font size while a frame was still being drawn could show
    glyphs from the new size in that frame. The glyph atlas now leaves the
    textures a queued frame uses alone.
  • Plain-text search stays fast on long lines with a near-miss query, and
    stops promptly when the query changes, instead of finishing a scan that
    could take hundreds of milliseconds.
  • Clicking a long-task notification lands on the pane that posted it, not
    the first pane of its window with a command of the same number.
  • VoiceOver's selected text includes the last selected character, and a
    single selected character is reported as a selection.
  • A cancelled upload resumes from where it stopped on OpenSSH servers,
    instead of starting over: every write moved the partial's timestamp, so
    it no longer looked like the same file.
  • Uploading a folder that was moved or deleted while it waited in the queue
    now fails, instead of creating an empty remote folder and reporting
    success; an unreadable subfolder fails the upload too.

See CHANGELOG.md for the full history.

Requires macOS 26.0 or later on a Mac with Apple silicon.

Install

Download Corta-1.1.9.dmg and its .sha256 file.

shasum -a 256 -c Corta-1.1.9.dmg.sha256

Open the disk image, drag Corta into Applications, then eject the disk image.

SHA-256  8351a5e98d91745f5c7651ae692ed846b7b0670fbf1aa8ce2432c9f0efe0931f
Built with Xcode 26.6 (17F113)