HomeChangelog
Changelog
What shipped, when, and what was broken before it. Newest first.
A desktop app for Windows, macOS and Linux
- Added DuckyTools as a desktop application: an Electron shell that packages the entire site, all 312 tools and every on-device engine (PDF, ZIP, OCR, background removal), and serves them from a private ducky:// scheme so the pages keep a real origin without a server. It makes no network connection at all, checks for no updates and collects nothing. Windows gets DuckyTools.exe and an installer, macOS a universal DuckyTools.dmg, Linux an AppImage and a deb.
- Added A download page that points at the right file for your computer, and a GitHub Actions workflow that builds and publishes all three platforms from a version tag.
- Changed The app-style tools now offer "Save as HTML" for a single self-contained tool file and "Get the app" for the desktop build. Inside the desktop app both are hidden, since the whole site is already there.
Five desktop classics in the browser
- Added CSV to XLSX: writes a real Excel workbook from one or more CSV or TSV files, one sheet per file, with a bold frozen header, numbers and booleans stored as such, IDs with leading zeros kept as text, and column widths fitted to the content. The workbook parts are written directly and zipped with the JSZip build the site already ships.
- Added Image Format Converter: PNG, JPEG, WebP, BMP and ICO in and out. BMP (24-bit flattened or 32-bit with alpha) and ICO (a PNG per icon size) are encoded byte by byte, since browsers cannot write them.
- Added Paint: pencil, brush, eraser, line, rectangle, ellipse, fill bucket, text and eyedropper, a 28-color palette with primary and secondary colors, undo and redo, zoom, canvas resizing, opening an image to draw on, and saving as PNG or JPEG.
- Added Notepad: a plain text editor with open and save, find and replace, go to line, word wrap, font choices, a status bar with caret position and counts, and a draft kept in the browser's local storage between visits.
- Added Binary Notepad: a hex editor. Open any file and read it as hex, binary or decimal beside the text, click and type to edit, insert or delete bytes, search for text or hex, jump to an offset, inspect integers and floats at the cursor, and save. Only visible rows are rendered, so large files stay smooth.
- Changed Paint now wears its own window chrome instead of the site's: a title bar with the file name, a File menu, Home and View tabs, quick access to save, undo and redo, and one compact ribbon of labelled groups that fits on a single row. The workspace is a gray desk with rulers and a white canvas that has working resize handles on its right, bottom and corner edges, and the status bar carries the cursor position, selection and image size with a zoom slider.
- Changed Paint is rebuilt as a faithful Paint: a ribbon with File, Clipboard, Image, Tools, Brushes, Shapes, Size, Colors and View groups; rectangular and free-form selections that move, scale by handles, nudge, cut, copy, paste, delete, crop, flip, rotate and invert, with a transparent-selection mode; pencil with hard pixels, two calligraphy brushes, airbrush, marker, crayon and pixel brush; twenty shapes plus curve and polygon tools with outline and fill options; text with fonts, size, bold, italic, underline and opaque background; a color eraser on the right button; magnifier, Ctrl+wheel zoom, rulers and gridlines; paste from the system clipboard; save as PNG, JPEG, BMP or WebP; fifty undo steps; and the picture kept in the browser between visits.
- Added Full screen and "Download app" on the eight app-style tools (Paint, Notepad, Binary Notepad, Image Format Converter, XLSX Viewer, CSV Viewer, XLSX to CSV and CSV to XLSX). Full screen fills the display and Esc leaves it. Download app saves the tool as one self-contained HTML file, stylesheet and code inlined, that runs from a local disk without a connection. Paint's blank canvas now fills the width of its stage, and the tool block sits full-width above the description on every tool page.
- Changed What can I do with this file? now offers Binary Notepad for every file, Notepad for text files, Paint and the format converter for images, and CSV to XLSX for CSV files.
Spreadsheets: XLSX to CSV, an XLSX viewer and a CSV viewer
- Added XLSX to CSV: converts an Excel workbook to CSV without uploading it. Pick one sheet or export every sheet at once as a ZIP, choose the delimiter and line endings, quote every field, add a UTF-8 byte-order mark for Excel, or skip empty rows. Dates stored as Excel serial numbers come back as ISO dates when the cell format says they are dates, and formula cells carry the value Excel last saved.
- Added XLSX Viewer: opens a workbook in the browser with a tab per sheet (hidden sheets included, marked as such), sticky column letters and row numbers, search across every cell, click-to-sort on any column and the formula behind a cell on hover. Rows render 200 at a time, so large sheets stay responsive.
- Added CSV Viewer: shows a CSV or TSV file as a real table, with the delimiter detected, RFC 4180 quoting handled, search, sort, a note when rows have uneven field counts, and a download of the rows as clean CSV or as JSON.
- Changed The XLSX reader is a small, self-contained parser built on the JSZip library the site already ships, rather than a spreadsheet library: it reads the workbook index, shared strings, cell styles and each sheet's XML directly. What can I do with this file? now recognizes Excel workbooks and routes them to the two new tools, and the installed app registers .xlsx as a file type it can open.
A full character map, and an emoji joiner
- Added Character Map: every assigned, visible character across 35 Unicode blocks (roughly 4,700 in all), with real names pulled from the Unicode Character Database. Browse a block at a time or search across all of them, click a character to copy it, or click several to collect a string and copy the whole thing at once.
- Added Emoji Joiner: builds the zero-width-joiner sequences behind emoji that are actually several characters stitched together, the pirate flag, the rainbow pride flag, the transgender flag, family and couple combinations, and role sequences like "woman astronaut". Presets load a known sequence for editing; a palette of parts lets you remove, reorder or add pieces to rebuild it your own way, with a live breakdown of what each code point in the result actually is.
A domain of its own
- Changed DuckyTools now lives at duckytools.com. Every canonical URL, sitemap entry, Open Graph tag and machine-readable file follows from a single line of configuration, so the move was that line, and a test now checks that the domain file and the canonicals can never disagree.
- Fixed The build was not reproducible. Two files carried a clock reading rather than a date, so every deploy rewrote them whether or not anything had changed. Both now derive from the build date, and a check builds the site twice and compares all 419 files.
- Fixed The continuous integration pipeline had never run once. It was configured to trigger on a branch this repository does not have, so every deploy so far had been made by hand, and the test suites that gate a release were gating nothing.
A real Content-Security-Policy, and the hole it found
- Fixed The Tool Builder parsed tool definitions on the main page rather than inside its sandbox. Definitions travel in the URL hash, so a share link could have run a stranger's code with access to this site's storage: the exact thing the sandbox was there to prevent. Parsing, previewing and exporting now all happen inside a frame with its own opaque origin, and the page only ever handles the definition as text.
- Added A Content-Security-Policy that browsers actually enforce. It was previously written only into a `_headers` file, which is a Netlify and Cloudflare Pages convention that GitHub Pages ignores, so the policy was documentation, not protection. It now ships in the markup of every page, which works on any host.
- Fixed Two directives in that policy were wrong in ways that only appear once it is enforced: WebAssembly was not permitted, which would have broken OCR and background removal, and audio and video previews were not permitted, which would have broken the media tools.
- Note One protection cannot be delivered this way: `frame-ancestors`, which stops other sites embedding this one, is only honored as a real HTTP header. On GitHub Pages it is absent. The About page says so rather than implying otherwise.
On-device AI, OS integration, tool chaining and a proof page
- Added AI Background Remover: a real ISNet segmentation network running through ONNX Runtime in your browser, with zero requests to any other origin. Every comparable service uploads your photo; this downloads the model instead.
- Added Tool chaining. Every result now offers "Send to another tool", carrying the file in memory with no download between steps.
- Added Operating-system integration: DuckyTools appears in "Open with" for PDFs, images, text and audio once installed, accepts the Android share sheet, and has icon shortcuts.
- Added A proof page that runs a real tool while counting every network request the browser makes. It stays at zero.
- Added A command line over the same tool definitions, covering every tool that can run without a browser.
- Fixed The build was not reproducible: the mascot generated a random SVG gradient id on every render, so four pages produced a different byte stream on every deploy.
- Fixed The sitemap stamped all pages with the build date, telling search engines the entire site changed on every deploy. Dates now come from page content and only move when a page actually does.
An AI & Writing category, and American English
- Added Thirteen tools for working with model output: em dash remover, AI text cleaner, writing-tells analyzer, token counter, cost calculator, prompt tooling and a chat transcript formatter.
- Added CSS clamp generator, markdown table generator, number formatter, duplicate word finder, sentence splitter, text truncator and regex escape.
- Changed The site is now written in American English. No URL changed.
- Note Nothing in the AI category claims to detect AI authorship, because nothing can. The analyzer measures writing style and says so on the page.
An SDK, a tool builder, and a file finder
- Added @duckytools/sdk: the tool contract published as a zero-dependency package. The site's own build validates its catalog through it, so the documented standard and the enforced one cannot drift.
- Added Tool Builder: write a tool definition in the browser, watch it mount, download it as a single self-contained HTML file.
- Added What Can I Do With This File? It identifies a file from its opening bytes rather than its name, then routes it to the tools that accept it.
- Added cURL to fetch, Unicode inspector, invisible character detector, JSON diff, Base32, hex converters, HTML table extraction, time zone converter and more.
- Changed Ducky mode is now the default theme, and is set in the markup so it renders with JavaScript disabled.
- Fixed A live accessibility failure: dimmed hint text used opacity, which drops contrast below the WCAG minimum regardless of the color token.
Self-hosted OCR, offline support and the first guides
- Added Optical character recognition with Tesseract self-hosted: 11MB of WebAssembly served from this site, so English OCR makes no external request at all.
- Added Long-form guides with reference tables of real figures.
- Added Offline support through a service worker, and installation as a progressive web app.
- Fixed The service worker never installed on the live site: it precached root-absolute paths that 404 under a project subpath, so installation failed silently and offline support did not work.
- Fixed Every event handler was registered twice, which produced two stacked command palettes and delivered pasted files to a tool twice.
First public build
- Added The catalog, across PDF, image, conversion, text, developer, calculator, unit, color, web and media categories.
- Added Three themes, a command palette, and paste-or-drop anywhere.
- Note No analytics, no accounts, no upload endpoint. None of those has been added since, and none is planned.