A Survey of the Localhost Proxying Landscape

In late 2009, soon after coining the term ‘webhooks’ and starting to evangelize them to the world, Jeff Lindsay ran into a problem.

I had another idea while thinking about webhooks. It would be great if I could expose a local web server to the Internet with a friendly URL. It should just be a simple command. There would have to be a server, but there could just be a public server that you didn’t even have to think about.

Jeff’s idea grew into localtunnel, a friendly wrapper around an SSH reverse tunnel that makes your localhost available via a public URL. The first time I used it, it felt like magic. It completely changed the nature of working with webhooks. I was, well, hooked.

What was novel at the time has grown into a little bit of a cottage industry amongst API tool makers. Many similar services have cropped up, specializing in different versions of the same problem. Here’s an overview of all the services I know of.

localtunnel

The original. The initial SSH-based version with the Ruby client eventually ran into some issues. Ruby and SSH are also a bit precocious on Windows. Jeff later released a beta of a version 2 with a Python client and a new wire format. Localtunnel has been discontinued in favor ngrok (see below).

localtunnel.me

A Node.js copy of the original localtunnel that couldn't come up with an original name.

Forward (formerly Showoff)

Forward was another early entrant, focusing more on allowing developers to show off web sites they were working on from their local machine. In early 2011 they rebranded from Showoff to Forward. They offer a few different pricing plans for various needs.

ProxyLocal

Another Ruby based solution, ProxyLocal was started in late 2010 and was last updated a year ago, though the web service seems to be operating still. It distinguishes itself from localtunnel by letting you choose the subdomain for your public URL. The service is free.

PageKite

PageKite is another commercial service started around the same time independently of the others (this comment suggests localtunnel predated it by only a few months). PageKite is Python-based, open source, offers end-to-end encryption and can tunnel protocols other than HTTP. Here’s a post comparing it to Showoff. They offer subscriptions, pay-what-you-want and a free plan for OSS devs.

Ultrahook

Ultrahook is a new entrant to the scene, focusing on webhook debugging. Created by Vinay Sahni from SupportFu, Ultrahook consists of a client distributed via Ruby gem. The service is free, but the source is not available. By signing up for a free account you’ll receive an API key that “gives you a exclusive namespace. All endpoints you create will be subdomains under your own namespace. This ensures that you can always reconnect to the same endpoints at some point in the future.” Ultrahook does not proxy responses back and only supports POST requests.

Finch

Another Node.js client/server, currently in beta as of May 2014. Paid plans will be offered when it officially launches. As it is in beta at the time of this update, the full feature set is unknown.

Vagrant Share

Vagrant Share is a solution for sharing web servers (or any other TCP/UDP connection like SSH) running inside your Vagrant environments. Uses TLS end-to-end. Requires a Vagrant Cloud account.

ngrok

The current king of localhost proxying is ngrok from Alan Shreve (formerly of Twilio). ngrok is written in Go (both client and server) and has, by far, the easiest client installation options with single-file executables for Windows, OS X and Linux. No more fighting with Ruby gems Windows users! In addition, ngrok adds an introspection layer so you can see the traffic that was passed back and forth over the tunnel and even retry requests. ngrok supports SSL, password-protected tunnels, reserved subdomains and support for TCP/UDP tunneling. It’s free and the source is on GitHub.

Runscope Passageway

My company Runscope also offers a version of ngrok called Passageway. We’ve added tight integration with the Runscope API Traffic Inspector and some other enhancements to create a more seamless experience with our other products.

My Recommendation

If you’re just getting started, I recommend ngrok. Client set up is the easiest and it offers the most features of any of the options and its completely free.

Did I miss any? If so, let me know in the comments.

Update 5/18/2014: Added Finch, localtunnel.me, Vagrant Share and updated details about Runscope Passageway using ngrok instead of localtunnel.

Photo courtesy of Tina Carlson