gowdk manifest prints validated route metadata for explicit .gwdk files.
go run ./cmd/gowdk manifest --ssr examples/pages/*.gwdk examples/actions/*.gwdk examples/partials/*.gwdk examples/api/*.gwdk examples/ssr/*.gwdk examples/go-interop/*.gwdk examples/components/base/*.gwdk examples/components/css/*.gwdk examples/components/assets/*.gwdk examples/embed/*.gwdk examples/css/*.gwdk examples/tailwind/*.gwdk
Current JSON shape:
{
"version": 1,
"pages": {
"dashboard": {
"source": "examples/ssr/dashboard.page.gwdk",
"kind": "page",
"package": "dashboard",
"route": "/dashboard",
"render": "ssr",
"uses": [
{"alias": "ui", "package": "components"}
],
"layouts": ["root", "dashboard"],
"guard": ["auth.required"],
"css": ["default", "page", "forms"],
"components": ["Hero"],
"assets": ["/assets/dashboard.png"],
"cssClasses": ["dashboard", "panel"],
"styleAttributes": ["color: red;"],
"blocks": {
"paths": false,
"build": false,
"load": true,
"view": true
}
},
"signup": {
"source": "examples/actions/signup.page.gwdk",
"kind": "page",
"route": "/signup",
"render": "action",
"artifacts": [
{"kind": "html", "path": "signup/index.html"}
],
"blocks": {
"paths": false,
"build": false,
"load": false,
"view": true,
"actions": ["submit"]
},
"actions": [
{
"name": "submit",
"inputName": "input",
"inputType": "SignupInput",
"validatesInput": true,
"redirect": "/signup?ok=1",
"fragments": [
{"target": "#signup-result"}
]
}
],
"apis": [
{
"name": "health",
"method": "GET",
"route": "/api/health"
}
]
}
},
"components": {
"Hero": {
"source": "examples/pages/hero.cmp.gwdk",
"kind": "component",
"package": "components",
"props": [
{"name": "title", "type": "string"},
{"name": "tagline", "type": "string"}
],
"emits": [
{
"name": "select",
"params": [
{"name": "id", "type": "string"},
{"name": "active", "type": "bool"}
]
}
]
}
}
}
Fields:
version: public manifest schema version.source: source file path.kind: file kind, currentlypageorcomponent.package:.gwdkpackage name when declared.uses: optional GOWDK source package imports declared asuse alias "package"; these are separate from normal Go imports.route: declared route path.render: effective render mode after applying defaultspa.metadata: optional page document metadata from@title,@description,@canonical, and@image.layouts: optional ordered layout references. Bare names are same-package or package-less layout IDs; qualified names such aschrome.rootresolve through pageuse chrome "package"declarations.dynamicParams: route param names declared in dynamic route segments.routeParams: route param names and scalar types. Untyped params are reported asstring.cache: optional concrete page Cache-Control response metadata from@cacheand@revalidate.paths: optional boolean present whenpaths {}exists.guard: explicit page access metadata. Real page sources must declare it; intentionally public pages report["public"].css: optional@csspage selection metadata.js: optional path-based scoped browser script declarations.inlineJS: optional generated names for inlinejs {}browser script declarations. The manifest does not include inline code bodies.blocks: declared page block presence and action/API block names.actions: optional action metadata for the first supported action body subset, including input metadata, validation intent, local redirects, and fragment targets declared withfragment "#id" {}.apis: optional API block metadata, including method and route when declared with the first supported API endpoint metadata subset.- page
components: optional sorted component names directly referenced by the current literalview {}parser subset. assets: optional sorted literalsrc,href, andposterreferences directly visible in the current literalview {}parser subset. Interpolated and external URLs are omitted.cssClasses: optional sorted class names directly visible in literalclassattributes.styleAttributes: optional sorted literal inlinestyleattribute values.artifacts: optional generated artifact path metadata. SPA and action pages list the generated HTML path pattern relative to the build output directory, such asindex.html,newsletter/index.html, orblog/{slug}/index.html. SSR-only pages omit app-shell HTML artifacts.components: component declarations known to the manifest. Component declarations may includecss,js,inlineJS,assets, inlineprops, typedpropsType/statecontracts, typed publicexports, and emitted browser-island event metadata underemits.backendBindings: action/API handler binding metadata. Entries include endpoint kind, source, page ID, declared block name, method, endpoint path, Go package/import details, exact handler symbol, signature/input metadata when supported, binding status, and binding message.
The site-map command emits broader editor-facing JSON that includes source
paths, dynamic route params, block presence, and the normalized route graph.
The route graph adds routes entries for page/file routes and endpoints
entries for action/API declarations, including method, path, page ID, symbol,
package, and backend binding summary fields.
gowdk build also writes a separate SPA route manifest named
gowdk-routes.json in the selected output directory. That generated file records
emitted page IDs, declared routes, and relative build output paths.
Dynamic SPA routes are recorded once for each generated concrete route.
SPA builds also write gowdk-assets.json in the selected output directory:
{
"version": 1,
"files": {
"assets/app.css": "assets/app.7ada5a1234b1.css"
}
}
Today it records CSS files emitted by compile-time CSS processors, generated
page CSS, and page-level cache policies for generated SPA HTML. Keys are stable
logical asset names. Values are emitted slash-separated paths relative to the
selected output directory; generated CSS is minified and emitted with
content-hashed filenames. The cache map may include route HTML paths such as
index.html without adding those route files to files; when a page declares
@revalidate, the recorded cache policy includes the generated
stale-while-revalidate=<seconds> directive.