How Craftisle tools work under the hood: Web Crypto API, Web Workers, WASM, and privacy-first architecture.
Craftisle is a browser-first toolkit. Every tool runs client-side. If you're building something similar or just curious about the architecture, this guide covers the technical decisions behind it.
Every functional tool on Craftisle follows this pattern:
User drops file → File loaded into ArrayBuffer → Processed in browser → Download result
The key constraint: user data never leaves the browser. This means:
window.crypto.subtle (Web Crypto API). AES-GCM, SHA-256, PBKDF2 — all standard Web Crypto.The trade-off: performance is limited by what the browser can do. A 500MB video won't load. A 200-page PDF with OCR will spike memory. For most files under 50MB, it works fine.
If you're contributing, here's the pattern:
components/tools/lib/tools.ts:
"tool-slug": {
title: "Tool Name",
description: "What it does in one line",
category: "image" | "formatters" | "converters" | ...,
icon: LucideIconName,
tech: ["Web Crypto API", "Canvas"],
}app/tools/[tool]/page.tsxgenerateMetadata in the layoutTools with simple state (text input → text output) don't need dedicated pages — they render inline via the /tools route.
| Decision | Why |
|---|---|
| No server components for tools | Tools need interactivity (file drag-drop, live preview). Server components add hydration mismatch risk. |
| Canvas over WebGL for images | Canvas API handles 95% of image operations. WebGL only for shader effects and 3D games. |
| pdf-lib over server-side Ghostscript | Keeps processing client-side. pdf-lib is 400KB gzipped but avoids a server dependency. |
| No IndexedDB for tool state | Tools are stateless. Your settings reset on refresh. Deliberate choice to keep things predictable. |
The /directory page indexes 10,000+ open-source tools, APIs, and developer resources sourced from FMHY, free-for-dev, awesome-selfhosted, and public-apis repositories. It's static-generated — 3,000+ pages pre-rendered at build time.
The directory pages are ISR with a 6-hour revalidation. Category indices and resource detail pages are SSG.
pdfcraft uses pdf-lib (pure JS) for most operations. The OCR tool loads Tesseract.js which is a WASM port of Tesseract OCR. It's ~8MB on first load but cached after that.
We don't use Web Workers for tool processing yet. The UI freezes for about 200-500ms during heavy operations (OCR, large PDF rendering). Adding workers is tracked in the backlog.
git clone https://github.com/yysam123456-source/craftisle-app.git
cd craftisle-app
npm install
npm run devThe dev server starts on localhost:3000. ContentLayer rebuilds MDX on file changes. Tools are at /tools, blog at /blog, directory at /directory.
For bug reports or feature requests, use GitHub Issues.