Kalau Anda pernah menunggu tsc --noEmit berjalan puluhan detik di proyek besar, masalahnya bukan di komputer Anda. Pemeriksaan tipe TypeScript memang berat: compiler-nya harus membaca ribuan berkas, membangun graf tipe, lalu mencocokkan semuanya. Kabar baiknya, sejak akhir Oktober 2026 ada pemain baru yang serius mengejar kecepatan: tsrs, port compiler TypeScript ke Rust yang dikerjakan Cloudflare bersama VoidZero dan Max Schwenk (Owner.com), diinkubasi di dalam toolchain Oxc.
Apa itu tsrs dan kenapa bukan sekadar fork
Cloudflare menegaskan tsrs bukan fork TypeScript. Tim TypeScript tetap memegang kendali penuh atas desain bahasa, dan tsrs hanya berusaha menyalin implementasi referensi sedetail mungkin — termasuk teks pesan error, urutan diagnostik, sampai exit code. Kalau ada perbedaan, itu dianggap bug di tsrs, bukan fitur baru. Pendekatan ini penting: port yang "menyimpang" cepat atau lambat akan menghasilkan hasil cek yang berbeda dan berbahaya untuk produksi.
Sebelumnya tim Microsoft sudah memindahkan compiler TypeScript ke Go (TS 7) dan hasilnya jauh lebih cepat dari versi JavaScript. Lalu mengapa Rust lagi? Jawaban utamanya WebAssembly. Program Go yang dikompilasi ke Wasm harus membawa garbage collector-nya, sementara model memori Rust tidak. Itu membuat pengecekan tipe bisa dijalankan di browser, di Cloudflare Workers, atau di perangkat kecil lewat paket @tsrs/wasm.
Angka yang diklaim dan hasil uji independen
Benchmark resmi Cloudflare menyebut tsrs hingga 8x lebih cepat dan memakai sekitar 70% memori lebih sedikit dibanding TypeScript 7.0 pada jumlah type-check worker yang sama. Konteks penting yang jarang dikutip: TypeScript 7.1 beta sendiri sudah sampai 2,5x lebih cepat dari 7.0, dan sebagian optimasinya justru di-upstream dari tsrs.
Uji independen yang diterbitkan di dev.to memberi gambaran lebih membumi. Pada proyek sintetis 400 berkas (35.199 baris) di VM 2 vCPU, hasilnya:
- Median waktu cek: 2,508 detik (tsc 7.0.2) menjadi 0,474 detik (tsrs) — sekitar 5,3x lebih cepat.
- Puncak memori: ~392 MB menjadi ~110 MB — 72% lebih hemat, hampir sama dengan klaim resmi.
- Diagnostik identik (berkas, baris, kolom, kode, pesan) dan output JavaScript byte-identical pada korpus tersebut.
Jadi angka "8x" itu nyata tapi bergantung baseline dan mesin. Yang tidak bisa dibantah: selisih 5x tetap mengubah kebiasaan kerja — cek tipe yang tadinya hanya dijalankan saat commit bisa dijalankan setiap kali menyimpan berkas.
Cara mencobanya di proyek Anda
Rilis yang tersedia sekarang masih beta dan menargetkan TypeScript 7.1 beta. Pasang versi yang dipin agar tidak kaget saat tag berubah:
# npm
npm install -D [email protected]
# atau pnpm
pnpm add -D [email protected]
# jalankan pada tsconfig yang sudah ada
npx tsrs -p . --noEmit
Secara default tsrs memakai empat checker dengan pengaturan dan riwayat checker yang sama seperti versi Go. Ada mode cepat yang bisa diaktifkan dengan --fast atau variabel lingkungan TSRS_FAST=1: jumlah checker menyesuaikan mesin, ada work stealing, dan parsing member deklarasi dilakukan malas untuk menghemat memori. Catatan resminya jelas — pada kasus history/depth tertentu, mode ini bisa mengubah diagnostik dan exit status, jadi jangan langsung dipakai di pipeline rilis tanpa perbandingan hasil.
Untuk mengukur sendiri, jalankan keduanya pada proyek yang sama dan bandingkan:
time npx tsc -p . --noEmit
time npx tsrs -p . --noEmit
Batasan yang harus Anda tahu sebelum migrasi
- Masih eksperimental. Statusnya beta, bukan pengganti produksi. Update-nya cepat, tapi API dan perilaku bisa bergeser.
- Belum semua perintah porting.
--helpdan--initbelum didukung; dokumentasi kompatibilitas mencatatnya sebagai perintah CLI yang tidak diporting. - Watch mode terbatas platform.
--watchdan-b --watchjalan di Linux dan macOS; di Windows keluar dengan pesan "not supported". - Content mapper tidak di language server. Untuk
.vue,.svelte, dan.astro, mapper hanya jalan lewat CLI dan--build, belum di LSP. - Urutan diagnostik bisa berbeda. Jangan menulis skrip yang bergantung pada urutan keluaran error.
- Hati-hati exit code. Pada build 0.18 sempat ditemukan tsrs keluar dengan kode 2 saat ada error tipe, sedangkan tsc keluar 1. Skrip CI yang mengecek
[ $? -eq 1 ]akan salah membaca hasil. Selalu gunakan-ne 0.
Strategi aman untuk tim
- Pasang tsrs sebagai devDependency, jangan mengganti
typescriptdi proyek yang sudah berjalan. - Buat satu job CI tambahan (bukan pengganti) yang menjalankan
npx tsrs -p . --noEmitdan bandingkan jumlah error dengan tsc. Kalau jumlahnya sama selama beberapa minggu, baru pertimbangkan menjadikannya gerbang utama. - Kalau memakai editor, SDK lokal bisa diarahkan lewat
js/ts.tsdk.pathke./node_modules/tsrs/tsdkdi macOS/Linux. Untuk tim yang servernya Linux, ini cara termurah mencicipi LSP-nya. - Simpan hasil benchmark internal (waktu dan puncak RSS) sebelum dan sesudah, karena keuntungan terbesar biasanya muncul di monorepo besar, bukan proyek kecil.
Bagi pengelola TI di instansi atau perusahaan yang menjalankan banyak proyek JavaScript/TypeScript, dampak praktisnya bukan sekadar "lebih cepat". Waktu CI yang turun dan memori yang jauh lebih kecil berarti runner lebih murah, build lebih sering bisa dijalankan, dan umpan balik ke developer memendek. Untuk proyek yang masih dominan PHP seperti kebanyakan sistem pemerintahan, tsrs belum relevan hari ini — tetapi arah industri jelas: tooling yang ditulis ulang dengan bahasa sistem plus bantuan agen AI akan menjadi standar baru dalam satu-dua tahun ke depan.
Yang menarik dari kasus ini, Max Schwenk mengaku menulis "nol" kode secara manual: agen AI dipandu Claude Opus 5.5 menghasilkan port yang setia, memakai 15.197 kasus konformansi milik TypeScript sendiri sebagai spesifikasi. Cloudflare juga menjalankan proses pemeliharaan ala Vinext — agen memeriksa perubahan upstream setiap pagi, dan matriks kompatibilitas diregenerasi setiap malam. Model kerja seperti ini layak dicermati tim developer: bukan menggantikan pemahaman, tapi mempercepat pekerjaan yang tadinya butuh tim dan bertahun-tahun.
Sumber: Cloudflare Blog — Introducing tsrs: A port of TypeScript to Rust, GitHub oxc-project/tsrs, dokumentasi kompatibilitas tsrs, InfoQ, pengukuran independen di dev.to.
