Ulaşım
- Adres: 2342 Sk, İpekyol, İpek Ap 49A, 63250 Haliliye/Şanlıurfa
- Telefon:
0505 532 36 38 - eMail: info@alestaweb.com
Alesta Web olarak onlarca projeyi ESLint ve Prettier ile yönetirken fark ettik: her yeni proje kurulumunda aynı yapılandırma cehennemi bizi bekliyordu. İki ayrı araç, birbirine geçen kurallar, yavaş CI süreleri... Sonra Biome ile tanıştık. Şubat 2026'da yayımlanan Biome v2.4 ile birlikte artık tek bir araçla hem linting hem formatting yapabiliyoruz — hem de ESLint'ten 15 kat daha hızlı. Bu yazıda alestaweb.com projelerinde test ettiğimiz Biome deneyimini, v2.4'ün yeni özelliklerini ve ESLint + Prettier'dan neden geçmesi gerektiğini tüm teknik detaylarıyla aktarıyoruz.
Biome, JavaScript, TypeScript, JSX, JSON, CSS ve GraphQL projeleri için geliştirilmiş, Rust ile yazılmış yüksek performanslı bir web toolchain'dir. 2023 yılında Roma (Rome) projesinin fork'u olarak doğan Biome, Ağustos 2023'te v1.0'a, Mart 2025'te ise v2.0'a ulaştı. Şubat 2026 itibarıyla v2.4 sürümüyle 449'dan fazla lint kuralı sunan Biome, ESLint ve Prettier'ın yerini tek bir araçla almayı hedefliyor.
Alesta Web bünyesindeki projelerde yaptığımız testlerde en dikkat çeken özellik şu oldu: Biome, hiçbir bağımlılığa ihtiyaç duymadan tek bir binary dosyası olarak çalışıyor. npm install ile gelen onlarca ESLint plugin'i, Prettier, Prettier plugin'leri, .eslintrc, .prettierrc — bunların hepsini tek bir biome.json dosyasıyla değiştiriyorsunuz.
Biome v2.4, 2026 yılının ilk minor sürümü olarak büyük bir heyecanla karşılandı. Alesta Web olarak bu sürümü yayımlandığı gün test ettik ve getirdiği yenilikler gerçekten etkileyici. İşte öne çıkan başlıklar:
v2.4'ün en dikkat çekici özelliği, JavaScript ve TypeScript dosyaları içindeki gömülü CSS ve GraphQL snippet'lerini doğrudan formatlayıp lint edebilmesi. Styled-components, Emotion ve benzeri CSS-in-JS kütüphanelerinde yazdığınız template literal CSS kodları artık otomatik olarak formatlanıyor.
Örnek — Styled-components ile Gömülü CSS / Embedded CSS Example:
// Biome v2.4 bu kodu otomatik formatlar ve lint eder
import styled from 'styled-components';
const Button = styled.button`
background-color: #0070f3;
color: white;
padding: 8px 16px;
border-radius: 4px;
/* Biome: duplicate-property tespiti burada da çalışır */
font-size: 14px;
`;
// GraphQL tagged template literals için de geçerli
const QUERY = gql`
query GetUser($id: ID!) {
user(id: $id) {
name
email
}
}
`;
Biome v2.4, HTML için 15 yeni erişilebilirlik odaklı lint kuralı getirdi. Bu kurallar doğrudan HTML dosyalarında çalıştığı gibi Vue, Svelte ve Astro component'lerinde de etkili oluyor. Örneğin:
useAltText: Img etiketlerinde alt attribute zorunluluğuuseAriaLabel: Etkileşimli elementlerde ARIA label kontrolünoRedundantRole: Gereksiz ARIA role kullanımını önlemeuseButtonType: Button elementlerinde type attribute zorunluluğuuseHtmlLang: HTML etiketinde lang attribute zorunluluğuv2.4 ile birlikte 24 adet "nursery" (deneysel) kural production-ready olarak işaretlendi. Bu kurallar artık stable gruba taşındı ve varsayılan olarak aktif hale geldi. Alestaweb.com projelerimizde bu kuralları aktifleştirdiğimizde ilk çalıştırmada 47 potansiyel hata tespit edildi — bunların büyük çoğunluğu auto-fix edildi.
Yeni noDuplicateClasses assist action'ı, JSX'teki className ve HTML'deki class attribute'larında yinelenen Tailwind/utility class'larını tespit ediyor. clsx, cn ve cva gibi popüler utility fonksiyonlarını da anlıyor.
// ÖNCE / BEFORE — Biome hata verir
<div className="flex items-center flex-row items-center gap-4">
// SONRA / AFTER — Biome auto-fix ile düzeltir
<div className="flex items-center flex-row gap-4">
Formatter'a eklenen yeni trailingNewline seçeneği varsayılan olarak true geliyor ve POSIX uyumluluğunu sağlıyor. Linux/Mac tabanlı CI ortamlarında git diff kirliliğini önlemek için kritik bir özellik.
Alesta Web olarak hem yerel geliştirme ortamımızda hem de CI pipeline'larımızda Biome'u ESLint ve Prettier ile karşılaştırdık. Sonuçlar oldukça çarpıcı:
| İşlem / Operation | ESLint + Prettier | Biome v2.4 | Hız Farkı / Speedup |
|---|---|---|---|
| 10.000 dosya linting | 45.2 saniye | 0.8 saniye | ~56x hızlı |
| 10.000 dosya formatting | 12.1 saniye | 0.3 saniye | ~40x hızlı |
| 10k satır monorepo linting | 3-5 saniye | ~200 ms | ~15-25x hızlı |
| Type-aware diagnostics | 1-2 saniye | <500 ms | ~3-4x hızlı |
Bu rakamlar neden bu kadar büyük? Cevap Rust'ta gizli. Biome'un Rust ile yazılmış core'u, Node.js tabanlı ESLint'in asla yakalayamayacağı düzeyde paralel işlem ve bellek verimliliği sunuyor. Üstelik Biome sıfır node_modules bağımlılığı ile çalışıyor — kurulum boyutu da buna bağlı olarak dramatik şekilde küçülüyor.
Biome'u bir projeye eklemek ESLint kurmaktan çok daha basit. Alesta Web projelerinde kullandığımız standart kurulum adımları şöyle:
1. Kurulum / Install:
# npm ile
npm install --save-dev --save-exact @biomejs/biome
# ya da pnpm ile (önerilen)
pnpm add -D --save-exact @biomejs/biome
# yarn ile
yarn add --dev --exact @biomejs/biome
2. Yapılandırma dosyası oluştur / Init config:
npx @biomejs/biome init
Bu komut biome.json dosyasını oluşturur. Alestaweb.com projelerinde kullandığımız temel yapılandırma:
biome.json — Alesta Web Standart Config:
{
"$schema": "https://biomejs.dev/schemas/2.4.0/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100,
"trailingNewline": true
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"a11y": {
"recommended": true
},
"complexity": {
"noExcessiveCognitiveComplexity": "warn"
},
"correctness": {
"noUnusedVariables": "error",
"noUnusedImports": "error"
},
"security": {
"noDangerouslySetInnerHtml": "warn"
}
}
},
"assist": {
"enabled": true,
"actions": {
"source": {
"organizeImports": "on"
}
}
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"semicolons": "always",
"trailingCommas": "es5"
}
},
"css": {
"linter": {
"enabled": true
},
"formatter": {
"enabled": true
}
}
}
3. package.json script'leri / NPM Scripts:
{
"scripts": {
"lint": "biome lint --write .",
"format": "biome format --write .",
"check": "biome check --write .",
"ci": "biome ci ."
}
}
settings.json'a şunu ekleyin:
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"[javascript]": { "editor.defaultFormatter": "biomejs.biome" },
"[typescript]": { "editor.defaultFormatter": "biomejs.biome" },
"[javascriptreact]": { "editor.defaultFormatter": "biomejs.biome" },
"[typescriptreact]": { "editor.defaultFormatter": "biomejs.biome" }
}
Alesta Web olarak mevcut ESLint + Prettier kurulumunu Biome'a taşırken en çok endişelendiğimiz şey, var olan kural setini yitirmekti. Ama Biome'un migration CLI'ı bu süreci ciddi ölçüde kolaylaştırdı.
Otomatik Göç Komutu / Automatic Migration:
# ESLint ve Prettier kurallarını Biome'a taşı
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
Bu komutlar .eslintrc ve .prettierrc dosyalarınızı okuyarak mümkün olduğunca biome.json'a dönüştürüyor. Desteklenmeyen kurallar için uyarı veriyor. Biome şu an ESLint kurallarının %85-90'ını karşılıyor.
biome.json gerekebilir// eslint-disable-next-line) manuel dönüşüm gerektirirBiome v2.0 ile gelen ve v2.4'te olgunlaşan GritQL plugin sistemi, Biome'u gerçek anlamda özelleştirilebilir bir araç haline getiriyor. GritQL artık Biome organizasyonunun resmi bir parçası.
GritQL, kod pattern eşleştirme için tasarlanmış bir sorgu dili. Biome'da bu dili kullanarak kendi özel lint kurallarınızı ve formatter davranışlarınızı yazabiliyorsunuz. Alestaweb.com için yazdığımız örnek bir GritQL plugin:
Örnek GritQL Plugin — console.log Tespiti / Custom Rule Example:
// .biome/rules/no-console-production.grit
`console.$method($args)` where {
$method