Home / Alt manpages / gh-extension-browse(1)

  • gh-extension-browse(1)
  • User command
  • linux

Browse GitHub CLI Extensions Without Losing Your Place

You will use gh extension browse to inspect GitHub CLI extensions, understand the interactive screen, and make an informed choice about adding or removing one. The examples use GitHub CLI 2.87.3 on this machine, while the installed Debian package is gh 2.45.0-1ubuntu0.3+esm3. The command's manpage is the primary contract for the local installation.

Allow about fifteen minutes. You need a terminal, the gh command, and a GitHub CLI authentication setup if the interface asks GitHub for data. This guide can be followed without elevated privileges. It changes your user-level extension installation only if you deliberately confirm an add or remove action.

1. Confirm the command before opening its interface

Check which executable will run and read its local help:

$ command -v gh
/usr/local/bin/gh
$ gh --version
gh version 2.87.3 (2026-02-23)
$ gh extension browse --help
Usage: gh extension browse [flags]

The help output also lists two options: --debug, which logs to a path matching /tmp/extBrowse-*, and -s/--single-column, which renders the interface as one text column.

Checkpoint

If gh --version reports a different build, keep that fact with your notes. Package upgrades can change the interface and its available commands.

2. Choose the display mode

Open the normal browser when your terminal is wide enough:

$ gh extension browse

The manpage recommends a terminal wider than 100 columns. The command takes over the terminal and starts a fully interactive interface for browsing, adding and removing extensions. It is not a normal command that prints a fixed report and returns immediately.

If you use a screen reader, high zoom, or a narrow terminal, start with the single-column form:

$ gh extension browse --single-column

This option changes the presentation, not the set of actions. It is a useful default when the multi-column layout is difficult to follow.

Inside the interface, press ? to display its control help. Press q to quit. Do not guess other keys from a different terminal application: use the help shown by this version.

3. Inspect an extension before installing it

Browsing is convenient for discovery, but installation is a trust decision. Extensions are repositories that add commands to gh; they are not automatically verified, signed or endorsed by GitHub. Review the publisher, repository and source before you approve an install.

For a text-oriented search that is easier to save or compare, leave the interface and run:

$ gh ext search ISSUE_TERM

Replace ISSUE_TERM with a real search term, such as review. With no query, gh ext search prints the first 30 extensions, sorted by star count. The search results are not a security verdict: popularity does not establish that an extension is safe or suitable for your account.

Open the candidate repository in a browser or inspect it with GitHub CLI before changing your installation:

$ gh repo view OWNER/REPOSITORY

Replace both placeholders with the exact repository you found. Check its source, release process, permissions and maintenance history. Stop if the repository identity is unclear.

4. Install only after the review

Warning

Installing an extension downloads and runs code from its publisher when you invoke the extension. The action changes your local gh extension set. Confirm the repository name and, where reproducibility matters, use a reviewed release tag or commit:

$ gh ext install OWNER/REPOSITORY --pin REVIEWED_TAG_OR_COMMIT

The repository argument may be an OWNER/REPOSITORY name or a full URL. --pin selects a tag for binary extensions or a commit reference for script extensions. Replace REVIEWED_TAG_OR_COMMIT with a value you have actually checked. Leaving out --pin uses the latest version, which is convenient but less repeatable.

After installation, list the local extensions:

$ gh ext list

Expect the installed command to appear, but do not rely on a particular table layout. The important check is that the expected extension name is present. Run it only after reviewing its documented behaviour and permissions.

5. Remove an extension and recover deliberately

Warning

Removal changes your local installation and may break scripts or aliases that call the extension. Record the repository and pinned reference first if you may need to restore the same version.

$ gh ext remove EXTENSION_NAME

Replace EXTENSION_NAME with the installed extension name, normally the part after gh-. Confirm the result:

$ gh ext list

If you removed the wrong extension, reinstall it from the repository and reviewed reference you recorded:

$ gh ext install OWNER/REPOSITORY --pin REVIEWED_TAG_OR_COMMIT

That is recovery, not a guarantee of a byte-for-byte backup. A repository may have removed a release or changed its build process, so keep important extension source and references in your own records.

6. Diagnose a confusing session

If the interface looks crowded, quit with q and reopen it with --single-column. If you need diagnostics for a browse session, run:

$ gh extension browse --debug

The command writes diagnostic logging to a temporary path matching /tmp/extBrowse-*. Treat those files as potentially sensitive: they may contain repository names, errors or other session details. Read the relevant file, then remove it when it is no longer needed:

$ ls -l /tmp/extBrowse-*
$ rm -- /tmp/extBrowse-EXACT_FILE_NAME

Replace EXACT_FILE_NAME with the path you actually found. Do not use a broad wildcard for cleanup if several debug sessions exist. If the command cannot fetch results, check authentication and network access separately; do not install an unreviewed alternative as a workaround.

Done means

  • You confirmed the active gh executable and version.
  • You can open the browser, use ? for its controls, and quit with q.
  • You know when --single-column is the clearer display.
  • You reviewed an extension repository before installing its code.
  • You used a pinned reference when repeatability mattered.
  • You can list, remove and deliberately reinstall an extension without guessing its identity.