Under the Hood
I believe you should know exactly what code is running on your device, especially when dealing with private files. Lime Kit is built on a "Local-First" philosophy. This page lists every major library we use.
| Tool | Core Library | Why we use it | Bloat / Load Strategy |
|---|---|---|---|
| Core UI Engine | Preact | Handles all the interactive buttons and drag-and-drop logic. It's like React, but 90% smaller. | Ultra Light (3kB). Ensures the site feels snappy even on slow phones. |
| PDF Tools | pdf-lib / pdfjs-dist | Allows modifying PDFs (merge, split, rotate) directly in the browser memory without a server. | Lazy Loaded (~200kB). Only downloads when you open a PDF tool. |
| Image Converter | heic2any / fflate | Decodes Apple's HEIC format and Zips files. | Lazy Loaded. We only load the HEIC decoder if you drop a .heic file. |
| QR Generator | qr-code-styling | Advanced styling (logos, gradients) that simpler libs can't do. | Medium (~35kB). Lazy loaded. |
| QR Scanner | qr-scanner | Uses Web Workers for fast detection without freezing the UI. | Light (~30kB). Lazy loaded. |
| Audio & Video Tools | @ffmpeg/ffmpeg (WASM) | This is the heavy hitter. It runs a full video editing engine inside your browser. It allows us to convert, compress, and edit media without uploading files. | Heavy (~25MB).
"Air-Gapped" Loading: We NEVER load this code until you explicitly click a button or drop a file in a video/audio tool. It is cached after the first use. |
| Background Remover | @imgly/background-removal | Runs a neural network in your browser to cut out backgrounds. Your photo never leaves your device. | Heavy (~40-80MB model).
"Air-Gapped" Loading: nothing downloads until you drop an image. Cached after first use. |
| AVIF Export | @jsquash/avif | A WASM build of libavif so AVIF export works in every browser, not just Chromium. | Medium (~3.5MB).
Downloads only when you pick AVIF as the output format. Cached after first use. |
| File Viewer (3D models) | three | Renders STL, OBJ, GLB, and GLTF 3D models in the browser with orbit/zoom/pan. | Medium (~734kB).
Loads only when you open a 3D file. Cached after first use. |
| File Viewer (Word / Excel) | mammoth / xlsx (SheetJS) | Renders .docx to formatted text (mammoth) and Excel / .xls / .ods spreadsheets to tables (SheetJS), entirely in your browser. | Medium (mammoth ~495kB, SheetJS ~430kB).
Each downloads only when you open that kind of file. Cached after first use. |
| File Viewer (Archives) | fflate | Reads .zip / .tar / .gz / .tar.gz contents in the browser so you can browse or preview what's inside (also unpacks folder/zip drops for multi-file 3D models). | Light (~15kB). Lazy loaded — downloads only when you open an archive or a zipped model. |
| File Viewer (Fonts) | FontFace API (native) | Loads a dropped TTF/OTF/WOFF font with the browser's own font engine to show a specimen. | Zero (0kB). No library at all. |
| File Viewer (EPUB) | epubjs (+ JSZip) | Parses and paginates EPUB e-books in the browser so you can read them without an e-reader app. | Medium (~345kB).
Loads only when you open an .epub file. Cached after first use. |
| MP3 Tag Editor | browser-id3-writer | Writes ID3 tags + cover art into MP3s. Existing tags are read with a small built-in parser (no library). | Light (~10kB). Lazy loaded — only when you save tags. |
| File Viewer (Subtitles / JSON / RTF) | Native (0 deps) | Parses .srt/.vtt captions into a cue list, .json into a collapsible tree, and .rtf into formatted text — all with hand-written parsers, no library. | Zero (0kB). No library at all. |
| Dev Tools (Diff / Markdown / CSV) | diff / marked / papaparse | Power the Diff Checker, Markdown Previewer, and CSV⇄JSON tools. | Light (15–45kB each). Lazy loaded — each downloads only when you use that tool. |
| Image Compressor | Canvas API (native) | Re-encodes images at your chosen quality using the browser's built-in engine. | Zero (0kB). No library at all. |
| Pixel Studio | fflate + native canvas · gifenc · upng-js · gifuct-js |
Draws pixel art (and animation) entirely on the browser canvas; your work autosaves locally (IndexedDB) and saves as a .chaodrawing zip (fflate). Nothing you draw is ever uploaded.
Animation export runs locally too: GIF via gifenc (by Matt DesLauriers, MIT) and APNG via upng-js (by Photopea, MIT) — each loaded only when you export that format. Sprite-sheet (PNG+JSON) export uses the native canvas, no library.
Importing a sprite decodes it locally too: GIF via gifuct-js (by matt-way, MIT) and PNG/APNG via upng-js — loaded only when you import. Decoded pixels never leave your device.
One optional network request: if you paste a Lospec palette URL to import a palette, the studio fetches that palette's color list from lospec.com — and only then. The URL is strictly validated (Lospec palette links only) and only the hex colors are read. No other part of the studio touches the network.
| Light (fflate ~15kB shared; gifenc/upng-js each a few KB, lazy-loaded per export). Palette import fetches a few KB of JSON, only when you ask. |
My Promise
- • No Data Mining: I don't want your data. I don't use Google Analytics. I use privacy-friendly stats (or none).
- • No Paywalls: These tools will always be free. No "Premium" tier for faster processing.
- • No Dark Patterns: I won't trick you into clicking ads or installing extensions.
- • No Extra Bloat: I have been developing while constantly researching tools, libraries, and strategies to keep the site as fast as possible. Despite the development ease of modern frameworks I just can't justify loading times being any longer than they have to be. Not a fan of modern websites if you can't tell. heart my heart to even migrate to preact since I was building raw html, css, js at first. but preact is actually kind of the goat
Support the Project
Hosting isn't free but it is relatively cheap for a static site making it so I don't really need intrusive ads. If these tools saved you time, consider buying me a coffee. It helps with hosting and future development.
Did you know?
ZeldaAccording to Aonuma, the bird-like Rito of Wind Waker are meant to be Zora who evolved after Hyrule's Great Flood left the sea too dangerous for their ancestors to survive in.
Turn a clip into a GIF with our Video to GIF tool →