{
  "title": "MCP Apps Framework Support Matrix",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-26",
  "protocolRevision": "MCP Apps 2026-01-26 / ext-apps SDK v1.7.5 / MCP core 2026-07-28",
  "sourcePackage": "research/9",
  "integrityNote": "The 93 ordinary archive entries verify. Two self-referential bookkeeping entries have disclosed stale final rows; public corrections do not modify the raw archive.",
  "count": 8,
  "records": [
    {
      "Framework": "Vanilla JavaScript",
      "Official example": "Yes",
      "Official helper": "App class optional",
      "Best fit": "Small bundle, maximum control",
      "Risks": "Manual state and DOM management",
      "Sources": "S003 S006",
      "id": "R9-FRAME001",
      "packageSourceIds": [
        "S003",
        "S006"
      ],
      "sourceIds": [
        "S389",
        "S136"
      ]
    },
    {
      "Framework": "React",
      "Official example": "Yes",
      "Official helper": "@modelcontextprotocol/ext-apps/react hooks",
      "Best fit": "Complex component applications and teams already using React",
      "Risks": "Bundle size and rerender discipline",
      "Sources": "S003 S006",
      "id": "R9-FRAME002",
      "packageSourceIds": [
        "S003",
        "S006"
      ],
      "sourceIds": [
        "S389",
        "S136"
      ]
    },
    {
      "Framework": "Vue",
      "Official example": "Yes",
      "Official helper": "Core App API",
      "Best fit": "Component-oriented UI with compact ergonomics",
      "Risks": "Bundle and integration testing",
      "Sources": "S003 S006",
      "id": "R9-FRAME003",
      "packageSourceIds": [
        "S003",
        "S006"
      ],
      "sourceIds": [
        "S389",
        "S136"
      ]
    },
    {
      "Framework": "Svelte",
      "Official example": "Yes",
      "Official helper": "Core App API",
      "Best fit": "Compiled, lightweight interactive Views",
      "Risks": "Host browser compatibility and build pipeline",
      "Sources": "S003 S006",
      "id": "R9-FRAME004",
      "packageSourceIds": [
        "S003",
        "S006"
      ],
      "sourceIds": [
        "S389",
        "S136"
      ]
    },
    {
      "Framework": "Preact",
      "Official example": "Yes",
      "Official helper": "React-like approach",
      "Best fit": "Smaller React-style bundle",
      "Risks": "Library compatibility assumptions",
      "Sources": "S003 S006",
      "id": "R9-FRAME005",
      "packageSourceIds": [
        "S003",
        "S006"
      ],
      "sourceIds": [
        "S389",
        "S136"
      ]
    },
    {
      "Framework": "Solid",
      "Official example": "Yes",
      "Official helper": "Core App API",
      "Best fit": "Fine-grained reactivity",
      "Risks": "Smaller ecosystem and host testing",
      "Sources": "S003 S006",
      "id": "R9-FRAME006",
      "packageSourceIds": [
        "S003",
        "S006"
      ],
      "sourceIds": [
        "S389",
        "S136"
      ]
    },
    {
      "Framework": "Web Components",
      "Official example": "Not specifically required",
      "Official helper": "Core protocol can be used directly",
      "Best fit": "Framework-neutral components",
      "Risks": "Accessibility and styling discipline remain developer-owned",
      "Sources": "S006",
      "id": "R9-FRAME007",
      "packageSourceIds": [
        "S006"
      ],
      "sourceIds": [
        "S136"
      ]
    },
    {
      "Framework": "Any web framework",
      "Official example": "Protocol permits",
      "Official helper": "Implement postMessage JSON-RPC directly",
      "Best fit": "Existing frontend codebases",
      "Risks": "No framework removes security or accessibility duties",
      "Sources": "S006 S008",
      "id": "R9-FRAME008",
      "packageSourceIds": [
        "S006",
        "S008"
      ],
      "sourceIds": [
        "S136",
        "S393"
      ]
    }
  ]
}