Hop logo

Hop

GitHub

Stop memorizing port numbers.

Hop scans your machine for open ports and gives them memorable names. Type cti.hop in your browser and land on localhost:3100.

Features

6

Local development usually means juggling a pile of port numbers. Hop keeps them straight so you don't have to.

Smart port scanner

Scan your machine, or your local network. A quick HTTP probe identifies each result, so you see page titles and server names instead of bare numbers.

Memorable names

Click Name it next to any result. cti.hop opens localhost:3100. The control panel itself lives at hop.hop.

WebSocket passthrough

The proxy passes WebSocket traffic through, so hot reload (HMR) keeps working with Vite, Next.js and friends.

Polite to your hosts file

Hop only edits its own clearly marked block and leaves the rest untouched. Names ending in .localhost need no changes at all.

Windows, macOS, Linux

One tool, three platforms. No setup wizard, no daemon to configure.

No dependencies

Built on the Python standard library only. Python 3.9 or newer is all you need.

How it works

Two steps, and you never look at a port number again.

Scan

Scan the local machine (and optionally your local network) to find open ports. Each one is identified with a quick HTTP probe.

Name

Name the ports you care about. Typing cti.hop in the browser opens localhost:3100.

Hop control panel showing named routes such as hop.hop and cti.hop, and the port scanner

Install

Requires Python 3.9 or newer.

Run with sudo
  1. Get the code
    $git clone https://github.com/aardaakpinar/hop.git && cd hop
  2. Run itdirectly from source
    $sudo python3 -m hop
  3. Or install itwith pip
    $pip install . && sudo hop
Port 80 and the hosts file need root. Without it Hop still runs: the proxy falls back to port 8080 and shows you the lines to add to your hosts file by hand.

Once Hop is running, open the address it prints (normally http://hop.hop), scan a port range, and click Name it.

Command-line options

Everything has a sensible default. Tweak only what you need.

Option Description
--tld xyz Default suffix (cti becomes cti.xyz)
--panel name Panel address, served at <name>.<tld>
--ui-port N / --proxy-port N Panel port (default 7777) and proxy port (default 80, then 8080)
--config-dir, --hosts-file Where routes are stored and which hosts file to edit
--no-browser Do not open the browser on start
-v, --verbose Verbose logging
--version Print the version and exit