[{"data":1,"prerenderedAt":1617},["ShallowReactive",2],{"navigation_docs_en":3,"-en-reference-dependencies":342,"-en-reference-dependencies-surround":1612},[4,45,61,96,132,166,196,217,241,265],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Getting Started","i-lucide-rocket","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Coming from Laravel","\u002Fen\u002Fgetting-started\u002Fcoming-from-laravel","en\u002F1.getting-started\u002F2.coming-from-laravel","i-lucide-arrow-right-left",{"title":21,"path":22,"stem":23,"icon":19},"Coming from Symfony","\u002Fen\u002Fgetting-started\u002Fcoming-from-symfony","en\u002F1.getting-started\u002F3.coming-from-symfony",{"title":25,"path":26,"stem":27,"icon":28},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F4.installation","i-lucide-download",{"title":30,"path":31,"stem":32,"icon":33},"Your first module","\u002Fen\u002Fgetting-started\u002Ffirst-module","en\u002F1.getting-started\u002F5.first-module","i-lucide-package-plus",{"title":35,"path":36,"stem":37,"icon":38},"Project structure","\u002Fen\u002Fgetting-started\u002Fproject-structure","en\u002F1.getting-started\u002F6.project-structure","i-lucide-folder-tree",{"title":40,"path":41,"stem":42,"icon":43},"The shop sample application","\u002Fen\u002Fgetting-started\u002Fsample-app","en\u002F1.getting-started\u002F7.sample-app","i-lucide-shopping-cart",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Reference","i-lucide-book-open","\u002Fen\u002Freference","en\u002F10.reference",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Configuration","\u002Fen\u002Freference\u002Fconfiguration","en\u002F10.reference\u002F1.configuration","i-lucide-settings",{"title":57,"path":58,"stem":59,"icon":60},"External dependencies","\u002Fen\u002Freference\u002Fdependencies","en\u002F10.reference\u002F2.dependencies","i-lucide-package",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":44},"Concepts","i-lucide-lightbulb","\u002Fen\u002Fconcepts","en\u002F2.concepts",[67,72,77,82,86,91],{"title":68,"path":69,"stem":70,"icon":71},"Architecture","\u002Fen\u002Fconcepts\u002Farchitecture","en\u002F2.concepts\u002F1.architecture","i-lucide-layers",{"title":73,"path":74,"stem":75,"icon":76},"Application lifecycle","\u002Fen\u002Fconcepts\u002Fapplication-lifecycle","en\u002F2.concepts\u002F2.application-lifecycle","i-lucide-power",{"title":78,"path":79,"stem":80,"icon":81},"Error model","\u002Fen\u002Fconcepts\u002Ferror-model","en\u002F2.concepts\u002F3.error-model","i-lucide-shield-alert",{"title":52,"path":83,"stem":84,"icon":85},"\u002Fen\u002Fconcepts\u002Fconfiguration","en\u002F2.concepts\u002F4.configuration","i-lucide-settings-2",{"title":87,"path":88,"stem":89,"icon":90},"Codegen pipeline","\u002Fen\u002Fconcepts\u002Fcodegen-pipeline","en\u002F2.concepts\u002F5.codegen-pipeline","i-lucide-file-json",{"title":92,"path":93,"stem":94,"icon":95},"Design patterns","\u002Fen\u002Fconcepts\u002Fdesign-patterns","en\u002F2.concepts\u002F6.design-patterns","i-lucide-puzzle",{"title":97,"icon":98,"path":99,"stem":100,"children":101,"page":44},"HTTP & Routing","i-lucide-globe","\u002Fen\u002Fhttp","en\u002F3.http",[102,107,112,117,122,127],{"title":103,"path":104,"stem":105,"icon":106},"The server core","\u002Fen\u002Fhttp\u002Fserver","en\u002F3.http\u002F1.server","i-lucide-server",{"title":108,"path":109,"stem":110,"icon":111},"The Fiber engine","\u002Fen\u002Fhttp\u002Ffiber","en\u002F3.http\u002F2.fiber","i-lucide-zap",{"title":113,"path":114,"stem":115,"icon":116},"The chi engine","\u002Fen\u002Fhttp\u002Fchi","en\u002F3.http\u002F3.chi","i-lucide-route",{"title":118,"path":119,"stem":120,"icon":121},"Error responses","\u002Fen\u002Fhttp\u002Ferror-responses","en\u002F3.http\u002F4.error-responses","i-lucide-octagon-alert",{"title":123,"path":124,"stem":125,"icon":126},"Validation","\u002Fen\u002Fhttp\u002Fvalidation","en\u002F3.http\u002F5.validation","i-lucide-badge-check",{"title":128,"path":129,"stem":130,"icon":131},"Pagination","\u002Fen\u002Fhttp\u002Fpagination","en\u002F3.http\u002F6.pagination","i-lucide-list-ordered",{"title":133,"icon":134,"path":135,"stem":136,"children":137,"page":44},"Database","i-lucide-database","\u002Fen\u002Fdatabase","en\u002F4.database",[138,142,147,151,156,161],{"title":139,"path":140,"stem":141,"icon":134},"Overview","\u002Fen\u002Fdatabase\u002Foverview","en\u002F4.database\u002F1.overview",{"title":143,"path":144,"stem":145,"icon":146},"pgx","\u002Fen\u002Fdatabase\u002Fpgx","en\u002F4.database\u002F2.pgx","i-lucide-plug",{"title":148,"path":149,"stem":150,"icon":71},"bun","\u002Fen\u002Fdatabase\u002Fbun","en\u002F4.database\u002F3.bun",{"title":152,"path":153,"stem":154,"icon":155},"Transactions","\u002Fen\u002Fdatabase\u002Ftransactions","en\u002F4.database\u002F4.transactions","i-lucide-git-merge",{"title":157,"path":158,"stem":159,"icon":160},"Migrations","\u002Fen\u002Fdatabase\u002Fmigrations","en\u002F4.database\u002F5.migrations","i-lucide-file-stack",{"title":162,"path":163,"stem":164,"icon":165},"Seeders","\u002Fen\u002Fdatabase\u002Fseeding","en\u002F4.database\u002F6.seeding","i-lucide-sprout",{"title":167,"icon":168,"path":169,"stem":170,"children":171,"page":44},"Async & Background","i-lucide-workflow","\u002Fen\u002Fasync","en\u002F5.async",[172,176,181,186,191],{"title":173,"path":174,"stem":175,"icon":131},"Queue","\u002Fen\u002Fasync\u002Fqueue","en\u002F5.async\u002F1.queue",{"title":177,"path":178,"stem":179,"icon":180},"Events","\u002Fen\u002Fasync\u002Fevents","en\u002F5.async\u002F2.events","i-lucide-radio",{"title":182,"path":183,"stem":184,"icon":185},"Outbox","\u002Fen\u002Fasync\u002Foutbox","en\u002F5.async\u002F3.outbox","i-lucide-inbox",{"title":187,"path":188,"stem":189,"icon":190},"Scheduling","\u002Fen\u002Fasync\u002Fscheduler","en\u002F5.async\u002F4.scheduler","i-lucide-calendar-clock",{"title":192,"path":193,"stem":194,"icon":195},"Worker","\u002Fen\u002Fasync\u002Fworker","en\u002F5.async\u002F5.worker","i-lucide-cog",{"title":197,"icon":198,"path":199,"stem":200,"children":201,"page":44},"Security","i-lucide-shield-check","\u002Fen\u002Fsecurity","en\u002F6.security",[202,207,212],{"title":203,"path":204,"stem":205,"icon":206},"Authentication","\u002Fen\u002Fsecurity\u002Fauthentication","en\u002F6.security\u002F1.authentication","i-lucide-key-round",{"title":208,"path":209,"stem":210,"icon":211},"RBAC","\u002Fen\u002Fsecurity\u002Frbac","en\u002F6.security\u002F2.rbac","i-lucide-users",{"title":213,"path":214,"stem":215,"icon":216},"Policies","\u002Fen\u002Fsecurity\u002Fpolicies","en\u002F6.security\u002F3.policies","i-lucide-gavel",{"title":218,"icon":219,"path":220,"stem":221,"children":222,"page":44},"Observability","i-lucide-activity","\u002Fen\u002Fobservability","en\u002F7.observability",[223,226,231,236],{"title":139,"path":224,"stem":225,"icon":219},"\u002Fen\u002Fobservability\u002Foverview","en\u002F7.observability\u002F1.overview",{"title":227,"path":228,"stem":229,"icon":230},"Logging","\u002Fen\u002Fobservability\u002Flogging","en\u002F7.observability\u002F2.logging","i-lucide-scroll-text",{"title":232,"path":233,"stem":234,"icon":235},"OpenTelemetry","\u002Fen\u002Fobservability\u002Fopentelemetry","en\u002F7.observability\u002F3.opentelemetry","i-lucide-radar",{"title":237,"path":238,"stem":239,"icon":240},"Sentry","\u002Fen\u002Fobservability\u002Fsentry","en\u002F7.observability\u002F4.sentry","i-lucide-bug",{"title":242,"icon":243,"path":244,"stem":245,"children":246,"page":44},"Storage & Mail","i-lucide-hard-drive","\u002Fen\u002Fstorage-mail","en\u002F8.storage-mail",[247,251,256,261],{"title":248,"path":249,"stem":250,"icon":243},"Storage","\u002Fen\u002Fstorage-mail\u002Fstorage","en\u002F8.storage-mail\u002F1.storage",{"title":252,"path":253,"stem":254,"icon":255},"Email","\u002Fen\u002Fstorage-mail\u002Fmail","en\u002F8.storage-mail\u002F2.mail","i-lucide-mail",{"title":257,"path":258,"stem":259,"icon":260},"Notifications","\u002Fen\u002Fstorage-mail\u002Fnotifications","en\u002F8.storage-mail\u002F3.notifications","i-lucide-bell",{"title":262,"path":263,"stem":264,"icon":180},"Realtime","\u002Fen\u002Fstorage-mail\u002Frealtime","en\u002F8.storage-mail\u002F4.realtime",{"title":266,"icon":267,"path":268,"stem":269,"children":270,"page":44},"CLI Reference","i-lucide-terminal","\u002Fen\u002Fcli","en\u002F9.cli",[271,274,279,284,289,294,299,303,308,313,318,323,328,333,337],{"title":139,"path":272,"stem":273,"icon":267},"\u002Fen\u002Fcli\u002Foverview","en\u002F9.cli\u002F1.overview",{"title":275,"path":276,"stem":277,"icon":278},"add db","\u002Fen\u002Fcli\u002Fadd-db","en\u002F9.cli\u002F10.add-db","i-lucide-database-zap",{"title":280,"path":281,"stem":282,"icon":283},"add compose \u002F add docker","\u002Fen\u002Fcli\u002Fadd-compose","en\u002F9.cli\u002F11.add-compose","i-lucide-container",{"title":285,"path":286,"stem":287,"icon":288},"add mail","\u002Fen\u002Fcli\u002Fadd-mail","en\u002F9.cli\u002F12.add-mail","i-lucide-mail-plus",{"title":290,"path":291,"stem":292,"icon":293},"add notification","\u002Fen\u002Fcli\u002Fadd-notification","en\u002F9.cli\u002F13.add-notification","i-lucide-bell-plus",{"title":295,"path":296,"stem":297,"icon":298},"add realtime","\u002Fen\u002Fcli\u002Fadd-realtime","en\u002F9.cli\u002F14.add-realtime","i-lucide-radio-tower",{"title":300,"path":301,"stem":302,"icon":165},"add seeder","\u002Fen\u002Fcli\u002Fadd-seeder","en\u002F9.cli\u002F15.add-seeder",{"title":304,"path":305,"stem":306,"icon":307},"new project","\u002Fen\u002Fcli\u002Fnew-project","en\u002F9.cli\u002F2.new-project","i-lucide-folder-plus",{"title":309,"path":310,"stem":311,"icon":312},"new module","\u002Fen\u002Fcli\u002Fnew-module","en\u002F9.cli\u002F3.new-module","i-lucide-blocks",{"title":314,"path":315,"stem":316,"icon":317},"add surface","\u002Fen\u002Fcli\u002Fadd-surface","en\u002F9.cli\u002F4.add-surface","i-lucide-layers-2",{"title":319,"path":320,"stem":321,"icon":322},"add core","\u002Fen\u002Fcli\u002Fadd-core","en\u002F9.cli\u002F5.add-core","i-lucide-box",{"title":324,"path":325,"stem":326,"icon":327},"add handler","\u002Fen\u002Fcli\u002Fadd-handler","en\u002F9.cli\u002F6.add-handler","i-lucide-webhook",{"title":329,"path":330,"stem":331,"icon":332},"new migration","\u002Fen\u002Fcli\u002Fnew-migration","en\u002F9.cli\u002F7.new-migration","i-lucide-file-plus",{"title":334,"path":335,"stem":336,"icon":195},"worker generators","\u002Fen\u002Fcli\u002Fworker-generators","en\u002F9.cli\u002F8.worker-generators",{"title":338,"path":339,"stem":340,"icon":341},"upgrade templates","\u002Fen\u002Fcli\u002Fupgrade-templates","en\u002F9.cli\u002F9.upgrade-templates","i-lucide-refresh-cw",{"id":343,"title":57,"body":344,"description":1605,"extension":1606,"links":1607,"meta":1608,"navigation":1609,"path":58,"seo":1610,"stem":59,"__hash__":1611},"docs_en\u002Fen\u002F10.reference\u002F2.dependencies.md",{"type":345,"value":346,"toc":1591},"minimark",[347,360,384,389,535,539,651,654,823,826,869,873,974,977,1146,1150,1273,1277,1429,1433,1566,1570],[348,349,350,351,356,357,359],"p",{},"Following the \"",[352,353,355],"a",{"href":354},"\u002Fen\u002Fconcepts\u002Farchitecture#centralize-dont-abstract","centralize, don't abstract","\" principle, the kit doesn't hide the libraries underneath it: their types flow freely through the public API. This page is the full inventory: what the kit uses, at what version, in which package, and where its official documentation lives. For a pattern-level breakdown, see ",[352,358,92],{"href":93},".",[361,362,363,364,368,369,371,372,375,376,379,380,383],"note",{},"Versions reflect the kit's ",[365,366,367],"code",{},"go.mod"," at the time of writing. A generated project's own ",[365,370,367],{}," follows ",[365,373,374],{},"go mod tidy",": ",[365,377,378],{},"mise run upgrade"," (kit side) and ",[365,381,382],{},"go get -u"," (project side) bump them.",[385,386,388],"h2",{"id":387},"http-engines","HTTP engines",[390,391,392,414],"table",{},[393,394,395],"thead",{},[396,397,398,402,405,408,411],"tr",{},[399,400,401],"th",{},"Dependency",[399,403,404],{},"Version",[399,406,407],{},"Role",[399,409,410],{},"Kit package",[399,412,413],{},"Docs",[415,416,417,444,466,491,513],"tbody",{},[396,418,419,428,431,434,441],{},[420,421,422],"td",{},[352,423,427],{"href":424,"rel":425},"https:\u002F\u002Fdocs.gofiber.io\u002F",[426],"nofollow","gofiber\u002Ffiber\u002Fv3",[420,429,430],{},"v3.3.0",[420,432,433],{},"fasthttp-based web framework",[420,435,436],{},[352,437,438],{"href":109},[365,439,440],{},"server\u002Ffiberx",[420,442,443],{},"docs.gofiber.io",[396,445,446,453,456,459,463],{},[420,447,448],{},[352,449,452],{"href":450,"rel":451},"https:\u002F\u002Fgithub.com\u002Fgofiber\u002Fcontrib",[426],"gofiber\u002Fcontrib\u002Fv3\u002Fotel",[420,454,455],{},"v1.2.0",[420,457,458],{},"Fiber OTel middleware",[420,460,461],{},[365,462,440],{},[420,464,465],{},"github.com\u002Fgofiber\u002Fcontrib",[396,467,468,475,478,481,488],{},[420,469,470],{},[352,471,474],{"href":472,"rel":473},"https:\u002F\u002Fgithub.com\u002Fgo-chi\u002Fchi",[426],"go-chi\u002Fchi\u002Fv5",[420,476,477],{},"v5.3.0",[420,479,480],{},"net\u002Fhttp-based router",[420,482,483],{},[352,484,485],{"href":114},[365,486,487],{},"server\u002Fchix",[420,489,490],{},"github.com\u002Fgo-chi\u002Fchi",[396,492,493,500,503,506,510],{},[420,494,495],{},[352,496,499],{"href":497,"rel":498},"https:\u002F\u002Fgithub.com\u002Fgo-chi\u002Fcors",[426],"go-chi\u002Fcors",[420,501,502],{},"v1.2.2",[420,504,505],{},"CORS middleware for chi",[420,507,508],{},[365,509,487],{},[420,511,512],{},"github.com\u002Fgo-chi\u002Fcors",[396,514,515,522,525,528,532],{},[420,516,517],{},[352,518,521],{"href":519,"rel":520},"https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-go-contrib",[426],"go.opentelemetry.io\u002Fcontrib\u002F...\u002Fotelhttp",[420,523,524],{},"v0.69.0",[420,526,527],{},"net\u002Fhttp OTel instrumentation",[420,529,530],{},[365,531,487],{},[420,533,534],{},"opentelemetry-go-contrib",[385,536,538],{"id":537},"validation-configuration-pagination","Validation, configuration, pagination",[390,540,541,555],{},[393,542,543],{},[396,544,545,547,549,551,553],{},[399,546,401],{},[399,548,404],{},[399,550,407],{},[399,552,410],{},[399,554,413],{},[415,556,557,582,607,632],{},[396,558,559,566,569,572,579],{},[420,560,561],{},[352,562,565],{"href":563,"rel":564},"https:\u002F\u002Fgithub.com\u002Fgo-playground\u002Fvalidator",[426],"go-playground\u002Fvalidator\u002Fv10",[420,567,568],{},"v10.30.3",[420,570,571],{},"struct-tag-based validation",[420,573,574],{},[352,575,576],{"href":124},[365,577,578],{},"validate",[420,580,581],{},"github.com\u002Fgo-playground\u002Fvalidator",[396,583,584,591,594,597,604],{},[420,585,586],{},[352,587,590],{"href":588,"rel":589},"https:\u002F\u002Fgithub.com\u002Fcaarlos0\u002Fenv",[426],"caarlos0\u002Fenv\u002Fv11",[420,592,593],{},"v11.4.1",[420,595,596],{},"env var → struct parsing",[420,598,599],{},[352,600,601],{"href":83},[365,602,603],{},"envconf",[420,605,606],{},"github.com\u002Fcaarlos0\u002Fenv",[396,608,609,616,619,625,629],{},[420,610,611],{},[352,612,615],{"href":613,"rel":614},"https:\u002F\u002Fgithub.com\u002Fjoho\u002Fgodotenv",[426],"joho\u002Fgodotenv",[420,617,618],{},"v1.5.1",[420,620,621,624],{},[365,622,623],{},".env"," file loading",[420,626,627],{},[365,628,603],{},[420,630,631],{},"github.com\u002Fjoho\u002Fgodotenv",[396,633,634,637,639,642,649],{},[420,635,636],{},"none",[420,638,636],{},[420,640,641],{},"offset and cursor pagination (no 3rd-party dependency)",[420,643,644],{},[352,645,646],{"href":129},[365,647,648],{},"paginate",[420,650,636],{},[385,652,133],{"id":653},"database",[390,655,656,670],{},[393,657,658],{},[396,659,660,662,664,666,668],{},[399,661,401],{},[399,663,404],{},[399,665,407],{},[399,667,410],{},[399,669,413],{},[415,671,672,697,719,744,760,776,800],{},[396,673,674,681,684,687,694],{},[420,675,676],{},[352,677,680],{"href":678,"rel":679},"https:\u002F\u002Fgithub.com\u002Fjackc\u002Fpgx",[426],"jackc\u002Fpgx\u002Fv5",[420,682,683],{},"v5.10.0",[420,685,686],{},"PostgreSQL driver + connection pool",[420,688,689],{},[352,690,691],{"href":144},[365,692,693],{},"dbx\u002Fpg",[420,695,696],{},"github.com\u002Fjackc\u002Fpgx",[396,698,699,706,709,712,716],{},[420,700,701],{},[352,702,705],{"href":703,"rel":704},"https:\u002F\u002Fgithub.com\u002Fexaring\u002Fotelpgx",[426],"exaring\u002Fotelpgx",[420,707,708],{},"v0.11.1",[420,710,711],{},"OTel tracer over the pgx pool",[420,713,714],{},[365,715,693],{},[420,717,718],{},"github.com\u002Fexaring\u002Fotelpgx",[396,720,721,728,731,734,741],{},[420,722,723],{},[352,724,727],{"href":725,"rel":726},"https:\u002F\u002Fbun.uptrace.dev\u002F",[426],"uptrace\u002Fbun",[420,729,730],{},"v1.2.18",[420,732,733],{},"SQL-first query builder",[420,735,736],{},[352,737,738],{"href":149},[365,739,740],{},"dbx\u002Fbunx",[420,742,743],{},"bun.uptrace.dev",[396,745,746,749,751,754,758],{},[420,747,748],{},"uptrace\u002Fbun\u002Fdialect\u002Fpgdialect",[420,750,730],{},[420,752,753],{},"bun PostgreSQL dialect",[420,755,756],{},[365,757,740],{},[420,759,743],{},[396,761,762,765,767,770,774],{},[420,763,764],{},"uptrace\u002Fbun\u002Fextra\u002Fbunotel",[420,766,730],{},[420,768,769],{},"bun OTel query hook",[420,771,772],{},[365,773,740],{},[420,775,743],{},[396,777,778,785,788,795,797],{},[420,779,780],{},[352,781,784],{"href":782,"rel":783},"https:\u002F\u002Fsqlc.dev",[426],"sqlc",[420,786,787],{},"optional, project-side",[420,789,790,791,794],{},"SQL → typed Go code generator; the ",[365,792,793],{},"dbx\u002Fpg.DBTX"," interface is compatible with it",[420,796,636],{},[420,798,799],{},"sqlc.dev",[396,801,802,809,812,815,820],{},[420,803,804],{},[352,805,808],{"href":806,"rel":807},"https:\u002F\u002Fgithub.com\u002Fpressly\u002Fgoose",[426],"pressly\u002Fgoose",[420,810,811],{},"in the generated project",[420,813,814],{},"SQL migrations",[420,816,817],{},[365,818,819],{},"cmd\u002Fmigrate",[420,821,822],{},"github.com\u002Fpressly\u002Fgoose",[385,824,197],{"id":825},"security",[390,827,828,842],{},[393,829,830],{},[396,831,832,834,836,838,840],{},[399,833,401],{},[399,835,404],{},[399,837,407],{},[399,839,410],{},[399,841,413],{},[415,843,844],{},[396,845,846,853,856,859,866],{},[420,847,848],{},[352,849,852],{"href":850,"rel":851},"https:\u002F\u002Fgithub.com\u002Fgolang-jwt\u002Fjwt",[426],"golang-jwt\u002Fjwt\u002Fv5",[420,854,855],{},"v5.3.1",[420,857,858],{},"JWT signing and verification",[420,860,861],{},[352,862,863],{"href":204},[365,864,865],{},"auth",[420,867,868],{},"github.com\u002Fgolang-jwt\u002Fjwt",[385,870,872],{"id":871},"async-processing","Async processing",[390,874,875,889],{},[393,876,877],{},[396,878,879,881,883,885,887],{},[399,880,401],{},[399,882,404],{},[399,884,407],{},[399,886,410],{},[399,888,413],{},[415,890,891,920,948],{},[396,892,893,900,903,906,917],{},[420,894,895],{},[352,896,899],{"href":897,"rel":898},"https:\u002F\u002Fgithub.com\u002Fhibiken\u002Fasynq",[426],"hibiken\u002Fasynq",[420,901,902],{},"v0.26.0",[420,904,905],{},"Redis-backed distributed task queue",[420,907,908,913,914],{},[352,909,910],{"href":174},[365,911,912],{},"queue",", ",[365,915,916],{},"worker",[420,918,919],{},"github.com\u002Fhibiken\u002Fasynq",[396,921,922,929,932,935,945],{},[420,923,924],{},[352,925,928],{"href":926,"rel":927},"https:\u002F\u002Fredis.uptrace.dev\u002F",[426],"redis\u002Fgo-redis\u002Fv9",[420,930,931],{},"v9.21.0",[420,933,934],{},"Redis client",[420,936,937,913,939,944],{},[365,938,912],{},[352,940,941],{"href":188},[365,942,943],{},"scheduler"," (lease)",[420,946,947],{},"redis.uptrace.dev",[396,949,950,953,956,962,971],{},[420,951,952],{},"golang.org\u002Fx\u002Fsync",[420,954,955],{},"v0.22.0",[420,957,958,961],{},[365,959,960],{},"errgroup"," and friends",[420,963,964,965,968,969],{},"internal concurrency in ",[365,966,967],{},"events","\u002F",[365,970,916],{},[420,972,973],{},"pkg.go.dev\u002Fgolang.org\u002Fx\u002Fsync",[385,975,218],{"id":976},"observability",[390,978,979,993],{},[393,980,981],{},[396,982,983,985,987,989,991],{},[399,984,401],{},[399,986,404],{},[399,988,407],{},[399,990,410],{},[399,992,413],{},[415,994,995,1020,1040,1062,1082,1102,1127],{},[396,996,997,1004,1007,1010,1017],{},[420,998,999],{},[352,1000,1003],{"href":1001,"rel":1002},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Flanguages\u002Fgo\u002Fgetting-started\u002F",[426],"go.opentelemetry.io\u002Fotel",[420,1005,1006],{},"v1.44.0",[420,1008,1009],{},"OTel API (trace, metrics)",[420,1011,1012],{},[352,1013,1014],{"href":233},[365,1015,1016],{},"otelx",[420,1018,1019],{},"opentelemetry.io\u002Fdocs\u002Flanguages\u002Fgo",[396,1021,1022,1029,1031,1034,1038],{},[420,1023,1024,1025,1028],{},"go.opentelemetry.io\u002Fotel\u002Fsdk (+",[365,1026,1027],{},"\u002Fmetric",")",[420,1030,1006],{},[420,1032,1033],{},"OTel SDK implementation",[420,1035,1036],{},[365,1037,1016],{},[420,1039,1019],{},[396,1041,1042,1048,1051,1056,1060],{},[420,1043,1044,1045],{},"go.opentelemetry.io\u002Fotel\u002Fsdk\u002Flog, ",[365,1046,1047],{},"\u002Flog",[420,1049,1050],{},"v0.20.0",[420,1052,1053,1054,1028],{},"OTel logs SDK\u002FAPI (pre-1.0, which is why the kit isolates it behind ",[365,1055,1016],{},[420,1057,1058],{},[365,1059,1016],{},[420,1061,1019],{},[396,1063,1064,1067,1070,1076,1080],{},[420,1065,1066],{},"go.opentelemetry.io\u002Fcontrib\u002Fbridges\u002Fotelslog",[420,1068,1069],{},"v0.19.0",[420,1071,1072,1075],{},[365,1073,1074],{},"slog"," → OTel log bridge",[420,1077,1078],{},[365,1079,1016],{},[420,1081,534],{},[396,1083,1084,1087,1089,1096,1100],{},[420,1085,1086],{},"go.opentelemetry.io\u002Fcontrib\u002Fexporters\u002Fautoexport",[420,1088,524],{},[420,1090,1091,1092,1095],{},"env-driven exporter selection (",[365,1093,1094],{},"OTEL_TRACES_EXPORTER"," etc.)",[420,1097,1098],{},[365,1099,1016],{},[420,1101,534],{},[396,1103,1104,1111,1114,1117,1124],{},[420,1105,1106],{},[352,1107,1110],{"href":1108,"rel":1109},"https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fgo\u002F",[426],"getsentry\u002Fsentry-go",[420,1112,1113],{},"v0.47.0",[420,1115,1116],{},"error reporting, breadcrumbs",[420,1118,1119],{},[352,1120,1121],{"href":238},[365,1122,1123],{},"sentryx",[420,1125,1126],{},"docs.sentry.io\u002Fplatforms\u002Fgo",[396,1128,1129,1135,1137,1140,1144],{},[420,1130,1131,1132,1028],{},"getsentry\u002Fsentry-go\u002Fotel (+",[365,1133,1134],{},"\u002Fotlp",[420,1136,1113],{},[420,1138,1139],{},"Sentry span exporter wired into the OTel tracer provider",[420,1141,1142],{},[365,1143,1123],{},[420,1145,1126],{},[385,1147,1149],{"id":1148},"storage-and-mail","Storage and mail",[390,1151,1152,1166],{},[393,1153,1154],{},[396,1155,1156,1158,1160,1162,1164],{},[399,1157,401],{},[399,1159,404],{},[399,1161,407],{},[399,1163,410],{},[399,1165,413],{},[415,1167,1168,1203,1219,1244],{},[396,1169,1170,1187,1190,1193,1200],{},[420,1171,1172,1177,1178,913,1181,913,1184,1028],{},[352,1173,1176],{"href":1174,"rel":1175},"https:\u002F\u002Faws.github.io\u002Faws-sdk-go-v2\u002F",[426],"aws\u002Faws-sdk-go-v2"," (+",[365,1179,1180],{},"config",[365,1182,1183],{},"credentials",[365,1185,1186],{},"service\u002Fs3",[420,1188,1189],{},"v1.42.0 \u002F v1.32.25 \u002F v1.19.24 \u002F v1.103.3",[420,1191,1192],{},"S3-compatible object storage client",[420,1194,1195],{},[352,1196,1197],{"href":249},[365,1198,1199],{},"storage\u002Fs3",[420,1201,1202],{},"aws.github.io\u002Faws-sdk-go-v2",[396,1204,1205,1208,1210,1213,1217],{},[420,1206,1207],{},"go.opentelemetry.io\u002Fcontrib\u002F...\u002Fotelaws",[420,1209,524],{},[420,1211,1212],{},"AWS SDK OTel instrumentation",[420,1214,1215],{},[365,1216,1199],{},[420,1218,534],{},[396,1220,1221,1228,1231,1234,1241],{},[420,1222,1223],{},[352,1224,1227],{"href":1225,"rel":1226},"https:\u002F\u002Fgithub.com\u002Fwneessen\u002Fgo-mail",[426],"wneessen\u002Fgo-mail",[420,1229,1230],{},"v0.8.1",[420,1232,1233],{},"SMTP client",[420,1235,1236],{},[352,1237,1238],{"href":253},[365,1239,1240],{},"mail\u002Fsmtp",[420,1242,1243],{},"github.com\u002Fwneessen\u002Fgo-mail",[396,1245,1246,1253,1256,1265,1270],{},[420,1247,1248],{},[352,1249,1252],{"href":1250,"rel":1251},"https:\u002F\u002Fgithub.com\u002FBoostport\u002Fmjml-go",[426],"Boostport\u002Fmjml-go",[420,1254,1255],{},"v0.16.0",[420,1257,1258,1259,1264],{},"MJML → HTML compilation (WASM, ",[352,1260,1263],{"href":1261,"rel":1262},"https:\u002F\u002Fmjml.io\u002F",[426],"mjml.io"," language)",[420,1266,1267],{},[365,1268,1269],{},"mail\u002Fmjml",[420,1271,1272],{},"github.com\u002FBoostport\u002Fmjml-go",[385,1274,1276],{"id":1275},"cli-and-codegen","CLI and codegen",[390,1278,1279,1294],{},[393,1280,1281],{},[396,1282,1283,1285,1287,1289,1292],{},[399,1284,401],{},[399,1286,404],{},[399,1288,407],{},[399,1290,1291],{},"Used by",[399,1293,413],{},[415,1295,1296,1322,1347,1368,1389,1412],{},[396,1297,1298,1305,1308,1311,1319],{},[420,1299,1300],{},[352,1301,1304],{"href":1302,"rel":1303},"https:\u002F\u002Fcobra.dev\u002F",[426],"spf13\u002Fcobra",[420,1306,1307],{},"v1.10.2",[420,1309,1310],{},"CLI command tree",[420,1312,1313,913,1316],{},[365,1314,1315],{},"cmd\u002Fgpsystem",[365,1317,1318],{},"internal\u002Fcli",[420,1320,1321],{},"cobra.dev",[396,1323,1324,1331,1334,1337,1344],{},[420,1325,1326],{},[352,1327,1330],{"href":1328,"rel":1329},"https:\u002F\u002Fgithub.com\u002Foapi-codegen\u002Foapi-codegen",[426],"oapi-codegen\u002Foapi-codegen\u002Fv2",[420,1332,1333],{},"v2.8.0",[420,1335,1336],{},"OpenAPI → Go server code generator",[420,1338,1339,1340,1343],{},"the generated project's ",[365,1341,1342],{},"go tool","; the kit's own Fiber v3 templates",[420,1345,1346],{},"github.com\u002Foapi-codegen\u002Foapi-codegen",[396,1348,1349,1352,1354,1360,1365],{},[420,1350,1351],{},"golang.org\u002Fx\u002Ftools",[420,1353,1113],{},[420,1355,1356,1359],{},[365,1357,1358],{},"goimports",", formatting generated files",[420,1361,1362],{},[365,1363,1364],{},"internal\u002Fgenerator",[420,1366,1367],{},"pkg.go.dev\u002Fgolang.org\u002Fx\u002Ftools",[396,1369,1370,1373,1376,1382,1386],{},[420,1371,1372],{},"gopkg.in\u002Fyaml.v3",[420,1374,1375],{},"v3.0.1",[420,1377,1378,1381],{},[365,1379,1380],{},"gpsystem.yaml"," manifest serialization",[420,1383,1384],{},[365,1385,1364],{},[420,1387,1388],{},"pkg.go.dev\u002Fgopkg.in\u002Fyaml.v3",[396,1390,1391,1398,1401,1404,1409],{},[420,1392,1393],{},[352,1394,1397],{"href":1395,"rel":1396},"https:\u002F\u002Ftypespec.io\u002Fdocs",[426],"@typespec\u002Fcompiler, http, openapi, openapi3",[420,1399,1400],{},"1.10.0 (npm, in the generated project)",[420,1402,1403],{},"API contract spec language → OpenAPI 3.0 compilation",[420,1405,1406],{},[365,1407,1408],{},"spec\u002Ftypespec\u002F**",[420,1410,1411],{},"typespec.io\u002Fdocs",[396,1413,1414,1417,1420,1423,1426],{},[420,1415,1416],{},"google\u002Fuuid",[420,1418,1419],{},"v1.6.0",[420,1421,1422],{},"UUID generation",[420,1424,1425],{},"events\u002Fqueue\u002Fscaffold",[420,1427,1428],{},"github.com\u002Fgoogle\u002Fuuid",[385,1430,1432],{"id":1431},"dev-tooling","Dev tooling",[390,1434,1435,1446],{},[393,1436,1437],{},[396,1438,1439,1442,1444],{},[399,1440,1441],{},"Tool",[399,1443,407],{},[399,1445,413],{},[415,1447,1448,1476,1490,1513,1528,1539,1553],{},[396,1449,1450,1457,1473],{},[420,1451,1452],{},[352,1453,1456],{"href":1454,"rel":1455},"https:\u002F\u002Fmise.jdx.dev",[426],"mise",[420,1458,1459,1460,913,1463,913,1466,913,1469,1472],{},"toolchain pinning (Go, Node) + task runner (",[365,1461,1462],{},"build",[365,1464,1465],{},"test",[365,1467,1468],{},"lint",[365,1470,1471],{},"e2e",", ...)",[420,1474,1475],{},"mise.jdx.dev",[396,1477,1478,1481,1487],{},[420,1479,1480],{},"golangci-lint (v2 schema)",[420,1482,1483,1484],{},"static analysis, ",[365,1485,1486],{},"mise run lint",[420,1488,1489],{},"golangci-lint.run",[396,1491,1492,1503,1510],{},[420,1493,1494,1499,1500,1028],{},[352,1495,1498],{"href":1496,"rel":1497},"https:\u002F\u002Fcommitlint.js.org",[426],"commitlint"," (",[365,1501,1502],{},"@commitlint\u002Fconfig-conventional",[420,1504,1505,1506,1509],{},"Conventional Commits enforcement in the ",[365,1507,1508],{},"gpsystem"," repo",[420,1511,1512],{},"commitlint.js.org",[396,1514,1515,1522,1525],{},[420,1516,1517],{},[352,1518,1521],{"href":1519,"rel":1520},"https:\u002F\u002Frustfs.com",[426],"RustFS",[420,1523,1524],{},"S3-compatible object store for dev\u002Fcompose (instead of MinIO)",[420,1526,1527],{},"rustfs.com",[396,1529,1530,1533,1536],{},[420,1531,1532],{},"mailpit",[420,1534,1535],{},"SMTP trap for dev\u002Fcompose",[420,1537,1538],{},"github.com\u002Faxllent\u002Fmailpit",[396,1540,1541,1544,1550],{},[420,1542,1543],{},"PostgreSQL 17 (alpine image)",[420,1545,1546,1547],{},"dev database in ",[365,1548,1549],{},"compose.yml",[420,1551,1552],{},"hub.docker.com\u002F_\u002Fpostgres",[396,1554,1555,1558,1563],{},[420,1556,1557],{},"Redis 7 (alpine image)",[420,1559,1560,1561],{},"queue\u002Fscheduler backend in ",[365,1562,1549],{},[420,1564,1565],{},"hub.docker.com\u002F_\u002Fredis",[385,1567,1569],{"id":1568},"where-to-next","Where to next",[1571,1572,1573,1586],"ul",{},[1574,1575,1576,1577,1580,1581,1583,1584,359],"li",{},"The design patterns behind these dependencies (why ",[365,1578,1579],{},"storage.Store"," or ",[365,1582,1123],{}," is a wrapper and the rest aren't) are covered in ",[352,1585,92],{"href":93},[1574,1587,1588,1589,359],{},"Every package's environment variables are listed on ",[352,1590,52],{"href":53},{"title":1592,"searchDepth":1593,"depth":1593,"links":1594},"",2,[1595,1596,1597,1598,1599,1600,1601,1602,1603,1604],{"id":387,"depth":1593,"text":388},{"id":537,"depth":1593,"text":538},{"id":653,"depth":1593,"text":133},{"id":825,"depth":1593,"text":197},{"id":871,"depth":1593,"text":872},{"id":976,"depth":1593,"text":218},{"id":1148,"depth":1593,"text":1149},{"id":1275,"depth":1593,"text":1276},{"id":1431,"depth":1593,"text":1432},{"id":1568,"depth":1593,"text":1569},"Every underlying library, its version, its role, and its official documentation, grouped by category.","md",null,{},{"icon":60},{"title":57,"description":1605},"eszkeEj-cU1V5qTSQAAoGbSS6kYpYL7-mKOwI_F578U",[1613,1615],{"title":52,"path":53,"stem":54,"description":1614,"icon":55,"children":-1},"Every environment variable of every kit config struct, grouped.",{"title":68,"path":69,"stem":70,"description":1616,"icon":71,"children":-1},"The kit's package map, the lifecycle of a service, and the principle that holds it together.",1784668705835]