Panoramica
Duckle è uno studio di pipeline dati desktop local‑first che sostituisce i pesanti flussi ETL cloud e i fragili workflow su fogli di calcolo. Offre un costruttore visuale drag‑and‑drop con oltre 290 connettori (file, database, API SaaS, streaming, vector store e molto altro). Tutte le pipeline vengono compilate in SQL leggibile ed eseguite da un motore colonnare (DuckDB). Un assistente IA integrato (Duckie) funziona interamente in locale: descrivi una pipeline in linguaggio naturale e l’assistente inserisce il grafico corrispondente sulla tela. Il binario autonomo (~30 MB) scarica i motori al primo avvio. Gli spazi di lavoro sono file di testo semplice, versionabili con diff e pronti per Git. Duckle opera completamente offline, supporta 60 lingue dell’interfaccia ed è rilasciato con licenza MIT / Apache‑2.0. È pensato per carichi su singola macchina; per dati più grandi, i risultati possono essere indirizzati verso warehouse o data lake.
Installazione e primo avvio
| SO | Asset | Come eseguire |
|---|---|---|
| Windows | Duckle-windows-x64.exe | Fare doppio clic; bypassare SmartScreen con Ulteriori informazioni → Esegui comunque. |
| macOS (Apple Silicon) | Duckle-macos-arm64 | chmod +x quindi eseguire; la prima volta clic destro → Apri per aggirare Gatekeeper. |
| Linux (x86_64) | Duckle-linux-x64 | chmod +x quindi eseguire; richiede libwebkit2gtk-4.1-0. |
Al primo avvio, un modale di configurazione ti guida nell’installazione della CLI DuckDB (obbligatoria) e, facoltativamente, del modello IA Duckie (~1,1 GB). Scegli una cartella dello spazio di lavoro in cui pipeline, connessioni e contesti vengono salvati come file di testo. Una guida rapida di 60 secondi: trascina un’origine CSV, collega un filtro, aggiungi un sink Parquet e premi Esegui. In alternativa, fai clic sull’icona dei brillantini, digita una descrizione e inserisci il grafico generato.
Creazione di pipeline
Il flusso quotidiano: aggiungi sorgenti, concatena trasformazioni (filtro, join, aggregazione, arricchimento IA, pulizia), inserisci validatori (non nullo, unicità , regex) che indirizzano gli scarti a una porta di rifiuto, e termina con sink (file, database, object storage, email).
Esegui il grafico; il pannello Output mostra conteggi di righe e tempi.
L’assistente IA genera un grafico a partire da una descrizione in linguaggio naturale: puoi modificare i nodi in seguito.
Riutilizza connessioni crittografate e variabili di contesto (${var}) per cambiare ambiente.
Ricette di esempio includono pulizia di CSV, caricamenti notturni da Postgres a Snowflake, ingestion RAG e pipeline per digest Slack.
Esempi pronti all’uso si trovano nella cartella samples/.
Spazio di lavoro, Git e pianificazione
Una cartella dello spazio di lavoro contiene pipelines/, connections/, contexts/, routines/, documents/, schedules.json e run-history/.
Tutto è testo semplice, pronto per git diff.
L’icona Git nella barra superiore apre un pannello per stato, staging, commit, push/pull e gestione dei branch.
Push e pull usano il credential helper di sistema; in caso di errore 401, Duckle richiede un token di accesso personale (crittografato con AES all’interno dello spazio di lavoro).
La pianificazione si configura nel pannello Schedule con trigger cron, a intervalli o basati su modifica di file.
Le pianificazioni vengono salvate in schedules.json e vengono eseguite mentre Duckle è aperto.
Una modalità CLI headless è prevista per il rilascio 1.0.
Opzioni di configurazione
| Impostazione | Dove | Effetto |
|---|---|---|
| Tema | Interruttore sole/luna nella barra superiore | Chiaro/scuro, salvato in localStorage |
| Spazio di lavoro | Pillola workspace nella barra superiore → Cambia | Modifica la cartella dello spazio di lavoro attivo |
| Motore attivo | Selettore motore nella barra superiore | Scegli DuckDB (predefinito) o SlothDB |
| Contesto attivo | Menu a discesa contesto nella barra superiore | Risolve le variabili di contesto al momento dell’esecuzione |
| URL base IA | Proprietà baseUrl nei nodi IA | Punta a qualsiasi endpoint compatibile con OpenAI (predefinito: Duckie locale) |
| Riprova per stadio | Proprietà → scheda Avanzate | Numero di tentativi e backoff lineare |
| Limite di memoria per stadio | Proprietà → scheda Avanzate | Applica PRAGMA memory_limit a quello stadio |
| Estensioni DuckDB | Pre-caricate all’installazione; spatial lazy‑loaded | Evita pause di rete durante la pipeline |
RUST_LOG | Variabile d’ambiente prima dell’avvio | Impostare a debug per log dettagliati del motore |
DUCKLE_DUCKDB_BIN | Variabile d’ambiente per i test | Indirizza i test di integrazione verso una specifica CLI DuckDB |
Vincoli, Best Practices e Procedure Chiave
Vincoli: ambito a singola macchina; nessuna CLI headless ancora; il modello AI (1.5B Qwen) potrebbe richiedere più iterazioni per grafici complessi; alcuni connettori sono in Anteprima/Pianificati; nessuna collaborazione in tempo reale; i binari non firmati richiedono un bypass; Linux necessita di libwebkit2gtk; i download del motore sono di grandi dimensioni.
Best practices: usa Parquet per i risultati intermedi, spingi i filtri il prima possibile, sfrutta la ricerca vettoriale/full‑text integrata, precarica le estensioni lazy, raggruppa le chiamate AI in batch, limita la memoria nelle aggregazioni pesanti, utilizza i checkpoint, disabilita il logging di debug, ordina una volta sola alla fine e pulisci i dati prima dell’arricchimento con AI.
Procedure: i motori si installano nella cartella app‑data (%APPDATA%\io.duckle.app\engines\ su Windows, ecc.).
La compilazione dai sorgenti richiede --features custom-protocol.
Per il rilascio, incrementa la versione in tauri.conf.json, fai commit, crea un tag e pusha.
Tieni .duckle/keys/ fuori da Git.
Per la connettività , regola la modalità SSL o pre‑installa le estensioni con duckdb :memory: -c "INSTALL spatial; LOAD spatial;".
git clone https://github.com/SouravRoy-ETL/duckle cd duckle npm --prefix frontend install # Development (hot‑reload) cargo tauri dev # Release build (must include --features custom-protocol) cargo build --release --manifest-path apps/desktop/Cargo.toml --features custom-protocol





