Skip to content
Blog

RustKeep: 1,5 MB RAM'le Çalışan Açık Kaynak Google Keep ve Notion Alternatifi

Notlarımı, projelerimi, dosyalarımı ve API anahtarlarımı tek yerde toplamak için Rust ile yazdığım, kendi sunucumda yaklaşık 1,5 MB RAM'le çalışan bir Google Keep ve Notion alternatifi.

RustKeep: 1,5 MB RAM'le Çalışan Açık Kaynak Google Keep ve Notion Alternatifi

Uzun süre notlarım dört bir yana dağılmış durumdaydı. Aklıma gelen kısa şeyleri Google Keep'e, uzun yazıları ve proje planlarını Notion'a atıyordum. API anahtarları pek de gurur duymadığım bir metin dosyasında duruyordu. Hatırlatıcılar ise o an neredeysem oraya düşüyordu. Bu araçların hiçbiri kötü değildi ama hiçbiri benim de değildi. Her biri, yanımda tutmayı tercih edeceğim verileri üçüncü bir tarafa emanet etmemi istiyordu.

Ben de RustKeep'i yazdım: Google Keep ve Notion'a kendi sunucumda çalışan bir alternatif. Hızlıca bir şey not almak istediğimde Keep kadar pratik, projeler için de Notion'un düzeninden yeterince şey barındırıyor. Üstelik kendi sunucumda yaklaşık 1,5 MB RAM ile çalışıyor.

Notları, projeleri, dosyaları ve hatırlatıcıları gösteren RustKeep paneli

Neler yapabiliyor?

RustKeep piyasadaki tüm verimlilik uygulamalarının yerini almaya çalışmıyor. Her gün gerçekten kullandığım şeyleri karşılıyor ve hepsini tek bir yerde topluyor:

  • Notlar: Canlı önizlemeli, bölünmüş ekran bir Markdown editörü. Yazdıkça kaydediyor, yani unutulacak bir kaydet butonu yok.
  • Proje panoları: Özel sütunlar, teslim tarihleri ve her kartta açıklama olan kanban panoları.
  • Dosyalar: Bir projeye ait belgeler projenin hemen yanında duruyor.
  • Kasa: API anahtarları ve diğer gizli bilgiler için PIN korumalı bir alan.
  • Hatırlatıcılar: Diğer her şeyle birlikte ana panelde görünüyor.

Ana panel bunların hepsini tek bir özet ekranında topluyor. Tabii karanlık mod da var.

Karanlık modda RustKeep paneli

Not yazmak

Vaktimin çoğunu editörde geçiriyorum. Solda Markdown, sağda anlık önizleme, arka planda da otomatik kayıt. Bilerek sade tuttum: açıyorsun, yazıyorsun, kapatıyorsun.

Canlı önizlemeli RustKeep Markdown editörü

Projeleri takip etmek

Bir nottan büyük olan her şey için proje panoları var. Her projenin kendi kanban panosu oluyor. Sabit bir "Yapılacak / Yapılıyor / Bitti" düzeni yerine gerçekten ihtiyaç duyduğum sütunları ekleyebiliyorum. Kartlarda teslim tarihi ve açıklama var; bir yan proje için genelde bu kadar düzen fazlasıyla yetiyor.

RustKeep kanban proje panosu

Gizli bilgiler için güvenli bir yer

Bu projeye başlamamın ana sebeplerinden biri kasaydı. API anahtarları ve token'lar şifrelenmiş olarak saklanıyor, kasanın kendisi PIN ile korunuyor, parolalar da Argon2id ile özetleniyor. Notları da gizli olarak işaretleyebiliyorsunuz; o zaman onlar da aynı şekilde şifreleniyor.

RustKeep içindeki PIN korumalı kasa

Baştan sona Rust

RustKeep'in iki tarafı da Rust ile yazıldı:

  • Sunucu: Tek iş parçacıklı tokio üzerinde çalışan axum, veritabanı olarak da libSQL. İster yerel bir SQLite dosyası, ister uzaktaki bir Turso veritabanı kullanılabiliyor.
  • İstemci: İstemci tarafında render edilen Leptos, rust-ui bileşenleri ve Tailwind v4.

Bir not uygulaması için Rust seçmek gereğinden fazla gibi görünebilir ama bellek kullanımını bu kadar düşük tutabilmemi sağlayan şey tam olarak bu.

Ne kadar hafif?

Sunucuyu hafif tutmak ilk günden beri hedefimdi. En küçük VPS'te ya da kenarda duran bir Raspberry Pi'da, varlığını bile düşünmeden çalışabilecek bir şey istiyordum. Sonuç şöyle:

Kurulum Bellek kullanımı
Docker imajı (Alpine, musl), boşta ~1,5 MB
Yerel release derlemesi, boşta ~6,6 MB
Yerel release derlemesi, 100 API isteğinden sonra ~7,3 MB

Fark edilir tek artış giriş yaparken ya da PIN'i açarken oluyor: Argon2id parola özetleme sırasında kısa süreliğine yaklaşık 7 MB kullanıyor, ardından bellek hemen eski seviyesine dönüyor.

Migration dosyası yok

Kişisel bir projede hiç uğraşmak istemediğim şeylerden biri migration dosyalarıydı. RustKeep'te hiç yok. Sunucu açılırken veritabanındaki her tabloyu koddaki şemayla karşılaştırıyor. Değişen tablolar bir transaction içinde yeniden oluşturuluyor; tüm satırlar ve hâlâ var olan her sütun yeni tabloya taşınıyor. Yerel veritabanı kullanılıyorsa herhangi bir şeye dokunmadan önce tam bir yedek alınıyor.

Pratikte bu, güncellemenin yeni sürümü kurmaktan ibaret olduğu anlamına geliyor. Mevcut veriler olduğu yerde kalıyor.

Kendi sunucunuzda çalıştırmak

İmaj Docker Hub'da yayında, yani başlamak için iki komut yeterli:

docker pull veucci/rustkeep
docker run -p 8080:8080 -v rustkeep-data:/data --env-file .env veucci/rustkeep

Ayarlar bir .env dosyasında duruyor: port, veri klasörü, isteğe bağlı Turso bağlantısı ve e-postalar için isteğe bağlı bir Resend anahtarı. Tüm seçenekler README'de anlatılıyor. Yalnızca SECRET_KEY'i güvenli bir yerde tutmayı unutmayın; o olmadan kasadaki kayıtlar ve gizli notlar çözülemez.

Son olarak

RustKeep kendim için yazdığım bir araç olarak başladı ve şimdiden eskiden arasında gidip geldiğim uygulama yığınının yerini aldı. MIT lisanslı açık kaynak bir proje; dilediğiniz gibi kurabilir, fork'layabilir ya da üzerine bir şeyler inşa edebilirsiniz. Kodu, ekran görüntülerini ve kurulum rehberinin tamamını GitHub'da bulabilirsiniz. Fikirleriniz ya da sorularınız varsa duymaktan memnuniyet duyarım.

Yazar

Efe Özkan

Efe Özkan

Yapay Zeka ve Yazılım Geliştirici