A browser-native CSV XOR obfuscator with interactive bit-level visualisation. Built with Svelte 5, DuckDB-WASM, and Tailwind CSS — all processing runs entirely in your browser.
Upload a CSV, select integer columns, pick a key (up to 64-bit), and download the transformed file. No data leaves your machine.
#transform, #explore) with browser back/forward supportRequires Node.js 22.22.2+ (LTS).
npm install
npm run dev
Requires COOP/COEP headers for SharedArrayBuffer (configured in vite.config.js for dev, netlify.toml for production).
npm run build
Output goes to dist/.
Configured for Netlify via netlify.toml. Connect the repo and it will build and deploy automatically with the required cross-origin isolation headers.
src/lib/
├── pages/ Transform.svelte, Explore.svelte
├── components/ UI components (Dropzone, EncodeTable, ExploreCanvas, KeyInput, etc.)
├── stores/ Svelte 5 rune-based state (file, key, columns, mode, tab)
└── utils/
├── duckdb.ts CSV import/export via DuckDB-WASM
├── encoding.ts Preview values, heatmap colors, download
├── xor.ts Pure XOR math and binary formatting
├── canvas-types.ts Shared types and layout constants
├── canvas-colors.ts Color palette and helpers
├── canvas-physics.ts Spring dynamics and node construction
├── canvas-rendering.ts All canvas draw calls
├── canvas-hit-detection.ts Click and trace hit testing
├── canvas-engine.ts Barrel re-export of canvas modules
└── motion.ts Reduced-motion preference
XORcel requires SharedArrayBuffer and WebAssembly support for DuckDB-WASM.
| Browser | Minimum Version | Notes |
|---|---|---|
| Chrome / Edge | 91+ | Full support |
| Firefox | 79+ | Full support |
| Safari | 15.2+ | Requires COOP/COEP headers |
| Opera | 77+ | Chromium-based, same as Chrome |
Number is precise up to 2^53 for preview values; the actual export uses DuckDB natively and retains full 64-bit precision