[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-encore-encore-go-getting-started":3,"mdc--wjbuse-key":37,"related-org-encore-encore-go-getting-started":1222,"related-repo-encore-encore-go-getting-started":1390},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":32,"sourceUrl":35,"mdContent":36},"encore-go-getting-started","build and run Encore Go applications","Bootstrap a brand-new Encore Go project from zero. Only for first-time CLI install and `encore app create` — not for architecture or feature questions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"encore","Encore","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fencore.png","encoredev",[13,15,18,21],{"name":9,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Local Development","local-development",{"name":19,"slug":20,"type":14},"API Development","api-development",{"name":22,"slug":23,"type":14},"Go","go",26,"https:\u002F\u002Fgithub.com\u002Fencoredev\u002Fskills","2026-04-06T18:10:07.385548",null,5,[30,31],"claude-code","skills",{"repoUrl":25,"stars":24,"forks":28,"topics":33,"description":34},[30,31],"Agent Skills for development with Encore.","https:\u002F\u002Fgithub.com\u002Fencoredev\u002Fskills\u002Ftree\u002FHEAD\u002Fencore\u002Fgo-getting-started","---\nname: encore-go-getting-started\ndescription: Bootstrap a brand-new Encore Go project from zero. Only for first-time CLI install and `encore app create` — not for architecture or feature questions.\nwhen_to_use: >-\n  User has no Encore project yet and is asking how to install the Encore CLI, run `encore app create` for a Go app, scaffold a hello-world Go service, or run their very first `encore run`. SKIP if the user already has an Encore Go project and is asking about architecture, services, endpoints, or specific features — those go to `encore-go-service`, `encore-go-api`, `encore-go-pubsub`, etc. Trigger phrases: \"completely new to Encore\", \"first time\", \"install the CLI\", \"brew install encoredev\", \"encore app create\", \"hello world Go\", \"just starting out\".\n---\n\n# Getting Started with Encore Go\n\n## Instructions\n\n### Install Encore CLI\n\n```bash\n# macOS\nbrew install encoredev\u002Ftap\u002Fencore\n\n# Linux\u002FWSL\ncurl -L https:\u002F\u002Fencore.dev\u002Finstall.sh | bash\n\n# Windows (PowerShell)\niwr https:\u002F\u002Fencore.dev\u002Finstall.ps1 | iex\n```\n\n### Create a New App\n\n```bash\n# Interactive - choose from templates\nencore app create my-app\n\n# Or start with a blank Go app\nencore app create my-app --example=hello-world\n```\n\n### Project Structure\n\nA minimal Encore Go app:\n\n```\nmy-app\u002F\n├── encore.app           # App configuration\n├── go.mod               # Go module\n└── hello\u002F               # A service (package with API)\n    └── hello.go         # API endpoints\n```\n\n### The encore.app File\n\n```cue\n\u002F\u002F encore.app\n{\n    \"id\": \"my-app\"\n}\n```\n\nThis file marks the root of your Encore app. The `id` is your app's unique identifier.\n\n### Create Your First API\n\nIn Encore Go, any package with an `\u002F\u002Fencore:api` endpoint becomes a service:\n\n```go\n\u002F\u002F hello\u002Fhello.go\npackage hello\n\nimport \"context\"\n\ntype Response struct {\n    Message string `json:\"message\"`\n}\n\n\u002F\u002Fencore:api public method=GET path=\u002Fhello\nfunc Hello(ctx context.Context) (*Response, error) {\n    return &Response{Message: \"Hello, World!\"}, nil\n}\n```\n\n### Run Your App\n\n```bash\n# Start the development server\nencore run\n\n# Your API is now available at http:\u002F\u002Flocalhost:4000\n```\n\n### Open the Local Dashboard\n\n```bash\n# Opens the local development dashboard\nencore run\n# Then visit http:\u002F\u002Flocalhost:9400\n```\n\nThe dashboard shows:\n- All your services and endpoints\n- Request\u002Fresponse logs\n- Database queries\n- Traces and spans\n\n### Common CLI Commands\n\n| Command | Description |\n|---------|-------------|\n| `encore run` | Start the local development server |\n| `encore test` | Run tests (uses `go test` under the hood) |\n| `encore db shell \u003Cdb>` | Open a psql shell to a database |\n| `encore gen client` | Generate API client code |\n| `encore app link` | Link to an existing Encore Cloud app |\n\n### Add Path Parameters\n\n```go\ntype GetUserParams struct {\n    ID string\n}\n\ntype User struct {\n    ID   string `json:\"id\"`\n    Name string `json:\"name\"`\n}\n\n\u002F\u002Fencore:api public method=GET path=\u002Fusers\u002F:id\nfunc GetUser(ctx context.Context, params *GetUserParams) (*User, error) {\n    return &User{ID: params.ID, Name: \"John\"}, nil\n}\n```\n\n### Add a Database\n\n```go\n\u002F\u002F db.go\npackage hello\n\nimport \"encore.dev\u002Fstorage\u002Fsqldb\"\n\nvar db = sqldb.NewDatabase(\"mydb\", sqldb.DatabaseConfig{\n    Migrations: \".\u002Fmigrations\",\n})\n```\n\nCreate a migration:\n\n```sql\n-- hello\u002Fmigrations\u002F1_create_table.up.sql\nCREATE TABLE items (\n    id SERIAL PRIMARY KEY,\n    name TEXT NOT NULL\n);\n```\n\n### Query the Database\n\n```go\nimport \"encore.dev\u002Fstorage\u002Fsqldb\"\n\ntype Item struct {\n    ID   int\n    Name string\n}\n\nfunc getItem(ctx context.Context, id int) (*Item, error) {\n    item, err := sqldb.QueryRow[Item](ctx, db, `\n        SELECT id, name FROM items WHERE id = $1\n    `, id)\n    if err != nil {\n        return nil, err\n    }\n    return item, nil\n}\n```\n\n### Next Steps\n\n- Add more endpoints (see `encore-go-api` skill)\n- Add authentication (see `encore-go-auth` skill)\n- Add Pub\u002FSub topics (`encore-go-pubsub`), cron jobs (`encore-go-cron`), buckets (`encore-go-bucket`), secrets (`encore-go-secret`), or caching (`encore-go-cache`)\n- Deploy to Encore Cloud: `encore app link` then `git push encore`\n",{"data":38,"body":40},{"name":4,"description":6,"when_to_use":39},"User has no Encore project yet and is asking how to install the Encore CLI, run `encore app create` for a Go app, scaffold a hello-world Go service, or run their very first `encore run`. SKIP if the user already has an Encore Go project and is asking about architecture, services, endpoints, or specific features — those go to `encore-go-service`, `encore-go-api`, `encore-go-pubsub`, etc. Trigger phrases: \"completely new to Encore\", \"first time\", \"install the CLI\", \"brew install encoredev\", \"encore app create\", \"hello world Go\", \"just starting out\".",{"type":41,"children":42},"root",[43,52,59,66,199,205,282,288,294,304,310,351,364,370,383,495,501,543,549,583,588,613,619,740,746,852,858,926,931,980,986,1119,1125,1216],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"getting-started-with-encore-go",[49],{"type":50,"value":51},"text","Getting Started with Encore Go",{"type":44,"tag":53,"props":54,"children":56},"h2",{"id":55},"instructions",[57],{"type":50,"value":58},"Instructions",{"type":44,"tag":60,"props":61,"children":63},"h3",{"id":62},"install-encore-cli",[64],{"type":50,"value":65},"Install Encore CLI",{"type":44,"tag":67,"props":68,"children":73},"pre",{"className":69,"code":70,"language":71,"meta":72,"style":72},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# macOS\nbrew install encoredev\u002Ftap\u002Fencore\n\n# Linux\u002FWSL\ncurl -L https:\u002F\u002Fencore.dev\u002Finstall.sh | bash\n\n# Windows (PowerShell)\niwr https:\u002F\u002Fencore.dev\u002Finstall.ps1 | iex\n","bash","",[74],{"type":44,"tag":75,"props":76,"children":77},"code",{"__ignoreMap":72},[78,90,111,121,130,159,167,176],{"type":44,"tag":79,"props":80,"children":83},"span",{"class":81,"line":82},"line",1,[84],{"type":44,"tag":79,"props":85,"children":87},{"style":86},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[88],{"type":50,"value":89},"# macOS\n",{"type":44,"tag":79,"props":91,"children":93},{"class":81,"line":92},2,[94,100,106],{"type":44,"tag":79,"props":95,"children":97},{"style":96},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[98],{"type":50,"value":99},"brew",{"type":44,"tag":79,"props":101,"children":103},{"style":102},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[104],{"type":50,"value":105}," install",{"type":44,"tag":79,"props":107,"children":108},{"style":102},[109],{"type":50,"value":110}," encoredev\u002Ftap\u002Fencore\n",{"type":44,"tag":79,"props":112,"children":114},{"class":81,"line":113},3,[115],{"type":44,"tag":79,"props":116,"children":118},{"emptyLinePlaceholder":117},true,[119],{"type":50,"value":120},"\n",{"type":44,"tag":79,"props":122,"children":124},{"class":81,"line":123},4,[125],{"type":44,"tag":79,"props":126,"children":127},{"style":86},[128],{"type":50,"value":129},"# Linux\u002FWSL\n",{"type":44,"tag":79,"props":131,"children":132},{"class":81,"line":28},[133,138,143,148,154],{"type":44,"tag":79,"props":134,"children":135},{"style":96},[136],{"type":50,"value":137},"curl",{"type":44,"tag":79,"props":139,"children":140},{"style":102},[141],{"type":50,"value":142}," -L",{"type":44,"tag":79,"props":144,"children":145},{"style":102},[146],{"type":50,"value":147}," https:\u002F\u002Fencore.dev\u002Finstall.sh",{"type":44,"tag":79,"props":149,"children":151},{"style":150},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[152],{"type":50,"value":153}," |",{"type":44,"tag":79,"props":155,"children":156},{"style":96},[157],{"type":50,"value":158}," bash\n",{"type":44,"tag":79,"props":160,"children":162},{"class":81,"line":161},6,[163],{"type":44,"tag":79,"props":164,"children":165},{"emptyLinePlaceholder":117},[166],{"type":50,"value":120},{"type":44,"tag":79,"props":168,"children":170},{"class":81,"line":169},7,[171],{"type":44,"tag":79,"props":172,"children":173},{"style":86},[174],{"type":50,"value":175},"# Windows (PowerShell)\n",{"type":44,"tag":79,"props":177,"children":179},{"class":81,"line":178},8,[180,185,190,194],{"type":44,"tag":79,"props":181,"children":182},{"style":96},[183],{"type":50,"value":184},"iwr",{"type":44,"tag":79,"props":186,"children":187},{"style":102},[188],{"type":50,"value":189}," https:\u002F\u002Fencore.dev\u002Finstall.ps1",{"type":44,"tag":79,"props":191,"children":192},{"style":150},[193],{"type":50,"value":153},{"type":44,"tag":79,"props":195,"children":196},{"style":96},[197],{"type":50,"value":198}," iex\n",{"type":44,"tag":60,"props":200,"children":202},{"id":201},"create-a-new-app",[203],{"type":50,"value":204},"Create a New App",{"type":44,"tag":67,"props":206,"children":208},{"className":69,"code":207,"language":71,"meta":72,"style":72},"# Interactive - choose from templates\nencore app create my-app\n\n# Or start with a blank Go app\nencore app create my-app --example=hello-world\n",[209],{"type":44,"tag":75,"props":210,"children":211},{"__ignoreMap":72},[212,220,242,249,257],{"type":44,"tag":79,"props":213,"children":214},{"class":81,"line":82},[215],{"type":44,"tag":79,"props":216,"children":217},{"style":86},[218],{"type":50,"value":219},"# Interactive - choose from templates\n",{"type":44,"tag":79,"props":221,"children":222},{"class":81,"line":92},[223,227,232,237],{"type":44,"tag":79,"props":224,"children":225},{"style":96},[226],{"type":50,"value":8},{"type":44,"tag":79,"props":228,"children":229},{"style":102},[230],{"type":50,"value":231}," app",{"type":44,"tag":79,"props":233,"children":234},{"style":102},[235],{"type":50,"value":236}," create",{"type":44,"tag":79,"props":238,"children":239},{"style":102},[240],{"type":50,"value":241}," my-app\n",{"type":44,"tag":79,"props":243,"children":244},{"class":81,"line":113},[245],{"type":44,"tag":79,"props":246,"children":247},{"emptyLinePlaceholder":117},[248],{"type":50,"value":120},{"type":44,"tag":79,"props":250,"children":251},{"class":81,"line":123},[252],{"type":44,"tag":79,"props":253,"children":254},{"style":86},[255],{"type":50,"value":256},"# Or start with a blank Go app\n",{"type":44,"tag":79,"props":258,"children":259},{"class":81,"line":28},[260,264,268,272,277],{"type":44,"tag":79,"props":261,"children":262},{"style":96},[263],{"type":50,"value":8},{"type":44,"tag":79,"props":265,"children":266},{"style":102},[267],{"type":50,"value":231},{"type":44,"tag":79,"props":269,"children":270},{"style":102},[271],{"type":50,"value":236},{"type":44,"tag":79,"props":273,"children":274},{"style":102},[275],{"type":50,"value":276}," my-app",{"type":44,"tag":79,"props":278,"children":279},{"style":102},[280],{"type":50,"value":281}," --example=hello-world\n",{"type":44,"tag":60,"props":283,"children":285},{"id":284},"project-structure",[286],{"type":50,"value":287},"Project Structure",{"type":44,"tag":289,"props":290,"children":291},"p",{},[292],{"type":50,"value":293},"A minimal Encore Go app:",{"type":44,"tag":67,"props":295,"children":299},{"className":296,"code":298,"language":50},[297],"language-text","my-app\u002F\n├── encore.app           # App configuration\n├── go.mod               # Go module\n└── hello\u002F               # A service (package with API)\n    └── hello.go         # API endpoints\n",[300],{"type":44,"tag":75,"props":301,"children":302},{"__ignoreMap":72},[303],{"type":50,"value":298},{"type":44,"tag":60,"props":305,"children":307},{"id":306},"the-encoreapp-file",[308],{"type":50,"value":309},"The encore.app File",{"type":44,"tag":67,"props":311,"children":315},{"className":312,"code":313,"language":314,"meta":72,"style":72},"language-cue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F encore.app\n{\n    \"id\": \"my-app\"\n}\n","cue",[316],{"type":44,"tag":75,"props":317,"children":318},{"__ignoreMap":72},[319,327,335,343],{"type":44,"tag":79,"props":320,"children":321},{"class":81,"line":82},[322],{"type":44,"tag":79,"props":323,"children":324},{},[325],{"type":50,"value":326},"\u002F\u002F encore.app\n",{"type":44,"tag":79,"props":328,"children":329},{"class":81,"line":92},[330],{"type":44,"tag":79,"props":331,"children":332},{},[333],{"type":50,"value":334},"{\n",{"type":44,"tag":79,"props":336,"children":337},{"class":81,"line":113},[338],{"type":44,"tag":79,"props":339,"children":340},{},[341],{"type":50,"value":342},"    \"id\": \"my-app\"\n",{"type":44,"tag":79,"props":344,"children":345},{"class":81,"line":123},[346],{"type":44,"tag":79,"props":347,"children":348},{},[349],{"type":50,"value":350},"}\n",{"type":44,"tag":289,"props":352,"children":353},{},[354,356,362],{"type":50,"value":355},"This file marks the root of your Encore app. The ",{"type":44,"tag":75,"props":357,"children":359},{"className":358},[],[360],{"type":50,"value":361},"id",{"type":50,"value":363}," is your app's unique identifier.",{"type":44,"tag":60,"props":365,"children":367},{"id":366},"create-your-first-api",[368],{"type":50,"value":369},"Create Your First API",{"type":44,"tag":289,"props":371,"children":372},{},[373,375,381],{"type":50,"value":374},"In Encore Go, any package with an ",{"type":44,"tag":75,"props":376,"children":378},{"className":377},[],[379],{"type":50,"value":380},"\u002F\u002Fencore:api",{"type":50,"value":382}," endpoint becomes a service:",{"type":44,"tag":67,"props":384,"children":387},{"className":385,"code":386,"language":23,"meta":72,"style":72},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F hello\u002Fhello.go\npackage hello\n\nimport \"context\"\n\ntype Response struct {\n    Message string `json:\"message\"`\n}\n\n\u002F\u002Fencore:api public method=GET path=\u002Fhello\nfunc Hello(ctx context.Context) (*Response, error) {\n    return &Response{Message: \"Hello, World!\"}, nil\n}\n",[388],{"type":44,"tag":75,"props":389,"children":390},{"__ignoreMap":72},[391,399,407,414,422,429,437,445,452,460,469,478,487],{"type":44,"tag":79,"props":392,"children":393},{"class":81,"line":82},[394],{"type":44,"tag":79,"props":395,"children":396},{},[397],{"type":50,"value":398},"\u002F\u002F hello\u002Fhello.go\n",{"type":44,"tag":79,"props":400,"children":401},{"class":81,"line":92},[402],{"type":44,"tag":79,"props":403,"children":404},{},[405],{"type":50,"value":406},"package hello\n",{"type":44,"tag":79,"props":408,"children":409},{"class":81,"line":113},[410],{"type":44,"tag":79,"props":411,"children":412},{"emptyLinePlaceholder":117},[413],{"type":50,"value":120},{"type":44,"tag":79,"props":415,"children":416},{"class":81,"line":123},[417],{"type":44,"tag":79,"props":418,"children":419},{},[420],{"type":50,"value":421},"import \"context\"\n",{"type":44,"tag":79,"props":423,"children":424},{"class":81,"line":28},[425],{"type":44,"tag":79,"props":426,"children":427},{"emptyLinePlaceholder":117},[428],{"type":50,"value":120},{"type":44,"tag":79,"props":430,"children":431},{"class":81,"line":161},[432],{"type":44,"tag":79,"props":433,"children":434},{},[435],{"type":50,"value":436},"type Response struct {\n",{"type":44,"tag":79,"props":438,"children":439},{"class":81,"line":169},[440],{"type":44,"tag":79,"props":441,"children":442},{},[443],{"type":50,"value":444},"    Message string `json:\"message\"`\n",{"type":44,"tag":79,"props":446,"children":447},{"class":81,"line":178},[448],{"type":44,"tag":79,"props":449,"children":450},{},[451],{"type":50,"value":350},{"type":44,"tag":79,"props":453,"children":455},{"class":81,"line":454},9,[456],{"type":44,"tag":79,"props":457,"children":458},{"emptyLinePlaceholder":117},[459],{"type":50,"value":120},{"type":44,"tag":79,"props":461,"children":463},{"class":81,"line":462},10,[464],{"type":44,"tag":79,"props":465,"children":466},{},[467],{"type":50,"value":468},"\u002F\u002Fencore:api public method=GET path=\u002Fhello\n",{"type":44,"tag":79,"props":470,"children":472},{"class":81,"line":471},11,[473],{"type":44,"tag":79,"props":474,"children":475},{},[476],{"type":50,"value":477},"func Hello(ctx context.Context) (*Response, error) {\n",{"type":44,"tag":79,"props":479,"children":481},{"class":81,"line":480},12,[482],{"type":44,"tag":79,"props":483,"children":484},{},[485],{"type":50,"value":486},"    return &Response{Message: \"Hello, World!\"}, nil\n",{"type":44,"tag":79,"props":488,"children":490},{"class":81,"line":489},13,[491],{"type":44,"tag":79,"props":492,"children":493},{},[494],{"type":50,"value":350},{"type":44,"tag":60,"props":496,"children":498},{"id":497},"run-your-app",[499],{"type":50,"value":500},"Run Your App",{"type":44,"tag":67,"props":502,"children":504},{"className":69,"code":503,"language":71,"meta":72,"style":72},"# Start the development server\nencore run\n\n# Your API is now available at http:\u002F\u002Flocalhost:4000\n",[505],{"type":44,"tag":75,"props":506,"children":507},{"__ignoreMap":72},[508,516,528,535],{"type":44,"tag":79,"props":509,"children":510},{"class":81,"line":82},[511],{"type":44,"tag":79,"props":512,"children":513},{"style":86},[514],{"type":50,"value":515},"# Start the development server\n",{"type":44,"tag":79,"props":517,"children":518},{"class":81,"line":92},[519,523],{"type":44,"tag":79,"props":520,"children":521},{"style":96},[522],{"type":50,"value":8},{"type":44,"tag":79,"props":524,"children":525},{"style":102},[526],{"type":50,"value":527}," run\n",{"type":44,"tag":79,"props":529,"children":530},{"class":81,"line":113},[531],{"type":44,"tag":79,"props":532,"children":533},{"emptyLinePlaceholder":117},[534],{"type":50,"value":120},{"type":44,"tag":79,"props":536,"children":537},{"class":81,"line":123},[538],{"type":44,"tag":79,"props":539,"children":540},{"style":86},[541],{"type":50,"value":542},"# Your API is now available at http:\u002F\u002Flocalhost:4000\n",{"type":44,"tag":60,"props":544,"children":546},{"id":545},"open-the-local-dashboard",[547],{"type":50,"value":548},"Open the Local Dashboard",{"type":44,"tag":67,"props":550,"children":552},{"className":69,"code":551,"language":71,"meta":72,"style":72},"# Opens the local development dashboard\nencore run\n# Then visit http:\u002F\u002Flocalhost:9400\n",[553],{"type":44,"tag":75,"props":554,"children":555},{"__ignoreMap":72},[556,564,575],{"type":44,"tag":79,"props":557,"children":558},{"class":81,"line":82},[559],{"type":44,"tag":79,"props":560,"children":561},{"style":86},[562],{"type":50,"value":563},"# Opens the local development dashboard\n",{"type":44,"tag":79,"props":565,"children":566},{"class":81,"line":92},[567,571],{"type":44,"tag":79,"props":568,"children":569},{"style":96},[570],{"type":50,"value":8},{"type":44,"tag":79,"props":572,"children":573},{"style":102},[574],{"type":50,"value":527},{"type":44,"tag":79,"props":576,"children":577},{"class":81,"line":113},[578],{"type":44,"tag":79,"props":579,"children":580},{"style":86},[581],{"type":50,"value":582},"# Then visit http:\u002F\u002Flocalhost:9400\n",{"type":44,"tag":289,"props":584,"children":585},{},[586],{"type":50,"value":587},"The dashboard shows:",{"type":44,"tag":589,"props":590,"children":591},"ul",{},[592,598,603,608],{"type":44,"tag":593,"props":594,"children":595},"li",{},[596],{"type":50,"value":597},"All your services and endpoints",{"type":44,"tag":593,"props":599,"children":600},{},[601],{"type":50,"value":602},"Request\u002Fresponse logs",{"type":44,"tag":593,"props":604,"children":605},{},[606],{"type":50,"value":607},"Database queries",{"type":44,"tag":593,"props":609,"children":610},{},[611],{"type":50,"value":612},"Traces and spans",{"type":44,"tag":60,"props":614,"children":616},{"id":615},"common-cli-commands",[617],{"type":50,"value":618},"Common CLI Commands",{"type":44,"tag":620,"props":621,"children":622},"table",{},[623,642],{"type":44,"tag":624,"props":625,"children":626},"thead",{},[627],{"type":44,"tag":628,"props":629,"children":630},"tr",{},[631,637],{"type":44,"tag":632,"props":633,"children":634},"th",{},[635],{"type":50,"value":636},"Command",{"type":44,"tag":632,"props":638,"children":639},{},[640],{"type":50,"value":641},"Description",{"type":44,"tag":643,"props":644,"children":645},"tbody",{},[646,664,689,706,723],{"type":44,"tag":628,"props":647,"children":648},{},[649,659],{"type":44,"tag":650,"props":651,"children":652},"td",{},[653],{"type":44,"tag":75,"props":654,"children":656},{"className":655},[],[657],{"type":50,"value":658},"encore run",{"type":44,"tag":650,"props":660,"children":661},{},[662],{"type":50,"value":663},"Start the local development server",{"type":44,"tag":628,"props":665,"children":666},{},[667,676],{"type":44,"tag":650,"props":668,"children":669},{},[670],{"type":44,"tag":75,"props":671,"children":673},{"className":672},[],[674],{"type":50,"value":675},"encore test",{"type":44,"tag":650,"props":677,"children":678},{},[679,681,687],{"type":50,"value":680},"Run tests (uses ",{"type":44,"tag":75,"props":682,"children":684},{"className":683},[],[685],{"type":50,"value":686},"go test",{"type":50,"value":688}," under the hood)",{"type":44,"tag":628,"props":690,"children":691},{},[692,701],{"type":44,"tag":650,"props":693,"children":694},{},[695],{"type":44,"tag":75,"props":696,"children":698},{"className":697},[],[699],{"type":50,"value":700},"encore db shell \u003Cdb>",{"type":44,"tag":650,"props":702,"children":703},{},[704],{"type":50,"value":705},"Open a psql shell to a database",{"type":44,"tag":628,"props":707,"children":708},{},[709,718],{"type":44,"tag":650,"props":710,"children":711},{},[712],{"type":44,"tag":75,"props":713,"children":715},{"className":714},[],[716],{"type":50,"value":717},"encore gen client",{"type":44,"tag":650,"props":719,"children":720},{},[721],{"type":50,"value":722},"Generate API client code",{"type":44,"tag":628,"props":724,"children":725},{},[726,735],{"type":44,"tag":650,"props":727,"children":728},{},[729],{"type":44,"tag":75,"props":730,"children":732},{"className":731},[],[733],{"type":50,"value":734},"encore app link",{"type":44,"tag":650,"props":736,"children":737},{},[738],{"type":50,"value":739},"Link to an existing Encore Cloud app",{"type":44,"tag":60,"props":741,"children":743},{"id":742},"add-path-parameters",[744],{"type":50,"value":745},"Add Path Parameters",{"type":44,"tag":67,"props":747,"children":749},{"className":385,"code":748,"language":23,"meta":72,"style":72},"type GetUserParams struct {\n    ID string\n}\n\ntype User struct {\n    ID   string `json:\"id\"`\n    Name string `json:\"name\"`\n}\n\n\u002F\u002Fencore:api public method=GET path=\u002Fusers\u002F:id\nfunc GetUser(ctx context.Context, params *GetUserParams) (*User, error) {\n    return &User{ID: params.ID, Name: \"John\"}, nil\n}\n",[750],{"type":44,"tag":75,"props":751,"children":752},{"__ignoreMap":72},[753,761,769,776,783,791,799,807,814,821,829,837,845],{"type":44,"tag":79,"props":754,"children":755},{"class":81,"line":82},[756],{"type":44,"tag":79,"props":757,"children":758},{},[759],{"type":50,"value":760},"type GetUserParams struct {\n",{"type":44,"tag":79,"props":762,"children":763},{"class":81,"line":92},[764],{"type":44,"tag":79,"props":765,"children":766},{},[767],{"type":50,"value":768},"    ID string\n",{"type":44,"tag":79,"props":770,"children":771},{"class":81,"line":113},[772],{"type":44,"tag":79,"props":773,"children":774},{},[775],{"type":50,"value":350},{"type":44,"tag":79,"props":777,"children":778},{"class":81,"line":123},[779],{"type":44,"tag":79,"props":780,"children":781},{"emptyLinePlaceholder":117},[782],{"type":50,"value":120},{"type":44,"tag":79,"props":784,"children":785},{"class":81,"line":28},[786],{"type":44,"tag":79,"props":787,"children":788},{},[789],{"type":50,"value":790},"type User struct {\n",{"type":44,"tag":79,"props":792,"children":793},{"class":81,"line":161},[794],{"type":44,"tag":79,"props":795,"children":796},{},[797],{"type":50,"value":798},"    ID   string `json:\"id\"`\n",{"type":44,"tag":79,"props":800,"children":801},{"class":81,"line":169},[802],{"type":44,"tag":79,"props":803,"children":804},{},[805],{"type":50,"value":806},"    Name string `json:\"name\"`\n",{"type":44,"tag":79,"props":808,"children":809},{"class":81,"line":178},[810],{"type":44,"tag":79,"props":811,"children":812},{},[813],{"type":50,"value":350},{"type":44,"tag":79,"props":815,"children":816},{"class":81,"line":454},[817],{"type":44,"tag":79,"props":818,"children":819},{"emptyLinePlaceholder":117},[820],{"type":50,"value":120},{"type":44,"tag":79,"props":822,"children":823},{"class":81,"line":462},[824],{"type":44,"tag":79,"props":825,"children":826},{},[827],{"type":50,"value":828},"\u002F\u002Fencore:api public method=GET path=\u002Fusers\u002F:id\n",{"type":44,"tag":79,"props":830,"children":831},{"class":81,"line":471},[832],{"type":44,"tag":79,"props":833,"children":834},{},[835],{"type":50,"value":836},"func GetUser(ctx context.Context, params *GetUserParams) (*User, error) {\n",{"type":44,"tag":79,"props":838,"children":839},{"class":81,"line":480},[840],{"type":44,"tag":79,"props":841,"children":842},{},[843],{"type":50,"value":844},"    return &User{ID: params.ID, Name: \"John\"}, nil\n",{"type":44,"tag":79,"props":846,"children":847},{"class":81,"line":489},[848],{"type":44,"tag":79,"props":849,"children":850},{},[851],{"type":50,"value":350},{"type":44,"tag":60,"props":853,"children":855},{"id":854},"add-a-database",[856],{"type":50,"value":857},"Add a Database",{"type":44,"tag":67,"props":859,"children":861},{"className":385,"code":860,"language":23,"meta":72,"style":72},"\u002F\u002F db.go\npackage hello\n\nimport \"encore.dev\u002Fstorage\u002Fsqldb\"\n\nvar db = sqldb.NewDatabase(\"mydb\", sqldb.DatabaseConfig{\n    Migrations: \".\u002Fmigrations\",\n})\n",[862],{"type":44,"tag":75,"props":863,"children":864},{"__ignoreMap":72},[865,873,880,887,895,902,910,918],{"type":44,"tag":79,"props":866,"children":867},{"class":81,"line":82},[868],{"type":44,"tag":79,"props":869,"children":870},{},[871],{"type":50,"value":872},"\u002F\u002F db.go\n",{"type":44,"tag":79,"props":874,"children":875},{"class":81,"line":92},[876],{"type":44,"tag":79,"props":877,"children":878},{},[879],{"type":50,"value":406},{"type":44,"tag":79,"props":881,"children":882},{"class":81,"line":113},[883],{"type":44,"tag":79,"props":884,"children":885},{"emptyLinePlaceholder":117},[886],{"type":50,"value":120},{"type":44,"tag":79,"props":888,"children":889},{"class":81,"line":123},[890],{"type":44,"tag":79,"props":891,"children":892},{},[893],{"type":50,"value":894},"import \"encore.dev\u002Fstorage\u002Fsqldb\"\n",{"type":44,"tag":79,"props":896,"children":897},{"class":81,"line":28},[898],{"type":44,"tag":79,"props":899,"children":900},{"emptyLinePlaceholder":117},[901],{"type":50,"value":120},{"type":44,"tag":79,"props":903,"children":904},{"class":81,"line":161},[905],{"type":44,"tag":79,"props":906,"children":907},{},[908],{"type":50,"value":909},"var db = sqldb.NewDatabase(\"mydb\", sqldb.DatabaseConfig{\n",{"type":44,"tag":79,"props":911,"children":912},{"class":81,"line":169},[913],{"type":44,"tag":79,"props":914,"children":915},{},[916],{"type":50,"value":917},"    Migrations: \".\u002Fmigrations\",\n",{"type":44,"tag":79,"props":919,"children":920},{"class":81,"line":178},[921],{"type":44,"tag":79,"props":922,"children":923},{},[924],{"type":50,"value":925},"})\n",{"type":44,"tag":289,"props":927,"children":928},{},[929],{"type":50,"value":930},"Create a migration:",{"type":44,"tag":67,"props":932,"children":936},{"className":933,"code":934,"language":935,"meta":72,"style":72},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- hello\u002Fmigrations\u002F1_create_table.up.sql\nCREATE TABLE items (\n    id SERIAL PRIMARY KEY,\n    name TEXT NOT NULL\n);\n","sql",[937],{"type":44,"tag":75,"props":938,"children":939},{"__ignoreMap":72},[940,948,956,964,972],{"type":44,"tag":79,"props":941,"children":942},{"class":81,"line":82},[943],{"type":44,"tag":79,"props":944,"children":945},{},[946],{"type":50,"value":947},"-- hello\u002Fmigrations\u002F1_create_table.up.sql\n",{"type":44,"tag":79,"props":949,"children":950},{"class":81,"line":92},[951],{"type":44,"tag":79,"props":952,"children":953},{},[954],{"type":50,"value":955},"CREATE TABLE items (\n",{"type":44,"tag":79,"props":957,"children":958},{"class":81,"line":113},[959],{"type":44,"tag":79,"props":960,"children":961},{},[962],{"type":50,"value":963},"    id SERIAL PRIMARY KEY,\n",{"type":44,"tag":79,"props":965,"children":966},{"class":81,"line":123},[967],{"type":44,"tag":79,"props":968,"children":969},{},[970],{"type":50,"value":971},"    name TEXT NOT NULL\n",{"type":44,"tag":79,"props":973,"children":974},{"class":81,"line":28},[975],{"type":44,"tag":79,"props":976,"children":977},{},[978],{"type":50,"value":979},");\n",{"type":44,"tag":60,"props":981,"children":983},{"id":982},"query-the-database",[984],{"type":50,"value":985},"Query the Database",{"type":44,"tag":67,"props":987,"children":989},{"className":385,"code":988,"language":23,"meta":72,"style":72},"import \"encore.dev\u002Fstorage\u002Fsqldb\"\n\ntype Item struct {\n    ID   int\n    Name string\n}\n\nfunc getItem(ctx context.Context, id int) (*Item, error) {\n    item, err := sqldb.QueryRow[Item](ctx, db, `\n        SELECT id, name FROM items WHERE id = $1\n    `, id)\n    if err != nil {\n        return nil, err\n    }\n    return item, nil\n}\n",[990],{"type":44,"tag":75,"props":991,"children":992},{"__ignoreMap":72},[993,1000,1007,1015,1023,1031,1038,1045,1053,1061,1069,1077,1085,1093,1102,1111],{"type":44,"tag":79,"props":994,"children":995},{"class":81,"line":82},[996],{"type":44,"tag":79,"props":997,"children":998},{},[999],{"type":50,"value":894},{"type":44,"tag":79,"props":1001,"children":1002},{"class":81,"line":92},[1003],{"type":44,"tag":79,"props":1004,"children":1005},{"emptyLinePlaceholder":117},[1006],{"type":50,"value":120},{"type":44,"tag":79,"props":1008,"children":1009},{"class":81,"line":113},[1010],{"type":44,"tag":79,"props":1011,"children":1012},{},[1013],{"type":50,"value":1014},"type Item struct {\n",{"type":44,"tag":79,"props":1016,"children":1017},{"class":81,"line":123},[1018],{"type":44,"tag":79,"props":1019,"children":1020},{},[1021],{"type":50,"value":1022},"    ID   int\n",{"type":44,"tag":79,"props":1024,"children":1025},{"class":81,"line":28},[1026],{"type":44,"tag":79,"props":1027,"children":1028},{},[1029],{"type":50,"value":1030},"    Name string\n",{"type":44,"tag":79,"props":1032,"children":1033},{"class":81,"line":161},[1034],{"type":44,"tag":79,"props":1035,"children":1036},{},[1037],{"type":50,"value":350},{"type":44,"tag":79,"props":1039,"children":1040},{"class":81,"line":169},[1041],{"type":44,"tag":79,"props":1042,"children":1043},{"emptyLinePlaceholder":117},[1044],{"type":50,"value":120},{"type":44,"tag":79,"props":1046,"children":1047},{"class":81,"line":178},[1048],{"type":44,"tag":79,"props":1049,"children":1050},{},[1051],{"type":50,"value":1052},"func getItem(ctx context.Context, id int) (*Item, error) {\n",{"type":44,"tag":79,"props":1054,"children":1055},{"class":81,"line":454},[1056],{"type":44,"tag":79,"props":1057,"children":1058},{},[1059],{"type":50,"value":1060},"    item, err := sqldb.QueryRow[Item](ctx, db, `\n",{"type":44,"tag":79,"props":1062,"children":1063},{"class":81,"line":462},[1064],{"type":44,"tag":79,"props":1065,"children":1066},{},[1067],{"type":50,"value":1068},"        SELECT id, name FROM items WHERE id = $1\n",{"type":44,"tag":79,"props":1070,"children":1071},{"class":81,"line":471},[1072],{"type":44,"tag":79,"props":1073,"children":1074},{},[1075],{"type":50,"value":1076},"    `, id)\n",{"type":44,"tag":79,"props":1078,"children":1079},{"class":81,"line":480},[1080],{"type":44,"tag":79,"props":1081,"children":1082},{},[1083],{"type":50,"value":1084},"    if err != nil {\n",{"type":44,"tag":79,"props":1086,"children":1087},{"class":81,"line":489},[1088],{"type":44,"tag":79,"props":1089,"children":1090},{},[1091],{"type":50,"value":1092},"        return nil, err\n",{"type":44,"tag":79,"props":1094,"children":1096},{"class":81,"line":1095},14,[1097],{"type":44,"tag":79,"props":1098,"children":1099},{},[1100],{"type":50,"value":1101},"    }\n",{"type":44,"tag":79,"props":1103,"children":1105},{"class":81,"line":1104},15,[1106],{"type":44,"tag":79,"props":1107,"children":1108},{},[1109],{"type":50,"value":1110},"    return item, nil\n",{"type":44,"tag":79,"props":1112,"children":1114},{"class":81,"line":1113},16,[1115],{"type":44,"tag":79,"props":1116,"children":1117},{},[1118],{"type":50,"value":350},{"type":44,"tag":60,"props":1120,"children":1122},{"id":1121},"next-steps",[1123],{"type":50,"value":1124},"Next Steps",{"type":44,"tag":589,"props":1126,"children":1127},{},[1128,1141,1153,1198],{"type":44,"tag":593,"props":1129,"children":1130},{},[1131,1133,1139],{"type":50,"value":1132},"Add more endpoints (see ",{"type":44,"tag":75,"props":1134,"children":1136},{"className":1135},[],[1137],{"type":50,"value":1138},"encore-go-api",{"type":50,"value":1140}," skill)",{"type":44,"tag":593,"props":1142,"children":1143},{},[1144,1146,1152],{"type":50,"value":1145},"Add authentication (see ",{"type":44,"tag":75,"props":1147,"children":1149},{"className":1148},[],[1150],{"type":50,"value":1151},"encore-go-auth",{"type":50,"value":1140},{"type":44,"tag":593,"props":1154,"children":1155},{},[1156,1158,1164,1166,1172,1174,1180,1182,1188,1190,1196],{"type":50,"value":1157},"Add Pub\u002FSub topics (",{"type":44,"tag":75,"props":1159,"children":1161},{"className":1160},[],[1162],{"type":50,"value":1163},"encore-go-pubsub",{"type":50,"value":1165},"), cron jobs (",{"type":44,"tag":75,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":50,"value":1171},"encore-go-cron",{"type":50,"value":1173},"), buckets (",{"type":44,"tag":75,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":50,"value":1179},"encore-go-bucket",{"type":50,"value":1181},"), secrets (",{"type":44,"tag":75,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":50,"value":1187},"encore-go-secret",{"type":50,"value":1189},"), or caching (",{"type":44,"tag":75,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":50,"value":1195},"encore-go-cache",{"type":50,"value":1197},")",{"type":44,"tag":593,"props":1199,"children":1200},{},[1201,1203,1208,1210],{"type":50,"value":1202},"Deploy to Encore Cloud: ",{"type":44,"tag":75,"props":1204,"children":1206},{"className":1205},[],[1207],{"type":50,"value":734},{"type":50,"value":1209}," then ",{"type":44,"tag":75,"props":1211,"children":1213},{"className":1212},[],[1214],{"type":50,"value":1215},"git push encore",{"type":44,"tag":1217,"props":1218,"children":1219},"style",{},[1220],{"type":50,"value":1221},"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);}",{"items":1223,"total":1389},[1224,1236,1248,1266,1282,1294,1310,1325,1342,1357,1366,1376],{"slug":1225,"name":1225,"fn":1226,"description":1227,"org":1228,"tags":1229,"stars":24,"repoUrl":25,"updatedAt":1235},"encore-api","build type-safe APIs with Encore","Define typed API endpoints in Encore.ts using `api(...)` from `encore.dev\u002Fapi`. Covers typed request\u002Fresponse interfaces, path\u002Fquery\u002Fheader\u002Fcookie params, request validation, and `APIError`. For raw endpoints (`api.raw()`) and inbound webhooks, use `encore-webhook` instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1230,1231,1232],{"name":19,"slug":20,"type":14},{"name":9,"slug":8,"type":14},{"name":1233,"slug":1234,"type":14},"TypeScript","typescript","2026-04-06T18:09:46.044101",{"slug":1237,"name":1237,"fn":1238,"description":1239,"org":1240,"tags":1241,"stars":24,"repoUrl":25,"updatedAt":1247},"encore-auth","implement Encore.ts authentication","Protect Encore.ts endpoints with authentication and authorize callers. Covers `authHandler`, `Gateway`, `getAuthData`, and `auth: true`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1242,1245,1246],{"name":1243,"slug":1244,"type":14},"Auth","auth",{"name":9,"slug":8,"type":14},{"name":1233,"slug":1234,"type":14},"2026-04-06T18:09:47.336322",{"slug":1249,"name":1249,"fn":1250,"description":1251,"org":1252,"tags":1253,"stars":24,"repoUrl":25,"updatedAt":1265},"encore-bucket","store files in Encore.ts buckets","Store unstructured files in Encore.ts using `Bucket` from `encore.dev\u002Fstorage\u002Fobjects` — uploads, images, documents, blobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1254,1257,1258,1261,1264],{"name":1255,"slug":1256,"type":14},"Backend","backend",{"name":9,"slug":8,"type":14},{"name":1259,"slug":1260,"type":14},"File Storage","file-storage",{"name":1262,"slug":1263,"type":14},"File Uploads","file-uploads",{"name":1233,"slug":1234,"type":14},"2026-05-16T05:59:52.813772",{"slug":1267,"name":1267,"fn":1268,"description":1269,"org":1270,"tags":1271,"stars":24,"repoUrl":25,"updatedAt":1281},"encore-cache","cache data in Redis with Encore.ts","Cache data in Redis from Encore.ts using `CacheCluster` and typed keyspaces from `encore.dev\u002Fstorage\u002Fcache`. Type-safe key\u002Fvalue access with TTLs, atomic increments, and per-keyspace data shapes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1272,1273,1276,1277,1280],{"name":1255,"slug":1256,"type":14},{"name":1274,"slug":1275,"type":14},"Caching","caching",{"name":9,"slug":8,"type":14},{"name":1278,"slug":1279,"type":14},"Redis","redis",{"name":1233,"slug":1234,"type":14},"2026-05-16T05:59:56.808328",{"slug":1283,"name":1283,"fn":1284,"description":1285,"org":1286,"tags":1287,"stars":24,"repoUrl":25,"updatedAt":1293},"encore-code-review","review Encore.ts code","Review existing Encore.ts code for best practices and common anti-patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1288,1291,1292],{"name":1289,"slug":1290,"type":14},"Code Review","code-review",{"name":9,"slug":8,"type":14},{"name":1233,"slug":1234,"type":14},"2026-04-06T18:10:01.123999",{"slug":1295,"name":1295,"fn":1296,"description":1297,"org":1298,"tags":1299,"stars":24,"repoUrl":25,"updatedAt":1309},"encore-cron","schedule recurring jobs in Encore.ts","Schedule periodic \u002F recurring work in Encore.ts using `CronJob` from `encore.dev\u002Fcron`. Covers `every: \"1h\"` interval syntax and `schedule: \"0 9 * * 1\"` cron expressions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1300,1303,1304,1305,1308],{"name":1301,"slug":1302,"type":14},"Automation","automation",{"name":1255,"slug":1256,"type":14},{"name":9,"slug":8,"type":14},{"name":1306,"slug":1307,"type":14},"Scheduling","scheduling",{"name":1233,"slug":1234,"type":14},"2026-05-16T05:59:54.146651",{"slug":1311,"name":1311,"fn":1312,"description":1313,"org":1314,"tags":1315,"stars":24,"repoUrl":25,"updatedAt":1324},"encore-database","build Encore databases","Work with PostgreSQL in Encore.ts using `SQLDatabase` from `encore.dev\u002Fstorage\u002Fsqldb` — schema migrations and SQL queries.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1316,1319,1320,1323],{"name":1317,"slug":1318,"type":14},"Database","database",{"name":9,"slug":8,"type":14},{"name":1321,"slug":1322,"type":14},"ORM","orm",{"name":1233,"slug":1234,"type":14},"2026-04-06T18:09:54.823017",{"slug":1326,"name":1326,"fn":1327,"description":1328,"org":1329,"tags":1330,"stars":24,"repoUrl":25,"updatedAt":1341},"encore-frontend","connect frontend to Encore backend","Connect a frontend application (React, Next.js, Vue, Svelte, etc.) to an Encore.ts backend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1331,1332,1335,1338],{"name":9,"slug":8,"type":14},{"name":1333,"slug":1334,"type":14},"Frontend","frontend",{"name":1336,"slug":1337,"type":14},"Next.js","next-js",{"name":1339,"slug":1340,"type":14},"React","react","2026-04-06T18:09:56.091006",{"slug":1343,"name":1343,"fn":1344,"description":1345,"org":1346,"tags":1347,"stars":24,"repoUrl":25,"updatedAt":1356},"encore-getting-started","build and run applications with Encore.ts","Bootstrap a brand-new Encore.ts project from zero. Only for first-time CLI install and `encore app create` — not for architecture or feature questions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1348,1349,1350,1351,1352,1353],{"name":19,"slug":20,"type":14},{"name":1255,"slug":1256,"type":14},{"name":9,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"name":1233,"slug":1234,"type":14},{"name":1354,"slug":1355,"type":14},"Web Development","web-development","2026-04-06T18:10:04.885446",{"slug":1138,"name":1138,"fn":1358,"description":1359,"org":1360,"tags":1361,"stars":24,"repoUrl":25,"updatedAt":1365},"build APIs with Encore Go","Define typed API endpoints in Encore Go using `\u002F\u002Fencore:api` annotations. Covers typed request\u002Fresponse structs, path\u002Fquery\u002Fheader\u002Fcookie params, and error returns. For raw endpoints (`\u002F\u002Fencore:api raw`) and inbound webhooks, use `encore-go-webhook` instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1362,1363,1364],{"name":19,"slug":20,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},"2026-04-06T18:09:48.578781",{"slug":1151,"name":1151,"fn":1367,"description":1368,"org":1369,"tags":1370,"stars":24,"repoUrl":25,"updatedAt":1375},"implement authentication with Encore Go","Protect Encore Go endpoints with authentication and authorize callers. Covers `auth.AuthHandler`, `auth.UserID`, the `Authorization` header, and `\u002F\u002Fencore:api auth`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1371,1372,1373,1374],{"name":1243,"slug":1244,"type":14},{"name":1255,"slug":1256,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},"2026-04-06T18:09:51.065102",{"slug":1179,"name":1179,"fn":1377,"description":1378,"org":1379,"tags":1380,"stars":24,"repoUrl":25,"updatedAt":1388},"store files in Encore Go buckets","Store unstructured files in Encore Go using `objects.NewBucket` from `encore.dev\u002Fstorage\u002Fobjects` — uploads, images, documents, blobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1381,1382,1383,1384,1385],{"name":1255,"slug":1256,"type":14},{"name":9,"slug":8,"type":14},{"name":1259,"slug":1260,"type":14},{"name":22,"slug":23,"type":14},{"name":1386,"slug":1387,"type":14},"Storage","storage","2026-05-16T06:00:03.633918",28,{"items":1391,"total":1389},[1392,1398,1404,1412,1420,1426,1434],{"slug":1225,"name":1225,"fn":1226,"description":1227,"org":1393,"tags":1394,"stars":24,"repoUrl":25,"updatedAt":1235},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1395,1396,1397],{"name":19,"slug":20,"type":14},{"name":9,"slug":8,"type":14},{"name":1233,"slug":1234,"type":14},{"slug":1237,"name":1237,"fn":1238,"description":1239,"org":1399,"tags":1400,"stars":24,"repoUrl":25,"updatedAt":1247},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1401,1402,1403],{"name":1243,"slug":1244,"type":14},{"name":9,"slug":8,"type":14},{"name":1233,"slug":1234,"type":14},{"slug":1249,"name":1249,"fn":1250,"description":1251,"org":1405,"tags":1406,"stars":24,"repoUrl":25,"updatedAt":1265},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1407,1408,1409,1410,1411],{"name":1255,"slug":1256,"type":14},{"name":9,"slug":8,"type":14},{"name":1259,"slug":1260,"type":14},{"name":1262,"slug":1263,"type":14},{"name":1233,"slug":1234,"type":14},{"slug":1267,"name":1267,"fn":1268,"description":1269,"org":1413,"tags":1414,"stars":24,"repoUrl":25,"updatedAt":1281},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1415,1416,1417,1418,1419],{"name":1255,"slug":1256,"type":14},{"name":1274,"slug":1275,"type":14},{"name":9,"slug":8,"type":14},{"name":1278,"slug":1279,"type":14},{"name":1233,"slug":1234,"type":14},{"slug":1283,"name":1283,"fn":1284,"description":1285,"org":1421,"tags":1422,"stars":24,"repoUrl":25,"updatedAt":1293},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1423,1424,1425],{"name":1289,"slug":1290,"type":14},{"name":9,"slug":8,"type":14},{"name":1233,"slug":1234,"type":14},{"slug":1295,"name":1295,"fn":1296,"description":1297,"org":1427,"tags":1428,"stars":24,"repoUrl":25,"updatedAt":1309},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1429,1430,1431,1432,1433],{"name":1301,"slug":1302,"type":14},{"name":1255,"slug":1256,"type":14},{"name":9,"slug":8,"type":14},{"name":1306,"slug":1307,"type":14},{"name":1233,"slug":1234,"type":14},{"slug":1311,"name":1311,"fn":1312,"description":1313,"org":1435,"tags":1436,"stars":24,"repoUrl":25,"updatedAt":1324},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1437,1438,1439,1440],{"name":1317,"slug":1318,"type":14},{"name":9,"slug":8,"type":14},{"name":1321,"slug":1322,"type":14},{"name":1233,"slug":1234,"type":14}]