Sebelum menulis `axum::serve`, kalian perlu menguasai dasar Rust (ownership, traits, async/await), tokio, dan HTTP/REST. Di episode ini kalian juga menyiapkan toolchain Rust 1.80+, editor dengan rust-analyzer, dependencies Axum, serta memverifikasi seluruh environment siap dipakai sepanjang series.

Selamat datang di series Belajar Axum! Series ini akan membawa kalian menguasai Axum — web framework modular berbasis tokio/tower untuk bahasa Rust — untuk membangun web app, REST API, WebSocket, dan microservices. Total ada 28 episode yang tersusun dalam tujuh fase, dari fondasi konsep sampai production readiness.
Sebelum menjalankan cargo new hello-axum && cargo add axum, ada skill dasar dan perangkat yang wajib kalian siapkan. Mengapa prasyarat ini penting? Karena Axum bukan framework monolitik seperti Rails atau Laravel — ia dibangun sebagai lapisan tipis di atas tokio (async runtime) dan tower (komponen service). Tanpa memahami ownership, traits, dan async/await Rust, kalian akan kesulitan menulis handler, extractor, dan middleware yang benar — justru tiga hal yang paling sering memunculkan error di Axum.
Episode 0 ini adalah peta jalan kalian: kita akan memastikan skill dasar terpenuhi, menginstall toolchain Rust yang benar, menyiapkan editor dan dependencies, serta memverifikasi environment dengan sebuah "hello world" kecil. Setelah episode ini selesai, seluruh series bisa diikuti dengan nyaman.
Axum mengandalkan sistem tipe Rust secara ekstrem — route, state, dan extractor semuanya diwujudkan sebagai trait. Kalian wajib nyaman dengan:
String, &str, dan &String; karena handler Axum menerima dan memproduksi banyak tipe yang dipinjam.impl Trait, generic bounds, dan dyn Trait; karena IntoResponse, FromRequest, FromRequestParts, dan Handler adalah trait yang harus kalian implementasi mulai episode 5.async/await dan Send: handler Axum harus Send saat diservis oleh tokio; nilai yang "tidak aman dibawa antar thread" (misal Rc) akan ditolak compiler.Latihan cepat untuk memastikan pemahaman:
fn main() {
let s = String::from("hello axum");
let view = &s[..5];
println!("{view}");
println!("{s}");
}Jika kode di atas lolos cargo run, konsep dasar borrowing sudah oke.
Axum berjalan di atas tokio sebagai async runtime. Kalian perlu paham perbedaan async fn dan fn, mengapa kita butuh executor, serta cara tokio::spawn memindahkan task ke thread pool. Kita akan memakai tokio mulai episode 3, dan mendalaminya lagi di episode 22 (background tasks).
Axum adalah web framework, jadi pemahaman tentang HTTP wajib: method (GET, POST, PUT, DELETE), status code (200, 201, 204, 400, 404, 500), headers, body, dan prinsip REST (resource-centric URLs). Di episode 1 kita bahas konteksnya lebih dalam.
Axum 0.8 menetapkan MSRV Rust 1.80. Rilis Axum 0.8.9 (14 April 2026) dipakai sebagai patokan series ini. Install lewat rustup — cara resmi dan satu-satunya yang direkomendasikan untuk update lintas versi:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup update stable
rustup component add rust-analyzerrust-analyzer adalah language server yang dipakai editor untuk autocomplete, hover, dan diagnostik — ini bukan pemanis, melainkan wajib untuk produktivitas Rust.
Warning
Axum 0.8 membutuhkan Rust ≥ 1.80. Jika rustc --version masih di bawah itu, jalankan rustup update stable. Compiler lama akan menolak mem-build Axum 0.8 dengan error tentang MSRV.
Pastikan cargo berfungsi normal. Sepanjang series kita akan memakai crates berikut — beberapa sudah dipakai sejak episode 3:
| Crate | Peran | Dipakai Mulai |
|---|---|---|
axum 0.8.x | Web framework | Episode 3 |
tokio 1.53+ | Async runtime (fitur rt-multi-thread, macros, signal) | Episode 3 |
tower-http | Middleware siap pakai (trace, cors, compression, dll) | Episode 3 |
serde + serde_json | Serialization/deserialization | Episode 3 |
sqlx | Database async dengan compile-time check | Episode 9 |
tracing + tracing-subscriber | Structured logging | Episode 3 |
Kalian tidak perlu menginstall semuanya sekarang — kita tambah dependency per episode sesuai kebutuhan. Yang penting saat ini: toolchain, cargo, dan editor siap.
VSCode + rust-analyzer extension, atau Neovim dengan rust-analyzer native (misal lewat mason). Apapun pilihannya, pastikan autocomplete dan error diagnostics bekerja sebelum mulai — hal ini akan menyelamatkan kalian ribuan kali ketika mengetik generic bounds Axum.
Episode 9 akan membangun CRUD dengan PostgreSQL/MySQL lewat sqlx. Kalian tidak perlu menginstallnya sekarang, tetapi jika sudah punya Docker, menyiapkan instance PostgreSQL lokal bisa menghemat waktu nanti:
docker run -d --name axum-db -p 5432:5432 \
-e POSTGRES_PASSWORD=axum-dev postgres:16Sebelum lanjut ke episode 1, verifikasi seluruh toolchain:
rustc --version
cargo --version
rustup component list | grep rust-analyzerHarapannya terlihat kurang lebih seperti ini:
rustc 1.85.0 (4d91de4e4 2025-02-17)
cargo 1.85.0 (d73d2caf9 2025-02-14)
rust-analyzer-aarch64-unknown-linux-gnuVersi persis boleh berbeda asalkan rustc ≥ 1.80. Terakhir, uji sebuah project minimal:
cargo new --bin sanity-check
cd sanity-check && cargo buildJika cargo build selesai tanpa error, environment kalian siap. Hapus folder uji itu sesuka hati — episode 3 akan membuat project Axum yang sesungguhnya dari nol.
Rangkuman yang sudah kalian siapkan di episode 0:
async/await + tokio dasar, HTTP/REST.rustc --version, cargo --version, dan cargo build project minimal berhasil.Jika ada yang belum terpenuhi, berhenti dulu dan lengkapi sebelum melanjutkan. Perjalanan 27 episode ke depan akan jauh lebih lancar dengan pijakan yang kuat ini.
Inti yang harus dibawa pulang:
cargo build pada project minimal.Di episode 1 selanjutnya kita akan membahas sejarah, latar belakang, dan mengapa membutuhkan Axum — dari lahirnya sebagai framework resmi tim tokio-rs pada 2021, perbandingannya dengan Actix-web/poem/rocket, hingga alasan Axum menjadi pilihan utama web framework Rust pada 2026. Pastikan environment kalian sudah siap, karena perjalanan Belajar Axum baru saja dimulai!