FreeDataStore Tools¶
Browser-based data tools — profiling, cleaning, training, inference. Your data never leaves your machine.
Data Tools¶
| Tool | Engine | Description |
|---|---|---|
| Data Profiler | DuckDB-WASM | Drop a file, get instant stats, distributions, data quality |
| Data Cleaner | DuckDB-WASM | Remove duplicates, fix nulls, trim, cast, rename |
| Schema Validator | DuckDB-WASM | Define rules, validate any dataset |
| Format Converter | DuckDB-WASM | CSV ↔ JSON ↔ Parquet ↔ SQL |
| Dataset Explorer | DuckDB-WASM | SQL-powered visual exploration |
ML Training Tools¶
| Tool | Engine | Description |
|---|---|---|
| Neural Net Trainer | TensorFlow.js | Build layers, train on CSV, see live loss chart, export model |
| Image Classifier | TensorFlow.js | Drag images into classes, train via MobileNet transfer learning |
| Auto-ML | Pyodide (sklearn) | Upload CSV, pick target — auto-trains 5 models, picks best |
| Clustering Explorer | Pyodide (sklearn) | KMeans, DBSCAN, Agglomerative — 2D scatter + metrics |
| Time Series Forecaster | TensorFlow.js | Train LSTM on time series, forecast the future |
| Model Playground | TF.js + ONNX | Load any model, test with live input, batch predict |
Technology¶
All tools share the @freedatastore/sdk which wraps:
- DuckDB-WASM — Full SQL engine running in the browser via WebAssembly
- Apache Arrow — Columnar in-memory format for zero-copy data handling
- WebWorkers — Heavy processing off the main thread
SDK API¶
import { loadFile, profile, clean, validate, exportTable, query } from '@freedatastore/sdk';
// Load any file into DuckDB
const { table, rows, columns } = await loadFile(file);
// Profile — stats, distributions, nulls, duplicates
const report = await profile(table);
// Clean — apply rules
const results = await clean(table, [
{ type: 'drop_duplicates' },
{ type: 'trim_whitespace' },
{ type: 'drop_nulls', columns: ['email'] },
]);
// Validate — check against schema
const validation = await validate(table, {
columns: [
{ name: 'email', required: true, pattern: '^[^@]+@[^@]+$' },
{ name: 'age', min: 0, max: 150 },
],
});
// Export
const blob = await exportTable(table, 'parquet');
// Raw SQL
const rows = await query('SELECT * FROM data WHERE age > 30 ORDER BY name');
Contributing a tool¶
See the Contributing Guide for how to build and publish a new data tool.