Lime Kit

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?

Zelda

According 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 →