What's changed
Every release, in order. See About for the story behind Stuxs.Tools.
All notable changes to Stuxs.Tools are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and since v26.10.22 this project uses [Date Versioning](https://datevers.ing) (YY.MM.DD, the UTC release date, with -1, -2… for later releases the same day); earlier releases used Semantic Versioning.
v26.10.25-2
- The privacy policy now says what's really logged and for how long. It promised server logs were kept for at most 7 days, but our host, Stuxedo, keeps weekly archives that currently go back about seven weeks, with visitors' real IP addresses (Cloudflare doesn't hide them there). It also now names Cloudflare, which every request passes through, and says how long Stuxs.Tools' own records last: rate-limit counters at most two hours, the PHP error log 7 days
- Rate-limit counters, which are named after a hashed form of the visitor's IP address, and old link-preview images were never deleted on the live site, because the cache-prune cron job wasn't set up there. Stuxs.Tools now clears them itself as it runs (at most once an hour), so this no longer depends on the cron job, which still works and now does the same thing
- PHP's error log now goes to
storage/logs/, which can't be reached from the web, instead oferror_logfiles next to the scripts, which nothing blocked; anyerror_logfile the host writes is now blocked too, and entries older than 7 days are removed
v26.10.25-1
- The privacy policy now says that IP Information sends the address being looked up to ip-api.com (your own, if you look yourself up). It previously said no third-party service processed personal data
- The HTTP Status Checker and Redirect Checker now refuse private and internal addresses (such as
127.0.0.1, the server's own network or169.254.169.254), as the other network tools already did. Previously they could be used to make the server request those addresses. The Redirect Checker checks every hop, so a public site redirecting to an internal address is stopped there, and both connect only to the address that was checked, so a second DNS lookup can't swap in an internal one - The page smoke test now checks that every network tool refuses a private address. It sent the wrong kind of request before, so it never actually tested this
v26.10.25
- When a server-side tool (the network tools and image tools) fails because of a fault on our side, visitors now see one plain message, "Sorry, something went wrong on our side while running this tool…", instead of a raw technical error or an empty response, and the real error is emailed to the admin alert address (Admin → Config). The email says which tool failed, what was entered into it, where in the code it happened, the version and the time. It never includes an uploaded image or its file name, the visitor's own IP address when they look it up, or anything else about the visitor. The same fault is emailed at most once an hour with a count of how often it happened in between, and at most 10 error emails go out an hour
- An Error reports section in the privacy policy explaining exactly what those emails contain
- Failures caused by the site being checked are now explained in plain English instead of raw technical errors: the HTTP Status Checker and Redirect Checker say when a site can't be found, refuses the connection, takes too long, closes the connection or can't make a secure connection; the SSL Checker no longer adds the raw connection error to its message; and IP Information explains that private and reserved addresses have nothing public to look up
- The image tools say when an upload didn't finish, instead of "Upload failed. Code: 3"
v26.10.22-4
- Discord link previews would have shown a literal
$1in place of any Markdown character in a tool or category's name or description (*,_,~, ``,|,[,], or#,>or-` at the start of a line), instead of showing the character. No current name or description contains one, so no live preview was affected yet. Backslashes are now escaped too, and new tests check every tool, category, homepage and page embed against Discord's rules
v26.10.22-3
- A full icon set:
favicon.ico(16, 32 and 48px) andapple-touch-icon.pngat the site root, and asite.webmanifestwith 192px, 512px and maskable icons for Android home screens
- The favicon was missing on the admin pages and the admin sign-in, which listed no icon, and anywhere a browser looked for
/favicon.ico, which didn't exist. Every page now lists the same icons - Saving Stuxs.Tools to a phone's home screen showed a dark, hard-to-see icon: iOS filled the icon's transparent background with black, and Android had no manifest to take an icon from. The home-screen icons now sit on a white background
v26.10.22-2
- Admin alert emails are now a branded HTML email (the Stuxs.Tools logo, an "Admin alert" label, the message with clickable links, and an *Open the admin panel* button), with the plain-text version still included for mail clients that don't show HTML
v26.10.22-1
- With Cloudflare Turnstile switched on, the admin sign-in page showed no challenge and every sign-in failed with "Captcha check failed": the site's Content-Security-Policy blocked Cloudflare's Turnstile script and frame. It now allows
challenges.cloudflare.comfor both
v26.10.22
- The admin Config page now also edits the site URL, alert emails (the address to send to, the sending mailbox and its SMTP server, port, encryption, username and password) and Cloudflare Turnstile (switch and keys). The SMTP password and Turnstile secret key are write-only: never shown back, and an empty box keeps the current one. Settings an older
config.phpdoesn't have yet are added to it on save - A small built-in mailer (
includes/Mailer.php) that sends admin alert emails through any SMTP server, or PHP'smail(), with a *Send a test alert email* button on the Config page. NewALERT_EMAIL,MAIL_FROMandSMTP_*settings inconfig.example.php
- Stuxs.Tools now uses [Date Versioning](https://datevers.ing) instead of Semantic Versioning. Versions are the UTC release date as
YY.MM.DD, with-1,-2… for further releases the same day, so this release, which would have been v1.16.0, is v26.10.22 and follows v1.15.2.commit.sh/commit.batrefuse aVERSION.mdthat isn't a valid Date Version
- Settings entered on the admin Config page can't contain line breaks, which could otherwise inject extra headers into alert emails
- The local dev server now refuses requests for
storage/,includes/andbin/, as.htaccessalready does forstorage/andincludes/in production. It previously served them as plain files (e.g.storage/hits/hits.json)
v1.15.2
- The logos and icons in the Markdown docs (README and the like) follow GitHub's light or dark theme, using each brand's
logo-light/logo-darkandicon-light/icon-darkfiles
v1.15.1
- The logos and icons in the Markdown docs (README and the like) follow GitHub's light or dark theme, using each brand's
logo-light/logo-darkandicon-light/icon-darkfiles
v1.15.0
- 15 new tools, all running entirely in the browser, taking Stuxs.Tools from 95 to 110 live tools:
- Encoding: HTML Entity Encoder (named, decimal or hex, optionally every non-ASCII character), HTML Entity Decoder (every named and numeric entity), Binary to Text (UTF-8, Latin-1 or 7-bit ASCII, with or without separators), ROT13 Encoder and Decoder (with ROT47), Unicode to Punycode and Punycode to Unicode (domains, URLs and email addresses, one per line), Quoted Printable Encoder (UTF-8, 76-character soft line breaks) and Decoder (UTF-8, Latin-1, Windows-1252, Latin-9) - Text: Word Density Counter (single words or 2- and 3-word phrases, optional common-word filter, copy as CSV), Text Repeater (up to 10,000 copies, any separator, optional numbering, download), Bubble Text Generator (circled, filled, squared and filled-square styles), Upside Down Text Generator, Glitch Text Generator (Zalgo marks above, through and below, adjustable intensity) and Random Text Line Picker (fair picks from the browser's secure random generator, with or without repeats)
assets/js/punycode.js: an RFC 3492 Punycode implementation shared by the two Punycode tools
- The README and the homepage link-preview text give the new count: 110 live tools, 50 more in the pipeline
v1.14.1
- Discord link previews for tool, category and other pages start with a small "Stuxs.Tools" line (Discord subtext, linking to the homepage) above the page title, like the site name on a normal preview. The homepage preview, whose title is already Stuxs.Tools, is unchanged
v1.14.0
- Discord component embeds: links to Stuxs.Tools pasted into Discord show a custom preview instead of the standard card, in the page's own colour. A tool page shows the tool's name, description and category (or "Coming soon" / "Under maintenance") with buttons for the tool, more tools in its category and all tools; a category page shows its description, how many tools are live and the first ten as links; the homepage shows how many tools are live and every category as a link, with Browse tools, Search and Stux.Dev buttons; other pages show their name and description. It's built server-side (
discord_*helpers inincludes/helpers.php, set per view as$discordEmbed), left out if it would ever pass Discord's 3,000-byte limit, and the Open Graph tags remain as the fallback
v1.13.9
- The category badge on tool OG images (the "PDF TOOLS" label on link previews) was the accent colour on a darker shade of the same colour, which made it almost unreadable with the default purple. It now has a soft accent-tinted fill, a lighter border and near-white tinted text, so it reads clearly with any accent colour, and sits a little lower with the title below it given more room
- Cached OG images are now keyed to
og.phpitself, so a design change replaces them straight away instead of after the 7-day cache expires, and the OG and Twitter image URLs carry a version (&v=2) so sites that cached the old image fetch the new one
v1.13.8
- Recently Used cards on the home page use their category's colour and icon and show the tool's description, the same as Popular Tools; they were plain cards in the accent colour with only the category name. They're built from the current tool list, so history saved by older versions shows correctly too, and tools that no longer exist are left out
- The Recently Used Clear button sits on the right, level with the heading, and has room above the cards; it was a white browser-default button squeezed under the heading against the cards, because its styles were only loaded on tool pages
v1.13.7
- The footer's Created-with icons (heart, code, coffee) no longer carry a
vertical-alignnudge, on the main site and on the maintenance and coming-soon pages; they keep their optical sizes
v1.13.6
- The site's timezone is one line in
config.php(date_default_timezone_set('Europe/London'), UK time by default instead of UTC); change it there and every date and time the site shows follows
- The admin dashboard's admin-token rotation times were labelled "UTC" whatever the timezone; they now show the configured zone's own label (BST or GMT)
v1.13.5
- The Browse menu opened from the left edge of its button and ran off the right side of the screen, cutting off its second column; it now lines up with the button's right edge and never grows wider than the viewport
v1.13.4
- Native form controls (checkboxes, radio buttons, range sliders, progress bars and date pickers) used the browser's default blue instead of the Stuxs.Tools accent; they now use
accent-color(the brighter accent in the dark theme), and file inputs' "Choose file" button is styled to match
v1.13.3
- Image previews in the image tools (compressor, resizer, grayscale, converters and the rest that preview an upload) were blocked by the Content Security Policy, which didn't allow
blob:images;img-srcnow includesblob: - Search suggestions showed each tool's icon as raw HTML text (
<i class="fa-solid …">) instead of the icon - The home page search dropdown was cut off by the hero and only showed by scrolling inside it; the hero and
.containernow useoverflow-x: clip, which doesn't turn them into scroll boxes, and the results are left-aligned - Link preview images (
og.php) returned a 500 error on PHP 8:imagedashedline()was called with an extra argument that PHP 7 ignored
v1.13.2
- The admin pages' footer shows the copyright year on its own in the start year (it read "2026–2026"), then START–CURRENT, like the public pages
v1.13.1
- The copyright line reads Stux.Group instead of Stux Group Ltd
- The footer's Created-with icons are optically sized, so the heart no longer looks bigger than the code and coffee icons
v1.13.0
/sitemap(an HTML page in the site layout listing every public page) and/sitemap.xml(for crawlers), built from one page list inincludes/sitemap_pages.phpwith the fixed site URL and each page's source-file modification date aslastmod; the page test checks both- A Created with love / code / coffee by Stux.Dev line in the footer, on the coming-soon and maintenance pages too
- In dev mode,
?banner=soon,maintenance,sitepreviews the other site banners (production ignores it)
- The footer links to the Sitemap next to Boring Legal Stuff
- The dev-mode and admin-override banners are the shared Stux site banner (
assets/css/site-banner.css+assets/js/site-banner.js): a muted tint of each variant's accent with a faint icon pattern and a label chip. The header and mobile menu move down by the banners' measured height, so nothing is covered or cut off, even when a banner wraps on a phone - The footer's Stux.Dev logo, "A Stux.Dev Service" and the Powered by Stuxedo badge are grey and dimmed until hovered or focused, on every page including coming-soon and maintenance; the hover animates smoothly instead of snapping
- The footer uses Stuxedo's text badge instead of the rectangle one, and the Stux.Dev logo and the badge are both 28px tall
- The copyright line uses Font Awesome's copyright icon instead of the © sign (screen readers still read "Copyright")
dev-server.sh/.batrun on PHP 7.4, like production (PHP_BIN, thenphp74/php7.4, then%LOCALAPPDATA%\Programs\PHP\7.4), and warn when only another version is available
- Turning on coming-soon or maintenance mode crashed every page with "Call to undefined function asset()": those pages were shown before
includes/helpers.phpwas loaded. It now loads first - The footer's service links used an undefined
--text-secondarycolour on hover, and its "Powered by" text was too faint to read comfortably
v1.12.0
- A PHP 7.4 (production) CI job: production runs PHP 7.4, so CI now lints every file, runs the PHPUnit suite (on PHPUnit 9.6) and requests every page on PHP 7.4, alongside the existing PHP 8.1 job
tests/test_php_pages.sh, the page smoke test that job runs: it serves the site with PHP's built-in server (usingconfig.example.phpwhen there's noconfig.php, with DEV_MODE on and coming-soon/maintenance mode off) and requests the fixed pages,/legaland its six sub-pages, every category and every tool in the registry, a search and the network APIs, failing on an unexpected status or any PHP error, warning, notice or deprecationincludes/compat.php, which providesstr_contains(),str_starts_with()andstr_ends_with()on PHP 7.4 (skipped on PHP 8, where they're built in)
composer.json, the README, CONTRIBUTING, INSTALL and DEV_GUIDE now say PHP 7.4+ instead of 8.1+
- The site didn't run on PHP 7.4: the image processor and the HTTP status checker used
matchexpressions (a parse error on 7.4; now aswitchand a conditional chain with the same results), and 15 calls to PHP 8'sstr_contains/str_starts_with(network tools, search, the tool registry, What's My IP) had no fallback
v1.11.8
HelpersTestcoverage for the changelog section ordering
- The
/changelogpage (render_changelog()inincludes/helpers.php) now sorts each release's###sections into a fixed order — Added, Changed, Fixed, Removed, Security, Deprecated — at render time, rather than trusting the orderCHANGELOG.mdlists them in; unknown section types go last - Changelog type badges now use the fixed family palette — Added
#2ecc71, Changed#3ba7ff, Fixed#ffa64d, Removed#ff4d4d, Security#b06bff, Deprecated#8a8a94— as tinted badges (coloured text on a light tint of the same hue), with darker variants of each for the light theme - CHANGELOG sections reordered to Added, Changed, Fixed, Removed, Security, Deprecated
v1.11.7
- Footer/coming-soon/maintenance credit changed from "A Stux.Dev Project" to "A Stux.Dev Service" (linking to
services.stux.devinstead ofprojects.stux.dev) — Stuxs.Tools isn't a StuxieDev, Ridgwell Family, or Stux.Dev Labs project, so it gets the standard service credit like the rest of the family.
v1.11.6
README.md's tagline was wrapped inbold— changed to the### *italic*heading style used for taglines elsewhere in the family.
v1.11.5
- The coming-soon and maintenance splash pages' icon used
fa-user-shieldfor both — changed tofa-rocket(coming soon) andfa-screwdriver-wrench(maintenance) so each page's icon matches its meaning.
v1.11.4
- The remaining Stux.Group mentions missed by v1.11.3:
LICENSE.md's copyright holder and the Disclaimer page's branding-copyright line now name the actual legal entity,Stux Group Ltd;CONTRIBUTING.md's "is a Stux.Group project" line and every admin-panel footer (admin/*.php) now credit Stux.Dev, linking tohttps://stux.dev.
v1.11.3
- The Imprint page's Operator section incorrectly said Stuxs.Tools is "built and maintained by Stux.Group" directly — it's operated by Stux.Dev, which is in turn operated by Stux Group Ltd (company no. 13160574). Corrected the Operator section and the "Responsibility for content" paragraph to name Stux.Dev.
- The legal contact address across
views/legal-imprint.php,legal-cookies.php,legal-opt-out.php, andlegal.phpwas[email protected]— unified to[email protected]to match the other Stux.Dev-operated products.[email protected](general contact) is unchanged. - The "Powered by" footer badge (
views/_layout.php) and thecoming-soon.php/maintenance.phpsplash pages named and linked Stux.Group directly — now read "A Stux.Dev Project" (linking tohttps://projects.stux.dev), with the brand logo itself linking tohttps://stux.devand pointing at the newhttps://global.media.stux.dev/logo.png. - The About page's "The name"/creator-card section similarly credited Stux.Group as creator — updated to Stux.Dev (name, avatar icon, handle link, and bio text).
v1.11.2
README.md,views/_layout.php's footer,views/about.php's creator card, andviews/coming-soon.php/views/maintenance.php's footer Stux.Group logo/icon URLs had a leftover duplicated/global/path segment (global.media.stux.group/global/logo.pngand/icon.png) — corrected tohttps://global.media.stux.group/logo.pngand/icon.png
v1.11.1
- The self-hosted Gontserrat/Creato Display/JetBrains Mono
@font-faceurl()s inassets/css/base.csswere the one remaining static asset without any cache-busting query — everything else on the site (CSS/JS entry points, logos, icons) already goes throughasset()'s?v=<version>, but a static.cssfile can't have a PHP-computed version injected into it. Added a manual?v=1to each fonturl()instead, to be bumped only when a font file itself is replaced.
v1.11.0
- The changelog page's
### Added/### Changed/### Fixed/### Removed/### Deprecated/### Securitysection headings (parsed byrender_changelog()inincludes/helpers.php) now render as colored pill badges — green/blue/amber/red/red/pink respectively — instead of plain uppercase gray text, matching the badge treatment on TIGHC's changelog page. A trailing parenthetical on a heading (e.g.### Added (Turnstile)) still renders, shown as muted text next to the badge. New.changelog-label/.changelog-label-*rules inassets/css/base.css.
v1.10.6
- The
asset()cache-busting helper (includes/helpers.php) was only wired up forbase.css,tools.css, andapp.js— every other asset reference (favicons, the self-hosted FontAwesome stylesheet, the self-hosted Gontserrat/Creato Display@font-facefonts, and every logo/icon<img>) still used a hardcoded/assets/...path with no versioning at all. All of these now go throughasset()too, so every asset actually busts the cache on release the wayapp.jsalready did
v1.10.5
- Footer's "Built & Maintained by Stux.Dev" now links to
https://github.com/StuxDevinstead ofhttps://stux.dev, matching the GitHub-org link convention used for the other brand footers (StuxAPIs, Stux.Cloud, Stuxedo)
v1.10.4
- Footer's version number is now a link to
/changelog, replacing the separate "Changelog" link that used to sit in the footer's link list
v1.10.3
- "Built and maintained by Stux.Group" (intro sentence and Credits section) corrected to Stux.Dev — Stuxs.Tools is made by Stux.Dev, which is part of the Stux.Group Brand of Companies, not built directly by Stux.Group itself; the closing brand-of-companies disclaimer now reflects this too
v1.10.2
- A "Stuxs.Tools is part of the Stux.Group Brand of Companies" line to
README.md's License section, matching the disclaimer already rolled out across the StuxAPIs repos
v1.10.1
- Changelog intro didn't state the Keep a Changelog format or that versions follow Semantic Versioning, despite
VERSION.md/commit.sh/commit.batalready enforcing MAJOR.MINOR.PATCH and the entries below already following the Keep a Changelog Added/Changed/Fixed structure — added both lines
v1.10.0
DEV_GUIDE.md— a dedicated local-development guide (cloning,config.php, the dev server and its flags, verifying the install), split out ofCONTRIBUTING.md's old "Local setup" section- A "Fixing a bare PHP install" section in
DEV_GUIDE.mdfor a manualwinget/scoop-style PHP install that ships with nophp.iniat all (no extensions, no CA bundle for cURL's SSL verification) README.mdnow has a dedicated Contact section ([email protected]/[email protected]); the same addresses were added toCONTRIBUTING.mdand as a "still stuck?" line at the end ofINSTALL.md/DEV_GUIDE.md's troubleshooting tables — the site itself already used these addresses everywhere, the docs just didn't mention them
CONTRIBUTING.md's "Local setup" section is now a short pointer toDEV_GUIDE.md/INSTALL.mdinstead of duplicating setup steps inlineREADME.md/INSTALL.mdnow cross-link toDEV_GUIDE.md
INSTALL.md's version header had been stuck atv1.5.1for the last 7 releases (v1.6.0–v1.8.5) — it's meant to be bumped on every release (and was, consistently, up through v1.5.1) but nothing enforces that; bumped to current
v1.9.0
- New site logo and icon (
assets/img/icon.png,assets/img/logo.png), replacing the oldfavicon.svgbolt mark everywhere: browser favicon/apple-touch-icon, header/footer/mobile-nav, README/CONTRIBUTING badges, and the OG-image generator (og.phpnow composites the real logo instead of hand-drawing an approximation of the old mark) - New brand accent color,
#6B00A2(was#7C6EFF), applied everywhere it appeared: CSS variables (with derived hover/bright shades), theme-color meta tags, the admin panel, the coming-soon/maintenance pages, and theog.phpdefault
- Header, footer, and mobile-nav now render the logo as a single image instead of an icon plus separately-styled text lockup
- Coming-soon/maintenance pages' "A Stux.Group Project · Powered by Stuxedo" line now uses the same real logo/badge images as the main site footer instead of plain colored text
- Maintenance page's icon now sits in the same boxed accent badge as the coming-soon page's icon (was a bare floating icon), and its card now has the same top accent bar as the coming-soon page's
- Coming-soon/maintenance pages' theme-toggle button now sits inside the card's top-right corner instead of the page's own top-right corner (maintenance's was
position: fixed, anchored to the viewport rather than the card) - Cross-branding on Downl.one updated to match: new
stuxs-tools-icon.png/stuxs-tools-logo.pngassets and the new accent color throughout, and Downl.one's about-page card for Stuxs.Tools now shows the full logo image, matching this site's own (logo-only) card for Downl.one
dev-server.bat'secholines rendered em dashes as mojibake (ÔÇö) in a default cmd.exe console, since cmd.exe doesn't use UTF-8 by default — replaced with plain hyphens; cleaned up the same em dashes incommit.sh,commit.bat, anddev-server.shfor consistency
v1.8.5
- The dev-mode/admin-override banner icon now sits inline with the title text ("Development Mode", "Coming Soon Mode", "Maintenance Mode") instead of floating beside the whole two-line block
- The coming-soon and maintenance pages now use the same icon as the admin-override banner instead of a generic wrench icon
v1.8.4
commit.sh/commit.batno longer add a commit-authorship trailer
v1.8.3
commit.sh/commit.bathad a hardcoded version and message left over from the v1.5.1 release, so they'd tag any future commit as "v1.5.1" if run — now read the version fromVERSION.mddynamically, so they can't go stale like this again. Also backfilled the missingv1.6.0–v1.8.2git tags this staleness had caused to be skipped.
v1.8.2
dev-server.sh/.batweren't actually forcingDEV_MODEon, so the dev banner and local Downl.one links required manually flippingDEV_MODEinconfig.phpevery time — they now force it on by default for every run, with--no-dev-modeto opt out and test production behavior locally
v1.8.1
INSTALL.md: generalized cPanel-only wording to also cover LiteSpeed/StackCP hosts, added a dedicated StackCP hosting notes section, and corrected stale guidance to manually setADMIN_TOKEN(it auto-rotates now)
upload_max_filesize/memory_limit/max_execution_time/post_max_sizewere only set via.htaccess'sphp_valuedirectives, which silently do nothing on hosts running PHP-FPM or LiteSpeed's LSPHP instead of mod_php (Stuxedo's included) — added a.user.iniwith the same values so they take effect regardless of SAPI
v1.8.0
- Dedicated
/faqpage — 10 common questions in an accordion, linked from the footer and mobile nav
- Footer's Stux.Group logo and Stuxedo badge were noticeably small (14px/20px) — bumped to 18px/26px
v1.7.0
- Development mode (
DEV_MODEin config.php) now shows a small banner on every page and points Downl.one links at your local dev server — port set viaDOWNLONE_DEV_PORT, overridable per-run withdev-server.sh/.bat --sister-port <port> ?admin_token=<token>now bypasses coming-soon/maintenance mode for the rest of the browser session, with a banner marking the override while it's active;?admin_preview=offclears itADMIN_TOKENis now a 128-character token that regenerates itself automatically everyADMIN_TOKEN_ROTATE_HOURS(3h floor enforced regardless of what it's set to) — rewritten straight into config.php so the current token is always readable there. NewADMIN_TOKEN_DISABLEDoption fully blocks token-based bypass/login even if a token leaks
- Admin dashboard (
admin/index.php) — environment status at a glance, admin-token display with rotate-now and disable controls, and an analytics snapshot - Admin config editor (
admin/config.php) — edits the safe config subset (dev mode, coming-soon/maintenance, cache TTL, token rotation settings) directly from the browser, in place in config.php - Every admin page now shows a footer with the current version, copyright range, and a Stux.Group credit, plus Changelog/About links
- Optional Cloudflare Turnstile challenge on the admin login form (
TURNSTILE_ENABLEDin config.php) — off by default, fails closed (rejects) on any verification error when on
- The dev-server router pre-defined its CLI-flag overrides before checking whether the request was for a real file, so any direct request to
admin/*.phpcollided with config.php's owndefine()calls ("constant already defined" warnings) — the overrides now only run when actually falling through toindex.php
v1.6.0
- Legal hub's Terms page now includes an "Ethical use" section — guidance on responsible use of security/network/generator tools, on top of the existing legal terms
- A consent line above the homepage search box: "By continuing, you agree to our Terms and Ethics of Use"
- Dedicated
/changelogand/donatepages — the changelog is no longer folded into the About page, and both are linked from the header, mobile nav and footer
- Consolidated the two separate, independently-wired mobile navigation panels into one — the duplicate hamburger button is gone, and the mobile search box and category links (now with tool-count badges) live in the single remaining panel
- Mobile nav's "Legal" section renamed to "More" and given proper category-colored icons for About, Changelog and Donate; "Boring Legal Stuff" was dropped from it (still available in the footer)
- Hero search box redesigned: the magnifying-glass icon moved out of the input and into the Search button itself, which collapses to just the icon on mobile
- The "160+ free tools" hero badge now shows a blinking dot instead of a static bolt icon, matching Downl.one
- Theme toggle button widened from 34px to 38px
- "Format Converters" category renamed to "Formatters"
- The Browse dropdown's Downl.one link is now a green tinted button instead of a plain top-bordered link
- The Downl.one partner card now stacks its button below the text on mobile instead of squeezing them onto one row
- Category-colored icons in the mobile nav were silently overridden by a higher-specificity default icon-color rule
- The Browse dropdown's Downl.one link text and hover color were overridden by
.header-nav a's higher-specificity color rule - Mobile nav divider lines weren't spanning full width; a leftover duplicate rule from the removed second drawer was winning over the intended fix
.downl-feature-iconhad a strayfont-size:3remleft over from when it held a font icon, inflating the wrapper past the 48×48 image now inside it- Mobile nav's "About" link read "About Stuxs.Tools" instead of just "About"
v1.5.1
- A little something for the curious. You'll know it when you find it.
v1.5.0
- Per-tool status badges: any tool can now be tagged
version(e.g.1.0.0),soon, ormaintenanceinToolRegistry.php, rendered with priority maintenance > soon > version via the newtool_badge_html()helper. All 95 currently-built tools have been taggedversion: 1.0.0 - Category pages now show a dedicated "In maintenance" section and stat pill (alongside the existing live/coming-soon ones), only appearing when a tool in that category is marked
maintenance - Individual tool pages show a distinct "under maintenance" state (separate from the existing "coming soon" state) when a tool is marked
maintenance ?admin_token=<token>on any tool URL bypasses the soon/maintenance gate and previews the real tool, using the sameADMIN_TOKENsecret asadmin/*.php— shows a visible "Admin preview" banner so it's never mistaken for the live page- Legal hub page ("Boring Legal Stuff"): its 6 sections now show in a responsive grid (3 columns on desktop, 2 on tablet, 1 on mobile) with each icon colored distinctly, and the icon sits to the right of the text — built on new standalone
.legal-grid/.legal-cardclasses, fully independent of the shared.tools-grid/.tool-cardsystem
- The homepage search box showed a "double border" on focus — a box-shadow ring stacked on top of the border-color change, and a separate native
:focus-visibleoutline landing on the<input>itself. Both removed; only a clean border-color change remains - The homepage search box no longer auto-focuses on page load — it was permanently showing its focus state to every visitor
- The "Partner platform" card's top border vanished on hover — a
translateY(-1px)hover-lift pushed it 1px past its container's edge, which a site-wide overflow rule then clipped. Removed the lift - Fixed a naming collision: the legal page briefly reused
.tools-grid-full, a class already active on every category page, which broke those pages' card layout. It now uses its own.legal-grid/.legal-cardclasses instead
v1.4.1
- About page: the Downl.one card's logo now sits above its description again instead of beside it
v1.4.0
- Self-hosted
Creato Display(headings/logo) andGontserrat(body) fonts — the Google Fonts CDN<link>is gone entirely;JetBrains Monois now self-hosted too - About page: the Stux.Group and Stuxedo cards are now themed with each company's real brand color (sampled directly from their logos) instead of the site's generic purple accent, and links inside those cards now inherit the matching brand color instead of the site's default link color
- About page: the "idea" card now shows the real Stuxs.Tools favicon instead of a generic FontAwesome bolt icon
- About page: the Downl.one card now shows the real Downl.one logo alongside its description instead of a stacked logo-then-text layout
- Headings that directly follow an about-page info card now sit close to it instead of inheriting the same 2rem top margin used for regular prose headings
- Font Awesome upgraded from 7.2.0 to 7.3.1 (self-hosted)
assets/css/base.css's@media (min-width: 769px)query was missing its opening line, so.mobile-drawer/.mobile-overlayweredisplay:none !importantunconditionally — the mobile menu was broken at every viewport width
v1.3.0
dev-server.sh/dev-server.bat— local dev server scripts that start PHP's built-in server with a router shim (so static assets actually load), auto-bootstrapconfig.phpfromconfig.example.phpon first run, and support--no-coming-soon/--no-maintenanceflags to bypass those modes for a single run without touchingconfig.phpDOWNLONE_URLconstant inconfig.php— the Downl.one link was previously hardcoded as a literal string in nine different view files; it's now driven by one configurable constant via the (previously defined but never actually used)downloader_url()helper
- The legacy in-house downloader API —
api/downloader/info.php,api/downloader/proxy.php,includes/MediaDownloader.php, and thetools/downloader/media-downloader.phpfragment. These were already unreachable dead code:Router.phpredirects every/downloader/*path to Downl.one before the tool-lookup logic that would have served them is ever reached. The now-unusedYTDLP_PATH/MAX_DOWNLOAD_SIZE_MB/ALLOWED_DOWNLOAD_HOSTSconstants were removed fromconfig.phpandconfig.example.phpalong with them
v1.2.3
- The about page's "The name" section no longer credits the personal "Stux / StuxieDev" handle — it now credits Stux.Group throughout (name, bio, and creator-card icon), consistent with how the rest of the site attributes the project
- The
coming-soon.phpcredit line changed from "Built by Stux.Group · Hosted by Stuxedo" to "A Stux.Group Project · Powered by Stuxedo", matching the footer's established phrasing
v1.2.2
CONTRIBUTING.md— local setup, project conventions, and how to add a new tool, linked from README.md
- Brand name stylization made consistent throughout: "Downl.one" and "Stuxs.Tools" everywhere either is referred to in prose, page titles, meta tags, alt text, and OG image text (URLs, email addresses, User-Agent strings, and CSS/JS identifiers are unaffected — those stay lowercase, since they're literal technical values, not stylized references)
- Removed a stale, completely unreferenced
assets/css/app.css— a leftover from before the CSS was split intobase.css/tools.css; no<link>tag anywhere loaded it
v1.2.1
- The version number itself now lives in
VERSION.md(a bare version string, safe to commit) —version.phpis now just a thin reader (trim(file_get_contents(...))) instead of hardcoding the version config.phpno longer pulls inversion.php— each real entry point (index.php) requires it directly instead, keeping deployment config and release version decoupled
v1.2.0
- Changelog now rendered on the about page via a small dependency-free Markdown renderer
config.example.phpas the committed config template —config.phpitself is now gitignored, never committedversion.phpsplit out ofconfig.phpto hold just the version constant (safe to commit;config.phprequires it)
- All
STUXS_constants renamed toSTUXSTOOLS_throughout, including thewindow.STUXS_TOOLS/window.__STUXS_TOOL__JS globals (nowwindow.STUXSTOOLS_ALL_TOOLS/window.STUXSTOOLS_TOOL) - Copyright year corrected back to 2026
- "Hosted & provided by Stuxedo" card now shows Stuxedo's real icon instead of a generic server icon; "Stuxedo by Stux.Cloud" corrected to just "Stuxedo" throughout about.php
og.phpnow draws the real Stuxs.Tools icon (a rounded badge with the bolt mark fromfavicon.svg) instead of plain wordmark text- INSTALL.md updated for the new
config.example.php/version.phpsetup step
- The mobile menu was completely non-functional at every screen width — a missing
@media (min-width: 769px)wrapper meant.mobile-drawerand.mobile-overlayhaddisplay: none !importantunconditionally, not just on desktop - An unterminated CSS comment at the end of
base.csswould have silently swallowed any rules appended after it
v1.1.0
- "Boring Legal Stuff" hub at
/legal, linking to six documents: Privacy Policy, Terms of Use, Cookies Policy, Imprint, Disclaimer, and Opt-Out Preferences (previously just Privacy and Terms, now moved under/legal/) - Three new tool categories: PDF Tools, Audio Tools, and Math Tools (16 coming-soon tools seeded across them)
- Category icons are now tinted with their category's own colour everywhere they appear — header nav, footer, mobile nav, and the homepage grid — not just on category cards
- Credited to Stux.Group throughout (previously StuxieDev/Stux)
- Footer restructured: version number is now followed by a "Boring Legal Stuff" link, and the Stux.Group / Stuxedo attribution reads "A Stux.Group Project" alongside the Powered by Stuxedo badge
- Downl.one now shown with its real icon/logo everywhere it's referenced (nav, footer, mobile menu, partner card, Browse dropdown) instead of a generic download icon
- Header logo rendered "Stuxs .Tools" with a stray gap caused by a flexbox quirk
- Theme toggle showed two overlapping sun/moon icons, and never updated the mobile menu's separate icon at all
- The "Browse" categories dropdown had no styling and, once styled, was invisible (clipped by the nav bar) and then stuck permanently open
- Footer had a double horizontal divider from a stray single-item row
- Four categories shared duplicate colours (blue, green, coral and pink were each reused twice) — all 17 categories now have a unique colour
v1.0.0
- README.md and a rewritten INSTALL.md covering PHP extension requirements, storage permissions, cron setup, and a going-live checklist
- Token-gated admin tools:
admin/cache-clear.php,admin/analytics.php(hit-log viewer), andadmin/new-tool.php(scaffold generator) - Full-page search at
/search?q=, with a "view all results" link from the homepage search dropdown
ToolRegistry::all()was missing itsreturnstatement — every page on the site was fatal-erroring in production- A parse error in
api/network/_shared.phphad broken all 7 network tools (DNS, IP, SSL, port, HTTP, redirects, WHOIS) - A duplicate "Text to Binary" registry entry under the wrong category was silently falling back to "coming soon" despite being counted as live — corrected the live tool count from 96 to 95
- A parse-error risk in the JSON→XML tool from an unescaped
<?xmlsequence - Protocol-relative redirects (
//cdn.example.com/...) were mangled by the redirect checker tool
v0.6.0
Performance- Split CSS into
base.css(loaded everywhere) andtools.css(loaded only on tool/category pages), saving ~26KB on other pages - Memoised
ToolRegistry::all()so it's built once per request instead of on every call - Added ETag + Last-Modified caching to static pages, with 304 responses on repeat visits
- Network APIs now send
Cache-Control: no-storeon every response - Image tool output streams via a temp file with
Content-Length, so browsers show real download progress - Static assets now cache for 1 year with
Cache-Control: immutable
v0.5.0
UX, history, and popularity- Recently-used tools remembered per-browser via localStorage
- Popular Tools section driven by a real hit-log (
api/hits.php) - Global copy-to-clipboard delegation with icon feedback
v0.4.0
Four new categories, 21 tools- Developer Tools (6), Colour Tools (5), Finance (5), and Converters (5)
- 30 instances of a literal
%%that should have been%, across 9 files - 13 stray arrow characters replaced with proper icons
v0.3.0
SEO infrastructure- Auto-generated
sitemap.xmlandrobots.txt - JSON-LD
SoftwareApplicationschema on every tool page - Related-tools section on each tool page
- Every built tool given a unique meta description
v0.2.0
Security hardening, 23 new tools- Format tools (minifiers/formatters for HTML/CSS/JS, JSON/CSV/XML/Markdown/SQL conversion), a scientific calculator, currency and unit converters, and several Fun & Misc tools
api/cache-prune.phpcron script
- SSRF protection added to all network API endpoints
- Image dimension validation (40MP cap) to prevent oversized uploads
- Content-Security-Policy and Permissions-Policy headers added
v0.1.0
Server-side tools and category pages- Nine network tools with live API endpoints
- Eleven image tools via PHP GD
- Category listing pages
stux.toolsandwww.stuxs.toolsnow redirect to the canonical domain
v0.0.1 – v0.0.4
Initial scaffold- PHP router and
ToolRegistry, with the first 26 client-side tools - Light/dark theme, Font Awesome bundled locally, dynamic Open Graph image generation
- About, Privacy, Terms, and 404 pages; Coming Soon and Maintenance modes