Doc Browser Server
hypha server is a loopback-only doc browser built on the same data as the
CLI, but with a visual surface humans can scan quickly. The first run pays
the indexing cost; every subsequent run hits the SQLite cache and renders
results on the first keystroke.
$ hypha server --port 4287
hypha server listening on http://127.0.0.1:4287
Highlights
-
Command-palette fuzzy search. Type
Data.Map lookuporData.Map.Strict.lookup— FZF/Telescope-style tokenised matching ranks the canonical symbol first. The dropdown is centered under the search bar and works the same on every page.
-
One result per definition. Rows that share a definition site collapse into a single hit —
Data.Traversable.mapAccumLandGHC.Internal.Data.Traversable.mapAccumLare one result, not two — with the most public presentation winning. Nothing is hidden: a+Nbadge opens a list naming every package and module that was folded in, each a link, with the defining one tagged.Data.Map.Strict.insertWithandData.Map.Lazy.insertWithstay two results, because they have different definitions. PressTabto scope to one package; the scope applies before the fold, so a definition two packages present still appears under either. -
Packages and modules are results too, ranked above the symbols beneath them: typing
containerslands the package page, typingData.Map.Strictlands the module page. -
Live build-progress feedback. A slim accent-coloured progress bar at the top of the page shows how many packages remain to index. A shimmering "Building the docs…" placeholder fills the dropdown until the index is warm.
-
Façade modules are no longer empty. A module that only re-exports —
Data.Traversable,Prelude,Data.Map.Strict— lists its entries with real signatures and Haddock, each taggedfrom <Module>(orfrom <pkg>:<Module>when the definition lives in a dependency) and linking there. Resolution goes through the search index, so a symbol re-exported through two or more modules still lands on its declaration rather than on the module that merely passes it along. -
Faithful symbol cards. Multi-line signatures are joined, Haddock comes from the GHC parse tree — so a doc block separated from its declaration by a blank line still binds correctly — and is rendered to HTML (paragraphs,
<code>,<pre>code blocks, lists, links). Every link is built from the component that defines the symbol, which may be a different package from the one in the URL. A card that could not read a signature says so instead of rendering an empty box.
-
Skylighting-rendered source view with a
?line=Nscroll target.
-
Private libraries. Sublibs appear as separate sidebar entries — a package's main library under its own name, a sublibrary as
pkg:sublib(e.g.happy-lib:frontend) — each with their own pages and search scope.
See Endpoints & Flags for the full HTTP surface and command-line options.