# Edição de 30 de setembro de 2026

Data: 2026-09-30

Laravel 13.34.0 saiu com mudanças relevantes em filas, cache, locks, Eloquent e filesystem, enquanto a branch 14.x passou a preparar uma mudança de comportamento no streaming do S3. Laravel AI 1.0.1 trouxe `Ai::build()` e consolidou `Collection::decide()`. Flux 2.20.1 publicou a nova estrutura de Card, Alpine corrigiu um problema de `x-cloak` durante morphs e Precognition ganhou controle sobre serialização. A recomendação do dia é `spatie/laravel-permission`.

## Laravel Framework

### Laravel 13.34.0 reúne ajustes importantes em filas, cache e banco [Released]

A nova versão concentra APIs e correções que afetam workers, locks, filesystem, Eloquent e operações de banco usadas no dia a dia.

O `v13.34.0` foi publicado com um conjunto grande de mudanças. Entre as mais úteis estão a duração no evento `JobProcessed`, aviso ao job antes de timeout, `queue:flush --queue`, suporte a providers nomeados de credenciais S3 e Cloud IAM, além de `Database\Schema\Builder::getColumn()`.

Também entraram correções para deadlocks em `DatabaseLock`, locks do Memcached com duração acima de 30 dias, throttle no Redis, cache memoizado com tags e chaves numéricas, `wherePivotBetween()` em operações de pivot e streams anexados a requisições multipart refeitas pelo HTTP Client.

Link: https://github.com/laravel/framework/releases/tag/v13.34.0

Fonte: laravel/framework


### Laravel 12.69.3 recebe ajustes em workers e credenciais S3 [Released]

A linha 12.x recebeu o acerto do exit code de timeout dos workers e o suporte a providers nomeados de credenciais para S3.

O `v12.69.3` faz o backport de duas mudanças: torna alcançável o exit code usado quando um worker termina por timeout e adiciona suporte a providers nomeados de credenciais S3, incluindo cenários de Cloud IAM.

Link: https://github.com/laravel/framework/releases/tag/v12.69.3

Fonte: laravel/framework


### Laravel 14 passa a usar streaming real no S3 por padrão [Merged]

A branch 14.x muda `stream_reads` para `true`, evitando que `readStream()` copie objetos inteiros para armazenamento temporário local.

Hoje o Laravel desativa `stream_reads` nos discos S3, mesmo que o adapter do Flysystem use streaming por padrão. Com o PR merged na `14.x`, leituras via `Storage::disk('s3')->readStream()` passam a usar o stream diretamente.

A mudança é tratada como breaking change. Projetos que precisarem do comportamento antigo poderão configurar `'stream_reads' => false` no disco.

Link: https://github.com/laravel/framework/pull/61778

Fonte: laravel/framework


### Comandos agendados longos podem detectar `schedule:interrupt` [Merged]

A nova API `Schedule::interruptedSince()` permite que comandos demorados parem em um ponto seguro depois de um deploy ou interrupção do scheduler.

O `schedule:interrupt` já interrompia o loop de `schedule:run`, mas comandos longos iniciados com `runInBackground()` não tinham como saber que a interrupção aconteceu. O PR passa a registrar quando ela ocorreu e adiciona `Schedule::interruptedSince($startedAt)`.

Isso permite encerrar processamento por lotes de forma cooperativa, sem depender de matar o processo no meio de uma etapa.

Link: https://github.com/laravel/framework/pull/61764

Fonte: laravel/framework


### `queue:work --memory` aceita porcentagem do `memory_limit` [Merged]

Workers podem definir o limite de reinício como percentual da memória configurada no PHP, em vez de um valor fixo em megabytes.

A opção passa a aceitar valores como:

```bash
php artisan queue:work --memory=60%
```

O limite acompanha o `memory_limit` do ambiente, o que reduz a necessidade de recalcular o valor ao redimensionar containers ou workers. A mudança não altera as filas gerenciadas do Laravel Cloud, que não aceitam opções customizadas de worker.

Link: https://github.com/laravel/framework/pull/61753

Fonte: laravel/framework


### Fakes de testes passam a aceitar arrays de propriedades [Merged]

`BusFake`, `EventFake`, `NotificationFake` e `QueueFake` ganham uma forma mais curta de conferir propriedades sem callbacks manuais.

As assertions passam a aceitar um array com as propriedades esperadas. Modelos são comparados usando `is()`, o que reduz callbacks repetitivos em testes de jobs, eventos e notificações.

Exemplo:

```php
Queue::assertPushed(ProcessPodcast::class, [
    'podcast' => $podcast,
    'user' => $user,
    'status' => 'pending',
]);
```

Link: https://github.com/laravel/framework/pull/61770

Fonte: laravel/framework


### Testes paralelos de views deixam de falhar em execuções concorrentes [Merged]

O Laravel evita condições de corrida ao criar e remover diretórios de views compiladas quando duas suítes paralelas rodam ao mesmo tempo.

Duas execuções paralelas do mesmo projeto podiam usar os mesmos diretórios temporários por worker. Se uma criasse ou removesse o diretório entre a checagem e a operação da outra, surgiam erros como `mkdir(): File exists` ou `UnexpectedValueException`.

A correção torna essas etapas tolerantes ao estado já ter mudado, sem alterar o token dos workers nem o caminho das views compiladas.

Link: https://github.com/laravel/framework/pull/61786

Fonte: laravel/framework


## Laravel AI

### Laravel AI 1.0.1 adiciona providers sob demanda e fecha arestas do fluxo de ferramentas [Released]

A primeira atualização após o 1.0 traz `Ai::build()`, publica `Collection::decide()` e melhora o tratamento de tools e arquivos remotos.

`Ai::build()` cria um provider a partir de um array de configuração, sem precisar alterar `config()` globalmente. Isso atende bem aplicações multi-tenant que guardam credenciais por cliente e evita vazar estado entre requests long-lived.

O release também inclui `Collection::decide()`, melhorias no fetch de arquivos remotos e uma proteção no resume de tool calls: chamadas antigas de ferramentas que não implementam `Approvable` deixam de ser executadas como se estivessem aguardando aprovação.

Para jobs em fila, o provider sob demanda deve ser reconstruído pelo método `provider()` do agente. Um provider criado diretamente no call site não pode ser serializado para a fila.

Link: https://github.com/laravel/ai/releases/tag/v1.0.1

Fonte: laravel/ai


## Flux

### Flux 2.20.1 publica a nova estrutura de Card [Released]

Cards ganham partes próprias para header, body, footer, ações e mídia com bleed, além do novo layout `inset` para `flux:main`.

O `v2.20.1` consolida a reformulação do Card. Agora é possível compor `card.header`, `card.heading`, `card.subheading`, `card.body`, `card.footer`, `card.actions` e `card.bleed` sem recorrer a padding e margens negativas manuais.

Também entram tratamentos de body como `seamless`, `inset`, `flush`, `divided` e `separated`, tamanhos de `xs` a `lg` e a separação correta entre as superfícies `default` e `outline`. O release ainda adiciona `inset` ao `flux:main`, com uma superfície arredondada que pode rolar internamente no desktop.

Link: https://github.com/livewire/flux/releases/tag/v2.20.1

Fonte: livewire/flux


## Alpine.js

### `x-cloak` deixa de reaparecer durante morphs [Merged]

Elementos já renderizados não voltam a ficar temporariamente ocultos quando o Alpine faz morph do HTML.

O morph podia copiar `x-cloak` de volta para um elemento que já havia sido inicializado. Durante essa janela, o elemento ficava com `display: none`, e `MutationObserver` podia medir altura `0px`.

A correção remove `x-cloak` de forma síncrona do nó clonado antes do patch. O caso é especialmente relevante em interfaces Livewire que medem elementos depois de uma atualização.

Link: https://github.com/alpinejs/alpine/pull/4922

Fonte: alpinejs/alpine


## Tenancy

### `tenant_route()` passa a alterar apenas o hostname [Merged]

A troca de domínio deixa de modificar valores iguais ao hostname que apareçam em query strings ou outras partes da URL.

Antes, `tenant_route()` e a macro `domain()` faziam uma substituição textual ampla. Um parâmetro como `email=foo@localhost` podia virar `foo@foo.localhost` ao trocar o domínio da rota.

O ajuste limita a substituição ao hostname da URL e preserva o restante do endereço.

Link: https://github.com/archtechx/tenancy/pull/1490

Fonte: archtechx/tenancy


## Laravel Precognition

### Precognition ganha serializer customizável e preserva `BigInt` em `FormData` [Merged]

O client fetch passa a aceitar `withSerializer()`, enquanto uploads com arquivos deixam de descartar valores `BigInt`.

O novo `withSerializer()` permite substituir o `JSON.stringify()` usado pelo client fetch, inclusive para valores que o JSON nativo não representa. A mesma configuração pode ser passada ao `createFetchClient()`.

Em outro PR da mesma janela, valores `BigInt` enviados junto com arquivos passam a ser adicionados ao `FormData` como strings, em vez de serem descartados silenciosamente.

Link: https://github.com/laravel/precognition/pull/171

Fonte: laravel/precognition


## Laravel Multiplex

### Multiplex 0.4.5 espera o grupo de processos encerrar antes do SIGKILL [Released]

O encerramento passa a aguardar os processos filhos dentro do período de graça, evitando matar o Vite antes da limpeza.

Em comandos como `npm run dev`, o shell intermediário pode encerrar logo após o SIGTERM enquanto o Vite ainda está limpando seus arquivos. O `v0.4.5` passa a esperar o grupo inteiro de processos antes de aplicar SIGKILL.

O caso corrigido deixava `public/hot` para trás após um Ctrl+C porque o Vite era encerrado cedo demais.

Link: https://github.com/laravel/multiplex/releases/tag/v0.4.5

Fonte: laravel/multiplex


## Laravel Nightwatch

### Nightwatch amplia a lista padrão de dados ocultados [Merged]

`current_password` e o header `X-CSRF-TOKEN` entram na redação automática dos dados capturados pelo Nightwatch.

Os defaults de redaction passam a incluir `current_password` entre os campos de payload e `X-CSRF-TOKEN` entre os headers. A alteração aproxima o comportamento do Nightwatch das regras usadas pelo sistema de exceções do framework.

Link: https://github.com/laravel/nightwatch/pull/431

Fonte: laravel/nightwatch


## Laravel Boost

### Boost continua atualizando `CLAUDE.md` em projetos que já usam o arquivo [Merged]

Projetos existentes com Claude Code deixam de receber guidelines novas em `AGENTS.md` enquanto continuam lendo um `CLAUDE.md` antigo.

Desde o Boost 2.10.0, as guidelines do Claude Code passaram a ser gravadas em `AGENTS.md`. O problema é que o Claude Code só lê esse arquivo quando não existe `CLAUDE.md`.

O ajuste mantém `CLAUDE.md` como destino nos projetos que já possuem o arquivo e usa `AGENTS.md` nos demais. Uma configuração explícita em `boost.agents.claude_code.guidelines_path` continua tendo prioridade.

Link: https://github.com/laravel/boost/pull/1043

Fonte: laravel/boost


## Recomendação do dia

### spatie/laravel-permission [Recommended]

Pacote para armazenar papéis e permissões no banco e integrá-los ao sistema de autorização nativo do Laravel.

`spatie/laravel-permission` resolve um problema comum em sistemas com diferentes perfis de acesso: manter roles e permissões sem criar uma camada paralela à autorização do Laravel. As permissões são registradas no Gate, então chamadas como `$user->can('edit articles')` continuam funcionando normalmente.

O pacote permite dar permissões diretamente ao usuário ou herdá-las por role. Faz sentido quando as regras de acesso precisam ser administradas no banco e variam por usuário ou perfil. Se a aplicação tem poucas regras estáticas, Policies e Gates do próprio Laravel costumam ser suficientes e evitam adicionar outra estrutura ao projeto.

Instalação confirmada na documentação oficial:

```bash
composer require spatie/laravel-permission
```

Documentação: https://spatie.be/docs/laravel-permission/

Link: https://spatie.be/docs/laravel-permission/

Fonte: spatie/laravel-permission


## Fontes

- [Laravel Framework v13.34.0](https://github.com/laravel/framework/releases/tag/v13.34.0)
- [Laravel Framework v12.69.3](https://github.com/laravel/framework/releases/tag/v12.69.3)
- [Laravel Framework PR #61778](https://github.com/laravel/framework/pull/61778)
- [Laravel Framework PR #61764](https://github.com/laravel/framework/pull/61764)
- [Laravel Framework PR #61753](https://github.com/laravel/framework/pull/61753)
- [Laravel Framework PR #61770](https://github.com/laravel/framework/pull/61770)
- [Laravel Framework PR #61786](https://github.com/laravel/framework/pull/61786)
- [Laravel AI v1.0.1](https://github.com/laravel/ai/releases/tag/v1.0.1)
- [Laravel AI PR #1071](https://github.com/laravel/ai/pull/1071)
- [Laravel AI PR #1073](https://github.com/laravel/ai/pull/1073)
- [Laravel AI PR #1083](https://github.com/laravel/ai/pull/1083)
- [Flux v2.20.1](https://github.com/livewire/flux/releases/tag/v2.20.1)
- [Flux PR #2842](https://github.com/livewire/flux/pull/2842)
- [Alpine PR #4922](https://github.com/alpinejs/alpine/pull/4922)
- [Tenancy PR #1490](https://github.com/archtechx/tenancy/pull/1490)
- [Laravel Precognition PR #171](https://github.com/laravel/precognition/pull/171)
- [Laravel Precognition PR #173](https://github.com/laravel/precognition/pull/173)
- [Laravel Multiplex v0.4.5](https://github.com/laravel/multiplex/releases/tag/v0.4.5)
- [Laravel Nightwatch PR #431](https://github.com/laravel/nightwatch/pull/431)
- [Laravel Boost PR #1043](https://github.com/laravel/boost/pull/1043)
- [spatie/laravel-permission](https://github.com/spatie/laravel-permission)
- [Documentação do spatie/laravel-permission](https://spatie.be/docs/laravel-permission/)
