3.6 KiB
infinite-noodle
infinite-noodle is a small Go service that combines:
- a web UI for viewing configured TCP proxies
- a Bitcask-backed data store for persisted proxy definitions
- a TCP proxy runner powered by
inet.af/tcpproxy
This README is written for working in a GitHub Codespace.
What It Does
Each "noodle" is a TCP forwarding rule with:
- a listen port
- a destination host
- a destination port
- an up/down state
When the app starts, it loads saved noodles from the local database and starts any active proxy routes. It also serves a basic web UI for listing and deleting them.
Current State
The project is functional enough to:
- start the web app
- load stored proxy definitions from
./infinite.db - run active TCP proxies
- delete existing noodles from the UI
What is not wired up yet:
- the add row in the UI is present, but create/save is not implemented
- there is no REST API for creating noodles
- proxy routing is TCP only in the current code path
Running In A Codespace
This repo expects a Go toolchain to be available in the Codespace. If it is missing, install or add Go first.
Start the app:
go run ./cmd/infinite-noodle
Default runtime settings:
- host:
0.0.0.0 - web UI port:
7878 - database path:
./infinite.db
Open the app in the browser from the forwarded port for 7878.
You can also override the defaults:
go run ./cmd/infinite-noodle -host 0.0.0.0 -port 7878 -data ./infinite.db
Available flags:
-host: host/interface to bind the web server to-port: web server port-data: path to the Bitcask database directory-test: seeds the database with sample noodles on startup
Codespaces Port Notes
In Codespaces, you will usually need to forward:
7878for the web UI- any listen ports used by active noodles
Example:
- if a noodle listens on
5555, forward port5555 - if it proxies to another service running inside the Codespace on
6666, that destination only needs forwarding if you also want direct browser or external access to it
Quick Local Proxy Demo
The repo includes simple Python test scripts in test/server.py and test/client.py.
Typical flow:
- Run the app with
go run ./cmd/infinite-noodle - Start the test echo server on
127.0.0.1:6666 - Ensure the database contains a noodle that listens on
5555and forwards to127.0.0.1:6666 - Run the test client, which connects to
127.0.0.1:5555
Because create is not implemented in the UI yet, you currently need to seed or insert noodle records another way.
Building Binaries
The repo includes build.sh, which builds binaries for:
- Linux amd64
- macOS arm64
- macOS amd64
- Windows arm64
- Windows amd64
Run:
sh build.sh
Artifacts are written under ./target/.
Important Files
cmd/infinite-noodle/main.go: binary entrypoint and CLI flagsinternal/app/app.go: app startup, HTTP server, and proxy lifecycleinternal/noodle/database.go: Bitcask storage layerinternal/web/handlers.go: HTML handlersinternal/assets/templates/index.html: UI template
Verification Note
The reorganized project layout was verified with go test ./... and go build ./... in this workspace.