Viltrum: V ile Kendi HTTP Engine'imi Yazdım
RustAPI'm var. 55+ star, MCP, production path. Bir framework yeter, değil mi?
Değil. En azından benim için değil.
Temmuz 2026'da V dilini kurcalıyordum. "Ne yapsam?" diye bakarken cevap netleşti: Axum tadında bir şey değil. Kendi accept loop'u, kendi parse'ı, kendi keep-alive'ı olan ince bir HTTP framework. Adını Viltrum koydum.
Neden V?
V'yi ciddiye alan az. Yıldız sayısı yüksek, prod iddiası tartışmalı, ekosistem ince. Tam da bu yüzden yan proje için uygun.
Benim kurallarım basit:
- RustAPI'ye dokunma. O ayrı dünya.
- Haftada sınırlı saat. SemantiCAD ve diğer işler ölmesin.
- Tek binary, okunaklı kod, "engine bende" hissi.
V bunu veriyor. v run hızlı. Stdlib'de net var. veb var ama ben veb sarmalamak istemedim. Framed TCP'den HTTP/1.1 mesajına kadar stack benim olsun istedim.
Öğrenme projesi mi? Evet. Oyuncak mı? Hayır, oyuncak demem. Çünkü parse edge case'leri, keep-alive, Host zorunluluğu, 413 path'i... bunlar "hello world" değil. Bunlar motor.
Ne yaptım (kısa)
Akış şöyle:
TCP accept
-> header sonuna kadar multi-read
-> Content-Length body
-> parse
-> router (:param)
-> middleware
-> response
-> keep-alive veya close
v0.1: PoC. Çalışıyordu, tek buffer, Connection: close.
v0.2: Gerçek framing. Keep-alive, path param, rest example (in-memory TODO JSON).
v0.2.1: Polish. Query decode, trailing slash, options, CI.
v0.3: SIGINT/SIGTERM ile graceful shutdown, keep-alive idle timeout, recover middleware, logger'a süre.
Public API bilerek küçük:
mut app := viltrum.new()
app.use(viltrum.recover)
app.use(viltrum.logger)
app.get('/hi/:name', hello)
app.listen('127.0.0.1:8080') or { panic(err) }
Handler düz fonksiyon. Extractor sihri yok. Type-level magic yok. Sıkıldım o taraftan; burada bilinçli sade.
Engine kararı
Bazı insanlar "neden stdlib net.http.server değil?" diye sorar. Cevap: öğrenmek ve kontrol.
Server yazmak iki iş:
- Framing. Byte stream'ten HTTP mesajı çıkarmak. Eksik header, yarım body, leftover buffer, keep-alive.
- Uygulama yüzeyi. Route, middleware, JSON helper.
Çoğu framework 2'yi parlatır, 1'i başkasına bırakır. Ben 1'i kendim yazmak istedim. Çünkü RustAPI tarafında da "engine" tartışması hep dönüyor. V'de küçük ölçekte denemek ucuz.
Dürüst olayım: V runtime'da Go tarzı panic recover yok. recover middleware'im response'u sağlamlaştırıyor (status 0, eksik Content-Length). Process'i yutan panic'i sihirle yakalamıyor. Bunu CHANGELOG'da da yazdım. Abartı yok.
RustAPI ile ilişki
Yok. Sıfır.
Aynı anda iki framework markası bölmek istemem. RustAPI Rust dünyası. Viltrum V deneyi. İkisini birleştirmek için ne sebep ne zaman var.
Viltrum para aracı değil. Yan hat. Commit'ler Tuntii altında, MIT, public.
Kim kullanır?
- V öğrenen ve "gerçek bir şey" isteyen
- Tek binary tool API'si yazan
- "Framework ne yapıyor?" diye meraklı olan
Kim kullanmaz?
- Yarın prod TLS + HTTP/2 + WebSocket isteyen (henüz yok, reverse proxy koy)
- ORM + auth suite arayan (bilinçli non-goal)
Neredeyiz?
Repo: github.com/Tuntii/viltrum
git clone https://github.com/Tuntii/viltrum.git
cd viltrum
mkdir -p ~/.vmodules && ln -sfn "$(pwd)" ~/.vmodules/viltrum
v run examples/hello
# başka terminal
curl http://127.0.0.1:8080/hi/tunay
examples/rest küçük bir TODO JSON API. Keep-alive ve body path'ini dogfood ediyor.
Sırada bench rakamlarını düzgün oturtmak, daha fazla parse fuzz, belki route group. HTTP/2 yok. TLS yok. İyi ki yok; odak dağılmasın.
Kapanış
Yeni dil denemek için en iyi yol "tutorial bitirmek" değil. Küçük ama gerçek bir sistem yazmak. HTTP engine tam o iş: sınırları net, feedback hızlı, yalan söylemek zor.
Viltrum tam olarak bu. V ile konuştum, motoru yazdım, ship ettim.
Beğenmezsen issue aç. Beğenirsen star atma zorunluluğu yok, fork edip boz. Asıl zevk orada.