// Stay in touch?
Products
Encore CloudEncore Cloud
Encore.tsEncore.ts
Encore.goEncore.go
PricingPricing
Book a DemoBook a Demo
Use Cases
AI-Powered DevelopmentAI-Powered Development
Event-Driven SystemsEvent-Driven Systems
Distributed SystemsDistributed Systems
Case StudiesCase Studies
ShowcaseShowcase
Resources
DocsDocs
InstallInstall
Example AppsExample Apps
Demo videoDemo video
ArticlesArticles
ResourcesResources
GitHub ReleasesGitHub Releases
Systems Operational
Company
About UsAbout Us
Swag ShopSwag Shop
ContactContact
JobsJobs
PressPress
TermsTerms
Privacy PolicyPrivacy Policy
Data Processing AgreementData Processing Agreement
Enterprise SLAEnterprise SLA
Encore
© 2026 EncoreAll rights reserved
© 2026 Encore All Rights Reserved
GitHubDiscordYouTube

Encore: framework backend com infraestrutura automática

APIs com tipagem segura, banco de dados, Pub/Sub, cache, cron jobs e deploy na AWS e GCP, tudo declarado em TypeScript.

03/26/26
10 Min Read
Ivan Cernja
03/26/26

Encore: framework backend com infraestrutura automática

APIs com tipagem segura, banco de dados, Pub/Sub, cache, cron jobs e deploy na AWS e GCP, tudo declarado em TypeScript.

Ivan Cernja
10 Min Read

O Encore é um framework open source para construir backends em TypeScript (e Go). Você declara APIs, bancos de dados, Pub/Sub, cron jobs, cache e armazenamento de objetos como objetos TypeScript, e o framework provisiona tudo automaticamente, tanto local quanto em produção na AWS ou GCP.

O código da aplicação é a única fonte de verdade para a infraestrutura.

Deploy with Encore

Quer ir direto ao código? Clone o encurtador de URLs e faça deploy na sua cloud para acompanhar o artigo.

Deploy

O problema

Frameworks como Express, Fastify e NestJS cuidam do roteamento HTTP, mas banco de dados, filas de mensagens, cache, observabilidade e deploy ficam por sua conta. Na prática, você acaba combinando Docker Compose, Terraform, GitHub Actions e Datadog, e gasta tempo mantendo tudo sincronizado.

O Encore integra tudo isso no framework. Como ele entende a estrutura completa da aplicação em tempo de compilação, ele consegue provisionar infraestrutura, gerar documentação, criar diagramas de arquitetura e instrumentar rastreamento distribuído automaticamente.

Times como o da Groupon reportam 3x mais velocidade de desenvolvimento e 90% de redução no tempo de entrega de projetos depois de adotar o Encore. A Pave Bank construiu um banco digital licenciado do zero em 9 meses, com o dobro da velocidade que o time anterior levou para construir o Monzo.

Funcionalidades

APIs com tipagem segura (type-safe)

Cada endpoint é uma função TypeScript com tipos explícitos. O framework cuida de roteamento, validação e serialização:

import { api } from "encore.dev/api"; interface CreateOrderRequest { customerId: string; total: number; } interface Order { id: string; customerId: string; total: number; } export const createOrder = api( { expose: true, method: "POST", path: "/orders" }, async (req: CreateOrderRequest): Promise<Order> => { // sua lógica aqui } );

Chamadas entre serviços também são type-safe, com autocomplete na IDE e validação automática dos tipos.

O Service Catalog mostra todos os endpoints, tipos e dependências entre serviços, gerado automaticamente a partir do código:

Service Catalog do Encore mostrando endpoints e dependências entre serviços

Infraestrutura declarativa

Bancos de dados, Pub/Sub, cron jobs, cache e armazenamento de objetos são declarados como objetos TypeScript:

import { SQLDatabase } from "encore.dev/storage/sqldb"; import { Topic } from "encore.dev/pubsub"; import { CronJob } from "encore.dev/cron"; // PostgreSQL, provisionado automaticamente const db = new SQLDatabase("orders", { migrations: "./migrations" }); // Pub/Sub: SNS+SQS na AWS, Pub/Sub no GCP const orderCreated = new Topic<OrderEvent>("order-created", { deliveryGuarantee: "at-least-once", }); // Cron job que roda todo dia às 8h const dailyReport = new CronJob("daily-report", { title: "Gerar relatório diário", schedule: "0 8 * * *", endpoint: reports.generate, });

Localmente, o framework provisiona PostgreSQL real e roda Pub/Sub com semântica equivalente. Em produção, os mesmos objetos mapeiam para serviços gerenciados da AWS ou GCP.

Multi-cloud: AWS e GCP

A mesma aplicação roda em qualquer cloud sem mudanças no código. O Encore mapeia cada primitiva para o serviço nativo do provedor:

PrimitivaAWSGCP
Banco de dadosRDS (PostgreSQL)Cloud SQL
Pub/SubSNS + SQSGCP Pub/Sub
CacheElastiCacheMemorystore
Armazenamento de objetosS3Cloud Storage
CronCloudWatch EventsCloud Scheduler

Você pode ter staging na GCP e produção na AWS, ou migrar entre clouds, usando o mesmo código. O dashboard de infraestrutura mostra tudo que está provisionado em cada ambiente, com acesso direto aos recursos na sua conta:

Dashboard de infraestrutura do Encore mostrando recursos provisionados na cloud

Visibilidade e controle para o time de infraestrutura

Quando um deploy inclui mudanças de infraestrutura (um novo banco de dados, um tópico de Pub/Sub, etc.), o Encore mostra exatamente o que vai ser provisionado antes de executar. O time de plataforma ou DevOps pode revisar e aprovar ou rejeitar cada mudança:

Fluxo de deploy com aprovação de mudanças de infraestrutura

O time de infraestrutura configura as políticas do ambiente uma vez (tipo de instância, backups, criptografia, IAM com privilégio mínimo) e mantém visibilidade total sobre o que está rodando na cloud. Os desenvolvedores fazem deploy normalmente, e as mudanças de infraestrutura passam pelo fluxo de aprovação antes de serem provisionadas.

Toda a infraestrutura roda na sua própria conta AWS/GCP. Você tem acesso total ao console e pode inspecionar ou modificar qualquer recurso diretamente.

Ambiente local

encore run provisiona toda a infraestrutura local (PostgreSQL, Pub/Sub, cache) e abre o Development Dashboard em localhost:9400.

O dashboard inclui um API Explorer para testar endpoints, um Database Explorer para consultar bancos, e documentação gerada automaticamente de todos os serviços:

Dashboard do Encore Cloud 2.0

Diagramas de arquitetura

O Encore gera diagramas interativos da arquitetura da aplicação que atualizam em tempo real conforme o código muda. Você vê serviços, APIs, bancos de dados, tópicos de Pub/Sub e as dependências entre eles:

Diagrama de arquitetura gerado automaticamente

Rastreamento distribuído e métricas

Cada request gera um rastreamento distribuído (distributed trace) com timing de cada operação, request/response bodies, chamadas entre serviços e erros com stack traces completos. O tracing é automático e já vem configurado.

Rastreamento distribuído do Encore mostrando o fluxo de um request

O mesmo tracing funciona tanto localmente quanto em produção. Métricas de cada serviço também são coletadas automaticamente:

Métricas do Encore Cloud

Integração com IA

O Encore inclui ferramentas para desenvolvimento assistido por IA:

  • AI Instructions que agentes como Cursor, Claude Code e GitHub Copilot usam para entender o framework
  • MCP Server que expõe serviços, APIs, schemas de banco, traces e topologia de Pub/Sub para agentes via Model Context Protocol

Quando você pede pro agente "adicionar um endpoint que busca pedidos do banco", ele já sabe quais serviços existem, qual o schema do banco e quais padrões o projeto segue.

Testes com infraestrutura real

Testes rodam contra infraestrutura real. Cada teste recebe seu próprio banco de dados isolado:

import { describe, expect, test } from "vitest"; import { createOrder, getOrder } from "./orders"; describe("orders", () => { test("criar e buscar pedido", async () => { const order = await createOrder({ customerId: "cust_123", total: 9990, }); const fetched = await getOrder({ id: order.id }); expect(fetched.total).toBe(9990); }); });

encore test roda tudo. Os testes usam bancos de dados reais provisionados automaticamente pelo framework.

Self-hosting e Encore Cloud

Self-hosting: encore build docker gera uma imagem Docker que roda em qualquer lugar (Kubernetes, ECS, Cloud Run, fly.io).

Encore Cloud (opcional): automatiza deploy na sua conta AWS ou GCP. Provisiona infraestrutura com IAM com privilégio mínimo, configura CI/CD, cria ambientes de preview por PR e mostra custos e recursos. Um git push faz o deploy completo.

Criar app com Encore

Quem usa o Encore

O Encore foi criado por engenheiros do Spotify e do Google. Alguns dos times usando em produção:

  • Toolzz plataforma brasileira de educação corporativa e agentes de IA
  • Pave Bank construiu um banco digital licenciado em 9 meses
  • Groupon usa Encore para serviços de backend
  • Startups e scaleups em fintech, e-commerce, SaaS e plataformas B2B

O framework tem mais de 12.000 stars no GitHub e uma comunidade ativa no Discord.

Tutorial: encurtador de URLs com PostgreSQL

Deploy with Encore

Quer pular direto para uma aplicação rodando? Clone este starter e faça deploy na sua própria cloud.

Deploy

1. Instalar o Encore CLI

Instale o CLI para o seu sistema operacional. Ele inclui tudo que você precisa para criar, rodar e fazer deploy de aplicações Encore:

# macOS brew install encoredev/tap/encore # Linux curl -L https://encore.dev/install.sh | bash # Windows iwr https://encore.dev/install.ps1 | iex

2. Criar a aplicação

O comando encore app create cria um novo projeto a partir de um template. Vamos começar com o Hello World e adicionar funcionalidade em cima:

encore app create meu-app --example=ts/hello-world cd meu-app

Rode encore run e abra http://localhost:9400. O dashboard já está funcionando com um endpoint Hello World. Você pode testar o endpoint direto no API Explorer e ver o trace da requisição.

3. Criar o serviço de URLs

No Encore, cada serviço é uma pasta com um arquivo encore.service.ts. Vamos criar o serviço que vai cuidar das URLs encurtadas:

mkdir url

url/encore.service.ts:

import { Service } from "encore.dev/service"; export default new Service("url");

4. Adicionar o banco de dados

Aqui é onde o Encore se diferencia. Para adicionar um banco PostgreSQL, você declara um SQLDatabase no código e cria uma migration SQL. O framework provisiona o banco automaticamente quando você rodar a aplicação.

mkdir url/migrations

url/migrations/001_create_tables.up.sql:

CREATE TABLE url ( id TEXT PRIMARY KEY, original_url TEXT NOT NULL );

5. Criar os endpoints

Agora vamos criar os endpoints da API. Cada endpoint é uma função TypeScript com tipos explícitos para request e response. O Encore gera a documentação automaticamente no Service Catalog, e os endpoints já aparecem no API Explorer para teste.

url/url.ts:

import { api, APIError } from "encore.dev/api"; import { SQLDatabase } from "encore.dev/storage/sqldb"; import { randomBytes } from "node:crypto"; // Declara o banco de dados e aponta para as migrations const db = new SQLDatabase("url", { migrations: "./migrations" }); interface URL { id: string; url: string; } // POST /url — recebe uma URL e retorna um ID curto export const shorten = api( { method: "POST", path: "/url", expose: true }, async ({ url }: { url: string }): Promise<URL> => { const id = randomBytes(6).toString("base64url"); await db.exec` INSERT INTO url (id, original_url) VALUES (${id}, ${url}) `; return { id, url }; } ); // GET /url/:id — busca a URL original pelo ID export const get = api( { method: "GET", path: "/url/:id", expose: true }, async ({ id }: { id: string }): Promise<URL> => { const row = await db.queryRow` SELECT original_url FROM url WHERE id = ${id} `; if (!row) throw APIError.notFound("url não encontrada"); return { id, url: row.original_url }; } );

Repare que a declaração do banco (new SQLDatabase) e as queries (db.exec, db.queryRow) estão no mesmo arquivo dos endpoints. O Encore usa isso para entender quais recursos cada serviço precisa e provisiona tudo automaticamente.

6. Rodar e testar

encore run

O Encore detecta a declaração do SQLDatabase, provisiona um PostgreSQL local, roda a migration, e sobe a aplicação. Tudo automático. (Quando você faz deploy com Encore Cloud, o mesmo processo provisiona um RDS na AWS ou Cloud SQL no GCP.)

# Encurtar uma URL curl http://localhost:4000/url -d '{"url": "https://encore.dev"}' # Buscar a URL original curl http://localhost:4000/url/<id-retornado>

Abra http://localhost:9400 para ver o rastreamento distribuído de cada request, incluindo o tempo da query no banco, o request/response body, e o status de cada operação.

7. Adicionar um teste

Os testes chamam os endpoints como funções TypeScript normais. O Encore provisiona um banco de dados isolado para cada execução de teste, então você testa contra infraestrutura real.

url/url.test.ts:

import { describe, expect, test } from "vitest"; import { shorten, get } from "./url"; describe("url shortener", () => { test("encurtar e buscar retorna a url original", async () => { const shortened = await shorten({ url: "https://example.com" }); const result = await get({ id: shortened.id }); expect(result.url).toBe("https://example.com"); }); });
encore test

8. Deploy

Para self-hosting, gere uma imagem Docker e faça deploy onde quiser (Kubernetes, ECS, Cloud Run, etc.):

encore build docker url-shortener:v1.0

Com Encore Cloud, um git push faz o deploy completo, incluindo provisionamento de banco de dados e infraestrutura na sua conta AWS ou GCP:

git add -A . && git commit -m "URL shortener" git push encore

Próximos passos

Deploy with Encore

Crie sua conta e faça deploy deste encurtador de URLs na AWS ou GCP em minutos.

Deploy
  • Documentação
  • Exemplos (URL shortener, GraphQL, Slack bots, Stripe, e mais)
  • Discord
  • GitHub
  • Encore Cloud

Para ver o Encore funcionando com a stack da sua equipe, agende uma conversa.

Contents
O problema
Funcionalidades
Quem usa o Encore
Tutorial: encurtador de URLs com PostgreSQL
Próximos passos

A development platform for your own cloud on AWS & GCP

Encore automates infrastructure management, observability, and documentation. Your team can focus on shipping product.

Ready to build your next backend?

Encore is the Open Source framework for building robust type-safe distributed systems with declarative infrastructure.