Pail: Lightweight, native S3 desktop manager and CLI written in Go (no Electron)

  • Hallo zusammen,

    im Rahmen der Projektvorstellungen in dieser Kategorie wird das quelloffene Werkzeug Pail präsentiert – ein leichtgewichtiger, plattformübergreifender Desktop-Manager und ein begleitendes CLI-Tool für S3-kompatiblen Objektspeicher.

    Das Projekt richtet sich an Administratoren, Entwickler und Self-Hosting-Anwender, die regelmäßig mit S3-Endpunkten arbeiten – sei es Amazon S3, Cloudflare R2, Wasabi oder lokal gehostete Instanzen wie MinIO, Ceph und VersityGW.

    Wichtigste Funktionen und Architekturmerkmale

    • Native Go-Architektur: Die Anwendung ist vollständig in Go geschrieben und verzichtet vollständig auf Electron oder eingebettete Webview-Komponenten. Daraus resultieren sofortige Startzeiten und ein minimaler Arbeitsspeicherbedarf.
    • Keine Telemetrie: Es werden keinerlei Telemetrie- oder Nutzungsdaten erfasst. Es existieren keine automatisierten Hintergrundanfragen an externe Update-Server.
    • Sichere Authentifizierung: Unterstützung für Access Keys, AWS-Profile, Credential Chains, AssumeRole und anonymen Zugriff. Sensible Schlüssel werden verschlüsselt in der systemeigenen Schlüsselverwaltung (Linux Secret Service, Windows Credential Manager, macOS Keychain) oder in einem lokalen verschlüsselten Vault verwaltet.
    • Unterstützung für Self-Hosting: Endpunkte, Regionen und Path-Style-Adressierung lassen sich für private MinIO- oder Ceph-Cluster manuell konfigurieren. Eine integrierte Verbindungsprüfung testet die Erreichbarkeit vor dem Speichern.
    • Datentransfer und Synchronisation:
      • Getrennte Übertragungswarteschlangen für Upload und Download mit konfigurierbarer Parallelität und Geschwindigkeitsanzeige.
      • Checksum-geprüfte Multipart-Uploads sowie atomares Schreiben von Downloads über temporäre Dateipuffer.
      • Mehrstufige Konfliktbehebung (Überspringen, Überschreiben, Beibehalten beider Dateien, Überschreiben bei neuerem Datum oder geänderter Größe).
      • Konfigurierbare Ordner-Synchronisationsaufträge (Vergleich nach Zeit/Größe oder Prüfsumme) mit vollständiger Vorschau (Dry-Run) vor der Ausführung.
    • Bucket- und Objektverwaltung:
      • Konfiguration von 14 Bucket-Attributen (u. a. Lifecycle-Regeln, CORS, Zugriffsrichtlinien, SSE-Verschlüsselung, Versionierung, Object Lock und statisches Website-Hosting) per GUI-Formular oder als Roh-JSON.
      • Integrierte Dateivorschau für Textformate (JSON, XML, CSV), Bilder und Hex-Ansicht.
      • Erstellung zeitlich begrenzter Presigned URLs (GET/PUT) sowie Unterstützung für benutzerdefinierte CDN-Domains.
    • Integrierte CLI: Das beiliegende Kommandozeilenwerkzeug (pail) greift nahtlos auf dieselbe Konfigurationsumgebung, dieselben Synchronisationspläne und dieselben gespeicherten Schlüssel zu wie die Desktop-Oberfläche.
    • Lokaler Demo-Modus: Der Startparameter pail-desktop --demo initiiert einen vollständig im Arbeitsspeicher laufenden S3-Mock-Server für Testläufe ohne externe Infrastruktur.

    Vorkompilierte Binärpakete stehen für Linux (x64, Arm64), Windows (x64, Arm64) und macOS (Apple Silicon, Intel) bereit.

    Rückmeldungen, konstruktive Kritik und Problemberichte über das GitHub-Repository sind jederzeit willkommen.

    main-light.a845172ca9.png

    ---

    For English users:

    Hello everyone,

    This post introduces Pail, an open-source, lightweight desktop manager and headless CLI designed for S3-compatible object storage.

    The tool is aimed at developers, system administrators, and self-hosters who regularly interact with object storage backends, including Amazon S3, Cloudflare R2, Wasabi, or self-hosted systems like MinIO, Ceph, and VersityGW.

    Key Features & Technical Details

    • Native Go Implementation: Built entirely in Go without Electron or system Webview dependencies, resulting in instant startup times and very low RAM consumption.
    • Zero Telemetry: No analytics, telemetry tracking, or background update pings.
    • Secure Credential Handling: Works with Access Keys, AWS profiles, standard credential chains, AssumeRole, and anonymous access. Secrets are stored securely in the native OS keychain (Linux Secret Service, Windows Credential Manager, macOS Keychain) or an encrypted vault file.
    • Self-Hosted Storage Ready: Allows explicit configuration of custom endpoints, regions, and path-style addressing for local MinIO or Ceph instances, with integrated pre-flight connection testing.
    • Transfer & Sync Engine:
      • Separate upload and download queues with adjustable concurrency, bandwidth monitoring, pause, and retry capabilities.
      • Checksum-verified multipart uploads and atomic downloads via temporary write verification.
      • Comprehensive conflict resolution: skip, overwrite, keep both, overwrite if newer, or overwrite if file size differs.
      • Dedicated sync jobs with pattern exclusion, dry-run plan inspection, and comparison by size/time or checksums.
    • Bucket Administration & Inspection:
      • Direct configuration of 14 bucket settings (Lifecycle rules, CORS policies, IAM policies, SSE encryption, Versioning, Object Lock, static site hosting, and multipart cleanup) via form inputs or raw JSON.
      • File inspector with integrated previews for text formats (JSON, XML, CSV), images, and raw hex representation.
      • Presigned URL generation (GET/PUT) with configurable TTL and optional CDN base domain mappings.
    • Headless CLI Included: Ships with an independent pail CLI that shares the exact same configuration directory, sync jobs, and stored credentials with the desktop client.
    • Built-in Demo Environment: Running pail-desktop --demo spins up an in-process, in-memory mock S3 server for rapid evaluation without credentials.

    Pre-built binaries are available for Linux (x64, Arm64), Windows (x64, Arm64), and macOS (Apple Silicon, Intel).

    Technical feedback, feature suggestions, and issue reports on GitHub are warmly appreciated.

  • komplett :D

    Dann sei wenigstens so ehrlich und gib im Repo an dass es mit AI programmiert wurde. Ja man kann Claude als contributor in deinem Repo sehen, aber gib wenigstens irgendwo mit an dass es Vibe Coded ist. Meiner Meinung nach gehoert sowas in die README mit rein oder in eine Info datei wo es beschrieben steht...

  • Mir gefällt es. Gutes Projekt.
    Ich möchte sogar sagen, dass ich es liebe.
    Sieht gut aus, toller Techstack, brauchbar, sehr schön dargestellt hier.

    Es hat sich in den letzten Wochen securitymässig alles geändert, dazu 2 Dinge:

    - Wie soll man als Enduser sichergehen, dass ein noch junges Projekt von einem Anon nicht absichtlich oder durch die AI (falsche Lib) einen gefährlichen Code wie Infostealer enthält. Es kann ja auch jemand forken und etwas einbauen, er hat aber nicht mehr credibility oder weniger weil er auch Anon ist.
    Was ist eine akzeptable Vorgehensweise? Sandbox ja, aber ich meine man kann ja auch nicht sofort Rückschlüsse ziehen, dafür würde man ja in der Sandbox auch noch Tools benötigen, die genaue Netzwerk und Prozessmonitoring machen.

    - Weil ja die ganze Zeit neue Exploits kommen muss man die Software aktuell halten, gibt es dafür eine optimale Vorgangsweise.
    Dies ist ja etwas was du vielleicht eine Zeit lang wartest, aber wenn es nicht genug Resonanz hat hörst du auch wieder auf.
    Was ist die Vorgehensweise, gibt es z.B. einen Exploit und Updateprompt, der hilft die Libraries zu aktualisieren.

  • KI-gesteuerte Sicherheit stammt hauptsächlich aus zwei Aspekten:
    Eines davon ist das kontinuierliche Schwachstellen-Mining und Eindringen durch KI-Agenten
    Das andere sind die zunehmend schwerwiegenden Vergiftungsangriffe in der Lieferkette
    Derzeit sind diese fast unvermeidlich, also wählen Sie, wenn möglich, Open-Source-Produkte und überprüfen Sie, wenn möglich, den Code selbst oder lassen Sie KI den Code überprüfen.

    Heutzutage ist es völlig gerechtfertigt, jedem Projekt zu misstrauen; der beste Weg ist, selbst zu Vibe zu kommen (wenn es nur um die eigenen Bedürfnisse zu erfüllen, ist es nicht allzu schwer).

    Da ich keinen eleganten und einfach zu bedienenden grafischen S3-kompatiblen Objektspeicher-Client finden konnte, habe ich Pail gebaut