← blog · 31 Ağustos 2026

filex: kendi sunucunuzda çalışan, gömülebilir dosya yöneticisi

Bir S3 kovasını müşteriye göstermek için üçüncü kez arayüz yazdığımızda bunun sürdürülemez olduğu belli oldu. filex o işin düzgün yazılmış hâli: tarayıcıda, masaüstünde, kendi uygulamanızın içinde ve komut satırında aynı paketi koşan bir dosya yöneticisi.

Bir S3 kovasındaki dosyaları müşteriye göstermek istediğimizde önümüzde üç seçenek vardı. Bulut sağlayıcısının kendi konsolunu açmak, ki orada müşteriye vereceğiniz yetkiyi ayarlamak başlı başına bir iş. Nextcloud gibi tam bir dosya paylaşım platformu kurmak, ki tek bir klasörü göstermek için fazlasıyla ağır. Ya da her proje için küçük bir dosya listesi arayüzü yazmak, ki üçüncü kez yazdığımızda bunun sürdürülemez olduğu belli oldu.

filex bu üçüncü seçeneğin düzgün yazılmış hâli.

Ne yapıyor

Kendi sunucunuzda çalışan, birden fazla depolama arkasını aynı arayüzden yöneten bir dosya yöneticisi. S3 uyumlu depolar, yerel disk ve SMB paylaşımları aynı ağaçta görünür. Aralarında kopyalama ve taşıma yapabilirsiniz; dosya iki depo arasında akar, karşı tarafta boyutu doğrulanır.

Öne çıkan tarafı arayüzün kendisi değil, nereye koyabildiğiniz:

  • Tarayıcıda tam bir dosya yöneticisi olarak
  • Masaüstü uygulaması olarak, klasör senkronu ve sistem tepsisiyle
  • Kendi uygulamanızın içine gömülü bir bileşen olarak, npm paketiyle
  • Komut satırından, betiklerin içinden

Bunların hepsi aynı paketi kullanıyor. Bir davranışı düzelttiğimizde dört yüzeyde birden düzeliyor. Bu, sonradan alınmış bir karar değil; iki farklı yerde iki farklı sürüm tutmanın ne demek olduğunu bir kez yaşadıktan sonra verilmiş bir karar.

Paylaşım tarafında link üretebiliyorsunuz: süre sınırlı, indirme sayısı sınırlı, parolalı. Ters yönü de var, karşı tarafın size dosya yükleyebileceği bir link açabiliyorsunuz. Yetkilendirme klasör ve dosya seviyesinde çalışıyor, yani birine tek bir klasörü açıp gerisini göstermemek mümkün.

Bir hata hikâyesi

Ürünün ne olduğunu anlatan cümlelerden çok, nasıl çalıştığını anlatan bir hata daha faydalı olur.

Masaüstü uygulamasında dosyaları sürükleyip Windows masaüstüne bırakma özelliğini ekledik. Tek dosyada sorunsuz çalışıyordu. Klasör sürüklendiğinde ise ilk birkaç dosya iniyor, sonra duruyordu.

İlk teşhisimiz yanlıştı. Klasörlerin durduğu yer hep Türkçe adlı bir dosyaydı, bu yüzden karakter kodlamasına baktık. Gerçekten de bir sorun vardı: indirme başlığı ham UTF-8 taşıyordu ve Electron'un ağ katmanı bunu yakalanamayan bir istisnayla reddediyordu. Düzelttik. Klasörler yine duruyordu.

Asıl sebep başka yerdeydi. Windows'ta sürükleme işlemini başlatan çağrı modaldir: sürükleme sürerken uygulamanın JavaScript tarafı hiç çalışmaz. Biz ise dosyanın nereye bırakıldığını bir dosya sistemi izleyicisiyle öğreniyorduk. Yani bloklanmış bir döngüde, hiç görmediğimiz bir olayı bekliyorduk. Tek dosyanın çalışmasının sebebi de buydu: onu sürükleme başlamadan önce hazırlıyorduk.

Çözüm izleyiciyi ayrı bir iş parçacığına almak oldu. Sürükleme başlamadan önce kurulur, "hazırım" der, sonra sürükleme başlar.

Bu hatanın öğrettiği asıl şey şu: mevcut testlerimizin hiçbiri bunu yakalayamazdı. Taklit ettiğimiz "bırakma" işlemi aslında bir klasör oluşturmaktan ibaretti, test verisinde ASCII dışı tek bir karakter yoktu ve bırakma işlemini sürükleme bittikten sonra yapıyorduk. Testler yeşildi çünkü yanlış şeyi ölçüyorlardı. Hepsini düzelttik, üstüne bir de log dosyası ekledik; paketlenmiş bir Electron uygulamasında konsola yazdığınız hiçbir şey hiçbir yere gitmiyor.

Nerede koşuyor

Kendi altyapımızda üç ayrı kurulumu var. Bunlardan biri günlük işlerimizde kullandığımız ana kurulum, biri herkese açık demo, biri de bir platformun içine gömülü hâlde çalışıyor. Yani ürünü müşteriye önermeden önce kendimiz kullanıyoruz.

Kurulum tek bir konteyner. Depolama arkasını çalışırken ekleyip çıkarabiliyorsunuz, yeniden başlatma gerekmiyor.

Bakmak isterseniz

Belgeler docs.filex.sh adresinde. Demo kurulumunda hesap açmadan gezebilirsiniz. Kendi sunucunuzda denemek isterseniz kurulum belgesi tek sayfa; uzun sürmez.

Sorunuz olursa yazın, memnuniyetle anlatırız.