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