<?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: Leandro Benedet</title>
    <description>The latest articles on DEV Community by Leandro Benedet (@benedetleandro).</description>
    <link>https://dev.to/benedetleandro</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%2F4227362%2F8cb9a5d4-86ba-4627-93c4-f53f1484b74d.png</url>
      <title>DEV Community: Leandro Benedet</title>
      <link>https://dev.to/benedetleandro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/benedetleandro"/>
    <language>en</language>
    <item>
      <title>Show HN: Fenestra – double-click a local dist/index.html and it opens over localhost</title>
      <dc:creator>Leandro Benedet</dc:creator>
      <pubDate>Thu, 05 Nov 2026 00:03:17 +0000</pubDate>
      <link>https://dev.to/benedetleandro/show-hn-fenestra-double-click-a-local-distindexhtml-and-it-opens-over-localhost-2132</link>
      <guid>https://dev.to/benedetleandro/show-hn-fenestra-double-click-a-local-distindexhtml-and-it-opens-over-localhost-2132</guid>
      <description>&lt;p&gt;I built Fenestra because I kept opening a terminal just to serve a static build.&lt;/p&gt;

&lt;p&gt;Modern builds use ES modules. Under file:// the browser blocks modules by CORS,&lt;br&gt;
absolute paths point at the drive root, and service workers do not exist. The&lt;br&gt;
usual fix is a terminal and a static server. Fenestra removes that step: it is&lt;br&gt;
the static server, attached to the double-click.&lt;/p&gt;

&lt;p&gt;Double-click an index.html (or drag a folder onto the executable) and Fenestra&lt;br&gt;
serves that folder on 127.0.0.1, on a stable port, and opens a normal tab in&lt;br&gt;
your browser. No Electron, no Node, no extension, no custom browser window.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows: a ~120 KB .exe, .NET Framework only, no installer.&lt;/li&gt;
&lt;li&gt;Linux/macOS: a single static Go binary; Homebrew for the macOS CLI.&lt;/li&gt;
&lt;li&gt;Stable port per folder, so localStorage, cookies and service workers survive.&lt;/li&gt;
&lt;li&gt;SPA fallback for extensionless routes.&lt;/li&gt;
&lt;li&gt;Path confinement: parent paths, drive tricks and hidden files are rejected.&lt;/li&gt;
&lt;li&gt;Browser picker: Edge, Chrome, Firefox, Brave, Vivaldi, Opera, Chromium, Safari.&lt;/li&gt;
&lt;li&gt;Offline manual embedded in the executable, in seven languages.&lt;/li&gt;
&lt;li&gt;No cookies, no analytics, no telemetry.&lt;/li&gt;
&lt;li&gt;A static version.json is checked once a week; if there is an update, it opens
one dismissible tab per version.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Status: 1.1.0. It is functional, but I will not pretend it is finished. Honest&lt;br&gt;
rough edges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The binaries are not code-signed; SmartScreen/Gatekeeper will ask once.&lt;/li&gt;
&lt;li&gt;macOS has no notarized app; the build kit compiles one locally.&lt;/li&gt;
&lt;li&gt;It serves static files only: no backend, no API proxy, no TLS/auth.&lt;/li&gt;
&lt;li&gt;Some translations are community-made and not yet reviewed by native speakers.&lt;/li&gt;
&lt;li&gt;There are still a few bugs I am fixing as they are reported.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site: &lt;a href="https://benedetleandro.github.io/fenestra/" rel="noopener noreferrer"&gt;https://benedetleandro.github.io/fenestra/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;One-page presentation: &lt;a href="https://benedetleandro.github.io/fenestra/presentation.html" rel="noopener noreferrer"&gt;https://benedetleandro.github.io/fenestra/presentation.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Manual: &lt;a href="https://benedetleandro.github.io/fenestra/manual.html" rel="noopener noreferrer"&gt;https://benedetleandro.github.io/fenestra/manual.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/benedetleandro/fenestra" rel="noopener noreferrer"&gt;https://github.com/benedetleandro/fenestra&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Release (binaries, manual, SHA256SUMS): &lt;a href="https://github.com/benedetleandro/fenestra/releases/tag/v1.1.0" rel="noopener noreferrer"&gt;https://github.com/benedetleandro/fenestra/releases/tag/v1.1.0&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would really appreciate feedback on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Windows "set as default" flow – is it clear enough?&lt;/li&gt;
&lt;li&gt;The macOS build kit – does it work for you?&lt;/li&gt;
&lt;li&gt;Anything that broke or confused you in the first five minutes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If this is useful to even one person, it was worth building. Thanks for reading.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>localhost</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
