Skip to main content

Blueprint System

The blueprint system is the heart of Radish.

Blueprints provide a structured way to describe an application before implementation details are chosen. They are designed to be both human-readable and machine-compilable.

What a Blueprint Describes​

A blueprint describes application intent in a form that can be compiled into architecture.

Common concepts include:

  • entities
  • fields
  • relationships
  • ownership
  • roles and permissions
  • indexes
  • versioning behavior
  • metadata and exposure rules

Example:

{
"version": 1,
"entities": {
"Concept": {
"fields": {
"title": {
"type": "string",
"required": true
},
"authorId": {
"type": "objectId",
"ref": "User"
}
}
}
}
}

Blueprint Principles​

Blueprints should be:

  • explicit
  • structured
  • versionable
  • portable
  • independent of unnecessary framework-specific details

Blueprint Files​

A Radish project uses four blueprint files:

BlueprintPurpose
app.jsonApp metadata, audience, workflows, features, style
types.jsonEntity definitions — fields, types, indexes, relationships
roles.jsonRoles and permission assignments
ui.jsonRoutes, pages, content blocks, layouts, components, access control

The ui.json blueprint drives the UI layer generator (src/generators/ui-layer/), producing pages, layouts, and components as defined in the blueprint.

Blueprint Versioning​

Blueprints should include a spec version:

{
"version": 1
}

This is separate from package versions or generator versions.

For a comprehensive reference on blueprint authoring — field types, entity options, relationships, and examples — see the Blueprint Reference.