Serve a folder.
That's the whole idea.

FileHeron puts a directory on a real HTTP port, so your local project stops being a pile of files and starts being a website. It is a small Dart library and a single-binary command line tool — nothing to configure, nothing to sign up for.

fileheron_server 1.0.5 · MIT · verified publisher horizech.com

One engine, three front doors.

The command line tool is a wrapper around the library, so they behave identically. The library is published; the binary you build yourself, in one command.

LibraryOn pub.dev
fileheron_server

A Dart package you add to your own project. Describe the server with ServerParams, call start(), and you are serving.

View on pub.dev →
Command lineBuild from source
fileheron

The same server compiled to a single native binary with no runtime to install. Point it at a folder and a port and it runs.

How to build it →
Desktop appIn development
fileheron_gui

A window with a folder picker and a start button, for when you would rather not open a terminal. Not released yet.

Double-clicking the file only gets you so far.

Every local HTML project reaches the point where it needs to be served rather than opened.

Because file:// is not the web

Open an HTML file directly and module imports, fetch calls and anything CORS-sensitive fail — for reasons that have nothing to do with your code. Served over HTTP, the page behaves the way it will in production.

Check the build before it ships

Point it at the folder your bundler just produced and click through the real thing, rather than trusting that the dev server and the build agree with each other.

Open it on your phone

Serve on your machine’s network address and load the site on a phone on the same Wi-Fi. Rather more convincing than a narrow browser window.

Nothing to set up

No configuration file, no project scaffold, no global install of a runtime you did not want. A folder and a port is the entire mental model.

Small on purpose.

It takes a directory and puts it on a port. It is not a web framework, not a CDN and not a host, and it is worth being clear about where it stops:

  • Serves static files over plain HTTP. A directory resolves to its index.html — there is no browsable file index.
  • HTTPS is not working yet. The options exist in the API, but the package documents the feature as unfinished, so serve behind something else if you need TLS.
  • No authentication, no access control, no rate limiting. Do not put it on the public internet.
  • Requests can be printed to the console and appended to a log file. That is the whole of the observability story.