{
 "$schema": "http://json-schema.org/draft-07/schema#",
 "title": "Kireji Framework Config",
 "description": "Schema for the kireji.json configuration file.",
 "type": "object",
 "properties": {
  "includeColor": {
   "description": "Determines which color mode features will be included in the ecosystem.",
   "oneOf": [
    {
     "const": "none",
     "description": "The color part will never be included."
    },
    {
     "const": "light",
     "description": "Dark mode will never be included."
    },
    {
     "const": "dark",
     "description": "Light mode will never be included."
    },
    {
     "const": "debug-dark",
     "description": "Dark mode will only be included in local builds."
    },
    {
     "const": "debug-light",
     "description": "Light mode will only be included in local builds."
    },
    {
     "const": "full",
     "description": "The full color part will always be included."
    }
   ]
  },
  "includeEra": {
   "description": "Determines which era mode features will be included in the ecosystem.",
   "oneOf": [
    {
     "const": "none",
     "description": "The era part will never be included."
    },
    {
     "const": "vintage",
     "description": "Modern mode will never be included."
    },
    {
     "const": "modern",
     "description": "Vintage mode will never be included."
    },
    {
     "const": "debug-modern",
     "description": "Modern mode will only be included in local builds."
    },
    {
     "const": "debug-vintage",
     "description": "Vintage mode will only be included in local builds."
    },
    {
     "const": "full",
     "description": "The full era part will always be included."
    }
   ]
  },
  "includeMenuItems": {
   "description": "Determines whether a list of apps should be included in the menu.",
   "oneOf": [
    {
     "const": "none",
     "description": "Apps will never appear in the menu."
    },
    {
     "const": "local-only",
     "description": "Apps will only appear in the menu in local builds."
    },
    {
     "const": "full",
     "description": "Apps will always appear in the menu."
    }
   ]
  },
  "includeKirejiApp": {
   "description": "Determines whether or not the Kireji IDE should be included in the ecosystem.",
   "oneOf": [
    {
     "const": "none",
     "description": "kireji.app will never be included."
    },
    {
     "const": "full",
     "description": "kireji.app will only be included in local builds."
    },
    {
     "const": "demo",
     "description": "kireji.app will always be included (used only for Demo Ecosystem)."
    }
   ]
  },
  "includeDesktop": {
   "description": "Determines whether or not the ecosystem should include desktop-like features.",
   "oneOf": [
    {
     "const": "none",
     "description": "The desktop experience will never be included."
    },
    {
     "const": "menu-only",
     "description": "Only the menu will be included, and it will always be included."
    },
    {
     "const": "local-only",
     "description": "The full desktop experience will only be included in local builds."
    },
    {
     "const": "full",
     "description": "The menu will always be included. The desktop experience will only be included in local builds."
    },
    {
     "const": "demo",
     "description": "The full desktop experience will always be included (used only for Demo Ecosystem)."
    }
   ]
  },
  "change": {
   "description": "Represents the severity of the API change for semantic versioning.",
   "oneOf": [
    {
     "const": "major",
     "description": "A breaking change which breaks existing hash assignments."
    },
    {
     "const": "minor",
     "description": "A non-breaking change which adds new hash assignments."
    },
    {
     "const": "patch",
     "description": "A non-breaking change which does not impact hash assignments at all."
    }
   ]
  },
  "verbosity": {
   "description": "A number used to control the detail in logs. Only messages with a priority <= this number will be logged.",
   "type": "string"
  },
  "defaultHost": {
   "description": "The host of the desired default app. The server will redirect to this when testing locally.",
   "type": "string"
  },
  "publicHosts": {
   "description": "The space-separated list of hosts which are reachable publicly by DNS records.",
   "type": "string"
  },
  "port": {
   "description": "The internal port (typically 3000-4000) where the server will be hosted.",
   "type": "string"
  },
  "mapping": {
   "description": "Determines whether or not the artifact should be output with embedded source map data.",
   "enum": [
    "disabled",
    "enabled"
   ]
  },
  "haltHydration": {
   "description": "If enabled, halts the hydration of the client completely. Useful for debugging FOUC.",
   "enum": [
    "disabled",
    "enabled"
   ]
  },
  "includeWarning": {
   "description": "If enabled, a warning line appears at the top of the client at all times regarding alpha status.",
   "enum": [
    "disabled",
    "enabled"
   ]
  },
  "resetLocalState": {
   "description": "If enabled, the client will reset to their landing hash whenever the service worker is replaced.",
   "enum": [
    "disabled",
    "enabled"
   ]
  },
  "hangHydration": {
   "description": "A string representing how long the main thread should hang to simulate loading. Useful for debugging FOUC.",
   "type": "string"
  },
  "gitHubRepo": {
   "description": "The URL to a git repository where the project can be explored. Used by the built-in framework apps for creating external links.",
   "type": "string"
  }
 },
 "required": [],
 "additionalProperties": false
}