Licenses & credits
KeepItLocally is built on open-source software. Everything listed here is sent to your browser and runs there — none of it sends your files anywhere. This page summarises each component and its licence; the notices file has every copyright notice and licence text in full.
Licence texts and notices
- Third-party notices — every component, its version, copyright notice and licence text (plain text)
- GNU Affero General Public License v3 (plain text)
- Apache License 2.0 (plain text)
Ghostscript (GNU AGPL v3)
PDF compression, password add/remove, grayscale conversion and repair are powered by Ghostscript 10.06.0, Copyright © 2025 Artifex Software, Inc., used under the GNU Affero General Public License v3 or later. We serve an unmodified WebAssembly build: the npm package @okathira/ghostpdl-wasm 1.1.0, whose engine file has the SHA-256 checksum e8aaf3af75da65fe0af8d49b30fa717e4ff13eedbbdc0cdd5700f54fb8f667e6.
Corresponding source code for exactly that build:
- Ghostscript source: ArtifexSoftware/ghostpdl at commit 2d6e764
- WebAssembly build scripts (
compile.sh, run in theemscripten/emsdk:4.0.13image by the release workflow): okathira-dev/ghostpdl-wasm at commit a62b7d6 - The same binaries as a GitHub release (v1.1.0)
Ghostscript contains these libraries and data, each under its own licence:
| Component | Licence | Used for |
|---|---|---|
| FreeType 2.13.3 | FTL (dual-licensed FTL OR GPL-2.0-or-later; used here under the FTL) | Part of the Ghostscript engine |
| IJG JPEG library 9f | IJG | Part of the Ghostscript engine |
| libpng 1.6.50 | libpng-2.0 | Part of the Ghostscript engine |
| zlib 1.3.1 | Zlib | Part of the Ghostscript engine |
| LibTIFF 4.7.0 | libtiff | Part of the Ghostscript engine |
| OpenJPEG 2.5.3 | BSD-2-Clause | Part of the Ghostscript engine |
| Little CMS (lcms2mt, Artifex's thread-safe fork) 2.12 (LCMS_VERSION 2120; header says 2.13alpha) | MIT | Part of the Ghostscript engine |
| Brotli 1.0.9 (per c/common/version.h) | MIT | Part of the Ghostscript engine |
| jbig2dec 0.20 | AGPL-3.0-or-later | Part of the Ghostscript engine |
| Adobe CMap resources per file (e.g. UniJIS-UTF16-H 1.023) | BSD-3-Clause | Part of the Ghostscript engine |
| URW++ base 35 fonts (Nimbus Sans, Nimbus Roman, Nimbus Mono PS, URW Bookman, URW Gothic and others) 1.00 | AGPL-3.0-or-later with font embedding exception | Part of the Ghostscript engine |
| Droid Sans Fallback font not stated | Apache-2.0 | Part of the Ghostscript engine |
| Ghostscript ICC profiles | AGPL-3.0-or-later | Part of the Ghostscript engine |
| Emscripten runtime (JavaScript glue in /assets/gs.worker-*.js) 4.0.13 | MIT OR NCSA | Part of the Ghostscript engine |
| musl libc (as shipped in Emscripten 4.0.13) 4.0.13 | MIT | Part of the Ghostscript engine |
| LLVM compiler-rt (as shipped in Emscripten 4.0.13) 4.0.13 | Apache-2.0 WITH LLVM-exception | Part of the Ghostscript engine |
Required credits
- Portions of this software are copyright © 2024 The FreeType Project (www.freetype.org). All rights reserved.
- This software is based in part on the work of the Independent JPEG Group.
Everything else
| Component | Licence | Used for |
|---|---|---|
| @dnd-kit/accessibility | MIT | Drag-and-drop page ordering (screen-reader announcements) |
| @dnd-kit/core | MIT | Drag-and-drop page ordering |
| @dnd-kit/sortable | MIT | Drag-and-drop page ordering |
| @dnd-kit/utilities | MIT | Drag-and-drop page ordering |
| @jridgewell/gen-mapping | MIT | Source-map support inside Terser (Code Formatter's JavaScript minifier) |
| @jridgewell/resolve-uri | MIT | Source-map support inside Terser |
| @jridgewell/source-map | MIT | Source-map support inside Terser |
| @jridgewell/sourcemap-codec | MIT | Source-map support inside Terser |
| @jridgewell/trace-mapping | MIT | Source-map support inside Terser |
| @jsquash/avif | Apache-2.0 | AVIF encoding and decoding (Image Converter); wraps libavif and libaom compiled to WebAssembly |
| @jsquash/jpeg | Apache-2.0 | JPEG encoding and decoding; wraps MozJPEG compiled to WebAssembly |
| @jsquash/png | Apache-2.0 | PNG encoding and decoding; wraps a Rust PNG codec compiled to WebAssembly |
| @jsquash/webp | Apache-2.0 | WebP encoding and decoding; wraps libwebp compiled to WebAssembly |
| @pdf-lib/standard-fonts | MIT | Metrics for the 14 standard PDF fonts, used by pdf-lib |
| @pdf-lib/upng | MIT | PNG decoding inside pdf-lib |
| @react-router/dev | MIT | React Router's default client entry module |
| @tesseract.js-data/eng | MIT | English OCR model (eng.traineddata) for OCR PDF |
| @vercel/analytics | MIT | Loader for Vercel Web Analytics (production site only). The script it loads, /_vercel/insights/script.js, is served by Vercel's platform and is not part of this site's code. |
| comlink | Apache-2.0 | Messaging between the page and its Web Workers |
| cron-parser | MIT | Cron Parser: next run times |
| cronstrue | MIT | Cron Parser: plain-English descriptions |
| diff | BSD-3-Clause | Diff Checker |
| dijkstrajs | MIT | Segment optimisation inside the qrcode package |
| dompurify | MPL-2.0 OR Apache-2.0 | Sanitising rendered HTML in Markdown Preview |
| fflate | MIT | ZIP archives for multi-file downloads |
| js-beautify | MIT | Code Formatter (HTML, CSS, JavaScript) |
| jsqr | Apache-2.0 | Reading QR codes from images |
| luxon | MIT | Date handling inside cron-parser |
| marked | MIT | Markdown Preview |
| nearley | MIT | Parser runtime inside sql-formatter |
| pako | MIT AND Zlib | Deflate compression inside pdf-lib |
| papaparse | MIT | CSV parsing (CSV ↔ JSON) |
| pdf-lib | MIT | Creating and editing PDFs (merge, split, rotate, sign, watermark, page numbers, metadata) |
| pdfjs-dist | Apache-2.0 | Mozilla pdf.js: rendering PDF pages and extracting text |
| qrcode | MIT | QR Generator |
| react | MIT | User interface |
| react-dom | MIT | User interface |
| react-router | MIT | Routing |
| regenerator-runtime | MIT | Async support inside tesseract.js |
| scheduler | MIT | React's scheduler |
| smol-toml | BSD-3-Clause | TOML in Data Converter |
| spark-md5 | WTFPL OR MIT | MD5 in Hash Generator |
| sql-formatter | MIT | SQL Formatter |
| terser | BSD-2-Clause | JavaScript minification in Code Formatter (runs in the browser) |
| tesseract.js | Apache-2.0 | On-device OCR (OCR PDF); its worker is served from /tesseract/worker.min.js |
| tesseract.js-core | Apache-2.0 | Tesseract OCR engine compiled to WebAssembly, served from /tesseract/ |
| tslib | 0BSD | TypeScript runtime helpers inside pdf-lib |
| wasm-feature-detect | Apache-2.0 | Detecting WebAssembly SIMD support to pick the fastest codec build |
| yaml | ISC | YAML in Data Converter and ENV ↔ JSON |
| Component | Licence | Used for |
|---|---|---|
| bmp-js | MIT | OCR worker |
| idb-keyval | Apache-2.0 | OCR worker |
| is-url | MIT | OCR worker |
| regenerator-runtime | MIT | OCR worker |
| wasm-feature-detect | Apache-2.0 | OCR worker |
| zlib.js (zlibjs) | MIT | OCR worker |
| buffer | MIT | OCR worker |
| ieee754 | BSD-3-Clause | OCR worker |
| base64-js | MIT | OCR worker |
| Component | Licence | Used for |
|---|---|---|
| libavif 1.0.1 | BSD-2-Clause | /assets/avif_*.wasm (@jsquash/avif 2.1.1) |
| libaom (AV1 codec) 3.7.0 | BSD-2-Clause, with the Alliance for Open Media Patent License 1.0 | /assets/avif_*.wasm (@jsquash/avif 2.1.1) |
| FAST feature detector (vendored in libaom) as in libaom 3.7.0 | BSD-3-Clause | /assets/avif_*.wasm (@jsquash/avif 2.1.1), encoders |
| vector (vendored in libaom) as in libaom 3.7.0 | MIT | /assets/avif_*.wasm (@jsquash/avif 2.1.1), encoders |
| libsharpyuv (from libwebp) libwebp e2c8587 | BSD-3-Clause, with the WebM patent grant | /assets/avif_*.wasm (@jsquash/avif 2.1.1), encoders |
| MozJPEG 3.3.1 | IJG AND BSD-3-Clause AND Zlib | /assets/mozjpeg_*.wasm (@jsquash/jpeg 1.6.0) |
| libwebp d2e245e (after 1.1.0) | BSD-3-Clause, with the WebM patent grant | /assets/webp_*.wasm (@jsquash/webp 1.5.0) |
| png (Rust crate) 0.17.10 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| flate2 (Rust crate) 1.0.28 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| fdeflate (Rust crate) 0.3.3 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| miniz_oxide (Rust crate) 0.7.1 | MIT OR Zlib OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| crc32fast (Rust crate) 1.3.2 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| adler (Rust crate) 1.0.2 | 0BSD OR MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| bitflags (Rust crate) 1.3.2 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| bytemuck (Rust crate) 1.14.0 | Zlib OR Apache-2.0 OR MIT | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| cfg-if (Rust crate) 1.0.0 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| simd-adler32 (Rust crate) 0.3.7 | MIT | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| rgb (Rust crate) 0.8.37 | MIT | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| wasm-bindgen (Rust crate) 0.2.89 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| js-sys (Rust crate) 0.3.66 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| web-sys (Rust crate) 0.3.66 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| Rust standard library 1.77 | MIT OR Apache-2.0 | /assets/squoosh_png_bg-*.wasm (@jsquash/png 3.1.1) |
| Tesseract OCR engine 5.3.0-dev (Balearica fork, commit 2a9c1c4) | Apache-2.0 | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| Leptonica 4af068b (after 1.82.0) | BSD-2-Clause | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| LibTIFF b51bb15 (after 4.3.0) | libtiff | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| libpng a37d483 (1.6.38 development) | libpng-2.0 | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| zlib 1.2.12 | Zlib | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| IJG JPEG library 9a | IJG | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| libwebp 20ef03e (after 1.2.2) | BSD-3-Clause, with the WebM patent grant | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| GIFLIB 5.1.4 | MIT | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| OpenLibm 0.8.0 | MIT, BSD-2-Clause, ISC and public domain (per file) | /tesseract/tesseract-core-*.wasm (tesseract.js-core 7.0.0) |
| Emscripten runtime, musl libc, LLVM compiler-rt/libc++ (in the other WebAssembly engines) 3.1.57 (AVIF, JPEG), 2.0.34 (WebP), 4.0.15 (Tesseract) | MIT OR NCSA; MIT; Apache-2.0 WITH LLVM-exception | the jSquash AVIF/JPEG/WebP and Tesseract WebAssembly files |
Icons and fonts
Lucide icons (ISC) and Feather icons (MIT): some of the category icons share SVG path data with these icon sets. The site uses your device's system fonts; no web fonts are downloaded.