Welcome to loophost.

It's 2023, and friends don't let friends run without SSL.

Local web hosting for the 21st century

Similar to nginx or apache, Loophost allows you to use your laptop or desktop as a server. Designed for REALLY BUSY PEOPLE, it makes it really fast and easy to:

  • Get a unique domain name for every local app you're working on
  • Get a REAL WORLD SSL CERTIFICATE for each of those (for free)
  • Connect to those apps over local network ports (like the 'localhost:5000' thing you've been doing)
  • Connect over unix domain sockets (usually 2-3 TIMES FASTER than local network ports)

This addresses a whole bunch of small, annoying everyday problems for developers:

  • You can build and test remote content (including from APIs and other components) without "mixed content" problems.
  • You can run multiple apps (frontend and backend, or different microservices) without trying to remember which one is on what port
  • You can use and test CORS headers properly
  • You can use and test OAuth workflows and callbacks without weird special cases for the non-SSL localhost
  • You won't accidentally mix and break cookie domains because localhost and aren't really the same thing

And then it gets better: with a single click in a web interface (or an HTTP post, if you'd rather), you can enable a reverse tunnel for that app only, and share that with anyone.

  • The mobile or IoT app you're developing can run on the iPhone, android, iPad, Raspberry Pi or Arduino you've got in your house, and still talk to the API on your desktop
  • Working in the office with a bigger team? They can use the live version of the frontend you're working on, talking to the live version of the backend they're working on - all without any commit-build-deploy loop in the way, or the cost and latency of shared dev servers somewhere else.

We don't have time to write yaml. And we definitely don't have time to restart servers. Every modern web framework will watch our source files, and rebuild and restart when needed - so loophost works that way, too. This means that you can use STATEFUL connections like Websockets and SSE, without having those connections torn down because a completely DIFFERENT app needed an updated configuration.

Read on for more of the technical details.