DEV Community

Cover image for Terminal autocomplete on macOS: an IDE-style popup for zsh, bash, and fish
Sorin Curescu
Sorin Curescu

Posted on

Terminal autocomplete on macOS: an IDE-style popup for zsh, bash, and fish

TL;DR: Figxit is a free, open source autocomplete popup for the macOS terminal. It lists subcommands, options, package.json scripts, and Makefile targets as you type, in zsh, bash, and fish, and orders them by what you run most in the current folder. It runs locally with no account and no telemetry. Source: github.com/en3sis/figxit.

Figxit popup completing git checkout with a branch name, then Tab inserts it

GitHub logo en3sis / figxit

Native autocomplete popup for the macOS terminal. The completion part of Fig, rebuilt as a small local app. No account, no AI, no telemetry.

Figxit app icon

Figxit

IDE-style autocomplete for the macOS terminal, for zsh, bash, and fish. Figxit completes commands, subcommands, options, package.json scripts, and Makefile targets as you type, ordered by what you use most in the current project.

It is a free, open source replacement for Fig's autocomplete. It runs locally, with no account, no AI chat, and no telemetry.

Terminal window with make typed and the popup listing Makefile targets with their section and help text

Why it exists

Fig added autocomplete to the terminal: you typed git and got the subcommands, each with a short description. Fig joined AWS in 2023 and the app was shut down in September 2024. Its autocomplete now ships inside Kiro CLI, a closed-source AI agent tool.

The open alternatives each lack a part of what Fig did:

  • Shell completion menus open only when you press Tab, and they do not know which command you use most.
  • Tools that draw the list inside the terminal wrap the shell session to do it.
  • History…

Table of contents

  1. What terminal autocomplete is
  2. Options on macOS today
  3. What Figxit does
  4. How it works
  5. Install
  6. FAQ

What terminal autocomplete is

Terminal autocomplete suggests the next word of a command while you type it: a subcommand, a flag, a file, a branch, a script name. There are three common forms:

Form Example When it shows
Tab completion zsh compinit, bash-completion Only after you press Tab
Inline suggestion zsh-autosuggestions, fish As you type, one full past command in grey
Popup list Fig (discontinued), Figxit As you type, a list of options with a description on each row

Tab completion knows what a command accepts, but you have to ask for it. Inline suggestions are fast, but they only show one line from your history. A popup list shows every valid next word with a short description, like autocomplete in a code editor.

Options on macOS today

  • Fig added popup autocomplete to the terminal. It joined AWS in 2023 and the app was shut down in September 2024. Its autocomplete now ships inside Kiro CLI, a closed-source AI agent tool that needs an account.
  • Shell completion menus (zsh, bash-completion, fzf-tab) open only on Tab and do not rank by your usage.
  • inshellisense (Microsoft) uses the same Fig specs and draws the list inside the terminal session. It is cross-platform.
  • History tools such as Atuin and fzf find a full past command, but they do not list what a command can do.

Figxit combines the three missing parts: a list that opens while you type, completion data for 700+ tools, and ranking from your own history.

What Figxit does

Subcommands and options for 700+ tools

Figxit loads the open source Fig completion specs (git, docker, npm, kubectl, and more). Type a command and a space for its subcommands, or a dash for its options. Options already on the line are hidden.

git ch typed in the terminal, popup listing matching git subcommands with descriptions

docker run -- typed, popup listing docker run options with descriptions

Specs also supply live values: git branches after git checkout, hosts after ssh, files and folders where a command takes a path.

npm, pnpm, yarn, and bun scripts

npm run, pnpm, yarn, and bun run list the scripts in package.json, with the command each one runs.

npm run typed, popup listing package.json scripts and the command for each

Makefile targets

make lists the targets of the Makefile in the current folder. The right column shows help comments that many projects already write:

##@ Development
dev: ## Start the stack with hot reload
dev-down: ## Stop the stack

##@ Tests
test: ## Run the unit tests
Enter fullscreen mode Exit fullscreen mode

##@ starts a section, and ## after a target is its help text. Both are optional.

make typed, popup listing Makefile targets with section and help text

Ranking from your history

Figxit reads your Atuin history database, read-only. A word scores higher when you used it in the same folder, in the same repository, or recently. Without Atuin, the popup still works in the order the sources give.

p typed, popup listing commands that start with p, with product icons

Red icon for production

A row that touches production gets a red icon, so you notice it before you press Enter. A row gets it when the name is in capitals (DEPLOY), contains prod or production (deploy:prod, api-prod), or is a Makefile target tagged ## [prod]. Enter inserts a red row without running it.

Popup listing Makefile targets, with db-reset, deploy-prod, and release marked with red icons

Keys

Key Action
Up, Down Move the highlight
Tab Insert the highlighted row
Enter Insert the row and run the line (a red row is inserted, not run)
Esc Close the popup

When the popup is closed, keys keep their normal behaviour: Tab opens your usual completion, and Up searches history.

How it works

Figxit has three parts that talk over unix sockets:

 shell adapter  ── buffer, cursor, folder ──▶  engine  ── rows, position ──▶  helper
 (zsh, bash, fish)                              (Bun)                         (Swift, AppKit)
      ▲                                           │
      └───────── text to insert on Tab ───────────┘
Enter fullscreen mode Exit fullscreen mode
  • Shell adapter: a line editor hook sends the buffer to the engine after each key, without waiting for a reply. The shell only waits (300 ms at most) when you press Tab or Enter with the list open.
  • Engine: a Bun process that keeps your history and the specs in memory. It parses the line, collects candidates from project files, specs, and history, then ranks them. Values that need a command, like git branches, arrive in a second pass so the first rows are never delayed.
  • Helper: a small macOS app that draws a floating panel at the cursor. It does not take keyboard focus and needs no Accessibility or Screen Recording permission. In tmux, tmux reports the cursor cell; outside tmux, the terminal does.

Install

Requirements: Apple Silicon Mac, macOS 13 or later, and zsh, bash 5+, or fish 4. Tested in Ghostty, iTerm2, Terminal, and any terminal running tmux.

  1. Download Figxit.dmg and drag Figxit to Applications.
  2. Open Figxit. A setup window shows the line for your shell. Click Add, or add it yourself:
# zsh, in ~/.zshrc
eval "$('/Applications/Figxit.app/Contents/MacOS/figxit-engine' init zsh)"

# bash, in ~/.bashrc
eval "$('/Applications/Figxit.app/Contents/MacOS/figxit-engine' init bash)"

# fish, in ~/.config/fish/conf.d/figxit.fish
status is-interactive; and '/Applications/Figxit.app/Contents/MacOS/figxit-engine' init fish | source
Enter fullscreen mode Exit fullscreen mode

Open a new terminal and start typing 🥳

Run figxit doctor to check each part of the installation.

FAQ

Is Figxit a replacement for Fig autocomplete?
Yes, for the autocomplete popup. It uses the same open source completion specs. It does not include Fig's other features, such as dotfile sync, and it has no AI chat.

Can I use it in place of Amazon Q or Kiro CLI autocomplete?
Yes, if you only want autocomplete. Figxit needs no account. It is not affiliated with Fig, Amazon, or Kiro.

How is it different from inshellisense?
Both use the Fig specs. inshellisense draws inside the terminal session and runs on Windows and Linux. Figxit shows a native macOS window and ranks rows by your history. It is macOS only.

Does it work in the VS Code terminal?
No. Terminals embedded in an editor window do not report where the panel is. Use a terminal app, with or without tmux.

Does it send what I type anywhere?
No. There is no telemetry and no account. The only network request is a daily update check, which you can turn off in Settings.

Is it free?
Yes. MIT licence.

Links

If you try it, issues and feature requests are welcome on GitHub.

Top comments (0)