cod is a completion daemon for bash/fish/zsh
Alternatives To Cod
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Zsh Autosuggestions26,292
10 days ago1March 03, 2021144mitShell
Fish-like autosuggestions for zsh
3 months ago26January 11, 202246apache-2.0Go
Faster way to switch between clusters and namespaces in kubectl
Zsh Completions6,039
a day ago1March 03, 202136otherShell
Additional completion definitions for Zsh.
3 years ago1February 27, 2018109mitShell
Command-line productivity booster, offers quick access to files and directories, inspired by autojump, z and v.
Zsh Autocomplete3,348
5 days ago6mitShell
🤖 Real-time type-ahead completion for Zsh. Asynchronous find-as-you-type autocompletion.
Git Flow Completion2,588
5 years ago16mitShell
Bash, Zsh and fish completion support for git-flow.
4 years ago7mitVimL
config files for zsh, bash, completions, gem, git, irb, rails
Fzf Tab2,055
2 months ago57mitShell
Replace zsh's default completion selection menu with fzf!
9 months ago1February 27, 20181unlicenseShell
Easy access to gitignore boilerplates
Omelette1,260155101a year ago21September 21, 202115mitCoffeeScript
Omelette is a simple, template based autocompletion tool for Node and Deno projects with super easy API. (For Bash, Zsh and Fish)
Alternatives To Cod
Select To Compare

Alternative Project Comparisons

Cod is a completion daemon for bash, fish, and zsh.

It detects usage of --help commands, parses their output, and generates auto-completions for your shell.


You can either download or build the cod binary for your OS and put it into your $PATH.

After that, you will need to edit your init script (e.g. ~/.config/fish/, ~/.zshrc, ~/.bashrc) and add a few lines for the daemon to work correctly.


Add the following to your ~/.bashrc

source <(cod init $$ bash)


Make sure completion system is initialized.

Add the following to your ~/.zshrc

source <(cod init $$ zsh)

Or, you can use a plugin manager like zinit:

zinit wait lucid for \

Initializing zsh completion system

cod requires initialized completion system. In many cases it is already the case (e.g. if you are using oh-my-zsh or similar framework).

You can check whether your completion system is already initilized by using type compdef command:

# Completion system IS initialized
$ type compdef
compdef is a shell function from /usr/share/zsh/functions/Completion/compinit

# Completion system IS NOT initialized
$ type compdef
compdef not found

If you found that you need to initialize completion system you can do this by:

  • calling compinit function in your .zshrc before initializing cod itself, or
  • executing compinstall command from your shell, it will modify .zshrc file for you.

Also check zsh documentation.


Add the following to ~/.config/fish/

cod init $fish_pid fish | source


As an alternative, you can also install cod with Fig in bash, zsh, or fish with just one click.

Supported shells and operating systems

  • zsh cod is known to work with latest version of zsh (tested: v5.5.1 and 5.7.1) on macOS and Linux.

  • bash cod also works with with latest version of bash (tested: 4.4.20 and v5.0.11) on Linux.

    Note that default bash that is bundled with macOS is too old and cod doesn't support it.

  • fish cod works with latest version of fish (tested: v3.1.2) on Linux (I didn't have a chance to test it on macOS).

Building cod

It is recommended that you have at least Go v1.19 installed on your machine

git clone
cd cod
go build


go get -u


Cod checks each command you run in the shell. When cod detects usage of --help flag it asks if you want it to learn this command. If you choose to allow cod to learn this command cod will run command itself parse the output and generate completions based on the --help output.

How cod detects help commands

Cod performs following checks to decide if command is help invocation:

  1. checks if the --help flag is used
  2. checks that command is simple i.e. doesn't contain any pipes, file descriptor redirections, and other shell magic
  3. checks that command exit code is 0.

If cod cannot automatically detect that your command is help invocation you can use learn subcommand to learn this command anyway.

How cod runs help commands

Cod always uses absolute paths to run programs. (So it finds the binary in $PATH or resolves relative path if required). Arguments other than the binary path are left unchanged.

The current shell environment and current working directory will be used.

If the program is successfully executed, cod will store: - the absolute path to binary - any used arguments - the working directory - environment variables This info will be used to update command if required (check: cod help update).

How cod parses help output

cod has generic parser that works with most help pages and recognizes flags (starting with -), while not recognizing subcommands.

It also has a special parser tuned for the python argparse library that recognizes flags and subcommands.


Cod will search for the default config file $XDG_CONFIG_HOME/cod/config.toml.

The config file allows you to specify rules to either ignore or trust specified binaries

cod example-config prints an example configuration to stdout.

cod example-config --create writes an example config to the default directory of said config file ($XDG_CONFIG_HOME/cod/config.toml)

Data directories

cod uses $XDG_DATA_HOME/cod (default: ~/.local/share/cod) to store all generated data files.

Popular Completion Projects
Popular Zsh Projects
Popular Text Processing Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.