February 2025 release notes

User avatar for Bart Veneman Bart Veneman in blog

39 production releases with performance improvements, bug fixes and a couple of new features. Let’s start with an absolute banger!

New features

This one has been on my list for ages and the recent upgrade to Svelte 5 and this video from Huntabyte about Svelte 5, context and classes helped me get it over the line:

🎉 CSS is maintained between page navigations

You rarely audit one website or file in isolation. Wallace has many pages and depending on the CSS or the goal you want to either check code quality scores, CSS @layer composition or custom property usage. Before this change you always needed to re-enter the URL or upload the file again. Well, no more! Click to another page and the CSS will still be there.

Other new stuff

  • The CSS Scraper pages now has it’s own network panel. It’s the same one you’re familiar with from the analyzer and layers pages. While writing these release notes I spotted a very nasty UI bug so expect that to be fixed soon.
  • Pseudo classes analysis because this is rather useful when looking for usage of :popover-open or other new-ish selectors that might not be readily available yet in all browsers. A table of 12 CSS pseudo classes, sorted by count.

Updated features

  • Syntax highlighting in the AST Explorer input field. It was a tricky one, but some blog posts from GitHub and Sentry helped me along the way to finetune it. We’re (still) not using a virtualized list because the input for the AST Explorer is usually quite small and doesn’t warrant the overhead of such a tool.

  • Syntax highlighting in item usage devtools.

    Item usage devtools showing a table of syntax highlighted CSS rulesets

    After implementing sytax highlighting in most large <pre> blocks I fgured it was time for smaller chunks of code to look nice too.

  • Calculating the diffstat on the CSS Diff page is now a lot more accurate on large diffs as well as being a bunch faster. I’m really into using typed arrays in JavaScript lately, so the diffstat is now a Uint8Array() with 5 integers: 0 for unchanged, 1 for deletions and 2 for additions.

    A git diff shown with a diffstat above it saying that there were 5 changes: 3 additions and 2 deletions. It shows 5 squares, 3 green and 2 red.

Split panes

The AST Explorer was the first page where I implemented the excellent PaneForge library to have resizable elements. I liked the ability of dragging interface elements so much that this is now available in the following places:

  • AST Explorer
  • Custom Properties analyzer
  • CSS Coverage analyzer
  • Devtools networkpanel
  • Devtools item usage

Resize and render performance isn’t exactly great in some of these places when bombarding it with big CSS input, but it’s on my radar and some day I’ll fgure out how to tackle that.

Wallace devtools network panel with the horizontal resize handle being highlighted

Dependencies

  • @bramus/specificity version 2.4.0 was released and contains some of my own fixes and improvements so projectwallace.com now also uses the latest and greatest.
  • css-analyzer v6 is released and it contains some long overdue breaking changes and some bug fixes for issues that I was able to spot because Sentry flagged them.
  • css-code-quality v2 is released as an effect of releasing css-analyzer v6. It depends on the analyzer and had one deprecation to be removed.

Performance

A lot of the sorting functions used on the analyzer page are now faster because we store the sorted elements in a Uint32Array() instead of creating copies for every single list. This is worth a blog post on it’s own, so I’ll probably postpone that until… Well. Long.


A lot of this month was preparing releases, upgrading dependencies across the board and making sure nothing broke in the process.

Do you enjoy these release notes? Please let me know via BlueSky or LinkedIn.

That’s it for this month!

Back to blog

Popular posts