<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Muhammad Xudoynazarov</title>
    <description>The latest articles on DEV Community by Muhammad Xudoynazarov (@muhammad_deve).</description>
    <link>https://dev.to/muhammad_deve</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4193807%2F66101cf0-8296-4af6-b6ff-7d8a2ac3578c.jpg</url>
      <title>DEV Community: Muhammad Xudoynazarov</title>
      <link>https://dev.to/muhammad_deve</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muhammad_deve"/>
    <language>en</language>
    <item>
      <title>I Wanted a Simpler Way to Share Localhost, So I Built One</title>
      <dc:creator>Muhammad Xudoynazarov</dc:creator>
      <pubDate>Mon, 19 Oct 2026 10:09:15 +0000</pubDate>
      <link>https://dev.to/muhammad_deve/i-wanted-a-simpler-way-to-share-localhost-so-i-built-one-43j5</link>
      <guid>https://dev.to/muhammad_deve/i-wanted-a-simpler-way-to-share-localhost-so-i-built-one-43j5</guid>
      <description>&lt;p&gt;I've been working on something called &lt;strong&gt;GoPort&lt;/strong&gt;, and I wanted to share it here.&lt;/p&gt;

&lt;p&gt;Sometimes you just need to show someone what you're working on locally. Maybe you're building a website, testing an API, or trying to get a webhook working.&lt;/p&gt;

&lt;p&gt;But localhost is only accessible from your own machine, and deploying an entire project just to test something doesn't always make sense.&lt;/p&gt;

&lt;p&gt;There are already tools that solve this problem, but I wanted to try building my own. I also wanted to understand how tunneling works behind the scenes.&lt;/p&gt;

&lt;p&gt;So I started working on GoPort.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea is pretty simple
&lt;/h2&gt;

&lt;p&gt;GoPort lets you turn your localhost into a public HTTPS URL using a CLI command.&lt;/p&gt;

&lt;p&gt;For example, if your app is running on port 8080, you can just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;goport http 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And get a link like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://abc123.goport.uz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can share that URL with someone, and they'll be able to access the application running on your computer.&lt;/p&gt;

&lt;p&gt;You don't need to configure port forwarding, get a public IP, or deploy anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;This is probably the part I enjoyed working on the most.&lt;/p&gt;

&lt;p&gt;Instead of opening a port on your router, the GoPort CLI connects to a remote server and keeps that connection open.&lt;/p&gt;

&lt;p&gt;When someone visits your public URL, the request goes to the GoPort server first.&lt;/p&gt;

&lt;p&gt;The server then forwards it through the tunnel to the CLI running on your machine. The CLI sends the request to your local app and passes the response back.&lt;/p&gt;

&lt;p&gt;I'm using &lt;strong&gt;yamux&lt;/strong&gt; to handle multiple streams over the same connection.&lt;/p&gt;

&lt;p&gt;That way, multiple HTTP requests can travel through one connection between the CLI and the server.&lt;/p&gt;

&lt;p&gt;I also added WebSocket support, since a lot of modern web applications depend on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Something else I wanted to add
&lt;/h2&gt;

&lt;p&gt;When you're testing webhooks or APIs, just getting a public URL isn't always enough.&lt;/p&gt;

&lt;p&gt;Sometimes you need to see exactly what requests are arriving.&lt;/p&gt;

&lt;p&gt;So I added a local request inspector.&lt;/p&gt;

&lt;p&gt;While the tunnel is running, you can open:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://127.0.0.1:4040&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;From there, you can see incoming requests and responses, replay requests, and copy them as cURL commands.&lt;/p&gt;

&lt;p&gt;It's especially useful when you're trying to debug a webhook and can't figure out what the external service is sending.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can also self-host it
&lt;/h2&gt;

&lt;p&gt;Another thing I wanted was the option to run the tunnel infrastructure myself.&lt;/p&gt;

&lt;p&gt;GoPort is open-source under the MIT license, and you can self-host the server instead of using the hosted service.&lt;/p&gt;

&lt;p&gt;The project is written mainly in Go, with PocketBase used for the backend and Next.js for the website and dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's at now
&lt;/h2&gt;

&lt;p&gt;GoPort is already available for Windows, macOS, and Linux.&lt;/p&gt;

&lt;p&gt;I've also added things like automatic reconnection and reusable tunnel URLs, so you don't have to start from scratch every time your connection drops.&lt;/p&gt;

&lt;p&gt;There's still more I want to work on, but I thought it was a good time to share what I've built.&lt;/p&gt;

&lt;p&gt;I'd be interested to hear what other developers think, especially anyone who's worked on tunneling, networking, or similar tools.&lt;/p&gt;

&lt;p&gt;And if you try it, let me know if something doesn't work or if the setup could be easier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/muhammad-deve/GoPort" rel="noopener noreferrer"&gt;https://github.com/muhammad-deve/GoPort&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://goport.uz" rel="noopener noreferrer"&gt;https://goport.uz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>go</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
