Site Json Announcement
site.json — Site Resource Declaration
site.json is a machine-readable declaration of a website and the public resources it makes available.It provides software, crawlers, indexing systems, AI systems, research tools, and other automated consumers with a structured description of a site's public content.
Chaos MVC can generate this resource automatically from the site's existing public resources and validate the completed declaration against the STN-LABZ Site Resource Schema before publication.
The standard location is:
/site.json
For example:
https://example.com/site.json
The governing schema is:
https://schema.stn-labz.com/site/v1/schema.json
Current schema version:
1.0
Purpose
Traditional discovery mechanisms describe different portions of a website.
A sitemap primarily identifies URLs. RSS describes feed content.
llms.txt can provide a human-readable map for language-model-oriented consumers.site.json serves a different purpose.It provides a structured declaration of:
- the website itself;
- public resources available from the website;
- the type of each resource;
- titles and descriptions;
- resource language;
- whether the resource is intended for indexing;
- publication and modification dates when available;
- relationships between resources when declared.
The result is a predictable JSON document that software can consume without having to infer the basic structure of the site from HTML.
The STN-LABZ Site Resource Schema
A valid
site.json document follows the STN-LABZ Site Resource Schema.The document identifies its schema directly:
{
"$schema": "https://schema.stn-labz.com/site/v1/schema.json",
"version": "1.0"
}
The schema is the authority for the structure of the document.
Chaos MVC does not maintain a separate local copy of the schema for validation.
During generation, Chaos MVC retrieves the authoritative schema from:
https://schema.stn-labz.com/site/v1/schema.json
The generated declaration must validate against that remote schema before it can be published.
Document Structure
A
site.json document contains four required top-level properties:{
"$schema": "https://schema.stn-labz.com/site/v1/schema.json",
"version": "1.0",
"site": {},
"resources": []
}
These properties identify:
- the governing schema;
- the schema version;
- the website;
- the website's declared public resources.
Additional top-level properties are not permitted by version 1.0 of the schema.
Site Declaration
The
site object describes the website itself.It requires:
urlnamedescriptionlanguage
Example:
{
"site": {
"url": "https://example.com",
"name": "Example Site",
"description": "An example website.",
"language": "en"
}
}
url
The canonical URL of the website.
It must be a valid URI.
name
The name of the website.
It must contain at least one character.
description
A description of the website.
It must contain at least one character.
language
The language used by the website.
For example:
en
Resources
The
resources array contains declarations for public resources provided by the website.A resource requires:
urltypetitledescriptionlanguageindex
Example:
{
"url": "https://example.com/about",
"type": "page",
"title": "About",
"description": "Information about the organization.",
"language": "en",
"index": true
}
Resources may additionally contain:
publishedmodifiedrelationships
Resource Types
Version 1.0 recognizes the following resource types:
page
article
documentation
software
product
download
image
feed
person
organization
event
other
The resource type gives consumers a basic semantic description of what the URL represents.
page
A general public webpage.
article
An article, post, announcement, or similar published content when the producer identifies it as such.
documentation
Technical, project, API, software, or other documentation.
software
A software resource.
product
A product or product information resource.
download
A downloadable resource.
image
An image resource.
feed
A machine-readable content feed such as RSS.
person
A resource representing a person.
organization
A resource representing an organization.
event
A resource representing an event.
other
A public resource whose semantics are not known or do not fit one of the defined types.
other is important for deterministic generation.A generator should not guess the semantic meaning of a resource merely from its URL, module name, or content. When an authoritative type is unavailable,
other provides an explicit representation without inventing information.Indexing Declaration
Every resource contains an
index boolean.For example:
{
"index": true
}
or:
{
"index": false
}
This provides an explicit machine-readable declaration of whether the resource is intended for indexing.
In the current Chaos MVC generator, resources discovered through its public-resource authorities are emitted with:
{
"index": true
}
because the generator is describing resources already determined to be public.
Publication and Modification Dates
Resources may contain publication and modification dates.
Example:
{
"published": "2026-09-15",
"modified": "2026-09-15"
}
Dates use the JSON Schema
date format:YYYY-MM-DD
Chaos MVC normalizes available creation and update timestamps to this format before including them.
If an authoritative date is unavailable, the optional field does not need to be invented.
Relationships
A resource may contain a
relationships object.Supported relationships are:
authorpublisherdocumentationdownloadparentrelated
Example:
{
"relationships": {
"author": "https://example.com/people/example-author",
"publisher": "https://example.com",
"documentation": "https://example.com/docs",
"download": "https://example.com/download",
"parent": "https://example.com/project",
"related": [
"https://example.com/resource-a",
"https://example.com/resource-b"
]
}
}
Relationship values are URIs.
The
related property is an array of unique URIs.Relationships are optional. They should be declared when the relationship is known rather than inferred without authority.
Chaos MVC Implementation
Chaos MVC integrates
site.json into its existing site discovery system.The generator derives the declaration from existing authoritative sources instead of introducing a separate resource registry.
The current discovery sources include:
- public Chaos MVC Core routes;
- public user modules;
- published Pages;
- published Posts;
- the public RSS feed.
This follows the same general discovery architecture used by Chaos MVC for its other generated discovery resources.
Core Routes
Public Core controller roots can be represented as resources of type:
page
Internal Core controllers are explicitly excluded from publication.
This prevents implementation controllers and administrative infrastructure from becoming advertised public resources simply because controller files exist.
Examples of internal Core functionality include administrative, authentication, generator, health, theme, and infrastructure controllers.
Discovery therefore distinguishes between:
Controller exists
and:
Controller represents a public resource
Those are not assumed to mean the same thing.
User Modules
Chaos MVC discovers user modules from:
/user/modules/{slug}/
Module discovery is inert.
The discovery process examines the filesystem and module declaration without executing module PHP code.
A discoverable module must satisfy the module discovery requirements, including:
- a valid module slug;
- a real module directory rather than a symbolic-link directory;
- a valid
module.json; - matching module identity;
- an appropriate controller file;
- an
indexroute declared by the module.
A module without sufficient authoritative semantic information is emitted as:
other
rather than having a resource type guessed from its name.
Pages
Chaos MVC Pages are discovered from:
/user/pages/{slug}/
with metadata provided by:
page.json
Only valid, published Pages are included.
Pages are represented as:
page
A Page such as:
/user/pages/about/
is represented by its public URL:
https://example.com/about
The internal filesystem location is not exposed as the public resource URL.
Posts
Published Posts are discovered through the existing Posts public-feed authority.
Individual published Posts are represented as:
article
When authoritative timestamps are available, Chaos MVC can include normalized
published and modified dates.Unpublished content is not included as a public resource.
RSS
The generated RSS resource is represented as:
feed
For a standard Chaos MVC installation this may appear as:
https://example.com/rss.xml
Deterministic Generation
The Chaos MVC implementation is designed around deterministic discovery.
The same authoritative site state should produce the same resource declaration.
The generator does not attempt to make speculative judgments about resources.
Its general process is:
Discover
↓
Normalize
↓
Deduplicate
↓
Sort
↓
Generate
↓
Validate
↓
Publish
Resources are deduplicated by URL and sorted deterministically.
Known information is represented as known information.
Unknown information is not silently converted into assumed information.
This follows a central Chaos MVC engineering principle:
Determinism ≠ Probably.
Remote Schema Validation
Generation alone is not sufficient for publication.
Before a new
site.json replaces the current public declaration, Chaos MVC retrieves:https://schema.stn-labz.com/site/v1/schema.json
The retrieved schema must itself satisfy the expected authority checks.
The schema
$id must identify the expected STN-LABZ schema:https://schema.stn-labz.com/site/v1/schema.json
Chaos MVC then validates the generated candidate against the retrieved schema.
The validation process supports the schema features required by Site Resource Schema v1, including:
$refconstenumtyperequiredpropertiesadditionalPropertiesitemsuniqueItemsminLength- URI format validation
- date format validation
Only a candidate that passes validation proceeds to publication.
Fail-Closed Publication
site.json uses fail-closed publication.If the remote schema cannot be retrieved, the candidate is not published.
If the remote schema is malformed, the candidate is not published.
If the retrieved schema does not identify itself as the expected authoritative schema, the candidate is not published.
If the generated document fails schema validation, the candidate is not published.
The existing known-good public declaration remains in place.
Conceptually:
Generate candidate
↓
Fetch authoritative schema
↓
Verify schema authority
↓
Validate candidate
↓
PASS?
/ \
Yes No
| |
Publish Reject
| |
New file Existing file remains
This prevents an invalid generation attempt from replacing a previously valid public resource.
Atomic Publication
Chaos MVC generates and validates the candidate before replacing the public file.
The target is:
/public/site.json
Temporary publication state is kept separate from the current public resource.
The existing target is preserved during replacement so that a publication failure can be recovered without intentionally replacing the known-good declaration with an invalid candidate.
Validation therefore occurs before the generated declaration becomes authoritative public output.
Admin Integration
site.json is integrated into the Chaos MVC Admin index refresh process.The site discovery refresh now generates:
sitemap.xml
ror.xml
llms.txt
rss.xml
site.json
The Admin refresh process invokes the appropriate generator for each resource.
For
site.json, successful generation includes successful remote schema validation.A failure in generation or validation is reported rather than silently treated as a successful refresh.
Discovery From HTML
A website may advertise its Site Resource Declaration from its HTML
<head>.Example:
<!-- Site Resource Declaration -->
<link
rel="alternate"
type="application/json"
title="Site Resource Declaration"
href="https://example.com/site.json"
/>
This gives consumers examining the site's HTML an explicit path to the machine-readable declaration.
The declaration also remains directly accessible at:
/site.json
Relationship to Other Discovery Resources
site.json does not replace the existing discovery mechanisms used by Chaos MVC.It complements them.
A Chaos MVC site may publish:
/sitemap.xml
/ror.xml
/llms.txt
/rss.xml
/site.json
Each serves a different role.
sitemap.xml
Provides established search-engine-oriented URL discovery.
ror.xml
Provides ROR-compatible resource discovery.
llms.txt
Provides a text-oriented map of public site resources.
rss.xml
Provides a feed of published content.
site.json
Provides a schema-defined JSON declaration of the website and its public resources.
Together they allow different consumers to discover the site using formats appropriate to their purpose.
Example
A simplified
site.json might look like this:{
"$schema": "https://schema.stn-labz.com/site/v1/schema.json",
"version": "1.0",
"site": {
"url": "https://example.com",
"name": "Example Site",
"description": "An example Chaos MVC website.",
"language": "en"
},
"resources": [
{
"url": "https://example.com/about",
"type": "page",
"title": "About",
"description": "Information about Example Site.",
"language": "en",
"index": true
},
{
"url": "https://example.com/posts/example-post",
"type": "article",
"title": "Example Post",
"description": "An example published article.",
"language": "en",
"index": true,
"published": "2026-09-15",
"modified": "2026-09-15"
},
{
"url": "https://example.com/rss.xml",
"type": "feed",
"title": "RSS Feed",
"description": "Published content feed.",
"language": "en",
"index": true
}
]
}
Design Principles
The Site Resource Declaration is built around several simple principles.
Machine Readable
The declaration uses JSON so automated consumers can parse the document directly.
Schema Defined
The structure is governed by a published JSON Schema rather than undocumented conventions.
Explicit
Resource properties are declared rather than requiring consumers to infer basic site semantics.
Deterministic
Generators should derive output from authoritative inputs using stable rules.
Non-Speculative
Unknown semantics should remain unknown rather than being guessed.
Fail Closed
An invalid candidate must not replace a known-good declaration.
Extensible Through Versioning
The schema identifies its version explicitly:
{
"version": "1.0"
}
Future changes can therefore be introduced through defined schema versions rather than silently changing the meaning of an existing format.
Current Chaos MVC Support
Chaos MVC currently supports generation of Site Resource Schema version:
1.0
using:
https://schema.stn-labz.com/site/v1/schema.json
The generated declaration is published at:
/public/site.json
and publicly available as:
/site.json
The implementation has been functionally tested with a generated declaration containing public Core resources, user modules, Pages, Posts, and RSS resources.
Summary
site.json gives a website a structured way to say:This is the site, and these are the public resources it provides.
For Chaos MVC, the declaration is not maintained manually as another independent index.
It is derived from the site's existing authorities.
The process is:
Discover → Generate → Validate → Publish
The STN-LABZ Site Resource Schema defines what a valid declaration is.
Chaos MVC determines what public resources actually exist.
Remote schema validation determines whether the resulting declaration is structurally valid.
Only then does the generated
site.json become public.