惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
I
InfoQ
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
量子位
博客园 - 叶小钗
月光博客
月光博客
IT之家
IT之家
G
Google Developers Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
aimingoo的专栏
aimingoo的专栏
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
How I Built a File Converter That Never Touches Your File...
Ahmer Arain · 2026-04-30 · via DEV Community

I've used plenty of online file converters. Most of them upload your files to some server, process them, then (hopefully) delete them. You're trusting a stranger's backend with your documents, photos, or sensitive data.

I didn't love that. So I built ConvertifyHub — a file converter that supports 150+ formats and processes everything locally, right in your browser. Your files never leave your device.

Here's how I built it and what I learned along the way.


The Core Idea: Client-Side Everything

The whole product is built around one constraint: no file uploads, no server, no database.

That means every conversion — image, document, audio, video, archive — has to happen in the browser using JavaScript and WebAssembly. This is harder to build, but the payoff is massive:

  • Zero privacy risk for the user
  • No infrastructure cost for conversions
  • Instant processing (no round-trip to a server)
  • Works offline once loaded

The Stack

Frontend:   Next.js (TypeScript)
Deployment: AWS
Processing: Client-side JS + WebAssembly libraries

Enter fullscreen mode Exit fullscreen mode

No backend for file processing. No database. Just a fast frontend deployed on AWS.


How Each Tool Works Under the Hood

Image Conversion

For image conversion I use the browser's native Canvas API combined with libraries like sharp.js compiled to WebAssembly. The user drops a file, it gets read via FileReader, drawn to a canvas, then exported in the target format as a Blob.

const img = new Image();
img.src = URL.createObjectURL(file);
img.onload = () => {
  const canvas = document.createElement('canvas');
  canvas.width = img.width;
  canvas.height = img.height;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(img, 0, 0);
  canvas.toBlob((blob) => {
    // Trigger download
    const url = URL.createObjectURL(blob);
    downloadFile(url, outputName);
  }, targetMimeType, quality);
};

Enter fullscreen mode Exit fullscreen mode

Audio & Video

This was the trickiest part. I used FFmpeg compiled to WebAssembly (@ffmpeg/ffmpeg). It's the same FFmpeg you'd run on a server — but running entirely in the browser via WASM.

import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';

const ffmpeg = createFFmpeg({ log: false });
await ffmpeg.load();

ffmpeg.FS('writeFile', inputName, await fetchFile(file));
await ffmpeg.run('-i', inputName, outputName);
const data = ffmpeg.FS('readFile', outputName);

Enter fullscreen mode Exit fullscreen mode

The file never leaves the browser. FFmpeg runs in a sandboxed WASM environment.

Archives

For ZIP/RAR/7Z handling I used JSZip and libarchive.js (another WASM port). Reading and creating archives purely in-browser.

Document Conversion

This one has limitations — true DOCX-to-PDF conversion server-side is always going to be more reliable. But for many use cases (txt, csv, basic formats) the browser handles it well.


The Tools I Ended Up Building

What started as "just an image converter" turned into a full suite:

  • Image Converter — 25+ formats including WebP, AVIF, HEIC
  • Image Resizer & Compressor
  • Audio Converter — MP3, WAV, FLAC, AAC, OGG (via FFmpeg WASM)
  • Video Trimmer
  • Document Converter
  • Archive Converter — ZIP, RAR, 7Z, TAR
  • Spreadsheet Converter — XLSX, CSV, TSV
  • Unit & Digital Converters — 50+ units, number bases, color formats
  • QR & Barcode Generator
  • Code Minifier & Beautifier
  • Font Converter — TTF, OTF, WOFF, WOFF2
  • Security Tools — JWT, hashing, encryption utilities
  • JSON → TOON Converter — for LLM token optimization
  • Website Image Scraper
  • SVG Optimizer
  • Markdown Converter

That's 20+ tools, all running client-side.


What Made This Hard

1. WebAssembly Loading Time

FFmpeg WASM is ~25MB. First load is slow. I lazy-load it only when the user actually needs audio/video conversion, and show a progress indicator.

2. Memory Limits

Browsers cap memory. Large files (especially video) can crash the tab. I added file size warnings and chunk large files where possible.

3. Format Support Gaps

Not every format has a good JS/WASM library. HEIC on some browsers is still a pain. I had to pick my battles and clearly communicate unsupported edge cases.

4. Cross-Browser Consistency

Canvas API behaves differently across browsers for certain image formats. Lots of testing across Chrome, Firefox, Safari.


The Privacy-First Architecture

No file uploads means:

  • No S3 buckets storing user files
  • No database needed
  • No GDPR headaches around file storage
  • No server costs per conversion

The only infra I run is serving the Next.js frontend on AWS. That's it.


What's Next

  • More batch processing support
  • Better progress indicators for large files
  • PWA support for offline use
  • More AI-assisted format recommendations

Try It

👉 convertifyhub.net

No account needed. No upload. Just drop a file and convert.

If you're building something privacy-sensitive and wondering whether you can move processing to the client — in many cases, you can. WebAssembly has made things possible in the browser that used to require a backend. I'd love to hear if you've taken a similar approach.

Drop a comment if you have questions about any part of the stack!


About the Author

Ahmer Arain — Full-stack developer specializing in MERN stack, Next.js, and AWS. I build scalable web and mobile products, from SaaS platforms to marketplace apps.

🌐 ahmerarain.com
💼 linkedin.com/in/ahmer-arain
🐙 github.com/ahmerarain
📧 ahmerarain18@gmail.com