All notable changes to this project are documented in this file.
This changelog tracks the recent evolution of the project by published release and notable published commits.
- Bumped the product version to
1.7.0. - Upgraded the entire toolchain in a single dependency wave (17 dependabot PRs): Astro 6.3.6 → 7.0.7 (with Vite 8),
@astrojs/solid-js6 → 7, TypeScript 6 → 7 (native compiler), Tailwind CSS 4.3.3, Vitest 4.1.10, Playwright 1.61.1, solid-js 1.9.14, plus all Docker/GitHub Actions workflow actions. - Reworded the README files and changelog notes to avoid hard-coded tool counts in catalog descriptions.
- Added a versioned compliance dossier under
compliance/: CycloneDX SBOMs for v1.6.0 and v1.7.0, a supply-chain diff between the two releases, grype vulnerability scans with one draft triage record per finding, a voluntary CRA Annex I gap report, and an automated axe-core accessibility scan of every English route. - Added a repository
CLAUDE.mdwith the compliance policy block (voluntary CRA/EAA posture, per-release evidence regeneration).
- Fixed the Docker build workflow tag filters so
v-prefixed release tags actually trigger a versioned image publish — no tag build had ever run before this fix.
- The dependency wave removed 13 of the 20 known vulnerabilities in the previous release's supply chain, including the only Critical (seroval); the 7 remaining findings are all in build-time tooling and have draft triage records under
compliance/vulns/.
- Bumped the product version to
1.6.0. - Redesigned the entire UX/UI with a modern "dev-tool" look: cool slate surfaces, an electric-indigo accent, geometric display type (Space Grotesk) with Inter for body text and JetBrains Mono for code, per-category accent hues, and refined light/dark themes.
- Replaced every emoji icon in the page chrome with a coherent custom SVG line-icon set.
- Rebuilt the home catalog with an editorial hero, a sticky scroll-spy category index, and numbered category sections.
- Rebuilt the tool-page shell with a collapsible, favorite-aware sidebar, a breadcrumb top bar, an editorial tool header, related-tool suggestions, and a keyboard-shortcut footer.
- Restyled the command palette and added an actions group (home, theme, GitHub, clear recents),
/quick-open, and keyboard hints. - Added a global ⌘/Ctrl+Enter shortcut that runs each tool's primary action, a live character/line count on outputs, wrapping (no truncation) of long result values, and line-icon status messages.
- Tightened the responsive chrome on phones: the home and tool top bars compact (search collapses to an icon, breadcrumb hides, favorite becomes icon-only) so nothing overflows horizontally on small screens.
- Added a "Jump back in" recents section on the home page that remembers recently opened tools locally.
- Added richer favorites surfaces on the home page and in the tool sidebar.
- Translated all new interface strings across English, Italian, Spanish, French, and German.
- Added a
Date Intervaltool for calculating the span between two dates, including total days, week breakdown, working days, and weekend days. - Added a
Sort Texttool for sorting line-based text with alphabetical, length-based, numeric, reverse, and random modes. - Added a
Docker Run ↔ Composeconverter for translating betweendocker runcommands and Docker Compose YAML.
- Fixed the tool-order test so the utilities catalog includes the new
Date Intervalentry. - Fixed timezone-sensitive date initialization in the new date interval tool.
- Fixed Docker converter output handling for multiline commands, environment map values, YAML quoting, log options, and ulimits.
- Added a
Markdown to HTMLconverter with a live preview, supporting GFM tables, task lists, fenced code blocks, links, images, blockquotes, and a self-contained parser that escapes HTML and sanitizesjavascript:,data:, andvbscript:URLs. - Added
Download HTMLandDownload full documentbuttons for the Markdown to HTML output.
- Bumped the product version to
1.5.1. - Hardened URL sanitization in the Markdown converter against control-character bypasses.
- Added support for escaped pipes (
\|) inside GFM table cells.
- Added an
AES Key Generatortool for browser-side generation of AES-128, AES-192, and AES-256 keys in hex and Base64. - Added browser-safe generators for API keys, JWT secrets, HMAC keys, salts, recovery codes, passphrases, and random strings.
- Clarified the
Color Picker/Converterinput hints so it is explicit that the field accepts HEX, RGB, RGBA, HSL, and HSLA values. - Improved the color parser so HSL and RGBA inputs are accepted directly.
- Bumped the product version to
1.4.1. - Refreshed the Node/Vitest toolchain and Docker build action through Dependabot updates.
- Added shared
useToolState()hook to eliminate state save/restore boilerplate across all 36 tool components. - Added shared
validateNonEmpty()utility for standardized input validation across 19 tool logic modules. - Added ~130 new Playwright E2E tests (357 total) covering option toggles, value verification, edge cases, unicode, boundary conditions, and multi-mode interactions for every tool.
- Added missing
rclone-password.spec.tsE2E test file.
- Bumped the product version to
1.4.0. - Replaced 10 duplicate language page files with 2 Astro dynamic routes using
getStaticPaths(), reducing page boilerplate by ~116 lines. - Extracted 460 lines of locale data from
CronExpression.tsxintosrc/components/tools/cron/CronPhrases.ts, reducing the component from 1172 to 707 lines. - Converted
cards()pattern from plain functions tocreateMemoin 5 components (DataSizeConverter, ColorPicker, HashGenerator, TimeConvert, TimestampConverter). - Converted
parsed()/expiry()from plain functions tocreateMemoin CsvViewer and JwtDecoder. - Replaced
createEffectwithcreateMemoin PasswordStrength for synchronous derived state. - Migrated all 36 tool components from manual
onMount/onCleanupboilerplate to the shareduseToolState()hook (net removal of ~248 lines). - Migrated 19 tool logic files from inline empty-input checks to the shared
validateNonEmpty()utility.
- Replaced O(n*m)
split().join()loop in emoji-shortcode with single-pass regex replacement.
- Extended the
Cron Expression Parserwith AWS-style 6-field parsing,cron(...)wrapper support, and special tokens like?,L,W, and#. - Added bidirectional Unix/AWS conversion plus upcoming and previous schedule previews for cron expressions.
- Bumped the product version to
1.3.5. - Updated the README files to describe the new cron capabilities in the latest release note blurb.
- Fixed cron expression validation, conversion, and schedule-evaluator edge cases uncovered during review.
- Added a new
Rclone Password Revealertool for revealing passwords stored in rclone's obscured Base64URL format.
- Bumped the product version to
1.3.4. - Updated the README files to describe the catalog as containing more than 30 tools instead of a fixed count.
- Added a new
Text Countertool modeled oncontacaratteri.it, with live counts for characters, words, sentences, paragraphs, reading/speaking time, top keywords, and quick text actions. - Added a new
BitTorrent Magnet Link Generatortool for building magnet URIs from an info hash, optional resource name, and tracker list. - Added unit and Playwright end-to-end coverage for the new magnet generator workflow.
- Added a new
Cron Expression Parsertool that explains standard 5-field cron schedules plus common shortcuts like@dailyand@reboot. - Added an assisted cron builder with clickable schedule presets and field selectors to compose cron expressions visually.
- Added a new
Data Size Convertertool with bit/byte conversion and support forKB/MB/GB/TBplusKiB/MiB/GiB/TiB. - Added Spanish, French, and German translations (382 keys each) with full i18n support for 5 languages.
- Added a language switcher dropdown menu replacing the single-language toggle, showing all available languages.
- Added Playwright end-to-end browser tests covering the tool catalog and cross-site navigation.
- Added
data-testidattributes to shared UI components for stable e2e test selectors. - Added shared
ResultCardcomponent used by HashGenerator, TimestampConverter, TimeConvert, and ColorPicker. - Added
translateError()helper with dedicated unit tests for localized error messages. - Added SolidJS component testing infrastructure (
@solidjs/testing-library,jsdom).
- Bumped the product version to
1.3.3. - Updated the password generator with a Nebula.Tools-aligned
Simple modefor reduced special characters plus a separateAvoid ambiguous charactersoption thatSimple modeenables by default. - Updated catalog metadata, lazy tool loading, translations, and automated tests to account for the expanded catalog.
- Replaced eager static imports of all 29 tool components with SolidJS
lazy()dynamic imports for code splitting (44 separate JS chunks instead of 1 monolithic bundle). - Replaced
getAlternateLanguage()withgetOtherLanguages()to support 5 languages. - Updated root redirect and hash redirect scripts to recognize all 5 supported languages.
- Updated
hreflangalternate links inBaseLayoutto include all 5 languages. - Updated Docker
default-language.shto acceptes,fr, anddein addition toenandit. - Updated CI workflow to run Playwright e2e tests after build and verify the generated page output.
- Hoisted regex patterns to module scope in
xml-beautifier,reg2gpo, andemail-extractorfor better performance. - Batched
crypto.getRandomValues()calls in password and PIN generators instead of one syscall per character. - Extracted
isValidRgb()helper incolor-pickerto deduplicate RGB range validation. - Removed redundant
validsignal fromJsonFormatterandXmlBeautifier(derived from output state). - Set minimum
font-size: 16pxon all input elements to prevent iOS auto-zoom on focus. - Updated docs and tests to reflect the expanded catalog and its dynamic totals.
- Fixed data-size conversion semantics to follow base 1024 for
KB/MB/GB/TB(common IT usage), so4 GB = 4096 MB. - Fixed 7 components bypassing
translateError()and showing raw English error messages to Italian (and now all non-English) users. - Fixed hardcoded English strings in
JsonFormatter,XmlBeautifier, andPemInspectorthat were not using i18n keys. - Fixed
QrCodecomponent re-implementing functions already exported fromqr-code.ts.
- Removed legacy monolithic SPA files (
index.html,app.js,style.css,locales/) — ~236KB of dead code. - Removed unused
toast.tsxcomponent.
- Added
.dockerignoreexclusions forDockerfileandcompose.yamlso they are not copied into the final production image. - Added
.github/dependabot.ymlto keep npm packages, GitHub Actions, and Docker base image dependencies updated automatically. - Added a reusable brand mark component with support for a custom
/data/logo.pngimage across the home page and tool sidebar. - Added Docker runtime support for configuring the default application language through
DEFAULT_LANGUAGE.
- Bumped the product version to
1.1.1. - Updated the production Docker image build to use a multi-stage Astro static build before serving the compiled
dist/output withnginx:alpine. - Switched the Docker build stage to
node:24-alpineand limited published image architectures tolinux/amd64andlinux/arm64becausenode:25-alpinedoes not providelinux/arm/v7manifests. - Restored visible version badges in the home header, home footer, tool header, and tool footer using
package.jsonas the shared source of truth. - Restored support for a custom
/data/logo.pngbrand image on the home page and next to the app title inside the tool sidebar. - Made custom logo loading more robust by assigning the image source only after the browser listeners are attached.
- Refined the custom logo presentation so user-provided branding is shown without the fallback logo tile framing.
- Restored the full search trigger in tool pages so the search field remains visible alongside the
Ctrl/Cmd+Khint. - Updated
.github/workflows/dockerbuild.ymlto publish thetools-collectionimage only to GitHub Container Registry (ghcr.io). - Removed Docker Hub-specific authentication and metadata publishing from the image build workflow.
- Realigned
README.mdandREADME-it.mdso both documents describe the current Astro-based project and custom logo setup consistently.
- Added trailing slashes to generated tool URLs to avoid incorrect Nginx redirects that could drop non-default ports such as
:8080in container deployments. - Marked the runtime
default-language.jsinclude as inline in Astro pages so production Docker builds no longer fail during asset bundling.
- Rebuilt the project as a static Astro application with Solid.js islands and strict TypeScript.
- Added dedicated per-language pages and per-tool routes for all 27 tools.
- Added a command palette with fuzzy search and keyboard shortcut support.
- Added a GitHub Actions CI workflow for test, build, and source-quality checks.
- Added project governance files including
LICENSEandCONTRIBUTING.md.
- Migrated the UI architecture from the legacy monolithic vanilla-JavaScript SPA to modular Astro layouts and Solid components.
- Reworked the homepage and tool layouts with the new design system, localized routing, and shared i18n message catalog.
- Switched the default theme handling to CSS-token based styling aligned with the Astro frontend architecture.
- Updated the home footer link to point to the upstream project repository.
- Updated the tool inventory in README.md and README-it.md to match the current application.
- Refreshed documentation links to align them with the current project structure and references.
- Added a new
Reg2GPOutility to convert Windows.regexports into Group Policy Preferences XML with paste, upload, copy, and download flows.
- Bumped the frontend asset version to
v0.4.5for the new tool rollout. - Improved the shared output header layout and monospace input/output styling for converter-heavy tools.
- Documented custom logo setup requirements and file permissions in README.md and README-it.md.
- Added a
PIN Generatorutility. - Added a
TimeConvertutility for converting milliseconds, seconds, minutes, hours, and days, includingHH:MM:SSformatting.
- Reworked the password generator options layout for a cleaner two-column arrangement with improved mobile behavior.
- Added support for a custom home hero logo loaded from the local
data/directory. - Added a branded footer area to the home view with project ownership and repository links.
- Added
data/.gitkeepso the customization directory is preserved in the repository.
- Aligned README.md to README-it.md as a faithful English translation of the Italian source document.
- Refined the home hero layout and related responsive styling for custom branding.
- Updated
compose.yamlto include the localdata/mount used for customization assets.
- Added a search box to the home catalog.
- Synchronized search filtering between the home catalog and the sidebar.
- Updated the home card grid so cards keep a fixed visual width instead of stretching across incomplete rows.
- Corrected a JavaScript parsing error that stopped the frontend from initializing.
- Added asset versioning for
app.js,style.css,favicon.svg, and locale files to reduce stale-cache issues during container rebuilds.
- Added a visible UI version badge in the top-right controls to verify which frontend build is being served.
- Hardened application bootstrap so initialization still runs when
DOMContentLoadedtiming would otherwise prevent startup.
- Corrected the initial home view state so the app no longer started with the first tool visibly active in the markup.
- Added a catalog-style home view with grouped tool cards.
- Added a dedicated home button near the global language and theme controls.
- Moved global controls out of the sidebar and into a shared top-right control area.
- Simplified the favicon to use the wrench emoji directly.
- Added
CHANGELOG.mdto keep track of project changes over time.
- Improved spacing and vertical rhythm across several tool panels.
- Added
Copy Allto the username generator results. - Reworked the password generator layout so all options are grouped more consistently.
- Extended the password generator to create multiple passwords at once, with per-item copy and
Copy All.
- Removed
Curl to Burp Converterfrom the UI, routing, and translations. - Removed
IoC Escape Toolfrom the UI, routing, and translations. - Removed
JWT Decoder/Inspectorfrom the UI, routing, and translations.
- Completed the English and Italian UI translations across the application.
- Split the documentation into an English README.md and an Italian README-it.md.
- Fixed multiple functional issues across the tools collection.
- Improved sidebar controls and layout, including language and theme toggle positioning.
- Hardened several tool implementations and aligned documentation with actual behavior.
- Added
compose.yamlfor local containerized deployment. - Added a language toggle with EN/IT support and persisted language preference.
- Added hash-based routing so each tool can be linked directly with its own URL fragment.