OdyTTY

A Linux-first GPU terminal emulator, written from scratch in Rust.

release v0.16.1 platforms Linux · Windows · macOS theme odyssey-classic visual ambient search

$ git status --project

Project status and contribution

OdyTTY is maintainer-led, GPL-3.0-only, and uses DCO sign-off. Durable decisions live in the specification and TODO; ordinary issues and private security reports follow separate routes.

Maintained sources: SPEC.md · TODO.md · documentation index · ask a question

$ Release history - v0.16.1

Published October 3, 2026. v0.16.1 adds AppImage update information only. The v0.16.0 pane and window workflows are described in full below, beside the v0.15.8 macOS idle-CPU patch. Expand a dated entry for its full notes and platform limits. Earlier releases remain historical entries.

v0.16.1: AppImage update information

The x86_64 AppImage embeds a latest-GitHub-release channel, with odytty-x86_64.AppImage.zsync describing the always-latest alias. AppImageUpdate can check for and download updates. The pinned AppImage contains identical bytes. Both the image and control file are covered by signed SHA256SUMS and build provenance; zsync SHA-1 verifies transfer integrity and does not authenticate a release. OdyTTY initiates no automatic update check. AppImages from v0.16.0 and earlier need one manual replacement. Every other package is rebuilt at 0.16.1 with no behavior change from v0.16.0.

AppImage update and verification instructions · Published v0.16.1 release and 18 assets · Release notes

v0.16.0: pane and window workflows

Published October 2, 2026. This feature release builds on v0.15.8. Read-only, broadcast, move, layout, and scrollback-export actions are reachable from right-click menus as well as the command palette.

Read-only panes

Off until toggled per pane, with no default chord and a persistent READ-ONLY or RO label. Keys, IME, paste, drops, and mouse reports are blocked; copy, search, scrollback, and resize remain available. Workspace and named-layout state retain the flag on Linux Wayland and X11, macOS, and Windows.

Guarded broadcast input

Explicit receivers, including other windows of the process, receive keys, IME commits, and paste with the focused pane. Read-only receivers are skipped. A paste containing a line break asks for confirmation with receiver, hidden, and remote counts. BROADCAST n and RECV labels disclose the set. Ctrl+Shift+X empties it and never reaches a shell. Receiver sets are never saved. Local automation cannot send terminal text.

macOS secure keyboard input

A process-wide settings or palette preference, off by default, with no default chord or password-prompt detection. It is held only while an OdyTTY window has focus, and later windows adopt the preference. SECURE INPUT labels appear on holding windows, on the focused pane in multi-pane tabs. Windows and Linux offer neither the row nor the action and do not simulate it; shared config keeps the key without applying it.

Move tabs and panes

Tab and terminal right-click menus move the clicked tab or focused pane to a new window or an existing one through the merge picker. PTY or attach handle, scrollback, images, profile, and --hold state move with the shell. An emptied source closes and hands over the saved-layout role. Merge and pull move whole workspaces into the destination rail; Move Tab to Window... adds one tab to its current workspace.

Stacked and floating layouts

Stack Panes, Float Panes, and Tile Panes appear in the terminal menu for multi-pane tabs, hiding the current layout. Tiled stays the default and older layouts open tiled. Stacked shows one pane while the rest run; floating uses framed whole-cell rectangles, z-order, an 8 by 2 cell minimum, and a clamp that never deletes a pane. Arrange Floating Pane moves and resizes from the keyboard. Linux Wayland and X11, macOS, and Windows share one implementation.

Scrollback export

Text or self-contained HTML through a native save dialog, with a 32 MiB cap, [image] placeholders, and no added working directory, host, user, profile, or window-title metadata. HTML blocks scripts and network fetches and allows only HTTP and HTTPS anchors. Terminal text is exported as it appears, including sensitive text already present; allowed link targets stay as written. Linux uses the XDG portal on Wayland and X11; macOS and Windows use native dialogs.

Ambiguous character width

ambiguous_width is narrow by default (one column) or wide (two). Each pane follows its launch profile. Changing it reflows the grid and scrollback without resizing the PTY or telling the shell. Overlay chrome and the glyph atlas stay narrow.

Windows input fixes

A window's first shells, including restored layouts and new windows, stay suspended until the real grid reaches ConPTY. A five-second backstop can start one before a successful resize retry, so a first command can still land at the old wrapped column after repeated resize failures or minimization. Unix spawns are unchanged. Consumed Ctrl+Shift letter chords no longer leave a letter in the new window: at most one matching leftover is dropped, and a different key ends the guard. No separate fix is claimed for cursor displacement after closing it.

v0.16.0 limits

  • Dragging a tab or pane out of a window is not supported on any platform. Right-click menus, palette actions, and the merge picker are the route. On Wayland, the compositor chooses where a new window opens. The quick terminal never sends or receives tabs or panes.
  • Pointer dragging of floating frames is not implemented. Inline images in a floating pane are hidden while another floating pane covers any part of its drawable area and return when uncovered.
  • macOS secure input blocks event-tap keyboard-intercept tools, including their hotkey and key-remapping shortcuts. A crash while it is enabled can leave secure input reported active and those tools blocked until logout. Other apps still receive keys.
  • Only the primary window writes the workspace snapshot. Broadcast receivers are never persisted. Profile renames and deletes update bindings across windows.

Input, discovery, and packaging bounds

Undeliverable input raises an Input lost notice. Bracketed paste is checked against the 8 MiB attach limit before encoding; OSC 52 read replies over 64 KiB are refused whole. Host probes avoid waiting on stuck peers; shell history, desktop entries, images, SSH config, and settings refuse FIFOs and devices without blocking. Helper commands have deadlines. Profile discovery examines at most 1,024 directory entries and lists at most 256 profiles; saved-layout discovery examines at most 1,024 entries. Font discovery is limited to depth 6, 20,000 collected files, 100,000 examined entries, and 10,000 read directories, with reported truncation. A lost GPU device stays lost. Bounded scrollback retains at most 1,024 cells per allowed line on average.

The AppImage now bundles xkbcommon-x11, Xcursor, and XInput libraries loaded by the windowing layer; core libxkbcommon stays host-provided. Earlier AppImages, including v0.15.8, could panic at startup on X11 without libxkbcommon-x11. The release checks library coverage and starts the AppImage under Xvfb in a clean container without the bundled libraries. Debian, RPM, and AUR packages declare libxkbcommon-x11.

Evidence boundary: v0.16.0 and v0.16.1 claim no new performance measurements. Published comparisons remain labeled v0.12.0.

Published v0.16.0 release · Release notes · Full code changelog

v0.15.8: macOS idle CPU

Published October 2, 2026. An untouched macOS window's idle CPU returns to about zero. Removing a per-tick EventLoopProxy clone stops it from re-waking the macOS run loop; the clone had been present since v0.15.0. The clone is also removed on Linux and Windows, where it showed no spin and no idle-CPU claim is made. Rendering speed and memory were not re-measured.

Published v0.15.8 release · Patch notes

v0.15.7: Wayland stall prevention and merge autosave

Published September 27, 2026. This reliability patch fixed the Wayland stall and primary-window merge autosave.

No stall after a hidden workspace

On Hyprland with NVIDIA's proprietary driver, a window could stop updating for minutes or hours after its workspace was hidden and shown again, while the terminal behind it kept running. Under the default Fifo present mode, that driver was observed to request a presentation time far in the future right after the window returned, and a compositor that honors the request, as Hyprland does, held every later update of the window until then. OdyTTY now presents with Mailbox on every Wayland surface that offers it; redraws were already paced by the compositor's frame callbacks, and both modes use three swapchain images. The startup log names the chosen present mode. This is a stall fix, not a speed change.

Merging the primary window keeps autosave

Since v0.15.0, merging the first window of a process into another window, or pulling it into another window, left the surviving window without workspace autosave, so later layout changes were not saved for the rest of the session. The surviving window now takes over autosave and saves the merged layout. Merging another window into the primary window is unchanged.

v0.15.7 platform notes and limits

  • Where the present-mode change applies: Wayland sessions on every GPU driver change when the surface offers Mailbox. Windows, macOS, and Linux X11 keep Fifo with no behavior change.
  • Validation: blocking Linux, macOS, and Windows CI passed on the tagged commit. The present-mode change was checked on device only with NVIDIA's proprietary driver on Hyprland, where the workload that previously stalled ran for about two hours on a hidden workspace without a stall. AMD, Intel, and NVK on Wayland were not tested on device, and the far-future presentation targets have not been reproduced on Mesa drivers. The autosave fix is covered by tests for both merge directions. No macOS or Windows device checks were run for this release.
  • Measurement scope: rendering speed, idle CPU, and memory were not re-measured.
  • Known Windows issues (also in v0.15.0 through v0.15.6): with a long, wrapped PowerShell prompt, the first typed command can start away from the prompt, and Ctrl+Shift+N can insert an n and move the cursor of the original window. These historical issues are addressed by the v0.16.0 input fixes above, within their stated bounds.
  • CJK fallback: with default fonts, Han characters still display as missing-glyph boxes, as in v0.15.6; a covering font can be supplied through the symbol_font setting.

Updating: update through your existing installation channel; no configuration change is required. At publication, Homebrew, Scoop, and the AUR carried v0.15.7.

Evidence boundary: v0.15.7 claims no new measurements, and published measurements remain v0.12.0 results with their original conditions and scope.

Published v0.15.7 release and assets · Release notes · Full code changelog · Build journal

v0.15.6: cursor glide regression fix and menu scrolling

Published September 24, 2026. v0.15.6 fixes a v0.15.5 regression in which long cursor moves paused partway through their glide, and makes overflowing right-click menus scroll predictably.

Long cursor moves glide without pausing

With cursor motion and the cursor trail on (the defaults), a cursor jump of more than six cells, such as Home or End on a long command line or the return to the prompt after multi-line output, started its glide, stopped partway, then snapped to its destination in windows without splits. This came from the v0.15.5 idle-CPU fix. The large-jump cursor follower now requests its own frames, so the glide runs at the normal frame rate from start to finish. Split panes, short moves, and the v0.15.5 idle-CPU improvement are unchanged.

Overflowing right-click menus

A right-click menu taller than the window keeps its own scroll position. Clicking the arrow mark on its top or bottom border scrolls one row, the mouse wheel and trackpad scroll the menu by whole rows, and the highlight stays on the row under the pointer. Every scroll step is drawn. On macOS, trackpad travel scrolls one row per three cell heights; Linux and Windows scroll one row per wheel notch. Menus that fit in the window, settings, the command palette, and pickers are unchanged.

v0.15.6 platform notes and limits

  • Validation: blocking Linux, macOS, and Windows CI passed for each change. On device, the uninterrupted long-move glide was checked on Linux (Wayland) and macOS. Menu arrow clicks and uninterrupted menu scrolling were checked on Linux (Wayland); on macOS, menu wheel and trackpad scrolling was checked before the final repaint fix, and arrow clicks are covered by tests and CI. Windows is covered by CI only. Idle CPU was not re-measured.
  • Known Windows issues (also in v0.15.0 and v0.15.5): the wrapped PowerShell prompt offset and the Ctrl+Shift+N n insertion described above.
  • CJK fallback: with default fonts, Han characters still display as missing-glyph boxes, as in v0.15.5; a covering font can be supplied through the symbol_font setting.

Evidence boundary: v0.15.6 claims no new measurements.

Published v0.15.6 release and assets · Release notes · Full code changelog

v0.15.5: maintained font parsing and Wayland reliability fixes

Published September 24, 2026. v0.15.5 is a maintenance and reliability patch over v0.15.0. It moves text font reading to a maintained font library without changing how text looks, and fixes two Wayland reliability problems: a window that could stop repainting after a lost frame callback, and a focused idle window that could hold one CPU core busy. The v0.15.0 features are described below.

Maintained font parsing

Normal-text font metadata, metrics, and glyph outlines now come from the Fontations skrifa library behind an OdyTTY-owned font handle; the glyph coverage rasterizer is unchanged. On a frozen corpus of bundled faces, sizes, and subpixel positions, the new path matched the previous one in every sampled case, and controlled Wayland and Xwayland screenshots were byte-identical before and after. The unmaintained ttf-parser (RUSTSEC-2026-0192), owned_ttf_parser, and ab_glyph crates no longer appear in the dependency graphs.

Wayland title bar

When the compositor asks OdyTTY to draw its own title bar, the title text is now drawn through the system FreeType and Fontconfig libraries (crossfont) instead of a bundled parser. Compositors that draw their own decorations, and macOS and Windows, are unaffected.

Wayland repaint recovery

A focused, visible Wayland window whose compositor never returned a frame callback could stop repainting while the shell kept running. After a redraw has been owed for about two seconds, OdyTTY now paints directly at a bounded rate until the compositor responds, and the freeze watchdog records this state under its own name. The original trigger was not reproduced locally; the recovery path is covered by deterministic tests.

Idle CPU on Wayland

A focused, idle window could keep one CPU core busy because timed animations requested an immediate redraw while also scheduling a timed wake. Timed redraws now wait for their deadline. On the measured Linux workstation, focused idle CPU dropped from about one full core to zero once the cursor stops blinking, with cursor, scroll, bell, and fade animations unchanged. X11, macOS, and Windows did not show the loop.

v0.15.5 platform notes and limits

  • Linux system libraries: Linux binaries now need the system FreeType and Fontconfig libraries at run time, which standard desktop installations already provide; the .deb, .rpm, and AUR packages already list them. Source builds need pkg-config and their development packages (see build prerequisites). macOS and Windows are unchanged.
  • Validation: blocking Linux, macOS, and Windows CI passed for each change. Linux Wayland and Xwayland rendering, the client-side title bar under Weston, display-scale moves, plain render quality, and multi-window GPU close were checked on device. On macOS and Windows, ordinary text, styles, emoji, symbols, box drawing, wrapping, and font-size changes were checked on device.
  • Measurement scope: cold startup, the formal exact-geometry memory guard, scripted typing and selection checks over mixed-width and right-to-left text, and display-scale moves on macOS and Windows. Warm startup and idle memory were compared before and after the font change and were unchanged within measurement.
  • CJK fallback: with default fonts, the tested Han characters display as missing-glyph boxes on Linux, macOS, and Windows, as in v0.15.0. They render when a covering font is supplied through the symbol_font setting (ODYTTY_SYMBOL_FONT). Automatic CJK font discovery is not part of this release.
  • Known Windows issues (also in v0.15.0): with a long, wrapped PowerShell prompt, the first typed command can start away from the prompt, and Ctrl+Shift+N can insert an n and move the cursor of the original window. These historical issues are addressed by v0.16.0 within the bounds above.

Updating: update through your existing installation channel; no configuration change is required.

Evidence boundary: v0.15.5 claims no new benchmark campaign. The font change was compared before and after on one Linux workstation without a new cross-terminal comparison, and published measurements remain v0.12.0 results with their original conditions and scope.

Published v0.15.5 release and assets · Release notes · Full code changelog · Build journal

v0.15.0: quick terminal, local automation, file drop, and window merge

Published September 14, 2026. This release adds four features and the Electric Blue theme, while preserving the existing terminal-input and remote-upload security boundaries.

Quick terminal

A dedicated drop-down terminal with its own identity and settings, summoned by a per-platform global shortcut. Registration is confirmed by the platform (Linux X11, Wayland through the GlobalShortcuts portal, macOS, and Windows) and reports an actionable notice when a shortcut is unavailable or already taken. Placement on tiling Wayland compositors is compositor-controlled.

Local automation & CLI

An opt-in, owner-scoped automation_endpoint and odytty control CLI list and focus windows, workspaces, tabs, and panes, open profiles, create tabs, splits, and workspaces, and rename. It is structural only: no terminal input injection, no content reads, and no network listener (owner-only Unix sockets or a Windows named pipe). Off by default.

External file drop

Drag files onto the terminal to insert their shell-quoted paths behind a confirm-first preview. Nothing is executed and no Enter is appended. Native Wayland delivery works through OdyTTY's own listener, requesting Copy only. File drop is refused by design on Windows with a notice.

Keyboard window merge

Merge This Window Into… and Pull Window Into This One… from the command palette or Session Navigator, with numbered targets painted inside candidate windows and an atomic transfer of tabs, panes, and sessions. The source window closes only after success.

Electric Blue theme

Electric Blue (odyssey-electric-blue) is a new preset and the 145th built-in theme: a blue-black background, lavender text, and an electric cyan cursor. It changes colors only. The default theme is unchanged, as are all effect settings.

v0.15.0 platform notes and limits

  • Quick terminal: window placement on tiling Wayland compositors is decided by the compositor, not OdyTTY. Where the GlobalShortcuts portal is absent, the quick terminal can be toggled through the local automation command instead.
  • File drop: refused by design on Windows; remote and attached panes refuse local paths. On Hyprland, admission follows the compositor's drag behavior, and a Move-only source is refused. A non-UTF-8 filename dropped on X11 is not delivered by the toolkit and produces no event, so OdyTTY cannot surface a notice for it.
  • Automation: off by default and owner-scoped; cross-account and cross-machine access is refused by the socket or pipe ownership itself.

Security framing. The new surfaces are opt-in and confirm-first: automation is off by default, structural only, and opens no network listener, while file drop inserts quoted path text behind a preview and never appends Enter. The existing paste-safety policy and the integrated-SSH remote-upload boundary are unchanged, and OdyTTY still has no telemetry, accounts, cloud sync, or update ping.

Evidence boundary: no new v0.15.0 benchmark campaign or live GPU-memory capture is claimed. Published measurements remain v0.12.0 results with their original conditions and scope, because rendering, terminal storage, GPU allocation, and presentation timing were unchanged.

Published v0.15.0 release and assets · Full code changelog · Build journal

v0.14.0 - profiles and navigation

v0.14.0 (September 8, 2026) added named launch profiles with a full Profile Manager, opt-in External palette following, and the unified Session Navigator, and closed an external security review; detached and persistent Windows host sessions remained unsupported. Its version-pinned Linux install block has since been superseded by the repository's cross-shell one-line install and update command, which automatically installs Minisign when needed and verifies release artifacts.

v0.14.0 release and version-pinned downloads · Security review and evidence ledger · v0.14.0 feature reference

v0.13.0 - safer, command-aware work

v0.13.0 introduced risky-paste confirmation, OSC 133 command-output select/copy/search/export, and bounded completion notifications and activity monitors. It also added Theme Builder hex editing, made odyssey-default the default theme, and added Red Planet themes.

v0.13.0 release and version-pinned downloads · v0.13.0 feature reference

$ man odytty.conf - runtime knobs

Most of the time you won't come here - OdyTTY is configured from the in-app settings panel (see workflow). Everything that panel touches is also a plain key = value setting (and an environment variable); this canonical list is generated straight from OdyTTY's docs/runtime-knobs.md.

Run & configure

Same commands everywhere once odytty is installed.

launch
odytty
odytty -e btop
odytty --working-directory /tmp -e sh -lc 'pwd; exec "$SHELL"'
odytty --title Monitor -e btop
odytty --app-id=com.example.Monitor -e btop
odytty --hold -e sh -lc 'echo complete; exit 7'

On Linux, --app-id and --class are equivalent and accept space or equals forms. They change only that window's Wayland app_id or X11 WM_CLASS class; the X11 instance remains odytty and the packaged identity remains io.unfinished_works.odytty. --hold, --hold=true, and --hold=false control only the initial local command and default to off. A held exit reports its status and closes through the normal pane/tab/workspace lifecycle on the next keypress; later sessions do not inherit it and remote reconnect handling retains precedence.

child-shell environment - no custom terminfo required
TERM=xterm-256color
COLORTERM=truecolor
TERM_PROGRAM=odytty
TERM_PROGRAM_VERSION=<installed version>
quick launch examples
# hard direct-render profile
ODYTTY_RENDER_QUALITY=plain odytty

# follow the desktop dark/light preference
ODYTTY_THEME=system odytty

# larger text with a custom font family
ODYTTY_FONT_SIZE=24 ODYTTY_FONT_FAMILY="Victor Mono" odytty

# RGB subpixel antialiasing
ODYTTY_SUBPIXEL=rgb odytty

# stronger phosphor reference look
ODYTTY_RETRO=on odytty
headless introspection (print and exit - no window)
odytty --list-themes   # stable name / appearance / family rows
odytty --list-fonts    # discoverable system font files
odytty --show-config   # current stable config-dump subset
odytty --version

Configuration resolves defaults → ~/.config/odytty/odytty.conf → environment on Linux/macOS, or defaults → %APPDATA%\odytty\odytty.conf → environment on Windows; environment variables always win. (macOS quarantine notes live with the macOS install steps.) The full knob reference follows below.

odytty:~$ cat knobs.json

$ odytty --roadmap - releases + horizons

This board is generated straight from OdyTTY's own docs/full-build-roadmap.md through the same awk → JSON pipeline as the theme gallery. Versioned work is grouped into staged release overviews; other items remain grouped by horizon. The forward work leads, the already-shipped foundation collapses below, and the deliberate non-goals are listed last. Filter to one horizon with the controls, or read the long-form rationale in the devlog.

odytty:~$ cat roadmap.json

$ odytty --devlog - build journal

OdyTTY is built in the open with a running devlog: every change records what landed and the known gaps. This live browser reads the repo's DEVLOG.md; entries expand inline, releases are badged, and releases only reads it as a changelog.

not loaded
  1. Open this section to load the live devlog, or read it on GitHub →

$ man odytty - FAQ & colophon

What makes it different from other terminals?

OdyTTY is menu-driven: settings, themes, fonts, and keybindings have in-app overlays, while the underlying config file remains available. It also owns its pseudo-terminal layer, parser, terminal model, render geometry, graphics routing, settings, and shaders rather than wrapping a terminal library. The shipped surface includes workspaces, split panes, Unix-only detachable sessions, SSH workflows, Kitty graphics with animation and Unicode placeholders, Sixel, iTerm2 inline images, modern keyboard and mouse protocols, and 145 built-in themes. Detached sessions are Unix-only. Color emoji render from bitmap strikes, COLR/CPAL v0 layers, and COLR v1 Paint graphs, so installed Noto Color Emoji, Apple Color Emoji on macOS, and stock Windows Segoe UI Emoji all render in color.

Is it production ready?

Version v0.16.1 adds AppImage update information to v0.16.0 read-only panes, guarded broadcast input, macOS secure keyboard input, tab and pane moves between windows, stacked and floating layouts, scrollback export, and an Ambiguous width preference. A dedicated quick terminal, an opt-in owner-scoped local automation endpoint and CLI, confirm-first external file drop, and keyboard-first window merge ship alongside named profiles, External palette following, the unified Session Navigator, shells, tabs, workspaces, panes, layouts, restoration, SSH workflows, graphics, settings, and themes. Linux is the primary target, with packaged macOS Apple Silicon and Windows x86_64 support. Detached and persistent Windows host sessions remain unsupported, and external file drop is refused on Windows. No new performance campaign is claimed for v0.15.0 or v0.15.5, and v0.15.6 and v0.15.7 claim no new measurements. v0.15.8 reports only that an untouched macOS window's idle CPU returns to about zero; v0.16.0 and v0.16.1 claim no new measurements. Published measurements retain their v0.12.0 version and scope. Windows binaries are unsigned; the macOS app is ad-hoc signed and not notarized. Minisign manifest signatures and GitHub provenance checks do not replace operating-system code signing.

Release notes and security review · Scoped performance evidence · Platform packages and verification

Is it based on another terminal?

No. Mature terminals are compatibility references. OdyTTY's PTY layer, parser, terminal model, render geometry, graphics routing, settings, and shaders are OdyTTY code. Lower-level crates still handle focused infrastructure such as windowing, GPU API access, font rasterization, clipboard transport, and Unicode width data.

What does it run on?

Linux, macOS, and Windows are shipped and supported, with Linux as the primary target. Linux release packages are x86_64 and prefer Vulkan, fall back to accelerated OpenGL/GLES, and can use slow software rendering; Wayland is primary and X11 is supported with some window-manager-dependent behavior. Linux ARM requires a source build.

Windows uses ConPTY and ships as an unsigned x86_64 build through Scoop or a direct zip; Windows ARM has no prebuilt, detached sessions remain Unix-only, and OdyTTY cannot register as the Windows system default terminal.

Color emoji render on all three platforms: installed Noto Color Emoji on Linux and Windows, Apple Color Emoji on macOS, and stock Windows Segoe UI Emoji through the COLR/CPAL path. Stock Segoe ships no regional-indicator flag glyphs, so flag clusters there fall back to visible letters, as they do in native Windows applications.

Apple Silicon installs a prebuilt, ad-hoc-signed OdyTTY.app through Homebrew or direct download; Intel Macs use the source formula or Cargo. Blocking CI covers all three operating systems; see the release notes for scoped evidence.

What happens on weak GPUs?

Post-process effects require a filterable Rgba16Float render target. If the adapter cannot support that path, OdyTTY uses the plain direct renderer instead of failing startup.

What data leaves my machine?

The OdyTTY application sends no telemetry, analytics, crash reports, update pings, account data, or cloud-sync data. Network activity is user-initiated: connecting through the system ssh client, confirming a remote image upload, or opening an allowed link or path through the platform opener. Detached-session transport is a per-user local Unix socket, not a network service. The project website may use Cloudflare's separate site-level analytics.

Can I configure it without editing files?

Yes. Settings, themes, fonts, and keybindings are exposed through in-app overlays. The underlying config remains a plain local odytty.conf, and Settings writes changed rows back with preservation-first atomic writeback.

What is unsupported right now?

OdyTTY does not ship a macOS DMG, upstream Snap package, or upstream Nix package. Flatpak is a deliberate non-goal; AppImage is the single-file portable Linux option.

The Minisign signature over SHA256SUMS is not operating-system code signing: Windows binaries remain unsigned and may trigger SmartScreen, and the macOS app is ad-hoc signed, not Developer ID signed or notarized. Those platform signing paths are not available for the current distribution.

Multiple windows open today with Ctrl+Shift+N. The first window owns layout restore and autosave, while secondary windows run independently and do not restore or overwrite that saved workspace state. Coordinated multi-window persistence remains future work. Right-click menus, palette actions, and the merge picker move tabs and panes; dragging them out of a window is not supported on any platform.

Guarded broadcast input is available, with receiver sets that are never saved. On the protocol/text side: Kitty I= addressing on display and delete commands, the iTerm2 chunked MultipartFile form, SVG-in-OpenType color glyphs, full bidirectional layout, complex Indic/Brahmic shaping, Arabic harakat inside joining runs, and open-ended stylistic sets beyond ss01 and ss02 remain deferred. Sequence-aware grapheme width remains tractable follow-up work, not current support.

How do I report issues or contribute?

OdyTTY is GPL-3.0-only and uses a DCO sign-off workflow. It is maintainer-led with a fixed design vision, and contributions are welcome within it.

The lowest-friction contributions are bug reports - especially terminal-compatibility findings and reports from daily Windows or macOS use - bug fixes with a test, documentation corrections, and built-in themes. The public bug-report form asks whether you want to implement the fix, so intent is a coordination signal rather than an assignment.

Read CONTRIBUTING.md, then use the structured bug-report form, change-proposal form, or question form. Accepted work can use the normal pull-request route.

Current direction and durable decisions live in TODO.md and SPEC.md; the documentation index is the maintained navigation surface. Report security vulnerabilities privately through SECURITY.md, not any public issue form.

This page is a static site (Vite → Cloudflare Pages). The CRT field is a raw WebGL shader; the theme gallery and knob table are generated from OdyTTY's real .theme files and runtime-knobs.md by a small awk pipeline. It steals its tube from its sibling, unfinished-works.com - same workshop, different machine.