[{"data":1,"prerenderedAt":353},["ShallowReactive",2],{"navigation_docs":3,"-explanation-architecture":148,"-explanation-architecture-surround":350},[4,21,62,108],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":20},"Tutorials","i-lucide-graduation-cap","\u002Ftutorials","1.tutorials",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Your first texture","\u002Ftutorials\u002Ffirst-texture","1.tutorials\u002F1.first-texture","i-lucide-sprout",{"title":16,"path":17,"stem":18,"icon":19},"Grow a crop through its stages","\u002Ftutorials\u002Fgrowth-stages","1.tutorials\u002F2.growth-stages","i-lucide-wheat",false,{"title":22,"icon":23,"path":24,"stem":25,"children":26,"page":20},"How-to guides","i-lucide-wrench","\u002Fhow-to","2.how-to",[27,32,37,42,47,52,57],{"title":28,"path":29,"stem":30,"icon":31},"Install TextureScript","\u002Fhow-to\u002Finstall","2.how-to\u002F1.install","i-lucide-download",{"title":33,"path":34,"stem":35,"icon":36},"Compare a crop with vanilla","\u002Fhow-to\u002Fcompare-with-vanilla","2.how-to\u002F2.compare-with-vanilla","i-lucide-columns-2",{"title":38,"path":39,"stem":40,"icon":41},"Connect an agent","\u002Fhow-to\u002Fconnect-an-agent","2.how-to\u002F3.connect-an-agent","i-lucide-bot",{"title":43,"path":44,"stem":45,"icon":46},"Hand-edit a growth stage","\u002Fhow-to\u002Fhand-edit-a-stage","2.how-to\u002F4.hand-edit-a-stage","i-lucide-pencil",{"title":48,"path":49,"stem":50,"icon":51},"Turn a PNG into a grid","\u002Fhow-to\u002Fimport-a-png","2.how-to\u002F5.import-a-png","i-lucide-file-image",{"title":53,"path":54,"stem":55,"icon":56},"Prove a fix stayed in its region","\u002Fhow-to\u002Fprove-a-fix","2.how-to\u002F6.prove-a-fix","i-lucide-diff",{"title":58,"path":59,"stem":60,"icon":61},"Keep game assets out of git","\u002Fhow-to\u002Fkeep-game-assets-out","2.how-to\u002F7.keep-game-assets-out","i-lucide-shield-check",{"title":63,"icon":64,"path":65,"stem":66,"children":67,"page":20},"Reference","i-lucide-book-open","\u002Freference","3.reference",[68,73,78,83,88,93,98,103],{"title":69,"path":70,"stem":71,"icon":72},"Commands","\u002Freference\u002Fcommands","3.reference\u002F1.commands","i-lucide-terminal",{"title":74,"path":75,"stem":76,"icon":77},"Palette files","\u002Freference\u002Fpalette-files","3.reference\u002F2.palette-files","i-lucide-palette",{"title":79,"path":80,"stem":81,"icon":82},"Grid files","\u002Freference\u002Fgrid-files","3.reference\u002F3.grid-files","i-lucide-grid-3x3",{"title":84,"path":85,"stem":86,"icon":87},"Stages files","\u002Freference\u002Fstages-files","3.reference\u002F4.stages-files","i-lucide-layers",{"title":89,"path":90,"stem":91,"icon":92},"Scene files","\u002Freference\u002Fscene-files","3.reference\u002F5.scene-files","i-lucide-box",{"title":94,"path":95,"stem":96,"icon":97},"Lint rules","\u002Freference\u002Flint-rules","3.reference\u002F6.lint-rules","i-lucide-list-checks",{"title":99,"path":100,"stem":101,"icon":102},"MCP server","\u002Freference\u002Fmcp-server","3.reference\u002F7.mcp-server","i-lucide-plug",{"title":104,"path":105,"stem":106,"icon":107},"Environment","\u002Freference\u002Fenvironment","3.reference\u002F8.environment","i-lucide-settings",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":20},"Explanation","i-lucide-lightbulb","\u002Fexplanation","4.explanation",[114,119,123,128,133,138,143],{"title":115,"path":116,"stem":117,"icon":118},"Textures as text","\u002Fexplanation\u002Ftextures-as-text","4.explanation\u002F1.textures-as-text","i-lucide-type",{"title":120,"path":121,"stem":122,"icon":77},"Colour from two anchors","\u002Fexplanation\u002Fcolour","4.explanation\u002F2.colour",{"title":124,"path":125,"stem":126,"icon":127},"Measured conventions","\u002Fexplanation\u002Fmeasured-conventions","4.explanation\u002F3.measured-conventions","i-lucide-ruler",{"title":129,"path":130,"stem":131,"icon":132},"Growth stages as maps","\u002Fexplanation\u002Fgrowth-stages","4.explanation\u002F4.growth-stages","i-lucide-chart-no-axes-column-increasing",{"title":134,"path":135,"stem":136,"icon":137},"The 3D view","\u002Fexplanation\u002Fthe-3d-view","4.explanation\u002F5.the-3d-view","i-lucide-rotate-3d",{"title":139,"path":140,"stem":141,"icon":142},"No game assets","\u002Fexplanation\u002Fno-game-assets","4.explanation\u002F6.no-game-assets","i-lucide-shield",{"title":144,"path":145,"stem":146,"icon":147},"Architecture","\u002Fexplanation\u002Farchitecture","4.explanation\u002F7.architecture","i-lucide-boxes",{"id":149,"title":144,"body":150,"description":343,"extension":344,"links":345,"meta":346,"navigation":347,"path":145,"seo":348,"stem":146,"__hash__":349},"docs\u002F4.explanation\u002F7.architecture.md",{"type":151,"value":152,"toc":338},"minimark",[153,177,182,271,277,281,295,299,334],[154,155,156,157,164,165,170,171,176],"p",{},"TextureScript is written in TypeScript and runs on ",[158,159,163],"a",{"href":160,"rel":161},"https:\u002F\u002Fbun.sh",[162],"nofollow","Bun",". It uses\n",[158,166,169],{"href":167,"rel":168},"https:\u002F\u002Feffect.website",[162],"Effect"," for its services and command line and\n",[158,172,175],{"href":173,"rel":174},"https:\u002F\u002Fgithub.com\u002Fmisode\u002Fdeepslate",[162],"deepslate"," to draw Minecraft block models.",[178,179,181],"h2",{"id":180},"layers","Layers",[183,184,185,198],"table",{},[186,187,188],"thead",{},[189,190,191,195],"tr",{},[192,193,194],"th",{},"folder",[192,196,197],{},"holds",[199,200,201,213,223,233,251,261],"tbody",{},[189,202,203,210],{},[204,205,206],"td",{},[207,208,209],"code",{},"src\u002Fcore",[204,211,212],{},"parsing, rendering, linting, palettes, stages and scene building; pure and synchronous, so it also runs in the browser",[189,214,215,220],{},[204,216,217],{},[207,218,219],{},"src\u002Fservices",[204,221,222],{},"Effect services for files, the game jar, the live server and the headless browser",[189,224,225,230],{},[204,226,227],{},[207,228,229],{},"src\u002Fcli",[204,231,232],{},"one module per command, and the MCP server",[189,234,235,240],{},[204,236,237],{},[207,238,239],{},"src\u002Fviewer",[204,241,242,243,246,247,250],{},"the 3D page that ",[207,244,245],{},"view"," serves and ",[207,248,249],{},"shoot"," screenshots",[189,252,253,258],{},[204,254,255],{},[207,256,257],{},"src\u002Fguard",[204,259,260],{},"the vanilla check behind the pre-commit hook",[189,262,263,268],{},[204,264,265],{},[207,266,267],{},"skill\u002F",[204,269,270],{},"the authoring skill, shipped inside the binary",[154,272,273,274,276],{},"Keeping ",[207,275,209],{}," pure means the server and the viewer share the same scene code, and most\ntests need no files, game jar or network.",[178,278,280],{"id":279},"the-binary","The binary",[154,282,283,286,287,290,291,294],{},[207,284,285],{},"bun run build"," compiles everything, including the viewer and the skill, into one executable per\nplatform. ",[207,288,289],{},"bun scripts\u002Fbuild.ts --all"," builds every release target; pushing a ",[207,292,293],{},"v*"," tag runs the\nrelease workflow, which tests, builds and publishes them.",[178,296,298],{"id":297},"developing","Developing",[300,301,306],"pre",{"className":302,"code":303,"language":304,"meta":305,"style":305},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun install        # also enables the pre-commit hook in .githooks\u002F\nbun test\nbun run typecheck\nbun src\u002Fcli\u002Fmain.ts --help\n","sh","",[207,307,308,316,322,328],{"__ignoreMap":305},[309,310,313],"span",{"class":311,"line":312},"line",1,[309,314,315],{},"bun install        # also enables the pre-commit hook in .githooks\u002F\n",[309,317,319],{"class":311,"line":318},2,[309,320,321],{},"bun test\n",[309,323,325],{"class":311,"line":324},3,[309,326,327],{},"bun run typecheck\n",[309,329,331],{"class":311,"line":330},4,[309,332,333],{},"bun src\u002Fcli\u002Fmain.ts --help\n",[335,336,337],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":305,"searchDepth":318,"depth":318,"links":339},[340,341,342],{"id":180,"depth":318,"text":181},{"id":279,"depth":318,"text":280},{"id":297,"depth":318,"text":298},"How the source is organised, for contributors.","md",null,{},{"icon":147},{"title":144,"description":343},"P760Ja7u2WkWy8CRS2cPccaonGFSHgZfWT9debDJMzE",[351,345],{"title":139,"path":140,"stem":141,"description":352,"icon":142,"children":-1},"Why the repository holds no Minecraft files, and how the tools keep it that way.",1791722219940]