Skip to content
โ† semua tulisan

Kenapa gua nulis reliakit

2026-06-09ยท2 menit bacaยท0 dibaca

Tiap kali bikin service, masalahnya selalu sama: rate limiting, timeout, retry, circuit breaker, validasi input, nyimpen secret biar gak kebocor di log. Hal-hal "boring" yang justru paling sering bikin production meledak.

Gua capek nyalin-tempel utility yang sama dari project ke project, atau narik framework gede cuma buat satu fungsi kecil. Jadi gua bikin reliakit.

Filosofinya

reliakit itu building block reliability โ€” kecil, bisa dikombinasiin, dan sebisa mungkin no_std + zero-dependency. Bukan framework yang maksa lo ngikutin caranya; lo ambil yang lo butuh aja.

Tiap kemampuan dipecah jadi crate sendiri:

  • ratelimit โ€” token-bucket rate limiter.
  • circuit โ€” circuit breaker: pas dependency lo down, fail-fast, bukan numpuk request.
  • backoff โ€” retry dengan backoff (exponential/linear/constant) + jitter.
  • timeout โ€” deadline yang clock-agnostic.
  • primitives โ€” tipe tervalidasi: Email, HttpUrl, NonEmptyStr, Port, dll.
  • secret โ€” bungkus nilai sensitif biar gak ke-print di log/error.

...dan beberapa lagi (validate, collections, json, codec, core, decide). Total 16 crate, semua bisa dipakai sendiri-sendiri.

Gua pake di situs ini

Bukan cuma teori โ€” blog yang lo baca ini dijaga reliakit:

  • Form newsletter & kontak di-rate-limit pake ratelimit biar gak dispam bot.
  • Pengiriman email dijaga circuit breaker โ€” kalau provider-nya down, gak nge-hang.
  • API key disimpen di secret, jadi gak mungkin kebocor di log.
  • Email divalidasi pake primitives::Email.

Lo bahkan bisa nyoba rate limiter-nya langsung di browser (jalan via WASM) di playground halaman Proyek.

Contoh

use reliakit::ratelimit::RateLimiter;

// 5 token, isi ulang 1 tiap 2 detik
let mut limiter = RateLimiter::new(5, 1, 2);

if limiter.try_acquire_one(now) {
    // lanjut
} else {
    // kena rate limit
}

Sekecil itu. Gak ada background thread, gak baca clock sendiri โ€” lo yang kasih waktunya, jadi gampang dites & deterministik.

Penutup

reliakit masih awal (v0.1), tapi udah gua pake beneran. Kalau lo Rust dev yang capek nyalin utility reliability yang sama terus, cobain aja. Feedback & issue gua tunggu di GitHub.