A privacy-first, browser-based file conversion toolkit. All processing happens locally using WebAssembly - your files never leave your device.
- Universal Converter - Convert between PNG, JPG, WebP, GIF, BMP, ICO, TIFF, AVIF, HEIC
- Compressor - Reduce file sizes while maintaining quality
- Resizer - Batch resize images to exact dimensions
- Merge, split, rotate, and compress PDFs
- Convert images to PDF and PDF to images
- Markdown to PDF with live preview
- PDF text extraction to Markdown
- Password protection and removal
- Convert between MP4, WebM, MOV, MKV, AVI, and more
- Compress videos while preserving quality
- Trim, resize, and rotate videos
- Extract thumbnails at custom timestamps
- Extract audio to MP3, AAC, WAV, OGG, FLAC
- Create ZIP, TAR, and TAR.GZ archives
- Extract ZIP, 7Z, RAR, TAR, GZ, BZ2, XZ, and more
- JSON Formatter with validation
- JSON ↔ YAML Converter
- Base64 Encode/Decode
- QR Code Generator with custom styling
- Hash Generator (MD5, SHA-1, SHA-256, SHA-512)
- UUID Generator (v1, v3, v4, v5)
- Password Generator
- JWT Decoder
- Color Converter (HEX, RGB, HSL, HSV, CMYK, LAB, and more)
- Text Diff Checker
- Case Converter
- Word Counter
- Astro - Static site generation
- React - Interactive UI components
- Tailwind CSS v4 - Styling
- Radix UI - Accessible component primitives
- Comlink - Web Worker communication
All heavy processing is done in Web Workers using WebAssembly:
- @refilelabs/image - Image format conversion
- @jsquash/* - Image codecs (PNG, JPEG, WebP, AVIF)
- libheif-js - HEIC/HEIF support
- pdf-lib - PDF manipulation
- pdfjs-dist - PDF rendering
- 7z-wasm - 7-Zip compression
- libarchive-wasm - Archive extraction
- mediabunny - Video processing
- Node.js 18+
- pnpm 10+
# Clone the repository
git clone https://github.com/RayLabsHQ/formatfuse.git
cd formatfuse
# Install dependencies
pnpm install
# Start development server
pnpm devThe app will be available at http://localhost:4321.
| Command | Description |
|---|---|
pnpm dev |
Start development server |
pnpm build |
Build for production |
pnpm preview |
Preview production build |
pnpm check |
TypeScript type checking |
pnpm test |
Run tests |
pnpm test:watch |
Run tests in watch mode |
pnpm test:coverage |
Run tests with coverage |
pnpm format |
Format code with Prettier |
pnpm format:check |
Check code formatting |
src/
├── components/
│ ├── converters/ # Tool-specific components
│ ├── ui/ # Reusable UI components (shadcn-style)
│ └── core/ # Low-level components
├── pages/
│ ├── tools/ # Individual tool pages
│ ├── convert/ # Dynamic conversion routes
│ ├── extract/ # Archive extraction routes
│ └── video-tools/ # Video processing routes
├── workers/ # Web Workers for heavy computation
├── hooks/ # React hooks
├── lib/ # Utilities and Comlink wrappers
├── data/ # Tool definitions
└── layouts/ # Astro layouts
FormatFuse uses a hybrid Astro + React architecture:
- Astro handles static page generation and routing
- React powers interactive tool components with
client:loadhydration - Web Workers + Comlink offload heavy WASM computation off the main thread
- WASM libraries provide native-speed processing entirely in the browser
Heavy processing uses Web Workers with Comlink for type-safe communication:
// Worker (src/workers/my.worker.ts)
class MyWorker {
async process(data: Uint8Array): Promise<Uint8Array> { ... }
}
Comlink.expose(MyWorker);
// Hook (src/hooks/useMyTool.ts)
const worker = new Worker(
new URL("../workers/my.worker.ts", import.meta.url),
{ type: "module" }
);
const api = Comlink.wrap<MyWorker>(worker);
const result = await api.process(data);Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) - see the LICENSE file for details.