The Publisher Console
August 21, 2026 · View on GitHub
What this is: a tour of the Publisher Console, the server's built-in web UI — how the core constructs (environments, packages, models, sources, views, notebooks, data apps) surface in it, and how to navigate them. Zero code required. It's served at http://localhost:4000 whenever the server is running.
The Console is the default, no-code way to explore what a Publisher deployment serves. It's built from the SDK but you don't need to know that — just open it and browse. (The Console is Publisher's own UI. It is not an HTML data app, which is a custom page you author inside a package; see choosing-a-surface.md for how the three in-package surfaces relate.)
The resource hierarchy
Everything in Publisher nests the same way, and the Console mirrors it:
Environment e.g. "examples"
└── Package e.g. "storefront" (a versioned bundle of models + data)
├── Model a .malloy file: sources, views, measures, dimensions
│ ├── Source a queryable entity (a table or a join graph)
│ └── View a saved, reusable query on a source
├── Notebook a .malloynb file: markdown + live query cells
├── Dashboard a dashboards/*.malloy file: filter controls + a tiled grid
└── Data Apps an in-package HTML data app (the package's public/ dir)
The REST and MCP APIs expose this exact hierarchy; the Console is a view onto it.
Navigating
- Left sidebar — Home, then an Environments list, and a Settings section (Visualization theme). Pick an environment to see its packages; pick a package to see its models, notebooks, dashboards, and data apps.
- Breadcrumbs across the top track where you are:
environment › package › file. - Theme toggle (top-right) switches light/dark when the deployment allows it (see theming.md).
- Footer links jump to the Malloy docs, these Publisher docs, and the live Publisher API explorer (see api-overview.md).

Two URL shapes
You'll see two path styles, and they're not interchangeable:
- Console routes are short —
/{environment}/{package}/{file}, e.g.http://localhost:4000/examples/storefront/storefront.malloynb. Use these to link to something inside the Console (a notebook, a package). - Resource paths are fully qualified —
/environments/{environment}/packages/{package}/.... This is the canonical form the REST and MCP APIs use, and it's also how an in-package HTML data app is served, e.g.http://localhost:4000/environments/examples/packages/html-data-app/.
When in doubt, the fully-qualified /environments/.../packages/... form always works; the short form
is a Console convenience.
What you can do in the Console
- Browse a package — one section each for Dashboards, Notebooks, Data Apps,
Semantic Models, Package Data and Materializations, in that order, plus the package's
README.malloynbrendered underneath. Dashboards and Data Apps are hidden when the package has none. Every kind has its own icon and its own color, so a row's type reads before its name does. Notebooks and dashboards are listed by title, with a notebook's path beside it and a dashboard's slug beside it; a notebook's title comes from its opening markdown heading unless a## title="…"or a#"doc comment overrides it. - Explore, no code — open a source in the Explorer, the visual query builder; every action generates valid Malloy, and you can view the Malloy and SQL behind any result.
- Read a notebook — a
.malloynbrenders its markdown and runs its query cells inline, including# dashboardviews (KPI tiles + nested charts). Tryhttp://localhost:4000/examples/storefront/storefront.malloynb.

- Tune parameters live — when a model declares givens, the notebook shows a
Parameters panel above the cells; change a control and every cell re-runs. Try
http://localhost:4000/examples/governed-analytics/orders.malloynb.

- Open a data app — a package's HTML data apps render inside the Console
(and can be opened standalone). Try
http://localhost:4000/environments/examples/packages/html-data-app/. - Edit the theme — operators can iterate colors/fonts live at
/settings/theme(see theming.md).
Where to go next
- Discover data with an AI agent instead of clicking: ai-agents.md.
- Build a custom UI: html-data-apps.md.
- Drive it programmatically: api-overview.md.