Skip to content
ensky0Public

About

Native Quake-style drop-down terminal for Linux, macOS, and Windows. One hotkey, real Wayland desktop coverage, no Electron.

Topics

Resources

Security policy

Stars

23 stars

Watchers

0 watching

Forks

Repository files navigation

TildaZ

A native Quake-style drop-down terminal for Linux, macOS, and Windows. Your terminal, one key away. If you are looking for a Tilda alternative, a Guake / Yakuake-style terminal, or a Wayland drop-down terminal that also follows you to macOS and Windows, TildaZ brings that show-and-hide workflow to every desktop you use.

Most drop-down terminals stop at one OS, one toolkit, or one Linux desktop. TildaZ is one native app across Linux, macOS, and Windows. On Linux it brings a real drop-down with a global hotkey to every major desktop: KDE Plasma, GNOME, Cinnamon, COSMIC, Hyprland, and sway. No Electron, no GTK or Qt runtime dependency — just a terminal that appears when you need it and disappears when you do not.

Website: https://tildaz.dev/ · Benchmarks: https://tildaz.dev/benchmarks/ · Install: one command · Download: https://github.com/ensky0/tildaz/releases/latest

Who is TildaZ for?

  • You want a Tilda alternative that follows you across OSes. TildaZ keeps the Quake-style drop-down workflow on Linux, macOS, and Windows instead of tying it to one desktop.
  • You like the Guake / Yakuake reflex. Press one hotkey, get a real terminal over your current workspace, press it again, and get back to what you were doing.
  • You need a Wayland drop-down terminal. TildaZ has real drop-down and global hotkey paths across KDE Plasma, GNOME, Cinnamon, COSMIC, Hyprland, and sway.
  • You want familiar config everywhere. Config paths differ by platform, but the TOML schema, themes, hotkey, font, shell, opacity, and geometry settings stay familiar.

Why TildaZ

  • One key between thought and shell. Drop the terminal over your current workspace, run the command, and hide it again before your flow cools off.
  • Same reflex, every OS. The same drop-down terminal on Linux, macOS, and Windows — one TOML config shape, one muscle memory.
  • Familiar config everywhere. Config paths differ by platform, but the schema, themes, hotkey, font, shell, opacity, and geometry settings stay familiar.
  • Wayland coverage that matters. KDE Plasma, GNOME, Cinnamon, COSMIC, Hyprland, and sway all get a real drop-down and global hotkey path.
  • Native where it counts. No Electron, no GTK or Qt runtime dependency — direct Wayland on Linux, GPU rendering on all three, and the fast libghostty-vt core.
  • Pretty TUIs, serious text. Tabs, split panes, themes, true color, ligatures, color emoji, full CJK, procedural box-drawing, smooth shaded blocks, and inline IME for Korean / Japanese / Chinese.
  • Personal, not nosy. No telemetry, no analytics, no auto-update phone-home — only local config and logs.

See it render

Ligatures, true color, color emoji with skin tones and ZWJ families, full-width CJK, smoothly-shaded block glyphs (░▒▓ now use smooth alpha instead of a dot dither), and procedural box-drawing (continuous lines, corners, and rounded joints — drawn the way Windows Terminal does) all render correctly — identically on Linux, macOS, and Windows. Paste this into any TildaZ window:

echo -e "\n🎉❤️🌈🎨🌞🍎🚀💎✨\n👋🏻👋🏼👋🏽👋🏾👋🏿\n👨‍👩‍👧👨‍👨‍👦‍👦\nABCDEFG abcdefg 0123456789\n한글 ABC 가나다라마바사\n▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏\n▐░▒▓▔▕\n┌─┬─┐ ╔═╦═╗ ╭───╮\n├─┼─┤ ╠═╬═╣ │░▒▓│\n└─┴─┘ ╚═╩═╝ ╰───╯\n"

Install

One command

One command installs the latest release into your user account. No sudo or admin rights are needed.

# Linux and macOS
curl -LsSf https://tildaz.dev/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://tildaz.dev/install.ps1 | iex"

The script checks the download's SHA-256, adds TildaZ to your app menu, and starts it once. TildaZ sets up auto-start on that first run. On GNOME, log out and back in first so the Shell extension loads. You can read install.sh and install.ps1 first.

Platform Installs to
Linux ~/.local/share/tildaz, plus the app menu entry and ~/.local/bin/tildaz
macOS /Applications/TildaZ.app (~/Applications if /Applications is not writable)
Windows %LOCALAPPDATA%\Programs\TildaZ, plus a Start Menu shortcut
  • Already installed a Linux package, an AppImage, or the Homebrew cask? Keep updating it that way. The script stops instead of installing over it.
  • Used the Windows zip before? Quit it first. The script tells you where the old folder is, and your config carries over.

Update

Quit TildaZ and run the same command again. Your config is kept.

Uninstall

Quit TildaZ and run:

# Linux and macOS
curl -LsSf https://tildaz.dev/uninstall.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://tildaz.dev/uninstall.ps1 | iex"

The uninstaller keeps your config and logs, and prints where they are.

Packages

Or download a package from GitHub Releases.

Platform Artifact Notes
Linux (any distro) — portable tildaz-vX.Y.Z-linux-{x86_64,aarch64}.tar.gz Extract, then run ./install.sh --release. It adds the .desktop file, the icon, and the GNOME and Cinnamon Shell extensions under ~/.local/share, plus a ~/.local/bin/tildaz link. The binary stays in the extracted directory.
Linux Debian / Ubuntu tildaz_X.Y.Z-1_{amd64,arm64}.deb sudo dpkg -i tildaz_*.deb (or open with the Software app).
Linux Fedora / RHEL / openSUSE tildaz-X.Y.Z-1.{x86_64,aarch64}.rpm sudo dnf install ./tildaz-*.rpm (or rpm -Uvh).
Linux distro-independent — single file TildaZ-X.Y.Z-{x86_64,aarch64}.AppImage chmod +x TildaZ-*.AppImage && ./TildaZ-*.AppImage — runs on any glibc 2.28+ system.
Linux Arch / Manjaro / EndeavourOS tildaz-X.Y.Z-1-x86_64.pkg.tar.zst sudo pacman -U tildaz-*.pkg.tar.zst (x86_64).
macOS 15+ universal tildaz-vX.Y.Z-macos.dmg Drag TildaZ.app into Applications. Apple Silicon and Intel are both included. Or install it with Homebrew: brew install --cask ensky0/tildaz/tildaz.
Windows 10 1809+ x64 tildaz-vX.Y.Z-win-x64.zip Unzip anywhere, keep the _internal folder next to tildaz.exe, and run tildaz.exe. 1809 (build 17763) is the minimum of the bundled ConPTY runtime; tested on Windows 11.
Windows 11 ARM64 tildaz-vX.Y.Z-win-arm64.zip Same layout as the x64 zip with ARM64-native binaries.

On GNOME and Cinnamon, TildaZ runs through its own Shell extension. TildaZ installs and turns it on the first time it starts. GNOME loads a newly installed extension only after you log out and back in, so the first start may stop with Log Out to Finish Setup. Log in again and start TildaZ. Cinnamon loads the extension right away.

First launch creates the default config:

Platform Config Log
Linux $XDG_CONFIG_HOME/tildaz/config_0.toml $XDG_STATE_HOME/tildaz/tildaz_0.log
macOS $XDG_CONFIG_HOME/tildaz/config_0.toml ~/Library/Logs/tildaz/tildaz_0.log
Windows %APPDATA%\tildaz\config_0.toml %APPDATA%\tildaz\tildaz_0.log

On Linux and macOS, XDG_CONFIG_HOME defaults to ~/.config. On Linux, XDG_STATE_HOME defaults to ~/.local/state. Empty or relative XDG values use those defaults.

macOS releases use a stable self-signed TildaZ identity. They are not signed with an Apple Developer ID or notarized, so if Gatekeeper blocks the first open, right-click TildaZ.app and choose Open, or run:

xattr -d com.apple.quarantine /Applications/TildaZ.app

Then grant Input Monitoring and Device Control and Data Access (called Accessibility before macOS 27) in System Settings → Privacy & Security. Those permissions are needed for the global hotkey and window control shortcuts.

Upgrading from a release before v0.10.2 on macOS: the auto-start entry changed its name, and the old one is not removed for you. If TildaZ starts twice at login, or keeps starting after you turned auto_start off, run this once:

launchctl bootout gui/$(id -u)/com.tildaz.app 2>/dev/null; rm -f ~/Library/LaunchAgents/com.tildaz.app.plist

Configure

Edit config_0.toml; the schema is documented in CONFIG.md. Launch TildaZ again while every configured instance is running to create another one. Press its global hotkey and choose Create; TildaZ writes config_1.toml, config_2.toml, and so on. Each config owns one process, hotkey, and log file. Legacy config.json files, and any config_N.json from before TildaZ used TOML, are left untouched and are not loaded.

Common fields:

  • window.dock_position, width_percent, height_percent, offset_percent, opacity_percent
  • font.family, font.glyph_fallback, size_point, cell_width_ratio, line_height_ratio
  • theme, shell, hotkey, auto_start, hidden_start, max_scroll_lines

Font fallback is capped at 8 families total: 1 primary font.family plus up to 7 entries in font.glyph_fallback.

Command line

TildaZ needs no arguments to start. These options are available:

tildaz --instance 1     # run instance 1, with its own window, config, and log
tildaz --toggle         # show or hide the instance, starting it if needed (Linux only)
tildaz --desktop add    # add (or remove, cleanup) TildaZ's desktop shortcut and startup entries (Linux only)
tildaz --autostart      # start the way the desktop session starts TildaZ
tildaz --version        # print the version, then exit
tildaz --help           # print the option list, then exit

--version prints the release version, plus the commit it was built from when TildaZ was built from a git checkout:

$ tildaz --version
tildaz 0.8.0 (d1ad1ff)

A -dirty suffix on the commit — tildaz 0.8.0 (d1ad1ff-dirty) — means the build had uncommitted local changes. Builds from a source archive with no git metadata print the version alone. The same string appears in the About dialog (Ctrl+Shift+I, or Shift+Cmd+I on macOS) and on the first line of the log file, so any of the three identifies a build exactly.

--toggle is meant for a desktop shortcut: bind tildaz --toggle to a key in your desktop's keyboard settings, and it shows or hides the instance. If that instance is not running yet, --toggle starts it — so the shortcut works from a cold start without turning on auto_start.

Exit codes, for scripting: 0 when the instance was toggled or started, 3 when the instance is running but its toggle socket cannot be reached (nothing is done in that case — starting a second one would be wrong), and 2 on macOS and Windows, where --toggle does not apply because the global hotkey is registered with the OS directly.

On macOS the executable lives inside the app bundle, so call it by path:

/Applications/TildaZ.app/Contents/MacOS/tildaz --version

Build

Requirements:

  • Zig 0.17.0
  • macOS: Xcode Command Line Tools (xcode-select --install)
  • Windows: no extra C/C++ toolchain; Zig provides clang + LLD for the MSVC ABI
  • Windows: turn on Developer Mode before the first build. The Ghostty source archive contains a symlink, and unpacking it fails without that permission
  • Windows: zig build cannot run while Smart App Control is on. It blocks the unsigned build runner that Zig creates. You can only turn it off, and once off it cannot be turned back on without reinstalling Windows
zig build
zig build test
zig build package -Drelease=true

zig build makes a dev build. It uses its own names (tildaz-dev, TildaZ-dev.app), config, logs, and default hotkey (F10), so it does not touch an installed release. Add -Drelease=true for a release build; zig build package refuses to run without it.

Outputs:

Platform Local build output Package output
Linux zig-out/bin/tildaz (with -Dtarget={x86_64,aarch64}-linux-gnu.2.28) zig-out/release/{tildaz-v<ver>-linux-<arch>.tar.gz,tildaz_<ver>-1_<debarch>.deb,tildaz-<ver>-1.<arch>.rpm,TildaZ-<ver>-<arch>.AppImage} (-Dformat=tar.gz|deb|rpm|AppImage)
macOS zig-out/TildaZ-dev.app (zig-out/TildaZ.app with -Drelease=true) zig-out/release/tildaz-v<ver>-macos.dmg
Windows x64 zig-out/bin/tildaz.exe zig-out/release/tildaz-v<ver>-win-x64.zip
Windows ARM64 zig-out/bin/tildaz.exe (with -Dtarget=aarch64-windows) zig-out/release/tildaz-v<ver>-win-arm64.zip

Official release binaries are built by GitHub Actions from v* tags. Local packages are useful for testing, but release artifacts are not uploaded by hand.

Documentation

Need Read
Configuration schema, themes, examples CONFIG.md
Keyboard and mouse shortcuts KEYBINDINGS.md
Current code structure ARCHITECTURE.md
Security reporting SECURITY.md
Contributor License Agreement CLA.md
Third-party licenses and attribution THIRD-PARTY-NOTICES.md
Release notes dist/release-notes/

Known Limitations

  • Linux is Wayland-only (no X11) and shipped in v0.5.0. It is verified on real hardware across KDE Plasma 6, GNOME and Cinnamon (both through a bundled Shell extension), COSMIC, Hyprland, and sway. Z-order yield on focus loss is not implemented on Linux (zwlr_layer_shell_v1 categorical layers have no normal-window slot). Hanja conversion of already-committed Hangul (selecting committed Korean text and pressing the Hanja key) is not supported on Linux — zwp_text_input_v3 has no reconversion request.
  • macOS releases use a stable self-signed identity, so Gatekeeper may still require the first-open flow above. Apple Developer ID signing and notarization are not currently available.
  • Holding paste-repeat on very wide ZWJ emoji clusters under macOS bash 3.2 can desynchronize shell wrapping. Normal single paste is unaffected; zsh 5.x does not exhibit the same mismatch.
  • Windows binaries are not Authenticode-signed yet, so SmartScreen or EDR tools may warn on first launch. The current SignPath application draft lives in dist/signpath-application.md.
  • Windows ConPTY does not expose OSC 10/11 default-color queries to TildaZ, so fish_terminal_color_theme can remain empty in WSL. This also occurs in Windows Terminal. TildaZ still passes COLORFGBG into WSL so vim, tmux, and other tools can select the configured dark/light scheme.
  • The Windows global hotkey cannot fire while an elevated app has focus unless TildaZ is also elevated. This is Windows UIPI behavior.

Privacy

TildaZ has no telemetry, analytics, auto-update check, crash reporter, or network request path. It stores only local config and log files. Child shells (cmd, PowerShell, WSL, bash, zsh, etc.) are independent processes governed by the user's shell and OS configuration.

Contributing

Pull requests are welcome. Before your first one is merged you will be asked to sign the Contributor License Agreement — an automated check posts the instructions on your pull request. You sign once, and you keep the copyright to your work.

License

TildaZ is AGPL-3.0-or-later. See LICENSE.

Bundled / linked components:

Component License Source
libghostty-vt MIT https://github.com/ghostty-org/ghostty
OpenConsole.exe / conpty.dll MIT https://github.com/microsoft/terminal

The binary is statically linked and also contains zig-toml (MIT), plus uucode (MIT), Highway (Apache-2.0), and simdutf (MIT) by way of libghostty-vt. Full copyright notices, license texts, and color theme attribution are in THIRD-PARTY-NOTICES.md.

About

Native Quake-style drop-down terminal for Linux, macOS, and Windows. One hotkey, real Wayland desktop coverage, no Electron.

Topics

Resources

Security policy

Stars

23 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages