[{"data":1,"prerenderedAt":1322},["ShallowReactive",2],{"navigation_docs":3,"-docs-cli-migrations":493,"-docs-cli-migrations-surround":1317},[4,46,135,218,257,292,355,377,420],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":45},"Getting Started","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"What is Heximon?","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F01.getting-started\u002F02.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002F01.getting-started\u002F03.quick-start","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Core Concepts","\u002Fdocs\u002Fgetting-started\u002Fcore-concepts","docs\u002F01.getting-started\u002F04.core-concepts","i-lucide-shapes",{"title":31,"path":32,"stem":33,"icon":34},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F01.getting-started\u002F05.examples","i-lucide-library",{"title":36,"path":37,"stem":38,"icon":39},"Where Next?","\u002Fdocs\u002Fgetting-started\u002Fwhere-next","docs\u002F01.getting-started\u002F06.where-next","i-lucide-signpost",{"title":41,"path":42,"stem":43,"icon":44},"Troubleshooting","\u002Fdocs\u002Fgetting-started\u002Ftroubleshooting","docs\u002F01.getting-started\u002F07.troubleshooting","i-lucide-life-buoy",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Essentials","i-lucide-boxes","\u002Fdocs\u002Fessentials","docs\u002F02.essentials",[52,56,61,66,71,76,81,86,91,96,101,105,110,115,120,125,130],{"title":53,"path":54,"stem":55,"icon":48},"Modules & DI","\u002Fdocs\u002Fessentials\u002Fmodules-and-di","docs\u002F02.essentials\u002F01.modules-and-di",{"title":57,"path":58,"stem":59,"icon":60},"Controllers","\u002Fdocs\u002Fessentials\u002Fcontrollers","docs\u002F02.essentials\u002F02.controllers","i-lucide-route",{"title":62,"path":63,"stem":64,"icon":65},"Validation & DTOs","\u002Fdocs\u002Fessentials\u002Fvalidation","docs\u002F02.essentials\u002F03.validation","i-lucide-shield-check",{"title":67,"path":68,"stem":69,"icon":70},"Contracts","\u002Fdocs\u002Fessentials\u002Fcontracts","docs\u002F02.essentials\u002F04.contracts","i-lucide-file-signature",{"title":72,"path":73,"stem":74,"icon":75},"REST Client","\u002Fdocs\u002Fessentials\u002Fclient","docs\u002F02.essentials\u002F05.client","i-lucide-plug",{"title":77,"path":78,"stem":79,"icon":80},"Database","\u002Fdocs\u002Fessentials\u002Fdatabase","docs\u002F02.essentials\u002F06.database","i-lucide-database",{"title":82,"path":83,"stem":84,"icon":85},"Drizzle ORM","\u002Fdocs\u002Fessentials\u002Fdrizzle","docs\u002F02.essentials\u002F07.drizzle","i-lucide-database-zap",{"title":87,"path":88,"stem":89,"icon":90},"Persistence & Transactions","\u002Fdocs\u002Fessentials\u002Fpersistence","docs\u002F02.essentials\u002F08.persistence","i-lucide-database-backup",{"title":92,"path":93,"stem":94,"icon":95},"Migrations","\u002Fdocs\u002Fessentials\u002Fmigrations","docs\u002F02.essentials\u002F09.migrations","i-lucide-git-branch",{"title":97,"path":98,"stem":99,"icon":100},"Authentication","\u002Fdocs\u002Fessentials\u002Fauthentication","docs\u002F02.essentials\u002F10.authentication","i-lucide-key-round",{"title":102,"path":103,"stem":104,"icon":65},"Permissions & scopes","\u002Fdocs\u002Fessentials\u002Fpermissions","docs\u002F02.essentials\u002F11.permissions",{"title":106,"path":107,"stem":108,"icon":109},"Error Handling","\u002Fdocs\u002Fessentials\u002Ferrors","docs\u002F02.essentials\u002F12.errors","i-lucide-triangle-alert",{"title":111,"path":112,"stem":113,"icon":114},"Testing a Heximon App","\u002Fdocs\u002Fessentials\u002Ftesting","docs\u002F02.essentials\u002F13.testing","i-lucide-flask-conical",{"title":116,"path":117,"stem":118,"icon":119},"Test app harness","\u002Fdocs\u002Fessentials\u002Fcreatetestapp","docs\u002F02.essentials\u002F14.createtestapp","i-lucide-test-tube",{"title":121,"path":122,"stem":123,"icon":124},"Logging & Observability","\u002Fdocs\u002Fessentials\u002Flogging","docs\u002F02.essentials\u002F17.logging","i-lucide-scroll-text",{"title":126,"path":127,"stem":128,"icon":129},"Context & Lifecycle","\u002Fdocs\u002Fessentials\u002Fcontext-and-lifecycle","docs\u002F02.essentials\u002F18.context-and-lifecycle","i-lucide-radio",{"title":131,"path":132,"stem":133,"icon":134},"Project Structure","\u002Fdocs\u002Fessentials\u002Fproject-structure","docs\u002F02.essentials\u002F19.project-structure","i-lucide-folder-tree",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":45},"Capabilities","i-lucide-sparkles","\u002Fdocs\u002Fcapabilities","docs\u002F03.capabilities",[141,145,150,155,160,164,169,174,179,184,188,193,198,203,208,213],{"title":142,"path":143,"stem":144,"icon":137},"Overview","\u002Fdocs\u002Fcapabilities\u002Foverview","docs\u002F03.capabilities\u002F01.overview",{"title":146,"path":147,"stem":148,"icon":149},"Events","\u002Fdocs\u002Fcapabilities\u002Fevents","docs\u002F03.capabilities\u002F02.events","i-lucide-radio-tower",{"title":151,"path":152,"stem":153,"icon":154},"Queue","\u002Fdocs\u002Fcapabilities\u002Fbackground-jobs","docs\u002F03.capabilities\u002F03.background-jobs","i-lucide-list-ordered",{"title":156,"path":157,"stem":158,"icon":159},"Scheduled Work","\u002Fdocs\u002Fcapabilities\u002Fscheduled-jobs","docs\u002F03.capabilities\u002F04.scheduled-jobs","i-lucide-clock",{"title":161,"path":162,"stem":163,"icon":85},"Caching","\u002Fdocs\u002Fcapabilities\u002Fcaching","docs\u002F03.capabilities\u002F05.caching",{"title":165,"path":166,"stem":167,"icon":168},"Key\u002FValue Storage","\u002Fdocs\u002Fcapabilities\u002Fkey-value","docs\u002F03.capabilities\u002F06.key-value","i-lucide-hard-drive",{"title":170,"path":171,"stem":172,"icon":173},"Blob Storage","\u002Fdocs\u002Fcapabilities\u002Fblob","docs\u002F03.capabilities\u002F07.blob","i-lucide-folder-open",{"title":175,"path":176,"stem":177,"icon":178},"Health & Readiness","\u002Fdocs\u002Fcapabilities\u002Fhealth","docs\u002F03.capabilities\u002F08.health","i-lucide-heart-pulse",{"title":180,"path":181,"stem":182,"icon":183},"Notifications","\u002Fdocs\u002Fcapabilities\u002Fnotifications","docs\u002F03.capabilities\u002F09.notifications","i-lucide-mail",{"title":185,"path":186,"stem":187,"icon":65},"Idempotency","\u002Fdocs\u002Fcapabilities\u002Fidempotency","docs\u002F03.capabilities\u002F10.idempotency",{"title":189,"path":190,"stem":191,"icon":192},"Security Hardening","\u002Fdocs\u002Fcapabilities\u002Fsecurity","docs\u002F03.capabilities\u002F11.security","i-lucide-shield",{"title":194,"path":195,"stem":196,"icon":197},"Observability & Tracing","\u002Fdocs\u002Fcapabilities\u002Fobservability","docs\u002F03.capabilities\u002F12.observability","i-lucide-activity",{"title":199,"path":200,"stem":201,"icon":202},"OpenAPI","\u002Fdocs\u002Fcapabilities\u002Fopenapi","docs\u002F03.capabilities\u002F13.openapi","i-lucide-book-marked",{"title":204,"path":205,"stem":206,"icon":207},"MCP Server","\u002Fdocs\u002Fcapabilities\u002Fmcp","docs\u002F03.capabilities\u002F14.mcp","i-lucide-bot",{"title":209,"path":210,"stem":211,"icon":212},"Schema DTOs","\u002Fdocs\u002Fcapabilities\u002Fschema","docs\u002F03.capabilities\u002F15.schema","i-lucide-file-json",{"title":214,"path":215,"stem":216,"icon":217},"Branded IDs","\u002Fdocs\u002Fcapabilities\u002Fbranded-ids","docs\u002F03.capabilities\u002F16.branded-ids","i-lucide-tag",{"title":219,"icon":220,"path":221,"stem":222,"children":223,"page":45},"Architecture","i-lucide-building","\u002Fdocs\u002Farchitecture","docs\u002F04.architecture",[224,227,232,237,242,247,252],{"title":142,"path":225,"stem":226,"icon":220},"\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F04.architecture\u002F01.overview",{"title":228,"path":229,"stem":230,"icon":231},"Domain-Driven Design","\u002Fdocs\u002Farchitecture\u002Fddd","docs\u002F04.architecture\u002F02.ddd","i-lucide-hexagon",{"title":233,"path":234,"stem":235,"icon":236},"CQRS","\u002Fdocs\u002Farchitecture\u002Fcqrs","docs\u002F04.architecture\u002F03.cqrs","i-lucide-split",{"title":238,"path":239,"stem":240,"icon":241},"Repository Pattern","\u002Fdocs\u002Farchitecture\u002Frepository-pattern","docs\u002F04.architecture\u002F04.repository-pattern","i-lucide-archive",{"title":243,"path":244,"stem":245,"icon":246},"Integration Events","\u002Fdocs\u002Farchitecture\u002Fintegration-events","docs\u002F04.architecture\u002F05.integration-events","i-lucide-send-horizontal",{"title":248,"path":249,"stem":250,"icon":251},"Saga Orchestration","\u002Fdocs\u002Farchitecture\u002Fsagas","docs\u002F04.architecture\u002F06.sagas","i-lucide-hourglass",{"title":253,"path":254,"stem":255,"icon":256},"Durable Workflows","\u002Fdocs\u002Farchitecture\u002Fworkflows","docs\u002F04.architecture\u002F07.workflows","i-lucide-workflow",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":45},"Realtime","i-lucide-cable","\u002Fdocs\u002Frealtime","docs\u002F05.realtime",[263,266,270,274,279,284,288],{"title":142,"path":264,"stem":265,"icon":259},"\u002Fdocs\u002Frealtime\u002Foverview","docs\u002F05.realtime\u002F01.overview",{"title":267,"path":268,"stem":269,"icon":129},"WebSockets","\u002Fdocs\u002Frealtime\u002Fwebsockets","docs\u002F05.realtime\u002F02.websockets",{"title":271,"path":272,"stem":273,"icon":70},"WebSocket Contracts","\u002Fdocs\u002Frealtime\u002Fwebsocket-contracts","docs\u002F05.realtime\u002F03.websocket-contracts",{"title":275,"path":276,"stem":277,"icon":278},"Server-Sent Events","\u002Fdocs\u002Frealtime\u002Fserver-sent-events","docs\u002F05.realtime\u002F04.server-sent-events","i-lucide-rss",{"title":280,"path":281,"stem":282,"icon":283},"Typed Clients","\u002Fdocs\u002Frealtime\u002Ftyped-clients","docs\u002F05.realtime\u002F05.typed-clients","i-lucide-plug-zap",{"title":285,"path":286,"stem":287,"icon":259},"AsyncAPI","\u002Fdocs\u002Frealtime\u002Fasyncapi","docs\u002F05.realtime\u002F06.asyncapi",{"title":289,"path":290,"stem":291,"icon":80},"Durable Objects","\u002Fdocs\u002Frealtime\u002Fdurable-objects","docs\u002F05.realtime\u002F07.durable-objects",{"title":293,"icon":294,"path":295,"stem":296,"children":297,"page":45},"Deploy","i-lucide-cloud-upload","\u002Fdocs\u002Fdeploy","docs\u002F06.deploy",[298,301,306,311,316,321,326,331,336,341,345,350],{"title":142,"path":299,"stem":300,"icon":6},"\u002Fdocs\u002Fdeploy\u002Foverview","docs\u002F06.deploy\u002F01.overview",{"title":302,"path":303,"stem":304,"icon":305},"Node","\u002Fdocs\u002Fdeploy\u002Fnode","docs\u002F06.deploy\u002F02.node","la:node-js",{"title":307,"path":308,"stem":309,"icon":310},"Cloudflare","\u002Fdocs\u002Fdeploy\u002Fcloudflare","docs\u002F06.deploy\u002F03.cloudflare","simple-icons:cloudflare",{"title":312,"path":313,"stem":314,"icon":315},"Vercel","\u002Fdocs\u002Fdeploy\u002Fvercel","docs\u002F06.deploy\u002F04.vercel","ri:vercel-fill",{"title":317,"path":318,"stem":319,"icon":320},"Netlify","\u002Fdocs\u002Fdeploy\u002Fnetlify","docs\u002F06.deploy\u002F05.netlify","i-simple-icons-netlify",{"title":322,"path":323,"stem":324,"icon":325},"AWS Lambda","\u002Fdocs\u002Fdeploy\u002Faws-lambda","docs\u002F06.deploy\u002F06.aws-lambda","hugeicons:aws-lambda",{"title":327,"path":328,"stem":329,"icon":330},"Deno Deploy","\u002Fdocs\u002Fdeploy\u002Fdeno-deploy","docs\u002F06.deploy\u002F07.deno-deploy","simple-icons:denodeploy",{"title":332,"path":333,"stem":334,"icon":335},"Nitro","\u002Fdocs\u002Fdeploy\u002Fnitro","docs\u002F06.deploy\u002F08.nitro","i-unjs-nitro",{"title":337,"path":338,"stem":339,"icon":340},"Nuxt","\u002Fdocs\u002Fdeploy\u002Fnuxt","docs\u002F06.deploy\u002F09.nuxt","i-devicon-nuxt",{"title":342,"path":343,"stem":344,"icon":236},"Mixed-runtime split","\u002Fdocs\u002Fdeploy\u002Fmixed-runtime-split","docs\u002F06.deploy\u002F10.mixed-runtime-split",{"title":346,"path":347,"stem":348,"icon":349},"Hosts","\u002Fdocs\u002Fdeploy\u002Fhosts","docs\u002F06.deploy\u002F11.hosts","i-lucide-map",{"title":351,"path":352,"stem":353,"icon":354},"Cross-service events","\u002Fdocs\u002Fdeploy\u002Fcross-service-events","docs\u002F06.deploy\u002F12.cross-service-events","i-lucide-network",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":45},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F07.cli",[361,365,369,373],{"title":362,"path":363,"stem":364,"icon":357},"The heximon CLI","\u002Fdocs\u002Fcli\u002Foverview","docs\u002F07.cli\u002F01.overview",{"title":366,"path":367,"stem":368,"icon":137},"Create a New App","\u002Fdocs\u002Fcli\u002Fcreate","docs\u002F07.cli\u002F02.create",{"title":370,"path":371,"stem":372,"icon":95},"Migrations from the CLI","\u002Fdocs\u002Fcli\u002Fmigrations","docs\u002F07.cli\u002F03.migrations",{"title":374,"path":375,"stem":376,"icon":6},"Deploying a Heximon app","\u002Fdocs\u002Fcli\u002Fdeploy","docs\u002F07.cli\u002F04.deploy",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":45},"Under the Hood","i-lucide-wrench","\u002Fdocs\u002Funder-the-hood","docs\u002F08.under-the-hood",[383,388,393,397,402,407,411,415],{"title":384,"path":385,"stem":386,"icon":387},"How the Compiler Works","\u002Fdocs\u002Funder-the-hood\u002Fhow-the-compiler-works","docs\u002F08.under-the-hood\u002F01.how-the-compiler-works","i-lucide-cog",{"title":389,"path":390,"stem":391,"icon":392},"Compiler","\u002Fdocs\u002Funder-the-hood\u002Fextending-the-compiler","docs\u002F08.under-the-hood\u002F02.extending-the-compiler","i-lucide-cpu",{"title":394,"path":395,"stem":396,"icon":357},"Compiler Diagnostics","\u002Fdocs\u002Funder-the-hood\u002Fcompiler-diagnostics","docs\u002F08.under-the-hood\u002F03.compiler-diagnostics",{"title":398,"path":399,"stem":400,"icon":401},"Library Mode","\u002Fdocs\u002Funder-the-hood\u002Flibrary-mode","docs\u002F08.under-the-hood\u002F04.library-mode","i-lucide-package",{"title":403,"path":404,"stem":405,"icon":406},"Other bundlers","\u002Fdocs\u002Funder-the-hood\u002Falternate-bundlers","docs\u002F08.under-the-hood\u002F05.alternate-bundlers","i-lucide-blocks",{"title":408,"path":409,"stem":410,"icon":401},"Packages","\u002Fdocs\u002Funder-the-hood\u002Fpackages","docs\u002F08.under-the-hood\u002F06.packages",{"title":412,"path":413,"stem":414,"icon":207},"AI Skills","\u002Fdocs\u002Funder-the-hood\u002Fai-and-agents","docs\u002F08.under-the-hood\u002F07.ai-and-agents",{"title":416,"path":417,"stem":418,"icon":419},"Advanced DI","\u002Fdocs\u002Funder-the-hood\u002Fadvanced-di","docs\u002F08.under-the-hood\u002F08.advanced-di","i-lucide-git-fork",{"title":421,"icon":422,"path":423,"stem":424,"children":425,"page":45},"Recipes","i-lucide-book-open-check","\u002Fdocs\u002Frecipes","docs\u002F09.recipes",[426,431,436,440,444,448,452,456,460,465,469,474,479,484,488],{"title":427,"path":428,"stem":429,"icon":430},"Send an Email","\u002Fdocs\u002Frecipes\u002Fsend-an-email","docs\u002F09.recipes\u002F01.send-an-email","i-lucide-send",{"title":432,"path":433,"stem":434,"icon":435},"Upload a File","\u002Fdocs\u002Frecipes\u002Fupload-a-file","docs\u002F09.recipes\u002F02.upload-a-file","i-lucide-upload",{"title":437,"path":438,"stem":439,"icon":24},"Cache an Expensive Call","\u002Fdocs\u002Frecipes\u002Fcache-an-expensive-call","docs\u002F09.recipes\u002F03.cache-an-expensive-call",{"title":441,"path":442,"stem":443,"icon":154},"Paginate a List","\u002Fdocs\u002Frecipes\u002Fpaginate-a-list","docs\u002F09.recipes\u002F04.paginate-a-list",{"title":445,"path":446,"stem":447,"icon":65},"Protect Admin Routes","\u002Fdocs\u002Frecipes\u002Fprotect-admin-routes","docs\u002F09.recipes\u002F05.protect-admin-routes",{"title":449,"path":450,"stem":451,"icon":178},"Health Probes and a Nightly Job","\u002Fdocs\u002Frecipes\u002Fhealth-probes-and-a-nightly-job","docs\u002F09.recipes\u002F06.health-probes-and-a-nightly-job",{"title":453,"path":454,"stem":455,"icon":80},"Build a CRUD API","\u002Fdocs\u002Frecipes\u002Fcrud-api","docs\u002F09.recipes\u002F07.crud-api",{"title":457,"path":458,"stem":459,"icon":100},"Add Authentication","\u002Fdocs\u002Frecipes\u002Fadd-authentication","docs\u002F09.recipes\u002F08.add-authentication",{"title":461,"path":462,"stem":463,"icon":464},"Background Jobs","\u002Fdocs\u002Frecipes\u002Fbackground-jobs","docs\u002F09.recipes\u002F09.background-jobs","i-lucide-timer",{"title":466,"path":467,"stem":468,"icon":149},"Decouple Features with Events","\u002Fdocs\u002Frecipes\u002Fevent-driven-module","docs\u002F09.recipes\u002F10.event-driven-module",{"title":470,"path":471,"stem":472,"icon":473},"Build a DDD Aggregate","\u002Fdocs\u002Frecipes\u002Fddd-aggregate","docs\u002F09.recipes\u002F11.ddd-aggregate","i-lucide-box",{"title":475,"path":476,"stem":477,"icon":478},"Publish a Feature Package","\u002Fdocs\u002Frecipes\u002Ffeature-package","docs\u002F09.recipes\u002F12.feature-package","i-lucide-package-open",{"title":480,"path":481,"stem":482,"icon":483},"Reliable Integration Events","\u002Fdocs\u002Frecipes\u002Freliable-integration-events","docs\u002F09.recipes\u002F13.reliable-integration-events","i-lucide-inbox",{"title":485,"path":486,"stem":487,"icon":95},"Reactive Choreography","\u002Fdocs\u002Frecipes\u002Freactive-choreography","docs\u002F09.recipes\u002F14.reactive-choreography",{"title":489,"path":490,"stem":491,"icon":492},"Build a Production CRUD API","\u002Fdocs\u002Frecipes\u002Fproduction-crud-api","docs\u002F09.recipes\u002F15.production-crud-api","i-lucide-layers",{"id":494,"title":370,"body":495,"description":1310,"extension":1311,"links":1312,"meta":1313,"navigation":1314,"path":371,"seo":1315,"stem":372,"__hash__":1316},"docs\u002Fdocs\u002F07.cli\u002F03.migrations.md",{"type":496,"value":497,"toc":1302},"minimark",[498,550,591,596,639,897,923,927,934,943,955,959,985,1080,1089,1129,1153,1157,1191,1229,1233,1243,1258,1262,1298],[499,500,501,502,506,507,511,512,515,516,519,520,519,523,519,526,529,530,533,534,537,538,541,542,545,546,549],"p",{},"Your ",[503,504,505],"a",{"href":88},"database config"," is already a valid drizzle-kit ",[508,509,510],"code",{},"Config"," — ",[508,513,514],{},"DrizzleLibSQLConfig"," and\nits pg\u002Fmysql2 twins carry ",[508,517,518],{},"dialect"," \u002F ",[508,521,522],{},"schema",[508,524,525],{},"out",[508,527,528],{},"dbCredentials"," as own fields. ",[508,531,532],{},"heximon migrations","\nturns that fact into a CLI: it finds your config file(s) on disk, loads your ",[508,535,536],{},".env"," cascade, and drives the\nstock ",[508,539,540],{},"drizzle-kit"," binary for you — no ",[508,543,544],{},"drizzle.config.ts"," to hand-write, no ",[508,547,548],{},"--config"," flag to remember.",[551,552,558],"pre",{"className":553,"code":554,"filename":555,"language":556,"meta":557,"style":557},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpx heximon migrations generate\npnpx heximon migrations migrate\n","terminal","bash","",[508,559,560,579],{"__ignoreMap":557},[561,562,565,569,573,576],"span",{"class":563,"line":564},"line",1,[561,566,568],{"class":567},"sBMFI","pnpx",[561,570,572],{"class":571},"sfazB"," heximon",[561,574,575],{"class":571}," migrations",[561,577,578],{"class":571}," generate\n",[561,580,582,584,586,588],{"class":563,"line":581},2,[561,583,568],{"class":567},[561,585,572],{"class":571},[561,587,575],{"class":571},[561,589,590],{"class":571}," migrate\n",[592,593,595],"h2",{"id":594},"how-detection-works","How detection works",[499,597,598,601,602,605,606,609,610,613,614,617,618,621,622,624,625,628,629,613,632,628,635,638],{},[508,599,600],{},"DatabaseConfigDetector"," walks the root ",[508,603,604],{},"drizzle.config.*"," plus every ",[508,607,608],{},"*.config.*"," under ",[508,611,612],{},"src\u002F",",\n",[508,615,616],{},"database\u002F",", and ",[508,619,620],{},"app\u002F",", loads each candidate with jiti, and keeps the ones whose default export duck-types\nas a drizzle-kit config — a ",[508,623,518],{}," field matching a real drizzle-kit dialect (",[508,626,627],{},"sqlite",", ",[508,630,631],{},"postgresql",[508,633,634],{},"mysql",[508,636,637],{},"turso",", …). Your config just needs a default export:",[551,640,645],{"className":641,"code":642,"filename":643,"language":644,"meta":557,"style":557},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export const databaseConfig = new DrizzleLibSQLConfig(schema, relations, {\n  dialect: \"sqlite\",\n  schema: \".\u002Fsrc\u002Fdatabase\u002Fschema.ts\",\n  out: \".\u002Fmigrations\",\n  get url(): string {\n    return Platform.get(\"TURSO_DATABASE_URL\") ?? \"file::memory:?cache=shared\";\n  },\n  get authToken(): string | undefined {\n    return Platform.get(\"TURSO_AUTH_TOKEN\");\n  },\n  busyTimeoutMs: 5000,\n});\n\nexport default databaseConfig;\n","src\u002Fdatabase\u002Fdatabase.config.ts","ts",[508,646,647,686,705,722,739,756,797,803,823,848,853,867,877,884],{"__ignoreMap":557},[561,648,649,653,657,661,665,668,672,675,678,681,683],{"class":563,"line":564},[561,650,652],{"class":651},"s7zQu","export",[561,654,656],{"class":655},"spNyl"," const",[561,658,660],{"class":659},"sTEyZ"," databaseConfig ",[561,662,664],{"class":663},"sMK4o","=",[561,666,667],{"class":663}," new",[561,669,671],{"class":670},"s2Zo4"," DrizzleLibSQLConfig",[561,673,674],{"class":659},"(schema",[561,676,677],{"class":663},",",[561,679,680],{"class":659}," relations",[561,682,677],{"class":663},[561,684,685],{"class":663}," {\n",[561,687,688,692,695,698,700,703],{"class":563,"line":581},[561,689,691],{"class":690},"swJcz","  dialect",[561,693,694],{"class":663},":",[561,696,697],{"class":663}," \"",[561,699,627],{"class":571},[561,701,702],{"class":663},"\"",[561,704,613],{"class":663},[561,706,708,711,713,715,718,720],{"class":563,"line":707},3,[561,709,710],{"class":690},"  schema",[561,712,694],{"class":663},[561,714,697],{"class":663},[561,716,717],{"class":571},".\u002Fsrc\u002Fdatabase\u002Fschema.ts",[561,719,702],{"class":663},[561,721,613],{"class":663},[561,723,725,728,730,732,735,737],{"class":563,"line":724},4,[561,726,727],{"class":690},"  out",[561,729,694],{"class":663},[561,731,697],{"class":663},[561,733,734],{"class":571},".\u002Fmigrations",[561,736,702],{"class":663},[561,738,613],{"class":663},[561,740,742,745,748,751,754],{"class":563,"line":741},5,[561,743,744],{"class":655},"  get",[561,746,747],{"class":690}," url",[561,749,750],{"class":663},"():",[561,752,753],{"class":567}," string",[561,755,685],{"class":663},[561,757,759,762,765,768,771,774,776,779,781,784,787,789,792,794],{"class":563,"line":758},6,[561,760,761],{"class":651},"    return",[561,763,764],{"class":659}," Platform",[561,766,767],{"class":663},".",[561,769,770],{"class":670},"get",[561,772,773],{"class":690},"(",[561,775,702],{"class":663},[561,777,778],{"class":571},"TURSO_DATABASE_URL",[561,780,702],{"class":663},[561,782,783],{"class":690},") ",[561,785,786],{"class":663},"??",[561,788,697],{"class":663},[561,790,791],{"class":571},"file::memory:?cache=shared",[561,793,702],{"class":663},[561,795,796],{"class":663},";\n",[561,798,800],{"class":563,"line":799},7,[561,801,802],{"class":663},"  },\n",[561,804,806,808,811,813,815,818,821],{"class":563,"line":805},8,[561,807,744],{"class":655},[561,809,810],{"class":690}," authToken",[561,812,750],{"class":663},[561,814,753],{"class":567},[561,816,817],{"class":663}," |",[561,819,820],{"class":567}," undefined",[561,822,685],{"class":663},[561,824,826,828,830,832,834,836,838,841,843,846],{"class":563,"line":825},9,[561,827,761],{"class":651},[561,829,764],{"class":659},[561,831,767],{"class":663},[561,833,770],{"class":670},[561,835,773],{"class":690},[561,837,702],{"class":663},[561,839,840],{"class":571},"TURSO_AUTH_TOKEN",[561,842,702],{"class":663},[561,844,845],{"class":690},")",[561,847,796],{"class":663},[561,849,851],{"class":563,"line":850},10,[561,852,802],{"class":663},[561,854,856,859,861,865],{"class":563,"line":855},11,[561,857,858],{"class":690},"  busyTimeoutMs",[561,860,694],{"class":663},[561,862,864],{"class":863},"sbssI"," 5000",[561,866,613],{"class":663},[561,868,870,873,875],{"class":563,"line":869},12,[561,871,872],{"class":663},"}",[561,874,845],{"class":659},[561,876,796],{"class":663},[561,878,880],{"class":563,"line":879},13,[561,881,883],{"emptyLinePlaceholder":882},true,"\n",[561,885,887,889,892,895],{"class":563,"line":886},14,[561,888,652],{"class":651},[561,890,891],{"class":651}," default",[561,893,894],{"class":659}," databaseConfig",[561,896,796],{"class":663},[499,898,899,900,903,904,907,908,911,912,915,916,919,920,767],{},"The loaded ",[508,901,902],{},"driver"," also self-describes how a database applies, so ",[508,905,906],{},"migrate"," never needs you to name the\ndialect: a ",[508,909,910],{},"d1-http"," driver applies through ",[508,913,914],{},"wrangler d1 migrations apply",", not drizzle-kit; a\n",[508,917,918],{},"durable-sqlite"," driver bundles its migration in-DO with no CLI apply step at all; anything else runs\nthrough plain ",[508,921,922],{},"drizzle-kit migrate",[592,924,926],{"id":925},"pick-which-database","Pick which database",[499,928,929,930,933],{},"An app with one detected config just runs against it. An app with several — a flagship monorepo with a\nPostgres orders database and a separate analytics database — prompts a ",[508,931,932],{},"select"," menu in an interactive\nterminal:",[551,935,941],{"className":936,"code":938,"filename":939,"language":940,"meta":557},[937],"language-text","? Which database? ›\n❯ All databases\n  orders.config.ts\n  analytics.config.ts\n","heximon migrations migrate","text",[508,942,938],{"__ignoreMap":557},[499,944,945,946,950,951,954],{},"In a non-interactive shell (CI) that same run defaults to ",[947,948,949],"strong",{},"all"," detected configs rather than hanging on a\nprompt with no TTY to answer it. Pass ",[508,952,953],{},"--config \u003Cpath>"," to target one file directly, bypassing detection\nentirely — the command still loads and duck-types it, so an unusual location or filename works too.",[592,956,958],{"id":957},"commands","Commands",[499,960,961,962,965,966,969,970,973,974,977,978,981,982,984],{},"Every subcommand takes ",[508,963,964],{},"--cwd"," (project root), ",[508,967,968],{},"--env"," (the ",[508,971,972],{},".env.\u003Cmode>"," overlay to load — default\n",[508,975,976],{},"development","), ",[508,979,980],{},"--env-file"," (an explicit dotenv file layered over the cascade), and ",[508,983,548],{}," (target one\nfile, skip detection).",[986,987,988,1005],"table",{},[989,990,991],"thead",{},[992,993,994,999,1002],"tr",{},[995,996,998],"th",{"align":997},"left","Subcommand",[995,1000,1001],{"align":997},"Runs",[995,1003,1004],{"align":997},"Notes",[1006,1007,1008,1028,1044,1061],"tbody",{},[992,1009,1010,1016,1021],{},[1011,1012,1013],"td",{"align":997},[508,1014,1015],{},"generate",[1011,1017,1018],{"align":997},[508,1019,1020],{},"drizzle-kit generate",[1011,1022,1023,1024,1027],{"align":997},"Diffs your schema, writes a new migration folder. ",[508,1025,1026],{},"--name"," labels it.",[992,1029,1030,1034,1038],{},[1011,1031,1032],{"align":997},[508,1033,906],{},[1011,1035,1036],{"align":997},[508,1037,922],{},[1011,1039,1040,1041,1043],{"align":997},"Applies pending migrations. Skips (with a message) any config whose ",[508,1042,902],{}," applies outside drizzle-kit.",[992,1045,1046,1051,1054],{},[1011,1047,1048],{"align":997},[508,1049,1050],{},"status",[1011,1052,1053],{"align":997},"—",[1011,1055,1056,1057,1060],{"align":997},"Lists the ",[508,1058,1059],{},".sql"," files already on disk per database — no live query, so it can't tell applied from pending.",[992,1062,1063,1068,1073],{},[1011,1064,1065],{"align":997},[508,1066,1067],{},"push",[1011,1069,1070],{"align":997},[508,1071,1072],{},"drizzle-kit push",[1011,1074,1075,1076,1079],{"align":997},"Pushes the schema straight to the database, no migration files. ",[947,1077,1078],{},"Destructive"," — dev only.",[499,1081,1082,1084,1085,1088],{},[508,1083,1067],{}," is the one command that touches your schema without a reviewable diff, so it refuses to run\nunattended: pass ",[508,1086,1087],{},"--yes"," to confirm non-interactively, or answer the confirmation prompt in a terminal.",[551,1090,1092],{"className":553,"code":1091,"filename":555,"language":556,"meta":557,"style":557},"pnpx heximon migrations generate --name add-users-index\npnpx heximon migrations push --yes   # dev database only\n",[508,1093,1094,1111],{"__ignoreMap":557},[561,1095,1096,1098,1100,1102,1105,1108],{"class":563,"line":564},[561,1097,568],{"class":567},[561,1099,572],{"class":571},[561,1101,575],{"class":571},[561,1103,1104],{"class":571}," generate",[561,1106,1107],{"class":571}," --name",[561,1109,1110],{"class":571}," add-users-index\n",[561,1112,1113,1115,1117,1119,1122,1125],{"class":563,"line":581},[561,1114,568],{"class":567},[561,1116,572],{"class":571},[561,1118,575],{"class":571},[561,1120,1121],{"class":571}," push",[561,1123,1124],{"class":571}," --yes",[561,1126,1128],{"class":1127},"sHwdD","   # dev database only\n",[1130,1131,1133,1138,1139,1141,1142,1148,1149,1152],"callout",{"type":1132},"warning",[947,1134,1135,1137],{},[508,1136,1050],{}," can't tell you what's applied."," It lists the migration files under your ",[508,1140,525],{}," folder, not what\nthe live database has run — that needs a query against the database's own bookkeeping table, which this\nview doesn't make. For that, inject the ",[503,1143,1145],{"href":1144},"\u002Fdocs\u002Fessentials\u002Fmigrations#check-status",[508,1146,1147],{},"MigrationRunner"," and call\n",[508,1150,1151],{},"status()"," from your app instead.",[592,1154,1156],{"id":1155},"env-is-loaded-for-you",".env is loaded for you",[499,1158,1159,1160,1162,1163,1166,1167,1162,1169,1172,1173,1176,1177,1179,1180,1183,1184,1186,1187,1190],{},"Before detecting anything, the command loads the dotenv cascade — ",[508,1161,536],{}," \u003C ",[508,1164,1165],{},".env.local"," \u003C\n",[508,1168,972],{},[508,1170,1171],{},".env.\u003Cmode>.local",", shell wins — into ",[508,1174,1175],{},"process.env",", so the spawned ",[508,1178,540],{}," child\ninherits ",[508,1181,1182],{},"DATABASE_URL"," (or whatever your config's getter reads) without you exporting it by hand. An\nexplicit ",[508,1185,980],{}," layers on top of the cascade rather than replacing it, for a one-off like migrating\nagainst a ",[508,1188,1189],{},".env.production"," snapshot locally.",[551,1192,1194],{"className":553,"code":1193,"filename":555,"language":556,"meta":557,"style":557},"pnpx heximon migrations migrate --env production\npnpx heximon migrations migrate --env-file .env.production\n",[508,1195,1196,1213],{"__ignoreMap":557},[561,1197,1198,1200,1202,1204,1207,1210],{"class":563,"line":564},[561,1199,568],{"class":567},[561,1201,572],{"class":571},[561,1203,575],{"class":571},[561,1205,1206],{"class":571}," migrate",[561,1208,1209],{"class":571}," --env",[561,1211,1212],{"class":571}," production\n",[561,1214,1215,1217,1219,1221,1223,1226],{"class":563,"line":581},[561,1216,568],{"class":567},[561,1218,572],{"class":571},[561,1220,575],{"class":571},[561,1222,1206],{"class":571},[561,1224,1225],{"class":571}," --env-file",[561,1227,1228],{"class":571}," .env.production\n",[592,1230,1232],{"id":1231},"the-same-detector-drives-deploy-time-migrations","The same detector drives deploy-time migrations",[499,1234,1235,1238,1239,1242],{},[508,1236,1237],{},"heximon deploy --migrate"," (see ",[503,1240,374],{"href":1241},"\u002Fdocs\u002Fcli\u002Fdeploy#apply-pending-migrations-with---migrate",")\nreuses this exact detection — every drizzle-kit-mode config becomes a target the deploy applies in one\npass, sequenced around the ship.",[499,1244,1245,1246,1249,1250,1252,1253,1255,1256,767],{},"The one deliberate difference: a ",[947,1247,1248],{},"deploy"," never loads your dev ",[508,1251,536],{}," cascade (a stray dev\n",[508,1254,1182],{}," migrating the wrong database during a production ship would be a bad day), inheriting only\nthe deploy's own environment plus ",[508,1257,980],{},[592,1259,1261],{"id":1260},"see-also","See also",[1263,1264,1265,1275,1284],"ul",{},[1266,1267,1268,1271,1272,1274],"li",{},[503,1269,1270],{"href":93},"Database migrations"," — the unified config, the injectable ",[508,1273,1147],{},", and\napplying migrations on boot.",[1266,1276,1277,1279,1280,1283],{},[503,1278,374],{"href":375}," — the pre-ship migration gate and ",[508,1281,1282],{},"--migrate"," apply step.",[1266,1285,1286,1288,1289,628,1291,613,1294,1297],{},[503,1287,82],{"href":83}," — the per-dialect config classes (",[508,1290,514],{},[508,1292,1293],{},"DrizzlePgConfig",[508,1295,1296],{},"DrizzleMySQL2Config",") this command detects.",[1299,1300,1301],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":557,"searchDepth":581,"depth":581,"links":1303},[1304,1305,1306,1307,1308,1309],{"id":594,"depth":581,"text":595},{"id":925,"depth":581,"text":926},{"id":957,"depth":581,"text":958},{"id":1155,"depth":581,"text":1156},{"id":1231,"depth":581,"text":1232},{"id":1260,"depth":581,"text":1261},"heximon migrations generate\u002Fmigrate\u002Fstatus\u002Fpush — DatabaseConfigDetector auto-detects your DrizzleXConfig files, DotenvCascade loads .env, and DrizzleKitRunner drives .bin-resolved drizzle-kit with no hand-written drizzle.config.ts.","md",null,{},{"icon":95},{"title":370,"description":1310},"IykexEzolBeJ-BVi17WKoCBkiUnIuyajPvK6825k6Kw",[1318,1320],{"title":366,"path":367,"stem":368,"description":1319,"icon":137,"children":-1},"heximon create (and pnpm create heximon) — scaffold a working Heximon app from a starter template in one command, with the template, validator, git, and install steps prompted or flagged.",{"title":374,"path":375,"stem":376,"description":1321,"icon":6,"children":-1},"heximon deploy runs vp build then ships via wrangler deploy, vercel deploy --prebuilt, netlify deploy, or deployctl deploy — with --provision, --create, --migrate, --profile, --verify, and --destroy.",1783300761903]