skill.md — Implementasi “Fastest Frontend Tooling” pakai Bun + tsgo + Oxlint + Oxfmt
Tujuan: bikin feedback loop super cepat (typecheck/lint/format kilat) + guardrails ketat (kode konsisten, bug ketahan) sehingga manusia & AI/LLM sama-sama kerja lebih rapi dan cepat.
🎯 Hasil yang kamu dapat
- •✅ Type-check ~lebih cepat dengan tsgo (TypeScript native preview)
- •✅ Linting super cepat dengan Oxlint
- •✅ Formatting cepat + “batteries included” dengan Oxfmt (import sort, Tailwind class sort, dsb)
- •✅ Workflow Bun:
bun add,bun run,bunxuntuk eksekusi tool sekali jalan
🧩 Komponen Stack
| Komponen | Peran | Output |
|---|---|---|
| Bun | package manager + script runner | install & run cepat |
tsgo (@typescript/native-preview) | typecheck (pengganti tsc) | error tipe cepat |
| Oxlint | linter (pengganti ESLint untuk sebagian besar kasus) | error lint + autofix |
| Oxfmt | formatter (pengganti Prettier untuk banyak setup) | format rapi konsisten |
(opsional) @oxlint/migrate | migrasi dari ESLint flat config | .oxlintrc.json |
(opsional) @nkzw/oxlint-config | preset guardrail ketat | config siap pakai |
Catatan:
- •
bunxadalah ekuivalennpxdan alias daribun x. (lihat docs Bun) - •Oxfmt saat ini alpha: cocok untuk banyak proyek, tapi setup kompleks/monorepo tertentu bisa perlu penyesuaian. (lihat docs Oxc)
✅ Prasyarat
- •Bun terpasang dan bisa dipanggil dari terminal:
bun --version - •Git (buat hooks/CI)
- •VS Code (opsional, tapi recommended untuk integrasi tsgo)
1) Install dependency (Bun-first)
Jalankan di root project:
bun add -D @typescript/native-preview oxlint oxfmt
Opsional (kalau kamu mau migrasi config ESLint dan/atau guardrail preset):
bun add -D @oxlint/migrate @nkzw/oxlint-config
Tip Windows: kalau
bunxbermasalah, coba pakaibun x(karenabunx= aliasbun x).
2) Aktifkan tsgo di VS Code
Ada 2 cara yang paling aman:
Opsi A — Setting langsung
Tambahkan ke VS Code settings (JSON):
{
"typescript.experimental.useTsgo": true,
}
Opsi B — Pakai extension “TypeScript (Native Preview)”
- •Install extension “TypeScript (Native Preview)”
- •Buka Command Palette → jalankan:
- •
TypeScript Native Preview: Enable (Experimental)
- •
Ini ngaktifin language service native preview sehingga editor (diagnostics, hover, go-to-def) ikut lebih kencang.
3) Tambah scripts standar di package.json
Targetnya: 1 command buat “cek semua” dan 1 command buat “cek cepat”.
{
"scripts": {
"//": "=== Quality Gates ===",
"typecheck": "tsgo -p tsconfig.json",
"lint": "oxlint .",
"lint:fix": "oxlint . --fix",
"fmt": "oxfmt .",
"fmt:check": "oxfmt --check .",
"//2": "=== Bundled Checks ===",
"check:fast": "bun run lint && bun run fmt:check",
"check": "bun run typecheck && bun run lint && bun run fmt:check",
"//3": "=== Convenience ===",
"fix": "bun run lint:fix && bun run fmt",
},
}
Rekomendasi pemakaian:
- •Saat ngoding cepat:
bun run check:fast - •Sebelum push/PR:
bun run check - •Kalau banyak error:
bun run fix
4) Setup Oxfmt (pengganti Prettier) — config minimal
Oxc merekomendasikan .oxfmtrc.json atau .oxfmtrc.jsonc.
Buat file .oxfmtrc.jsonc:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 80,
}
Kenapa printWidth: 80?
- •Oxfmt default
printWidth= 100, sedangkan Prettier default = 80. - •Kalau kamu migrasi dari Prettier dan pengin diff formatting minimal, 80 biasanya lebih aman.
5) Setup Oxlint — pilihan “baru” vs “migrasi”
A) Kalau project baru (tanpa ESLint)
Generate config dasar:
bunx oxlint --init # kalau bunx bermasalah: bun x oxlint --init
B) Kalau sudah pakai ESLint flat config (eslint.config.js / mjs)
Gunakan migrator resmi:
bunx @oxlint/migrate eslint.config.js
Opsional kalau kamu pakai type-aware rules ala typescript-eslint:
bunx @oxlint/migrate --type-aware eslint.config.js
Hasilnya biasanya menghasilkan .oxlintrc.json yang bisa kamu edit lanjut.
C) Migrasi bertahap (paling realistis untuk repo besar)
Kalau ada rules ESLint yang belum bisa diganti, kamu bisa jalanin dua-duanya sementara:
oxlint && eslint
Strategi umum:
- •Jalanin Oxlint dulu (cepat, nangkep error awal)
- •ESLint tinggal untuk rules yang belum tersedia
6) “Prettier → Oxfmt” cepat (kalau kamu sudah pakai Prettier)
Oxc menyediakan jalur migrasi “1 command” untuk setup sederhana.
Versi Bun:
bun add -D oxfmt@latest bunx oxfmt --migrate=prettier bunx oxfmt
Lalu:
- •Hapus file config Prettier (
.prettierrc*,prettier.config.*) kalau sudah tidak dipakai - •Update script/hook yang masih memanggil Prettier
7) Git hooks (opsional tapi recommended)
Tujuannya: jangan ada kode “kotor” masuk repo.
Versi simpel (Husky)
- •
pre-commit: jalankanbun run check:fast - •
pre-push: jalankanbun run check
Kalau kamu pakai lint-staged, fokuskan ke file staged biar lebih cepat:
- •
oxfmtuntuk format - •
oxlint --fixuntuk lint autofix
8) CI (contoh konsep)
Di CI kamu cukup jalankan:
bun install --frozen-lockfile bun run check
Tip: kalau project besar,
check:fastbisa jadi job terpisah yang lebih cepat, sementaratypecheckbisa job lain (atau dijalankan di PR saja).
🛠️ Troubleshooting cepat
1) bunx tidak jalan / error di Windows
- •Coba
bun x <cmd>karenabunx= aliasbun x. - •Pastikan Bun ada di PATH.
2) Format jadi beda jauh setelah migrasi
- •Pastikan
.oxfmtrc.jsoncsetprintWidth: 80(jika kamu sebelumnya Prettier default). - •Pastikan kamu update Prettier ke v3.8 dulu (opsional) sebelum migrasi supaya output lebih mirip.
3) Ada rules ESLint yang “belum ada” di Oxlint
- •Jalankan mode bertahap:
oxlint && eslint - •Matikan rules ESLint yang overlap supaya nggak dobel.
🤖 “AI/LLM Guardrails” (biar AI nggak ngawur)
Kalau kamu sering pakai agent / coding assistant:
- •Tambahkan file
AGENTS.mdberisi:- •Cara menjalankan
bun run check:fastdanbun run check - •Aturan: “jika lint error, fix dulu; jangan biarkan warning”
- •Preferensi: jangan commit kalau
fmt:checkgagal
- •Cara menjalankan
- •Pastikan CI jadi “hakim terakhir”: kalau CI merah, dianggap gagal.
✅ Checklist implementasi (biar tinggal centang)
- •
bun add -D @typescript/native-preview oxlint oxfmt - •
package.jsonpunya scriptcheck:fast,check,fix - • VS Code setting
"typescript.experimental.useTsgo": true - • File
.oxfmtrc.jsoncada danprintWidthdiset (opsional) - • Oxlint:
bunx oxlint --initataubunx @oxlint/migrate ... - • (opsional) pre-commit / CI menjalankan
bun run check:fast/bun run check
📚 Referensi resmi (kalau kamu mau cek sumber)
- •Bun
bunxdocs - •TypeScript Go preview repo (
microsoft/typescript-go) &@typescript/native-preview - •Oxc docs: “Migrate from Prettier” dan “Migrate from ESLint”
Kalau kamu sebut project kamu ini tipe apa—Vite+React, library, atau backend service—aku bisa “customize” skill.md ini jadi lebih spesifik (misal: lint rule untuk React, path alias TS, atau setup monorepo).