Blog
Tips, guides, and tutorials to help you get the most out of your tools.
The Case Against Making You Sign Up
Why Toolium has no accounts: what signup walls do for operators, what they cost users, and the engineering I avoid by keeping a utility site stateless, including the tradeoffs that choice pushes back onto you.
Read moreHow Free Online Tools Make Money
A user emailed to ask how a tool that costs me hosting money can be free for him. I walk through the funding models behind free web tools and what each one does to the person using it.
Read moreThe Bugs That Live in Plain Text
A user's name renders as José and the diagnosis leads through UTF-8 bytes, stray BOMs, Unicode normalization, and the Turkish dotless i: the encoding bugs working developers keep rediscovering.
Read moreBox Shadows That Look Right: Layered Shadows and the One-Light Rule
The one-light source rule that makes shadows feel natural, the trick of layering multiple shadows for depth, and why your hover transitions look chunky.
Read moreWhat "client-side only" actually means, in 2026
Other tool sites claim local processing while running analytics, logging metadata, and serving ads from CDNs. What the phrase should mean, and the thirty-second test that catches the liars.
Read moreCSS Gradients in 2026: Linear, Radial, Conic, and the Banding Problem
The math behind gradient bands, the 8-bit color depth ceiling that produces visible stripes on dark backgrounds, and the noise-overlay trick to fix it.
Read morePDF to Image: The 32,767-Pixel Canvas Limit
How pdf.js rasterizes pages, why scale 3x or higher sometimes silently fails on Chrome, and the format-mismatch bug that took me embarrassingly long to find.
Read moreHTML to Markdown: The Migration Tool I Wish Existed Sooner
Why migrating from a hosted blog to a static site usually starts with HTML, what cleanly converts, and which CSS-dependent layouts you have to redo by hand.
Read moreA Throwaway Converter Still Needs to Work Without a Mouse
I tried to use my own converter without a mouse and failed within eight seconds. Notes on keyboard access, focus management, and screen reader announcements in single-use tools, with the fixes I shipped.
Read moreJSON vs YAML: The Norway Problem and Other Reasons This Choice Matters
Why YAML supports comments and JSON does not, the unquoted no that broke a Norwegian country code, and the practical reasons Kubernetes uses YAML.
Read moreSVG to PNG: Picking the Right Scale, and the Font Trap
Vector to raster is conceptually simple but the scale you pick determines whether your output looks crisp or pointless. Plus the surprising fonts-not-loaded gotcha that produces fuzzy text.
Read moreWhy a Big File Used to Freeze the Whole Tab
A 50MB CSV can lock a browser tab for seconds. I walk through why the main thread stalls and how workers, transferable buffers, chunked reads, and yielding fixed my file tools.
Read moreImage Cropping, Touch Events, and the Pointer-Events Rewrite
The case for cropping with intent rather than vibes, the aspect ratios that map to real destinations, and the story of rewriting the crop UI to actually work on a phone.
Read moreThe tools I decided not to build
OCR, AI image upscaling, currency conversion, video editing. The requests I keep declining, and why feature restraint is the actual product decision.
Read moreTurning a Stack of Photos Into One PDF: The EXIF Rotation Trap
Combining photos into a multi-page PDF is mechanically simple. The trap is portrait phone photos: most of them carry an EXIF orientation flag that browser tools handle inconsistently. Here is what goes wrong and how to fix it.
Read moreJWT Tokens, Decoded: What Is Really Inside Your Auth Token
The three sections of a JWT, the alg:none vulnerability that almost killed JWT in 2015, and why the payload is technically public information.
Read moreWebAssembly Turned the Browser Tab Into a Real Computer
WebAssembly moved image compression, PDF rendering, and video transcoding into the browser tab. I walk through how compiled C and Rust libraries made that happen, and the download, memory, and threading costs the demos hide.
Read moreRegular Expressions, Without the Mysticism
What regex actually does, the half-dozen tokens you need 90% of the time, and the catastrophic-backtracking trap that froze our tester before I added a worker timeout.
Read moreQR Codes: How They Survived From 1994 to Pandemic-Era Ubiquity
The Toyota subsidiary that invented QR codes, the error correction math that lets them survive being half-covered by a logo, and the size you actually need for print.
Read moreFive browser APIs you probably should be using
TextEncoder, Intl.Segmenter, SubtleCrypto, Web Workers, and the File System Access API. The ones that quietly solve real problems and most JavaScript code still ignores.
Read moreUnix Timestamps: The Year 2038 Problem and Why Your Date Is in 33,000 AD
Seconds vs milliseconds vs microseconds, the 32-bit signed timestamp that overflows on January 19, 2038, and how to spot a unit mismatch in three seconds.
Read moreSHA-256, MD5, and Why You Should Never Use a Fast Hash for Passwords
What a cryptographic hash actually does, the SHA-1 collisions from 2017 that quietly killed it, and the specific reason bcrypt exists.
Read moreUUIDs: When to Use Them, the v4-vs-v7 Question, and the B-Tree Fragmentation Problem
Why a random UUID is sometimes the right primary key and sometimes a terrible one, what UUID v7 fixed, and how to pick between the two in 2026.
Read moreHow git diff Works, Inside the Myers Algorithm
The longest common subsequence problem, the O(N*M) algorithm that powers git diff, and the word-level highlighting that makes near-matches obvious.
Read moreThe Markdown Patterns I Reach For Daily
The bits of markdown you reach for daily, the GFM extensions that everyone now expects, and the XSS bug that prompted me to add DOMPurify to the preview tool.
Read moreNotes on building a tool suite without a backend
Thirty-four tools into Toolium, here is what the browser can actually do, the libraries that did the work, and where the architecture genuinely breaks.
Read moreHEX, RGB, HSL: Why Designers Reach for Each One
What each format actually represents, why HSL is the secret weapon for building color systems, and the 3-digit hex shortcut that catches a lot of color tools out.
Read morePassword Strength Math: Length Beats Symbols
The math of password entropy, why xkcd 936 is mostly right, the specific attack that haveibeenpwned exists to prevent, and why every important account should use a unique random string.
Read moreWhy Two Word Counters Give You Two Different Numbers
What actually counts as a word, why Intl.Segmenter is the right primitive for non-Latin scripts, and what an apostrophe does to the count.
Read moreNaming Cases: The Politics of camelCase vs snake_case
Why each language picked the convention it picked, the XMLHttpRequest boundary problem that breaks naive case converters, and what to do at the boundary between two languages.
Read moreURL Encoding: encodeURI vs encodeURIComponent, and Which You Want
The single most useful piece of JavaScript trivia for working with URLs, the double-encoding bug that ate three days of my life, and what + means inside query strings.
Read moreBase64, Explained Like You Are Going to Implement It
The algorithm in plain English, the UTF-8 bug that breaks every naive browser-based encoder, the difference between base64 and base64url, and where the 33% overhead actually comes from.
Read moreMy Daily Developer Tool Belt (And Why Browser-Based Wins)
The browser-based tools I use most days, what each one is good for in practice, and why I built Toolium versions of the ones whose existing alternatives were broken.
Read moreWhy I refuse to upload your file
An argument against the upload-process-download flow that most free online tools still use, plus the thirty-second network-tab test that catches every one of them.
Read morePulling Text Out of .docx Files Without Installing Word
Why pasting from Word breaks every CMS, what mammoth.js extracts and what it skips, and the older .doc format that nothing on the web can read.
Read moreCSV to JSON: The Shape Question and the ZIP-Code Trap
Why your numbers are sometimes strings, what to do about duplicate column names, and which JSON shape APIs actually expect.
Read moreCSV to Excel: Delimiter Detection and the Type Inference Problem
The European semicolon problem, why some columns look numeric and some do not, and why a leading apostrophe shows up in your first column sometimes.
Read moreExcel to CSV: The BOM, the Date Format, and Everything Else That Goes Wrong
Why Excel mangles UTF-8 unless you add a BOM, how date formatting nearly always fails on the round trip, and what the merged-cell case does in CSV.
Read morePicking Between PNG, JPG, and WebP
How each format actually works under the hood, where each one shines and fails, and why AVIF is the next thing I am watching but not yet recommending universally.
Read moreResizing Images: The Math, the Filters, the Upscaling Trap
Downscaling is mostly painless; upscaling is fundamentally limited. The bicubic vs nearest-neighbor trade-off, the canvas-size limits in browsers, and which tool to reach for when this one is not enough.
Read moreCompressing Images Without Wrecking Them
What the JPEG quality slider actually does, why your phone photos are already compressed, and the specific case where browser-based compression goes wrong.
Read moreWhat Actually Shrinks a Bloated PDF
PDFs get fat for predictable reasons. The structural compression every PDF tool does, the image-resampling pass it usually does not, and why scanned PDFs are essentially uncompressible.
Read moreExtracting Pages from a PDF: The Range Syntax That Catches Everyone
Splitting a PDF is half about the click, half about getting the page range right. Here is the syntax, the off-by-one errors, and why your extracted file sometimes ends up larger than expected.
Read moreMerging PDFs in a Browser Tab
A practical guide to combining PDFs in your browser: which library to use, how to preserve hyperlinks, and the edge cases (bookmarks, signatures, encrypted files) that catch every free tool out.
Read more