Markdown Nedir ve Neden Ortaya Çıktı?
Markdown, düz metni hızlıca biçimlendirilmiş HTML'e çevirmek için 2004 yılında John Gruber tarafından tasarlanan hafif bir işaretleme (markup) dilidir. Amaç, yazarların HTML etiketleriyle uğraşmadan, sadece birkaç basit sembolle başlık, kalın metin, liste veya bağlantı oluşturabilmesiydi.
Markdown'ın temel felsefesi şudur: bir Markdown dosyası, hiç dönüştürülmeden düz metin olarak okunduğunda bile anlaşılır ve okunabilir olmalıdır. Bir # işareti başlığı, bir çift * vurguyu, bir - işareti liste öğesini temsil eder; bunlar ham HTML etiketlerinin aksine metnin akışını bozmaz, göz yormaz.
Bu tasarım kararının pratik bir sonucu var: bir Markdown dosyasını hiçbir dönüştürücü olmadan, sade bir metin editöründe okuduğunuzda da içerik büyük ölçüde anlaşılır kalır. HTML'de bunu söylemek mümkün değildir; etiketlerle dolu bir HTML kaynağı, tarayıcı dışında okunduğunda anlaşılması zor bir yapıya dönüşür. Markdown, yazma ve okuma deneyimini önce düz metin üzerinde, dönüştürme işlemini ise arka planda tutar.
Temel Sözdizimi Unsurları
Markdown'ın çekirdek sözdizimi az sayıda kuraldan oluşur ve neredeyse tüm Markdown araçlarında ortaktır:
| Sözdizimi | Anlamı |
|---|---|
# Başlık … ###### Başlık | 1 ile 6 arasında seviyeli başlıklar (h1-h6) |
**kalın** veya __kalın__ | Kalın (bold) metin |
*italik* veya _italik_ | İtalik metin |
`satır içi kod` | Satır içi kod (inline code) |
| Üç ters tırnak ile açılıp kapatılan blok | Birden çok satırlık kod bloğu |
- öğe veya 1. öğe | Sırasız veya sıralı liste |
> alıntı | Blockquote (alıntı) satırı |
[metin](url) | Bağlantı (link) |
Kod blokları, üç art arda ters tırnak (backtick) işaretiyle açılıp aynı şekilde kapatılır; arada kalan tüm satırlar biçimlendirilmeden, sabit genişlikli bir yazı tipiyle olduğu gibi gösterilir. Bu, özellikle kod örnekleri paylaşırken satır sonlarının ve girintilerin bozulmadan korunmasını sağlar, çünkü kod bloğu içindeki * veya # gibi karakterler biçimlendirme sembolü olarak yorumlanmaz.
Markdown Bugün Nerede Kullanılıyor?
GitHub başta olmak üzere neredeyse tüm kod barındırma platformlarında proje açıklamaları README.md dosyalarıyla Markdown formatında yazılır. Statik site oluşturucular (Jekyll, Hugo, Astro gibi) ve dokümantasyon araçları da içerik kaynağı olarak doğrudan Markdown dosyalarını kullanır; yazar düz metin yazar, araç bunu derleme (build) sırasında otomatik olarak HTML'e çevirir. Aynı yaklaşım, teknik dokümantasyon wiki'leri ve statik blog motorları için de geçerlidir.
Slack, Discord gibi mesajlaşma uygulamaları da Markdown'ın bir alt kümesini destekler — genellikle *kalın*, _italik_, ~~üstü çizili~~ ve kod blokları çalışır ama başlıklar ya da tablolar gibi daha karmaşık öğeler desteklenmez. Bu yüzden aynı sözdiziminin her platformda birebir aynı şekilde görüntüleneceğini varsaymamak, her ortamın kendi desteklediği alt kümeyi kontrol etmek gerekir.
Not alma uygulamaları (Obsidian, Notion gibi) ve issue/pull request açıklamaları da Markdown üzerine kuruludur; bir geliştirici günlük işlerinde farkında olmadan onlarca kez Markdown yazar. Bu yaygınlık, Markdown'ı öğrenmeyi tek bir aracın değil, birçok platformun ortak dilini öğrenmek hâline getirir.
GitHub Flavored Markdown (GFM) ve Temel Markdown Farkı
Orijinal Markdown sözdizimi tablo veya görev listesi gibi öğeler içermiyordu; GitHub bu boşluğu doldurmak için kendi uzantı setini tanımladı ve buna GitHub Flavored Markdown (GFM) adı verildi. GFM zamanla o kadar yaygınlaştı ki birçok kişi artık sade Markdown derken aslında GFM'i kastediyor; oysa John Gruber'ın orijinal tanımı bu ek özellikleri içermez. GFM, temel Markdown'ın üzerine birkaç pratik özellik ekler:
- Tablolar —
|karakteriyle ayrılmış sütunlar ve başlık satırının altına çizilen ayraç satırı - Görev listeleri —
- [ ]ve- [x]ile işaretlenebilen kutucuklar - Üstü çizili metin —
~~metin~~ - URL'lerin herhangi bir bağlantı sözdizimi kullanılmadan otomatik olarak tıklanabilir hâle gelmesi (autolink)
Bu sitedeki önizleme aracı, kasıtlı olarak temel Markdown'a odaklanır: başlıklar, kalın/italik, satır içi ve blok kod, listeler, alıntılar ve bağlantılar desteklenir; tam GFM (tablolar, görev listeleri, üstü çizili metin) kapsam dışıdır. Girdiğiniz ham metin önce tamamen HTML olarak kaçırılır (escape edilir), ardından yalnızca aracın kendi ürettiği güvenli etiketler eklenir; bağlantı adresleri de yalnızca http:, https:, mailto: ile başlıyorsa veya göreli bir yolsa tıklanabilir hâle gelir, javascript: gibi tehlikeli şemalar otomatik olarak düz metne düşürülür.
Başlangıçta Yapılan Yaygın Hatalar
- Başlık işaretinden sonra boşluk unutmak —
#Başlıkçoğu ayrıştırıcı tarafından başlık olarak tanınmaz,# Başlıkgerekir. - Liste öğeleri ile çevresindeki paragraflar arasına boş satır koymamak — bazı ayrıştırıcılar listeyi önceki paragrafla birleştirir veya hiç liste olarak algılamaz.
- Aynı liste içinde
-ve*işaretlerini karıştırmak — bu bazı araçlarda tek bir listenin ikiye bölünmesine yol açabilir. - İç içe (nested) listelerde girinti miktarını tutarsız kullanmak — alt öğe, bağlı olması gereken üst öğeye değil yanlış bir seviyeye bağlanabilir.
- Ham HTML etiketlerini Markdown ile karıştırmak — birçok basit önizleyici, güvenlik amacıyla ham HTML'i düz metne çevirir, bu yüzden beklenen etiket render edilmez.
Sözdizimini ezberlemek yerine yazarken anlık olarak sonucu görmek, hem öğrenmeyi hızlandırır hem de biçimlendirme hatalarını erken fark etmenizi sağlar. Özellikle liste girintisi, boş satır kuralları ve bağlantı sözdizimi gibi küçük ama can sıkıcı hataları, metni yayımladıktan sonra değil yazarken görmek çok daha pratiktir.
Markdown yazın, anlık HTML önizlemesini görün. Başlıklar, kalın/italik, listeler, kod blokları ve linkler desteklenir; ham metin güvenlik için önce kaçırılır.