Menu

Tree [0834ba] master /
 History

HTTPS access


File Date Author Commit
 .cargo 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 .github 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 arch 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 assets 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 debian 3 days ago os4 os4 [0834ba] Initial commit
 depo 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 rpm 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 scratch 3 days ago os4 os4 [0834ba] Initial commit
 scripts 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 src 3 days ago os4 os4 [0834ba] Initial commit
 vendor 3 days ago os4 os4 [0834ba] Initial commit
 windows 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 .gitignore 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 Cargo.lock 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 Cargo.toml 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 LICENSE 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 README.md 2026-03-28 os4 os4 [82e9a3] Initial commit - v0.2.0 hazırlığı
 patch_i18n.py 3 days ago os4 os4 [0834ba] Initial commit
 scratch.rs 3 days ago os4 os4 [0834ba] Initial commit

Read Me

ulak

ulak logo

Rust ve egui ile geliştirilmiş, grafiksel arayüzlü zengin özellikli SSH istemcisi

Lisans Rust Platform Arch


İçindekiler


Özellikler

Terminal Emülasyonu

  • vt100/VT220 uyumlu çoklu sekme terminal emülatörü
  • Tek oturumda birden fazla bağımsız kabuk sekmesi
  • SSH oturumu üzerinden yerel/uzak kabuk erişimi
  • Pano entegrasyonu (X11 arboard)

Dosya Yöneticisi (SFTP)

  • Yan yana çift bölme (sol: uzak sunucu, sağ: yerel bilgisayar)
  • Sürükle-bırak ile dosya ve dizin transferi
  • Yerel → Uzak: yükleme (upload)
  • Uzak → Yerel: indirme (download)
  • Kesme / Kopyalama / Yapıştırma (sağ tık menüsü + kısayol tuşları)
  • Satır içi (inline) dosya/dizin yeniden adlandırma
  • Taşıma diyaloğu (hedef yol girerek)
  • Arşivleme: tar, tar.gz, tar.bz2, zip
  • Gizli dosyaları göster/gizle
  • Yeniden adlandırılabilir Name sütunu (başlık kenarını sürükleyerek)
  • Gezinme geçmişi ile ◀ Geri / ▲ Üst Dizin
  • F-tuşu kısayol çubuğu: F4 F5 F6 F7 F9
  • Sembolik bağlantı (symlink) hedeflerine şeffaf gezinme
  • Dosya Özellikleri — sağ tık menüsünden boyut, izinler, sahip, tarih

Yerleşik Metin Editörü

  • Uzak sunucu ve yerel dosyaları doğrudan uygulama içinde düzenleme
  • Sağ tık menüsünden ✏ Düzenle ile tek tıkla açma
  • Yazma izni kontrolü; gerektiğinde sudo parolası isteyerek kaydetme
  • Arama (Ctrl+F): eşleşme sayacı, ◀▶ gezinme, büyük/küçük harf duyarsız mod
  • Değiştir (Ctrl+H): tek tek veya Tümünü Değiştir ile toplu değiştirme
  • Monospace kod görünümü, kaydırılabilir alan

Arama

  • Uzak sunucuda find ile özyinelemeli arama
  • Dosya adı deseni, derinlik sınırı, tür filtresi (dosya/dizin)
  • Arka planda çalışır; 60 saniye zaman aşımı

Disk Analizi

  • df -h çıktısı, kullanım çubuğu ve renk eşiğiyle
  • < %70 → yeşil, < %90 → sarı, ≥ %90 → kırmızı

Süreç Yöneticisi

  • ps aux tabanlı gerçek zamanlı süreç listesi
  • CPU / bellek sıralaması
  • Arama filtresi
  • kill ile onaylı sonlandırma
  • Otomatik yenileme

Servis Yöneticisi

  • systemd servis listesi (Running / Failed / Inactive filtresi)
  • Start / Stop / Restart eylemleri
  • Otomatik durum yenileme

APT Depo Yöneticisi

  • /etc/apt/sources.list ve .sources.d/ düzenleme
  • Depo etkinleştir / devre dışı bırak / sil
  • Modern [arch=… signed-by=…] söz dizimi desteği

Paket Yöneticisi

  • APT ve 🍺 Homebrew (brew) arka uç desteği — tek tıkla geçiş
  • Paket arama (apt-cache search / brew search)
  • Yüklü paketler listesi (apt list --installed / brew list --versions)
  • Güncellenebilir paketler listesi (apt list --upgradable / brew outdated)
  • Paket detayı: sürüm, boyut, bağımlılıklar, ana sayfa
  • Yükle / Kaldır / Yükselt — canlı çıktı akışı ile

Kaynak İzleme (Gerçek Zamanlı)

  • Zaman serisi grafikleri: CPU%, yük ortalaması, bellek, takas
  • Disk G/Ç (okuma/yazma MB/s)
  • Ağ G/Ç (gönderme/alma MB/s)
  • Dosya sistemi tablosu

AI Agent (Claude API)

  • claude-opus-4-6 modeli ile doğal dil SSH yardımcısı
  • Araç kullanımı (tool use) döngüsü — model SSH komutları çalıştırabilir
  • Çok turlu konuşma geçmişi
  • Akış (streaming) metin çıktısı
  • Ayarlar sekmesinden Claude API anahtarı girişi

Bağlantı Özellikleri

  • Parola, SSH anahtarı (passphrase destekli), SSH ajanı kimlik doğrulama
  • Çoklu atlama (jump host) zinciri
  • Yerel / uzak / dinamik SOCKS5 port yönlendirme
  • X11 yönlendirme
  • Yalnızca SFTP modu
  • HTTP ve SOCKS5 proxy desteği
  • Yapılandırılabilir keepalive ve bağlantı zaman aşımı

Güvenlik

  • Ana parola ile oturum şifrelerini AES-256-GCM ile şifreleme
  • PBKDF2-benzeri anahtar türetme (SHA-256, 100.000 yineleme)
  • İsteğe bağlı parola kaydetme (her oturum için ayrı)

Uluslararasılaştırma

Dil Kod
Türkçe tr (varsayılan)
English en
Español es
Português pt

Ekran Görüntüleri

Terminal + Çoklu Sekme Dosya Yöneticisi
Terminal Dosya Yöneticisi

Kurulum

Hazır Paketler

Mimari Paket
x86-64 (Intel/AMD) ulak_0.2.0-1_amd64.deb
ARM 64-bit ulak_0.2.0-1_arm64.deb
RISC-V 64-bit ulak_0.2.0-1_riscv64.deb
# Debian/Ubuntu (amd64)
sudo dpkg -i ulak_0.2.0-1_amd64.deb
sudo apt-get install -f   # bağımlılıkları çöz

Arch Linux

# PKGBUILD ile
makepkg -si

RPM Tabanlı Dağıtımlar

sudo rpm -i ulak-0.2.0-1.x86_64.rpm

Derleme

Rust Kurulumu (Tüm Platformlar)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup update stable

Debian / Ubuntu

# Sistem bağımlılıkları
sudo apt-get update
sudo apt-get install -y \
    build-essential pkg-config \
    libssl-dev \
    libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
    libxkbcommon-dev \
    libgl-dev \
    libfontconfig1-dev libfreetype-dev

# Kaynak kodunu al ve derle
git clone https://git.code.sf.net/p/anadolu-panteri/Ulak
cd ulak
cargo build --release

# Çalıştır
./target/release/ulak

Ubuntu 22.04+ ve Debian 12 (Bookworm) üzerinde test edilmiştir.


Arch Linux / Manjaro

# Sistem bağımlılıkları
sudo pacman -Syu --needed \
    base-devel pkg-config \
    openssl \
    libxcb xcb-util \
    libxkbcommon \
    mesa \
    fontconfig freetype2 \
    wayland

# Kaynak kodunu al ve derle
git clone https://git.code.sf.net/p/anadolu-panteri/Ulak
cd ulak
cargo build --release

# Çalıştır
./target/release/ulak

PKGBUILD ile paket olarak kurmak için:
bash makepkg -si


Fedora / RHEL / Rocky Linux

# Sistem bağımlılıkları
sudo dnf install -y \
    gcc gcc-c++ make pkg-config \
    openssl-devel \
    libxcb-devel libxkbcommon-devel \
    mesa-libGL-devel \
    fontconfig-devel freetype-devel \
    wayland-devel

# Kaynak kodunu al ve derle
git clone https://git.code.sf.net/p/anadolu-panteri/Ulak
cd ulak
cargo build --release

# Çalıştır
./target/release/ulak

Fedora 38+ ve RHEL/Rocky 9 üzerinde test edilmiştir.

RHEL/Rocky'de openssl-devel yoksa:
bash sudo dnf install -y epel-release && sudo dnf install -y openssl-devel


macOS

⚠️ macOS desteği deneyseldir. egui/eframe Metal backend ile çalışır;
OpenGL backend devre dışıdır.

1. Gereksinimler

# Xcode Command Line Tools (zorunlu)
xcode-select --install

# Homebrew kurulu değilse
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Bağımlılıklar
brew install openssl pkg-config

# OpenSSL yolunu Cargo'ya bildir
export OPENSSL_DIR=$(brew --prefix openssl)
export PKG_CONFIG_PATH="$OPENSSL_DIR/lib/pkgconfig"

2. Derleme

git clone https://git.code.sf.net/p/anadolu-panteri/Ulak
cd ulak

Apple Silicon — M1 / M2 / M3 (MacBook Air dahil):

rustup target add aarch64-apple-darwin
cargo build --release --target aarch64-apple-darwin
# Çıktı: target/aarch64-apple-darwin/release/ulak

Intel Mac:

rustup target add x86_64-apple-darwin
cargo build --release --target x86_64-apple-darwin
# Çıktı: target/x86_64-apple-darwin/release/ulak

Evrensel İkili (Universal Binary — hem M1 hem Intel):

rustup target add aarch64-apple-darwin x86_64-apple-darwin
cargo build --release --target aarch64-apple-darwin
cargo build --release --target x86_64-apple-darwin
lipo -create -output ulak \
    target/aarch64-apple-darwin/release/ulak \
    target/x86_64-apple-darwin/release/ulak
# Doğrula
lipo -archs ulak   # → x86_64 arm64

macOS DMG Paketi Oluşturma (M1 / MacBook Air)

DMG oluşturmak macOS üzerinde yapılmalıdır (hdiutil macOS'a özgüdür).

Otomatik Script

# Projenin kök dizininden çalıştır
bash scripts/package-macos.sh
# Çıktı: ulak-0.2.0-arm64.dmg

Elle Adım Adım

Adım 1 — Binary derle (M1):

export OPENSSL_DIR=$(brew --prefix openssl)
export PKG_CONFIG_PATH="$OPENSSL_DIR/lib/pkgconfig"
cargo build --release --target aarch64-apple-darwin

Adım 2 — .app bundle oluştur:

macOS uygulamaları belirli bir dizin yapısı gerektirir:

ulak.app/
└── Contents/
    ├── Info.plist      ← uygulama meta verisi
    ├── MacOS/
    │   └── ulak        ← derlenmiş binary
    └── Resources/
        └── ulak.icns   ← uygulama ikonu (opsiyonel)
APP="ulak.app"
mkdir -p "$APP/Contents/MacOS"
mkdir -p "$APP/Contents/Resources"

# Binary kopyala
cp target/aarch64-apple-darwin/release/ulak "$APP/Contents/MacOS/ulak"
chmod +x "$APP/Contents/MacOS/ulak"

# İkon kopyala (varsa)
# cp assets/ulak.icns "$APP/Contents/Resources/ulak.icns"

Adım 3 — Info.plist yaz:

cat > "$APP/Contents/Info.plist" << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleName</key>
    <string>ulak</string>
    <key>CFBundleDisplayName</key>
    <string>ulak</string>
    <key>CFBundleIdentifier</key>
    <string>com.example.ulak</string>
    <key>CFBundleVersion</key>
    <string>0.2.0</string>
    <key>CFBundleShortVersionString</key>
    <string>0.2.0</string>
    <key>CFBundleExecutable</key>
    <string>ulak</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleIconFile</key>
    <string>ulak</string>
    <key>NSHighResolutionCapable</key>
    <true/>
    <key>LSMinimumSystemVersion</key>
    <string>12.0</string>
    <key>NSHumanReadableCopyright</key>
    <string>Copyright © 2026 Ortanca Samuray. GPL-3.0-or-later.</string>
</dict>
</plist>
EOF

Adım 4 — DMG oluştur:

# Basit yöntem (hdiutil)
hdiutil create \
    -volname "ulak 0.2.0" \
    -srcfolder ulak.app \
    -ov \
    -format UDZO \
    ulak-0.2.0-arm64.dmg

echo "✓ ulak-0.2.0-arm64.dmg oluşturuldu"

create-dmg ile daha şık DMG (opsiyonel):

```bash
brew install create-dmg

create-dmg \
--volname "ulak 0.2.0" \
--window-pos 200 120 \
--window-size 600 400 \
--icon-size 128 \
--icon "ulak.app" 150 185 \
--hide-extension "ulak.app" \
--app-drop-link 450 185 \
ulak-0.2.0-arm64.dmg \
ulak.app
```

Adım 5 — (Opsiyonel) İmzalama ve Notarizasyon:

Apple Developer hesabı olmadan uygulama macOS Gatekeeper tarafından engellenir.
İmzasız DMG'yi açmak için:

Finder → DMG'ye çift tık → ulak.app üzerine sağ tık → Aç → Aç

Apple Developer hesabı varsa (dağıtım için):

# Ad hoc imzalama (kişisel kullanım)
codesign --force --deep --sign - ulak.app

# Apple ID ile dağıtım imzalama
codesign --force --deep \
    --sign "Developer ID Application: Ad Soyad (TEAMID)" \
    --options runtime \
    ulak.app

# Notarizasyon
xcrun notarytool submit ulak-0.2.0-arm64.dmg \
    --apple-id "your@email.com" \
    --team-id "TEAMID" \
    --password "@keychain:AC_PASSWORD" \
    --wait

xcrun stapler staple ulak-0.2.0-arm64.dmg

Sonuç Dosyaları

Dosya Açıklama
ulak.app macOS uygulama paketi
ulak-0.2.0-arm64.dmg M1/M2/M3 için kurulum imajı

Çapraz Derleme (Linux Üzerinden)

Desteklenen hedefler:

# ARM64 (aarch64)
rustup target add aarch64-unknown-linux-gnu
sudo apt-get install gcc-aarch64-linux-gnu  # Debian/Ubuntu
cargo build --release --target aarch64-unknown-linux-gnu

# RISC-V 64
rustup target add riscv64gc-unknown-linux-gnu
sudo apt-get install gcc-riscv64-linux-gnu  # Debian/Ubuntu
cargo build --release --target riscv64gc-unknown-linux-gnu

Not: Çapraz derleme için hedef mimariye ait OpenSSL sysroot gereklidir.
Bkz. .cargo/config.toml linker ayarları.


Derleme Özeti

Platform Binary Derleme Paket Oluşturma
Debian/Ubuntu cargo build --release dpkg-buildpackage -b
Arch/Manjaro cargo build --release makepkg -si
Fedora/RHEL cargo build --release rpmbuild -bb ulak.spec
macOS M1/M2/M3 cargo build --release --target aarch64-apple-darwin bash scripts/package-macos.sh
macOS Intel cargo build --release --target x86_64-apple-darwin bash scripts/package-macos.sh --intel
macOS Evrensel lipo ile birleştir bash scripts/package-macos.sh --universal
Linux → ARM64 cargo build --release --target aarch64-unknown-linux-gnu scripts/package-arm64.sh
Linux → RISC-V cargo build --release --target riscv64gc-unknown-linux-gnu

Kullanım

İlk Başlatma

  1. ulak komutu veya uygulama simgesiyle başlatın
  2. Ana parola belirleyin (oturum şifrelerini şifrelemek için)
  3. + düğmesiyle yeni SSH oturumu ekleyin:
  4. Sunucu adresi, port, kullanıcı adı
  5. Kimlik doğrulama: Parola / SSH Anahtarı / SSH Ajanı
  6. Bağlan düğmesine tıklayın

Sekmeler

Bağlantı kurulunca üst çubukta sekmeler aktif hale gelir:

Sekme Açıklama
>_ Terminal (çoklu sekme)
📁 Dosya Yöneticisi (SFTP)
🔍 Dosya Arama
💾 Disk Analizi
Süreç Yöneticisi
🔧 Servis Yöneticisi
📦 Paket Yöneticisi
📋 APT Depo Yöneticisi
📊 Kaynak İzleme
🤖 AI Agent
⚙️ Ayarlar

Dosya Yöneticisi Kısayolları

F-Tuşu Çubuğu

Tuş Eylem Açıklama
F4 Yeniden Adlandır Seçili öğeyi satır içi düzenle
F5 Kopyala Aktif panelden karşı panele kopyala
F6 Taşı Aktif panelden karşı panele taşı (kaynak silinir)
F7 Yeni Dizin Aktif panelde yeni dizin oluştur
F9 Sil Seçili öğeyi onay ile sil

F5 / F6 çapraz panel davranışı:
Uzak panelde seçiliyse → yerel dizine kopyala/taşı
Yerel panelde seçiliyse → uzak dizine kopyala/taşı

Gezinme Butonları

Buton Eylem
Önceki dizine dön (geçmiş)
Üst dizine çık
🏠 Ana dizine git
Dizini yenile
📁+ Yeni dizin oluştur (uzak)

Sağ Tık Menüsü

Dosya/dizin üzerinde sağ tık ile:

  • Kes / Kopyala / Yapıştır
  • Yeniden Adlandır
  • Taşı (hedef yolu girerek)
  • Arşivle (tar.gz, tar.bz2, zip)
  • ✏ Düzenle — yerleşik metin editöründe aç (dosyalarda)
  • ℹ Özellikler — boyut, izinler, sahip, değiştirme tarihi
  • Sil (onaylı)

Metin Editörü Kısayolları

Kısayol Eylem
Ctrl+F Arama çubuğunu aç / kapat
Ctrl+H Değiştir satırını aç / kapat
Enter / Sonraki eşleşmeye git
Önceki eşleşmeye git
Ctrl+S Kaydet
Esc Arama çubuğunu kapat

Sürükle & Bırak

  • Yerel panelden uzak panele sürükle → Yükle
  • Uzak panelden yerel panele sürükle → İndir
  • Dizinler de sürüklenebilir (özyinelemeli transfer)

AI Agent

🤖 sekmesinde Claude API entegrasyonu ile SSH sunucusunda doğal dil komutları çalıştırabilirsiniz.

Kurulum

  1. Ayarlar sekmesine gidin
  2. Claude API Key alanına sk-ant-… anahtarınızı girin
  3. 🤖 AI Agent sekmesine geçin

Kullanım Örnekleri

"df -h çıktısını analiz et ve disk doluluk durumunu özetle"
"Hangi servisler aktif çalışıyor?"
"Son 100 satır sistem logunu incele ve hata varsa bildir"
"En çok CPU kullanan 5 süreci listele"

Agent gerekli SSH komutlarını otomatik olarak çalıştırır, çıktıları okur ve sonucu doğal dilde açıklar.


Ayarlar

Ayarlar ~/.config/ulak/settings.json dosyasında saklanır.

Ayar Varsayılan Açıklama
language Turkish Arayüz dili
use_dark_theme true Koyu tema
show_hidden_files false Gizli dosyaları göster
confirm_before_delete true Silmeden önce onayla
dual_pane_mode true Çift bölme modu
terminal_font_size 14 Terminal yazı boyutu (px)
terminal_theme "dark" Terminal renk teması
connection_timeout 30 Bağlantı zaman aşımı (sn)
ssh_keepalive_interval 60 Keepalive aralığı (sn)
default_remote_folder "/" Varsayılan uzak dizin
show_transfer_progress true Transfer ilerlemesini göster
auto_save_sessions true Oturumları otomatik kaydet
claude_api_key "" Claude API anahtarı

Mimari

ulak/
├── src/
   ├── main.rs             Giriş noktası, eframe başlatma
   ├── app.rs              Uygulama durum makinesi (Giriş  Ana)
   ├── config/
      ├── auth.rs         Ana parola & PBKDF2 anahtar türetme
      ├── crypto.rs       AES-256-GCM şifreleme/şifre çözme
      ├── session.rs      SSH oturum tanımları
      ├── settings.rs     Kullanıcı ayarları
      └── store.rs        JSON kalıcı depolama
   ├── ssh/
      ├── client.rs       SSH worker thread (tek  parçacığı, senkron)
      ├── sftp.rs         Dosya işlemleri (yükle/indir/listele/sil)
      ├── auth.rs         SSH kimlik doğrulama yöntemleri
      └── channel.rs      SSH kanal yönetimi
   ├── terminal/
      ├── mod.rs
      └── emulator.rs     vt100 sarmalayıcı
   ├── ui/
      ├── main_window.rs  Ana pencere, sekme yönetimi
      ├── file_browser.rs Çift bölmeli SFTP dosya yöneticisi
      ├── terminal.rs     Terminal UI bileşeni
      ├── process_viewer.rs
      ├── disk_analyzer.rs
      ├── port_forwarding.rs
      ├── settings.rs
      ├── session_list.rs
      ├── session_manager.rs
      ├── session_edit.rs
      └── ai_panel.rs     AI agent paneli
   ├── ai/
      └── agent.rs        Claude API tool-use döngüsü
   ├── i18n/               Çoklu dil desteği
   └── util/               Yardımcı fonksiyonlar
├── assets/
   └── ulak.svg            Uygulama simgesi
├── debian/                 Debian paket metadata
├── scripts/                Paketleme betikleri
├── Cargo.toml
└── LICENSE                 GPL-3.0-or-later

Temel Tasarım Kararları

Karar Gerekçe
Tek SSH worker thread libssh2 iş parçacığı güvenli değil; tüm SSH G/Ç serileştirildi
mpsc kanal mimarisi Worker → UI event kanalı; bloke etmeden UI güncellemesi
Engellemesiz kabuk G/Ç Terminal sekmeleri için non-blocking SSH kanalları
Ayrı bağlantılar find, apt-get install gibi uzun süreli komutlar için ayrı SSH bağlantısı
64 KB transfer parçaları Transfer ilerleme raporlama granülaritesi

Bağımlılıklar

eframe   = "0.29"    # GUI çerçevesi (OpenGL backend)
egui     = "0.29"    # Immediate mode GUI
ssh2     = "0.9"     # SSH protokolü (libssh2 sarmalayıcı)
tokio    = "1"       # Async çalışma zamanı
serde    = "1"       # Serileştirme
vt100    = "0.15"    # Terminal emülasyonu
rfd      = "0.14"    # Dosya diyalogları
aes-gcm  = "0.10"    # Şifreleme
reqwest  = "0.12"    # HTTP (Claude API)
arboard  = "3"       # Pano
uuid     = "1"
chrono   = "0.4"
anyhow   = "1"
tracing  = "0.1"

Lisans

Bu proje GNU Genel Kamu Lisansı v3 veya sonrası (GPL-3.0-or-later) koşullarıyla lisanslanmıştır.

Lisans metninin tamamı için bkz. LICENSE.

Copyright (C) 2026 Ortanca Samuray

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
MongoDB Logo MongoDB