> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mirurobotics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Config instances

export const PlatformApiLink = ({endpoint, newTab, children}) => {
  const href = `/references/platform-api/2026-08-17/endpoints/${endpoint}`;
  if (newTab) {
    return <a href={href} target="_blank" rel="noopener noreferrer">{children}</a>;
  }
  return <a href={href}>{children}</a>;
};

export const PlatformApiBadge = ({endpoint, label = "Platform API"}) => {
  const href = `/references/platform-api/2026-08-17/endpoints/${endpoint}`;
  return <Tooltip tip="Open the Platform API reference for this operation">
      <a href={href} target="_blank" rel="noopener noreferrer" style={{
    textDecoration: 'none',
    borderBottom: 'none'
  }}>
        <span className="inline-flex items-center gap-1.5 rounded-lg px-2 py-0.5 text-sm text-[rgb(var(--gray-500))] dark:text-[rgb(var(--gray-400))] hover:bg-[rgb(var(--gray-100))] dark:hover:bg-[rgb(var(--gray-800))] hover:text-[rgb(var(--gray-700))] dark:hover:text-[rgb(var(--gray-200))]" style={{
    marginLeft: '-0.5rem'
  }}>
          {label} <Icon icon="arrow-up-right" size={13} color="currentColor" />
        </span>
      </a>
    </Tooltip>;
};

export const Framed = ({image, background, link, alt = "Framed content", borderWidth = "24px", outerRadius = "10px", innerRadius = "6px"}) => {
  const parseShorthand = value => {
    const values = String(value).trim().split(/\s+/);
    switch (values.length) {
      case 1:
        return [values[0], values[0], values[0], values[0]];
      case 2:
        return [values[0], values[1], values[0], values[1]];
      case 3:
        return [values[0], values[1], values[2], values[1]];
      default:
        return values.slice(0, 4);
    }
  };
  const isZero = v => parseFloat(v) === 0;
  const padding = parseShorthand(borderWidth);
  const outer = parseShorthand(outerRadius);
  const cornerMasks = [];
  if (isZero(padding[0]) && isZero(padding[3])) {
    cornerMasks.push(`radial-gradient(circle at 0% 0%, transparent ${outer[0]}, black ${outer[0]})`);
  }
  if (isZero(padding[0]) && isZero(padding[1])) {
    cornerMasks.push(`radial-gradient(circle at 100% 0%, transparent ${outer[1]}, black ${outer[1]})`);
  }
  if (isZero(padding[2]) && isZero(padding[1])) {
    cornerMasks.push(`radial-gradient(circle at 100% 100%, transparent ${outer[2]}, black ${outer[2]})`);
  }
  if (isZero(padding[2]) && isZero(padding[3])) {
    cornerMasks.push(`radial-gradient(circle at 0% 100%, transparent ${outer[3]}, black ${outer[3]})`);
  }
  const backgroundMask = cornerMasks.length > 0 ? cornerMasks.join(", ") : undefined;
  const innerImage = <img src={image} alt={alt} noZoom={link ? true : false} style={{
    display: "block",
    width: "100%",
    margin: 0,
    borderRadius: 0
  }} />;
  return <div style={{
    display: "inline-block",
    position: "relative",
    borderRadius: outerRadius,
    overflow: "hidden"
  }}>
            {}
            {background && <div style={{
    position: "absolute",
    inset: 0,
    backgroundImage: `url(${background})`,
    backgroundSize: "cover",
    maskImage: backgroundMask,
    WebkitMaskImage: backgroundMask,
    maskComposite: "intersect",
    WebkitMaskComposite: "source-in"
  }} />}
            {}
            <div style={{
    position: "relative",
    padding: borderWidth
  }}>
                <div style={{
    borderRadius: innerRadius,
    overflow: "hidden",
    lineHeight: 0
  }}>
                    {link ? <a href={link}>{innerImage}</a> : innerImage}
                </div>
            </div>
        </div>;
};

export const ImmutableBadge = ({size = "sm"}) => {
  return <Tooltip tip="Property cannot be modified">
            <Badge icon="lock" color="gray" size={size}>immutable</Badge>
        </Tooltip>;
};

<Framed background="https://assets.mirurobotics.com/docs/v04/images/config-instances/background.jpeg" image="https://assets.mirurobotics.com/docs/v04/images/config-instances/header:panel.png" borderWidth="28px 56px 0 0" innerRadius="0 8px 0 0" />

A **config instance**, also known as a **config** or an **instance**, is a set of parameters used to modify the behavior of code. Config instances are stored as text files (e.g. JSON, YAML, etc.) which applications parse into a structured format for consumption.

## Properties

<ParamField path="content" type="object">
  <ImmutableBadge />

  The configuration values that are deployed to the device as a file, written in the config schema's instance format.
</ParamField>

<ParamField path="file path" type="string">
  <ImmutableBadge />

  The absolute file system path where the config instance is written on the device.

  Examples: `/srv/miru/configs/v1/motion-control.json`, `/srv/miru/configs/safety.yaml`
</ParamField>

<ParamField path="slot key" type="string">
  <ImmutableBadge />

  The key of the [instance slot](/cfg-mgmt/concepts/schemas/overview#instance-slots) on the config schema that this instance fills.

  Examples: `default`, `left-arm`, `right-arm`
</ParamField>

<ParamField path="config schema" type="Config Schema">
  <ImmutableBadge />

  The [config schema](/cfg-mgmt/concepts/schemas/overview#properties) that the config instance must adhere to.

  Example: `SCH-FmoDN`
</ParamField>

## File formats

The formats a config instance may use are determined by the schema language of its [config schema](/cfg-mgmt/concepts/schemas/overview).

Config schemas support the following file formats:

| Language    | Schema Formats | Instance Formats      |
| ----------- | -------------- | --------------------- |
| JSON Schema | JSON, YAML     | JSON, YAML            |
| CUE         | CUE            | JSON, YAML            |
| Opaque      | JSON, YAML     | JSON, YAML, XML, Text |

Note that a *schema's* format does not need to match the format of the *config instance* it validates. For example, a YAML-formatted JSON Schema can validate a JSON-formatted config instance.

<Note>
  YAML support requires Miru Agent **v0.7.0** or newer
</Note>

## View a config instance

<PlatformApiBadge endpoint="config-instances/get" />

Config instances are viewed from the places they appear—a device's [config editor](/cfg-mgmt/deploy/config-editor), a release's [staging area](/cfg-mgmt/deploy/staging-area#view-a-deployment), or a device's [deployment history](/cfg-mgmt/audit/device-history#view-a-config-instance).

To download a config instance's content as a file, use the <PlatformApiLink endpoint="config-instances/download-content">download config instance content endpoint »</PlatformApiLink>

## Create a config instance

<PlatformApiBadge endpoint="config-instances/create" />

Config instances are created for you whenever configs are deployed from the dashboard, such as when [staging a deployment](/cfg-mgmt/deploy/staging-area#stage-a-deployment) or deploying from a device's [config editor](/cfg-mgmt/deploy/config-editor).
