diff --git a/PARITY.md b/PARITY.md
index 4571d786b..d5caf8163 100644
--- a/PARITY.md
+++ b/PARITY.md
@@ -371,7 +371,8 @@ query root, and declared tables and columns through `GET /frontend/state`
(HTTP 503 when unavailable). The page needs no
runtime asset download; the option adds no SDK binding API. Without the flag,
the existing HTTP routes are unchanged. The page runs SQL through `POST
-/query` (script at `/frontend.js`). Distribution validation is tracked in a
+/query` (script at `/frontend.js`) and lists declared tables with a
+quoted preview query beside the path-table guide. Distribution validation is tracked in a
subsequent frontend issue.
**Parity by construction, no drift; no SDK API change (#662).** Query is the
diff --git a/docs/reference/cli.md b/docs/reference/cli.md
index e6da14635..6024f6318 100644
--- a/docs/reference/cli.md
+++ b/docs/reference/cli.md
@@ -249,6 +249,19 @@ returned, and errors. Values render as text (`NULL` is marked), and only the
first 1000 rows are displayed. An empty result says so and shows no column
names, since the response carries none.
+Above the SQL box the page shows the query root and the path-table columns
+(`path`, `basename`, `dir`, `ext`, `size`, `mtime`, `ctime`, plus `content`,
+read only when named), with a button that loads the starter query. A config
+with declared tables adds each table and its columns; choosing one loads
+`SELECT * FROM "
" LIMIT 100` into the box without running it.
+Declared-table globs anchor at their config file's directory, while
+path-tables resolve under the query root. With no declared tables, including
+a config of only functions or extensions, the page shows the path-table
+start alone. A config that fails to load shows its diagnostic and how to
+restart. To refresh, run the query again: path-tables re-read the filesystem,
+and declared tables reflect the server's index. The page does not use
+`/events`.
+
```bash
dirsql server --frontend
dirsql server --frontend -c .dirsql.toml
diff --git a/packages/python/e2e-attestations/bot-1489-frontend-browse-1013.json b/packages/python/e2e-attestations/bot-1489-frontend-browse-1013.json
new file mode 100644
index 000000000..81894d56f
--- /dev/null
+++ b/packages/python/e2e-attestations/bot-1489-frontend-browse-1013.json
@@ -0,0 +1,7 @@
+{
+ "command": "uv run python -m pytest tests/e2e/cli_version_test.py tests/e2e/query_contract_test.py tests/e2e/fanout_test.py tests/e2e/extension_package_test.py -x -q",
+ "ran_at": 1791927030,
+ "exit_code": 0,
+ "commit": "59221551ed292a404b0342d8455c18d2a946d7d6",
+ "branch": "bot/1489-frontend-browse-1013"
+}
diff --git a/packages/rust/changelog.d/2026-10-13-frontend-browse.md b/packages/rust/changelog.d/2026-10-13-frontend-browse.md
new file mode 100644
index 000000000..bf3208ae2
--- /dev/null
+++ b/packages/rust/changelog.d/2026-10-13-frontend-browse.md
@@ -0,0 +1 @@
+**Added** Table browsing and configless onboarding in the `dirsql server --frontend` explorer: the query root, the path-table columns and an editable path-table example, declared tables with their columns and a quoted `LIMIT 100` preview query per table, and config-load diagnostics with restart guidance.
diff --git a/packages/rust/migrations.d/2026-10-13-frontend-browse.md b/packages/rust/migrations.d/2026-10-13-frontend-browse.md
new file mode 100644
index 000000000..c6f92b7b3
--- /dev/null
+++ b/packages/rust/migrations.d/2026-10-13-frontend-browse.md
@@ -0,0 +1,21 @@
+### Frontend table browsing and onboarding
+
+#### Summary
+
+The `dirsql server --frontend` page now shows the query root, documents path-table columns, lists declared tables with their columns, and loads a quoted, bounded preview query when a table is chosen. A config that fails to load shows its diagnostic and how to restart. Nothing breaks.
+
+#### Required changes
+
+_None._
+
+#### Deprecations removed
+
+_None._
+
+#### Behavior changes without code changes
+
+_None._
+
+#### Verification
+
+Run `dirsql server --frontend --port 0 -c .dirsql.toml` in a directory with a config, open the printed URL, and choose a table. The SQL box reads `SELECT * FROM "" LIMIT 100`; press Run to see its rows.
diff --git a/packages/rust/src/cli/frontend.html b/packages/rust/src/cli/frontend.html
index 6300a4fb6..6744c7637 100644
--- a/packages/rust/src/cli/frontend.html
+++ b/packages/rust/src/cli/frontend.html
@@ -15,7 +15,10 @@
p { line-height: 1.6; color: #4a5d51; max-width: 42rem; }
.panel { margin-top: 2.5rem; padding: 1.5rem; border: 1px solid #d9e1da; border-radius: 12px; background: #fff; box-shadow: 0 3px 12px #17302609; }
.panel h2 { margin: 0 0 .5rem; font-size: 1rem; }
- .panel p { margin: 0; }
+ .panel p { margin: 0 0 .6rem; }
+ .panel h2:not(:first-child) { margin-top: 1.2rem; }
+ .panel ul { margin: .2rem 0 .8rem; padding-left: 1.2rem; line-height: 1.5; color: #4a5d51; }
+ .panel button.choice { margin: .2rem 0; padding: .25rem .6rem; background: #eef2ee; color: #173026; border: 1px solid #b9c7bd; font: .9rem/1.4 ui-monospace, monospace; }
form { margin-top: 2rem; }
label { display: block; font-weight: 600; margin-bottom: .4rem; }
textarea { width: 100%; min-height: 7rem; padding: .7rem; border: 1px solid #b9c7bd; border-radius: 8px; font: .95rem/1.5 ui-monospace, monospace; resize: vertical; }
@@ -51,30 +54,5 @@ Connecting to dirsql…
-