Modern Angular
Angular moderno para times em produção
Modernização sem wait list é campanha. Com wait list, sequência. Cinco Angular majors em 30 meses entre v16 e v21. Os três documentos que tiram um time em produção do arrasto para a entrega, com um review gate que aguenta trinta segundos.
A decisão que você realmente toma no PR review
Cinco Angular majors caíram entre v16 (maio/2023) e v21 (novembro/2025), conforme a referência oficial de releases. Essa cadência funciona quando o time tem referência escrita sobre o que adotar, testar em spike, ou explicitamente esperar. Sem essa referência, toda PR de modernização reabre o mesmo debate.
Você é quem aprova as PRs de modernização num time Angular 16-21 em produção (tech lead, arquiteto técnico, ou a sênior que o time consulta). Uma PR cai na sua fila: feature nova usando Signals pra estado local. Você tem trinta segundos. Aprova, devolve ou escala?
Boa parte do ruído de modernização vive nesses trinta segundos. O framework não para de soltar versão. O time não para de propor adoção. Você aprova ou empurra de volta sem referência escrita. Três trimestres depois, metade do código parece Angular 16 e a outra metade parece Angular 21, e ninguém sabe explicar o split.
Três documentos que o time concorda antes de qualquer proposta de modernização entrar em discussão absorvem boa parte dessa pressão. A lista de padrões aprovados como default. A lista de padrões em spike. A lista de padrões explicitamente esperando.
Três listas que o time deve manter
Cada lista responde a uma pergunta de review diferente.
| Lista | Mora em | Revisar quando |
|---|---|---|
| Default pra código novo | Lint rules e style guide | Em todo Angular major |
| Candidatas a spike | ADR por feature | Quando o spike fecha |
| 'Explicitamente esperando' | Log trimestral de decisões | Trimestralmente, ou quando o status muda |
O que entra em cada lista
A primeira lista é o 'sim'. Componentes novos vão standalone, estado local vai pra Signals, control flow usa @if/@for/@switch, injeção de dependência usa inject. Codificado no linter pra PR review não re-discutir a decisão.
RxJS continua default pra streams genuinamente assíncronos (autocomplete com debounce, WebSocket, polling, cancelamento). Signals substitui estado local que antes vivia em BehaviorSubject. Os dois não competem; eles respondem perguntas diferentes.
A segunda lista é o 'talvez, em branch'. Zoneless em app existente (stable desde v20.2, default em projetos novos a partir da v21, mas remover Zone.js dum legacy ainda é spike). Vitest pra suite grande. SSR/hydration em rota pública. Cada uma ganha uma ADR escrita (contexto, hipótese, critério de validação, plano de rollback) antes de qualquer código tocar a main.
A terceira lista é a que a maioria dos times pula. Features que parecem modernas, soam modernas, e ainda não cabem em fluxo crítico de produção.
Em junho de 2026, a wait list acabou de provar o valor dela. Signal Forms, as APIs rxResource e resource, e o Angular Aria estavam nela até a v21, e o v22 (junho/2026) graduou os três pra estável, que é exatamente o trigger que a lista existe pra capturar: eles saem de 'esperando' pra 'adotar em código novo'. O que continua na lista agora é a superfície de runtime de IA, tipo o WebMCP, que ainda é experimental e não cabe em billing, compliance ou qualquer fluxo que você não consiga reverter fácil.
A wait list não é 'contra' essas features. É 'ainda não, e aqui está o trigger que tiraria da lista'. Recheque a cada Angular major.
# ADR: spike Vitest no package de orders
Status: proposta
Contexto: suite de testes de orders (~280 specs) roda em 4m20s no Karma; time relata flaky failures em torno de fakeAsync.
Decisão: migrar 1 slice do módulo pra Vitest, medir runtime, estabilidade de CI e custo de migração. Nenhum código de produção tocado.
Escopo: orders/specs apenas. Outros packages intactos.
Fora de escopo: mudar padrões de teste de componente, substituir TestBed.
Riscos: dependências escondidas de Zone.js em helpers compartilhados; diferenças de paralelismo no CI.
Validação: runtime, taxa de flake (janela de 7 dias), revisão da diff de migração pelo time.
Rollback: reverter o package; manter ADR pra próxima tentativa.A lista 'explicitamente esperando' merece mais cuidado que as outras duas
Em três bases Angular que ajudei a modernizar entre 2023 e 2026, a lista que esses times nunca tinham era a terceira. Tinham defaults. Tinham spikes. Não tinham registro escrito do que tinham decidido não adotar ainda, nem o porquê.
Um time que documentou o que adota é um time que pensou em modernização. Um time que documentou o que está explicitamente esperando é um time que decidiu.
Sem essa terceira lista, toda PR de modernização vira debate do zero (pq ninguém sabe o que já foi decidido). Com ela, a pergunta de review fica específica: 'a PR propõe Signal Forms pro form de cobrança, mas a wait-list marcou Signal Forms como developer preview. O que mudou no status da API?'
A lista não precisa ser longa. Três a cinco features por vez basta. Cada entrada precisa de (1) o que a gente não tá adotando, (2) por quê (status, raio de impacto, custo de dependência), (3) o trigger que tiraria a feature da lista.
Como comunicar 'a gente não tá adotando isso ainda' sem soar conservador
Liderança sênior frequentemente escuta 'a gente tá esperando Signal Forms' como 'a gente tá atrasado'. Isso é problema de tradução, não de estratégia.
O reframe: modernização sem wait list é campanha. Modernização com wait list é sequência. Sequência entrega; campanha se arrasta.
Frases específicas que funcionaram nas minhas reviews: 'A gente escalonou a adoção pra acompanhar o track record da API em produção.' 'A gente está adiando X até ver como interage com a arquitetura de forms.' 'A direção do framework é correta; o estado atual (experimental, developer preview) ainda não cabe nos nossos fluxos críticos.'
Essas frases nomeiam a disciplina e dão um lugar pra conversa upstream parar.
Quando revisar cada lista
Review por calendário falha porque o framework não respeita calendário. Review por trigger funciona.
Quando o Angular team comunica adoção, tende a comunicar com dado de produção. No anúncio do v20, Minko Gechev (líder do Angular team) destacou que o YouTube reduziu input latency em 35% no Living Room usando Angular Signals com Wiz. Um time que mantém a wait-list aprende a ler esse tipo de sinal antes de promover features para 'default'.
Triggers que vale ligar ao seu processo:
| Trigger | Lista pra revisar | Por que |
|---|---|---|
| Novo Angular major (v22, v23) | Todas as três | Defaults, status labels e deprecations podem mudar |
| Track record em produção (6+ meses numa API experimental) | Explicitamente esperando | Candidata direta a promoção |
| Mudança de capacidade do time | Candidatas a spike | Ajustar orçamento de experimento |
| Bug crítico em uma API 'default' | Default pra código novo | Rebaixar, documentar, comunicar |
O ponto
Pra um time em produção, o que sobrevive a um Angular major são as decisões que você escreveu, onde elas moram, e como o time encontra essas decisões às 21h de uma sexta quando um release manager pergunta 'a gente tá usando Signal Forms em billing ou não?'.
Artefato para reaproveitar
Perguntas de review-gate pra uma PR de modernização
- A qual das três listas o padrão dessa PR pertence?
- Se reivindica 'default', isso tá no linter?
- Se é spike, onde tá a ADR com hipótese, validação e rollback?
- Se a API tá na lista 'explicitamente esperando', o que mudou no status dela?
- Se nenhum dos casos acima, qual lista essa PR deveria estar estabelecendo?
Fontes consultadas
- https://angular.dev/reference/releases
- https://angular.dev/guide/components
- https://angular.dev/guide/signals
- https://angular.dev/guide/templates/control-flow
- https://angular.dev/guide/zoneless
- https://angular.dev/guide/forms/signals/overview
- https://angular.dev/api/core/rxjs-interop/rxResource
- https://angular.dev/guide/aria/overview
- https://angular.dev/api/core/inject
- https://blog.angular.dev/announcing-angular-v21-57946c34f14b
- https://blog.angular.dev/announcing-angular-v20-b5c9c06cf301
- https://github.com/angular/angular/discussions/49685
- https://github.com/angular/angular/discussions/50719
Modern Angular Playbook
Este artigo é um play.
O Playbook do Angular Moderno reúne o diagnóstico, a matriz de adoção, onze jogadas e o plano de 30 dias. Grátis, em inglês e português.
Você recebe os dois PDFs por email, pela lista do Dojo IA.
André Ramosdisponível para vagas remotas, UTC−3Entre em contato →