Blueprints

wEvery entity in Rely is associated with a blueprint which defines the entity's type. Similarly to entities, every blueprint can be represented as a JSON file which we call blueprint descriptor.

Blueprints in Rely.io are schemas that outline the structure and attributes of entities like services or resources. They provide a customisable framework for documenting and managing your software ecosystem, whereas entities serve as specific instances within this framework.

Blueprint ID

The blueprint ID is a unique identifier that's used throughout Rely.io to declare dependencies to other blueprints or look-up information. The blueprint ID must be globally unique across all blueprints.

An entity ID is usually the very first field in the JSON representation of a Rely.io entity.

Blueprint Descriptor

Regardless of whether you're using UI editing or GitOps to manage your blueprints, the definitions are backed by JSON files that's a fully compliant OpenAPI 3 spec file, with our own specific extensions.

You can still use Rely even if you don't use OpenAPI/Swagger.

We use the OpenAPI spec as a base for entity & blueprint data, since it's an open spec with official support for extensions. That lets us extend it to be an entity or blueprint descriptor spec with optional usage of actual OpenAPI fields.

All blueprints have two other metadata fields besides the blueprint id:

  • Name: A user-friendly display name.

  • Description (Optional): A concise overview of the blueprint for further context.

A blueprint descriptor also contains all relevant data that makes up the entity itself which might envolve:

  • Properties: These indicate the type of data that properties in entities created from this blueprint can hold. Properties have an id, title and description of their own.

  • Relations: These indicate how entities created from this blueprint can be connected with other entities in Rely. Relations have an id, title and description of their own as well as a target blueprint. Relations can be both 1:1 or 1:many.

Example Service Blueprint

{
  "id": "service",
  "title": "Service",
  "description": "Representation of a service ",
  "icon": "terminal",
  "schemaProperties": {
    "type": "object",
    "properties": {
      "handles-pii": {
        "type": "boolean",
        "title": "Handles PII",
        "description": ""
      },
      "unit-tests-coverage": {
        "type": "number",
        "title": "Unit Tests Coverage",
        "description": ""
      },
      "helm-version": {
        "type": "string",
        "title": "Helm Chart Version",
        "description": ""
      },
      "lifecycle": {
        "enum": [
          "Production",
          "Experimental",
          "Deprecated"
        ],
        "type": "string",
        "title": "Lifecycle",
        "description": ""
      },
      "github-url": {
        "type": "string",
        "title": "Repo URL",
        "format": "url",
        "description": ""
      },
      "code-owners": {
        "type": "array",
        "title": "Code Owners",
        "items": {
          "type": "string"
        },
        "description": ""
      },
      "helmchartyaml": {
        "type": "string",
        "title": "Helm Chart",
        "format": "yaml",
        "description": ""
      },
      "readme-content": {
        "type": "string",
        "title": "README ",
        "format": "markdown",
        "description": ""
      }
    }
  },
  "relations": {
    "team": {
      "array": false,
      "title": "Team",
      "value": "team",
      "description": ""
    },
    "internal-dependencies": {
      "array": true,
      "title": "Dependencies",
      "value": "service",
      "description": ""
    },
    "running-instances": {
      "array": true,
      "title": "Running Instances",
      "value": "running-service",
      "description": ""
    }
  },
  "referenceProperties": {},
  "options": {
    "showInSideBar": true
  }
}

Learn More

Last updated