[{"data":1,"prerenderedAt":570},["ShallowReactive",2],{"navigation_docs":3,"-changelog":194,"-changelog-surround":567},[4,22,82,124,146,168,190],{"title":5,"path":6,"stem":7,"children":8},"Getting started","/getting-started","1.getting-started/0.index",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"MCP quickstart","/getting-started/mcp-quickstart","1.getting-started/1.mcp-quickstart",{"title":15,"path":16,"stem":17},"REST quickstart","/getting-started/rest-quickstart","1.getting-started/2.rest-quickstart",{"title":19,"path":20,"stem":21},"UI quickstart","/getting-started/ui-quickstart","1.getting-started/3.ui-quickstart",{"title":23,"path":24,"stem":25,"children":26},"MCP server","/mcp","2.mcp/0.index",[27,28,32,36,40],{"title":23,"path":24,"stem":25},{"title":29,"path":30,"stem":31},"Connecting","/mcp/connection","2.mcp/1.connection",{"title":33,"path":34,"stem":35},"Envelope","/mcp/envelope","2.mcp/2.envelope",{"title":37,"path":38,"stem":39},"Resources","/mcp/resources","2.mcp/3.resources",{"title":41,"path":42,"stem":43,"children":44},"Tools","/mcp/tools","2.mcp/4.tools/0.index",[45,46,50,54,58,62,66,70,74,78],{"title":41,"path":42,"stem":43},{"title":47,"path":48,"stem":49},"list_schema_versions","/mcp/tools/list-schema-versions","2.mcp/4.tools/1.list-schema-versions",{"title":51,"path":52,"stem":53},"get_schema","/mcp/tools/get-schema","2.mcp/4.tools/2.get-schema",{"title":55,"path":56,"stem":57},"list_categories","/mcp/tools/list-categories","2.mcp/4.tools/3.list-categories",{"title":59,"path":60,"stem":61},"list_elements","/mcp/tools/list-elements","2.mcp/4.tools/4.list-elements",{"title":63,"path":64,"stem":65},"get_element","/mcp/tools/get-element","2.mcp/4.tools/5.get-element",{"title":67,"path":68,"stem":69},"get_elements","/mcp/tools/get-elements","2.mcp/4.tools/6.get-elements",{"title":71,"path":72,"stem":73},"validate_datachain","/mcp/tools/validate-datachain","2.mcp/4.tools/7.validate-datachain",{"title":75,"path":76,"stem":77},"render_datachain","/mcp/tools/render-datachain","2.mcp/4.tools/8.render-datachain",{"title":79,"path":80,"stem":81},"get_icon_url","/mcp/tools/get-icon-url","2.mcp/4.tools/9.get-icon-url",{"title":83,"path":84,"stem":85,"children":86},"REST API (v2)","/rest","3.rest/0.index",[87,88,92,96,100,104,108,112,116,120],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91},"GET /schemas","/rest/schemas","3.rest/1.schemas",{"title":93,"path":94,"stem":95},"GET /schemas/:version/manifest","/rest/manifest","3.rest/2.manifest",{"title":97,"path":98,"stem":99},"GET /schemas/:version/categories","/rest/categories","3.rest/3.categories",{"title":101,"path":102,"stem":103},"GET /schemas/:version/elements","/rest/elements-list","3.rest/4.elements-list",{"title":105,"path":106,"stem":107},"GET /schemas/:version/elements/:element_id","/rest/element-detail","3.rest/5.element-detail",{"title":109,"path":110,"stem":111},"POST /schemas/:version/validate","/rest/validate","3.rest/6.validate",{"title":113,"path":114,"stem":115},"Icon routes","/rest/icons","3.rest/7.icons",{"title":117,"path":118,"stem":119},"Pagination & fields","/rest/pagination-and-fields","3.rest/8.pagination-and-fields",{"title":121,"path":122,"stem":123},"Errors","/rest/errors","3.rest/9.errors",{"title":125,"path":126,"stem":127,"children":128},"Icon composition","/icons","4.icons/0.index",[129,130,134,138,142],{"title":125,"path":126,"stem":127},{"title":131,"path":132,"stem":133},"Shapes","/icons/shapes","4.icons/1.shapes",{"title":135,"path":136,"stem":137},"Symbols","/icons/symbols","4.icons/2.symbols",{"title":139,"path":140,"stem":141},"Composed variants","/icons/composed-variants","4.icons/3.composed-variants",{"title":143,"path":144,"stem":145},"URLs","/icons/urls","4.icons/4.urls",{"title":147,"path":148,"stem":149,"children":150},"@dtpr/ui","/ui","5.ui/0.index",[151,152,156,160,164],{"title":147,"path":148,"stem":149},{"title":153,"path":154,"stem":155},"@dtpr/ui/core","/ui/core","5.ui/1.core",{"title":157,"path":158,"stem":159},"@dtpr/ui/vue","/ui/vue","5.ui/2.vue",{"title":161,"path":162,"stem":163},"@dtpr/ui/html","/ui/html","5.ui/3.html",{"title":165,"path":166,"stem":167},"Theming","/ui/theming","5.ui/4.theming",{"title":169,"path":170,"stem":171,"children":172},"Concepts","/concepts","6.concepts/0.index",[173,174,178,182,186],{"title":169,"path":170,"stem":171},{"title":175,"path":176,"stem":177},"Datachains","/concepts/datachains","6.concepts/1.datachains",{"title":179,"path":180,"stem":181},"Elements & categories","/concepts/elements-categories","6.concepts/2.elements-categories",{"title":183,"path":184,"stem":185},"Versions & releases","/concepts/versions-and-releases","6.concepts/3.versions-and-releases",{"title":187,"path":188,"stem":189},"Content hash","/concepts/content-hash","6.concepts/4.content-hash",{"title":191,"path":192,"stem":193},"Changelog","/changelog","7.changelog",{"id":195,"title":191,"body":196,"description":560,"extension":561,"links":562,"meta":563,"navigation":564,"path":192,"seo":565,"stem":193,"__hash__":566},"docs/7.changelog.md",{"type":197,"value":198,"toc":543},"minimark",[199,203,215,220,225,277,281,297,301,304,357,361,428,432,467,471,510,514,527,531],[200,201,191],"h1",{"id":202},"changelog",[204,205,206,207,214],"p",{},"Most recent first. Grouped by surface. See the ",[208,209,213],"a",{"href":210,"rel":211},"https://github.com/helpful-places/dtpr",[212],"nofollow","repository"," for the full commit history.",[216,217,219],"h2",{"id":218},"_2026-04-18","2026-04-18",[221,222,224],"h3",{"id":223},"icons","Icons",[226,227,228],"ul",{},[229,230,231,235,236,241,242,246,247,250,251,254,255,258,259,258,262,265,266,270,271,258,273,276],"li",{},[232,233,234],"strong",{},"Icon composition pipeline"," (",[208,237,240],{"href":238,"rel":239},"https://github.com/helpful-places/dtpr/pull/270",[212],"#270",")\nShape × symbol × variant composition with ",[243,244,245],"code",{},"default"," / ",[243,248,249],{},"dark"," / context-colored variants and the WCAG ",[243,252,253],{},"innerColor"," rule. Adds pre-baked R2 point-read with on-the-fly fallback.\nNew REST routes: ",[243,256,257],{},"GET /api/v2/shapes/:shape.svg",", ",[243,260,261],{},"GET /api/v2/schemas/:version/symbols/:symbol_id.svg",[243,263,264],{},"GET /api/v2/schemas/:version/elements/:element_id/icon[.\u003Cvariant>].svg",".\nNew MCP tool: ",[208,267,268],{"href":80},[243,269,79],{},".\nReferences: ",[208,272,125],{"href":126},[208,274,275],{"href":114},"REST icon routes",".",[221,278,280],{"id":279},"site","Site",[226,282,283],{},[229,284,285,235,291,296],{},[232,286,287,290],{},[243,288,289],{},"dtpr.ai"," microsite placeholder",[208,292,295],{"href":293,"rel":294},"https://github.com/helpful-places/dtpr/pull/271",[212],"#271",")\nDocus + Nuxt 4 skeleton deployed on Cloudflare Workers with a D1 binding for content queries. Minimal landing; no documentation yet.",[216,298,300],{"id":299},"_2026-04-17","2026-04-17",[221,302,147],{"id":303},"dtprui",[226,305,306],{},[229,307,308,235,314,319,320,322,323,325,326,328,329,332,333,336,337,341,342,345,346,258,349,258,352,258,355,276],{},[232,309,310,311,313],{},"Component library + ",[243,312,75],{}," MCP tool",[208,315,318],{"href":316,"rel":317},"https://github.com/helpful-places/dtpr/pull/267",[212],"#267",")\nThree subpath exports: ",[243,321,153],{}," (10 framework-neutral helpers), ",[243,324,157],{}," (6 Vue 3 SFCs), ",[243,327,161],{}," (SSR via ",[243,330,331],{},"renderDatachainDocument","). Default stylesheet wraps everything in ",[243,334,335],{},"@layer dtpr"," and exposes a full CSS custom-property token set.\nNew MCP tool: ",[208,338,339],{"href":76},[243,340,75],{},". New MCP resource: ",[243,343,344],{},"ui://dtpr/datachain/view.html"," (MCP Apps iframe handoff).\nReferences: ",[208,347,348],{"href":158},"Vue reference",[208,350,351],{"href":154},"Core reference",[208,353,354],{"href":162},"HTML SSR",[208,356,165],{"href":166},[221,358,360],{"id":359},"mcp","MCP",[226,362,363],{},[229,364,365,235,368,373,374,258,377,258,380,258,383,258,386,258,389,258,392,395,396,246,399,402,403,246,406,409,410,258,412,258,414,258,416,258,418,258,420,258,422,270,424,258,426,276],{},[232,366,367],{},"Read path on Cloudflare Workers",[208,369,372],{"href":370,"rel":371},"https://github.com/helpful-places/dtpr/pull/265",[212],"#265",")\nHand-rolled JSON-RPC over HTTP handler (workerd nodejs_compat can't load the SDK's CJS Ajv dep). Supported methods: ",[243,375,376],{},"initialize",[243,378,379],{},"notifications/initialized",[243,381,382],{},"tools/list",[243,384,385],{},"tools/call",[243,387,388],{},"resources/list",[243,390,391],{},"resources/read",[243,393,394],{},"ping",". Shared ",[243,397,398],{},"ok",[243,400,401],{},"err"," envelope with ",[243,404,405],{},"_meta.content_hash",[243,407,408],{},"_meta.version",".\nInitial tools: ",[243,411,47],{},[243,413,51],{},[243,415,55],{},[243,417,59],{},[243,419,63],{},[243,421,67],{},[243,423,71],{},[208,425,29],{"href":30},[208,427,33],{"href":34},[221,429,431],{"id":430},"rest-v2","REST v2",[226,433,434],{},[229,435,436,235,442,445,446,449,450,453,454,457,458,460,461,258,463,258,465,276],{},[232,437,438,441],{},[243,439,440],{},"api.dtpr.io/api/v2"," read path",[208,443,372],{"href":370,"rel":444},[212],")\nPublic, read-only JSON + SVG. Opaque cursor pagination (",[243,447,448],{},"MAX_LIMIT = 200","), field/locale projection, ",[243,451,452],{},"DTPR-Content-Hash"," + ",[243,455,456],{},"Cache-Control"," on version-scoped responses, static CORS allow-list. ",[243,459,109],{}," runs shape + semantic validation and always returns HTTP 200.\nReferences: ",[208,462,431],{"href":84},[208,464,117],{"href":118},[208,466,121],{"href":122},[221,468,470],{"id":469},"api-infrastructure","API infrastructure",[226,472,473,488,499],{},[229,474,475,235,478,483,484,487],{},[232,476,477],{},"Standalone API scaffold + AI content migration",[208,479,482],{"href":480,"rel":481},"https://github.com/helpful-places/dtpr/pull/262",[212],"#262",")\nExtracts DTPR content from the v1 site into a standalone API workspace. Establishes the schema authoring flow and migrates the ",[243,485,486],{},"ai"," datachain type.",[229,489,490,235,493,498],{},[232,491,492],{},"CI: build @dtpr/ui + api/schema before typecheck",[208,494,497],{"href":495,"rel":496},"https://github.com/helpful-places/dtpr/pull/268",[212],"#268",")\nOrders deploy workflows so generated types land before typecheck runs.",[229,500,501,235,504,509],{},[232,502,503],{},"Drafting CLI + preview deploys + Claude Code plugin",[208,505,508],{"href":506,"rel":507},"https://github.com/helpful-places/dtpr/pull/266",[212],"#266",")",[221,511,513],{"id":512},"docsdtprio","docs.dtpr.io",[226,515,516],{},[229,517,518,235,521,526],{},[232,519,520],{},"Nuxt Studio with Google + GitHub OAuth",[208,522,525],{"href":523,"rel":524},"https://github.com/helpful-places/dtpr/pull/269",[212],"#269",")\nEnables in-browser authoring for the existing v1 docs.",[216,528,530],{"id":529},"source-of-truth","Source of truth",[204,532,533,534,538,539,542],{},"Every entry maps to a pull request on ",[208,535,537],{"href":210,"rel":536},[212],"github.com/helpful-places/dtpr",". Commit history on ",[243,540,541],{},"main"," is authoritative if this changelog falls behind.",{"title":544,"searchDepth":545,"depth":545,"links":546},"",2,[547,552,559],{"id":218,"depth":545,"text":219,"children":548},[549,551],{"id":223,"depth":550,"text":224},3,{"id":279,"depth":550,"text":280},{"id":299,"depth":545,"text":300,"children":553},[554,555,556,557,558],{"id":303,"depth":550,"text":147},{"id":359,"depth":550,"text":360},{"id":430,"depth":550,"text":431},{"id":469,"depth":550,"text":470},{"id":512,"depth":550,"text":513},{"id":529,"depth":545,"text":530},"What landed when — MCP, REST v2, icons, @dtpr/ui, and this microsite.","md",null,{},true,{"title":191,"description":560},"ZfP91IOkL9-ev9pCVG-rrV5G8PmB1-0oen-kXd_sqj4",[568,562],{"title":187,"path":188,"stem":189,"description":569,"children":-1},"How agents detect DTPR schema content drift without polling.",1776525921439]