Building your own Ngrok in 130 lines

This page summarizes the projects mentioned and recommended in the original post on dev.to

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • localtunnel

    Expose localhost servers to the Internet (by progrium)

  • Running a local development server for your app is pretty common, but what if you wanted somebody else to access it? Maybe for a demo, or maybe to debug webhook integrations. If you've ever used Ngrok (or perhaps the original localtunnel), you know what I'm talking about.

  • qmux

    wire protocol for multiplexing connections or streams into a single connection, based on a subset of the SSH Connection Protocol

  • What qmux does is give us a subset of the SSH protocol to multiplex many connections over a single connection. It was the missing piece of my original Twisted prototype. You can read more about how there aren't a lot of these protocols (but perhaps with QUIC are also the future of the Internet) in my previous post.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • go-vhost

    HTTP/TLS hostname multiplexing library for Go

  • The other library is actually by the author of Ngrok. Called go-vhost, it helps with the problem of virtual hosts. Ideally when a connection comes in to be forwarded down the tunnel we can hand it off wholesale. This way the other end can just start reading off the connection as if received directly. But in order to figure out the hostname used, we have to start reading off the connection up to the Host header. Then we have to hand it off prepended with what was read. What Alan wrote is an abstraction that gives you a virtual listener that lets you accept new connections for a particular virtual host and get the connection as if it hadn't been read yet. A lot of this is due to the interface based approach of the Go standard library.

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • How I ended up using Colima for Docker on Apple Silicon

    3 projects | dev.to | 3 May 2024
  • Show HN: Gridlock the Bots (Maybe)

    1 project | news.ycombinator.com | 3 May 2024
  • Show HN: Clai v1.3 – Multi-vendor AI CLI tool, written in go

    1 project | news.ycombinator.com | 3 May 2024
  • Tview – Golang Terminal UI library with rich, interactive widgets

    1 project | news.ycombinator.com | 3 May 2024
  • HTTP Message Signatures

    1 project | news.ycombinator.com | 3 May 2024