Menjelajahi fitur modern Laravel 13: Laravel AI SDK untuk text generation, agents, image & embeddings, PHP Attributes untuk model/controller/job, Cache::touch(), serta langkah upgrade dari Laravel 12.

Laravel 13, rilis 17 Maret 2026, bukan sekadar update minor — ia membawa fitur yang mengubah cara kita membangun aplikasi: Laravel AI SDK untuk integrasi AI production-grade, PHP Attributes yang merampingkan deklarasi, dan serangkaian perbaikan performa. Dan semuanya datang dengan zero breaking changes dari Laravel 12.
Di episode ini kita bedah fitur-fitur yang paling berguna, lalu praktikkan upgrade dari Laravel 12 ke 13.
Laravel 13 dirancang sebagai seamless upgrade. Pertama pastikan PHP sudah 8.3+ (dari episode 0), lalu:
composer require laravel/framework:"^13.0" --with-all-dependencies
php artisan migrateLangkah tambahan yang disarankan untuk aplikasi nyata:
laravel.com/docs/13.x/upgrade.composer outdated untuk mengecek package lain yang harus di-upgrade.Dengan zero breaking changes, sebagian besar aplikasi 12 langsung jalan di 13 — upgrade terasa seperti update biasa.
Fitur paling menonjol: Laravel AI SDK — abstraksi resmi untuk layanan AI, production-stable sejak rilis v13. Ia mendukung text generation, tool-calling agents, image, audio, dan embeddings, dengan provider OpenAI dan Anthropic serta mekanisme retry dan integrasi queue bawaan.
composer require laravel/aiuse Illuminate\Support\Facades\AI;
$response = AI::text('Berikan deskripsi singkat tentang Laravel.');
echo $response->text(); // output stringAgent bisa memanggil tool/fungsi kalian sendiri selama percakapan — fondasi untuk asisten yang benar-benar berinteraksi dengan aplikasi:
use Illuminate\Support\Facades\AI;
$agent = AI::agent()
->withTools([new SearchPostsTool()])
->ask('Tulis ringkasan 3 post paling populer minggu ini.');$result = AI::text('Ekstrak judul, penulis, dan tanggal dari teks ini: ...')
->structured(PostMeta::class);$vector = AI::embeddings('Teks untuk di-embed')->embedding();Panggilan AI mahal dan bisa gagal. SDK mendukung retry otomatis dan integrasi queue sehingga proses panjang tidak membekukan request:
use Illuminate\Support\Facades\AI;
$response = AI::text('Ringkas artikel ini.')
->retry(3)
->queue()
->with('result');Note
Konfigurasi provider (API key, model) diatur di config/ai.php — API key tinggal di .env, jangan pernah di-commit. Untuk production, kombinasikan dengan queue (episode 14) agar panggilan AI yang lambat tidak menahan request web.
Laravel 13 memakai PHP 8 Attributes untuk menggantikan konfigurasi yang sebelumnya berupa konvensi atau method terpisah. Contoh paling terlihat:
use App\Http\Controllers\Controller;
use App\Models\Post;
use Illuminate\Http\Request;
use Laravel\Attributes\Route;
class PostController extends Controller
{
#[Route('GET', '/posts', name: 'posts.index')]
public function index()
{
// ...
}
}use App\Models\Post;
use Illuminate\Database\Eloquent\Attributes\Table;
#[Table('articles')]
class Post extends Model
{
// ...
}use Laravel\Attributes\Queue;
#[Queue('emails', tries: 3)]
class SendWelcomeEmail implements ShouldQueue
{
// ...
}Attributes menaruh metadata di dekat deklarasinya — lebih mudah dibaca daripada konfigurasi yang tersebar, dan tetap bisa dipakai bersamaan dengan pendekatan lama. Fitur ini opsional: aplikasi kalian tidak wajib mengadopsinya.
Tip
Jangan terburu-buru menulis ulang kode yang sudah jalan hanya demi attributes. Aturan praktis: adopsi attributes saat menulis kode baru atau saat refactor area yang memang sedang disentuh — gradual adoption, bukan big-bang rewrite.
Fitur cache baru sudah kita bahas di episode 13: Cache::touch() memperpanjang TTL tanpa refetch. Selain itu Laravel 13 membawa:
Cache::remember('popular-posts', 300, fn () => ...);
Cache::touch('popular-posts', 300); // perpanjang tanpa refetchFilosofi Laravel 13: adopsi bertahap. Tidak ada yang wajib diganti. Peta jalan yang masuk akal untuk aplikasi yang baru upgrade:
| Fitur | Mulai pakai saat |
|---|---|
Cache::touch() | Ada data yang sering diakses dan TTL-nya ingin diperpanjang |
| PHP Attributes | Menulis controller/model/job baru |
| Reverb DB driver | Butuh real-time tapi belum punya Redis |
| AI SDK | Butuh fitur AI: ringkasan, asisten, klasifikasi teks |
Inti yang harus dibawa pulang:
composer require laravel/framework:"^13.0" — zero breaking changes.Cache::touch() untuk sliding TTL; boot & memory dioptimalkan.Di episode 21 selanjutnya kita akan membahas testing dengan Pest/PHPUnit & Dusk — feature & unit tests, sintaks Pest, database testing dengan RefreshDatabase, dan browser E2E dengan Laravel Dusk. Sampai jumpa di episode 21!