import { useEffect, useState, type ReactNode } from 'react' import { PreviewImageLink } from '../components/PreviewImageLink' const contents = [ { id: 'install', label: 'install' }, { id: 'quickstart', label: 'quickstart' }, { id: 'usage', label: 'usage' }, { id: 'examples', label: 'examples' }, { id: 'https-certs', label: 'https & certs' }, { id: 'keymaps', label: 'keymaps' }, { id: 'privacy', label: 'privacy' }, ] type DocsSectionProps = { id: string number: string title: string children: ReactNode } type CommandBlockProps = { children: ReactNode } function DocsSection({ id, number, title, children }: DocsSectionProps) { return (

// {number}

{title}

{children}
) } function CommandBlock({ children }: CommandBlockProps) { return (
      {children}
    
) } export function DocsPage() { const [activeSection, setActiveSection] = useState(contents[0]?.id ?? 'install') useEffect(() => { const sections = contents .map((entry) => document.getElementById(entry.id)) .filter((section): section is HTMLElement => section !== null) if (!sections.length) return const observer = new IntersectionObserver( (entries) => { const visibleEntry = entries .filter((entry) => entry.isIntersecting) .sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0] if (visibleEntry?.target.id) { setActiveSection(visibleEntry.target.id) } }, { rootMargin: '-20% 0px -65% 0px', threshold: [0.1, 0.25, 0.5, 0.75, 1], }, ) sections.forEach((section) => observer.observe(section)) const onHashChange = () => { const next = window.location.hash.replace('#', '') if (next) setActiveSection(next) } window.addEventListener('hashchange', onHashChange) return () => { observer.disconnect() window.removeEventListener('hashchange', onHashChange) } }, []) return (

Docs.

Everything you need to get Termtap running in under a minute.

Download the binary for your OS from{' '} GitHub Releases :

https://github.com/haydenhargreaves/termtap/releases

Choose your OS/architecture asset, unpack it, and move tap into your PATH. Run{' '} tap cert if you need the HTTPS trust path.

Supported: macOS, Linux, Windows

If demand for other install methods grows, they can be added later.

Wrap any command with tap run --. Termtap will boot a local proxy, set the right environment variables on the child process, and stream every outbound request.

$ tap run -- go run .

You'll see a live request stream:

The general form:

$ tap run [flags] -- <your command>

--port Proxy port (default 8080)

Go application:

$ tap run -- go run .

Or use a custom port (default 8080)

$ tap run --port 8888 -- go run .

Termtap inspects HTTPS traffic by terminating TLS at a local proxy. It generates a local root CA and prints the certificate path with tap cert.

The cert lives in your user config directory and never leaves your machine.

RUN THE CERT COMMAND

$ tap cert

The command shows the cert path, whether your system already trusts it, and OS-specific trust instructions if you need them.

NOTE

Termtap uses a local CA to inspect HTTPS traffic. If an app ignores the system trust store, it may need to be pointed at the cert path printed by tap cert using that app's normal trust settings.

Trusting the CA only lets the app accept Termtap's certificate. Traffic still has to flow through the proxy for Termtap to see it.

Termtap's terminal UI supports keyboard-first navigation. Use the shortcuts below to move around quickly while requests stream in.

Key Action
q Quit Termtap
ctrl+c Quit Termtap
j / down Move down in the focused pane
k / up Move up in the focused pane
tab Next details tab
shift+tab Previous details tab
1 Focus Requests pane
2 Focus Details pane
3 Focus Events pane (when visible)
4 Focus Stdout pane (when visible)
e Toggle Events pane
o Toggle Stdout pane
/ Open the search prompt
esc Close the search prompt
ctrl+r Restart the wrapped process

Tip: e and o are useful when you want more vertical space for the request and details panes.

Termtap is a local-only tool. It does not phone home, collect telemetry, or send any data anywhere.

  • > Captured traffic stays on your machine. It is held in memory and, if you opt in with --out, written only to the file you specify.
  • > The root CA generated on install is unique to your machine and is never transmitted.
  • > No analytics, no crash reporting, no usage pings - not opt-out, just absent.
  • > Termtap makes one outbound request: an opt-in version check, only when you run `tap update`.
  • > The source is open. Read it, audit it, run it offline.

Last updated: 2026-04-19. Questions?{' '} Open an issue.

{'<- back home'} edit on github ->
) }