Changelog

What's New

The latest releases and updates from our team. We ship often and keep things lean.

  1. EasyHomebrew 3.1.0 — It Installs Homebrew Now

    Open EasyHomebrew on a Mac that has no Homebrew yet and it offers to install it for you. It has made that offer since the first version; what 3.1.0 changes is that the offer is kept. Install Homebrew runs the official installer from inside the app and asks for your administrator password the way macOS does, in a system dialog — before, the installer had no way to ask and gave up on the spot. Install in Terminal opens a Terminal window with the installer in it, so you can follow along and answer its prompts, and the app picks up on its own the moment it finishes — before, in the released app, that button did nothing at all. Either way your packages load as soon as Homebrew is in place, with no relaunch, Intel Macs included (they used to need one). If you would rather install Homebrew yourself, in your own Terminal, the app notices when you switch back to it. And the “Couldn't refresh packages” message that used to land on top of the setup card, reporting a failure the card had already explained, is gone.

    • Install Homebrew runs the official installer from the app and asks for your password in a system dialog
    • Install in Terminal opens the installer in a Terminal window and hands back to the app when it finishes
    • Packages load as soon as Homebrew is in place — no relaunch, on Intel Macs too
    • A Homebrew you install by hand is picked up when you return to the app
    • The stray error message over the setup card is gone
  2. Whokoban 1.3.0 — Herbie Drops In from FlyCraft

    Whokoban has a guest. Herbie — FlyCraft's hero, who would rather build a flying machine than fly — arrives as a free board theme for everyone: his blue drawing board for a floor, a paper-cutout forest for walls, his cardboard boxes for crates, the launch gate with a padlock on it, and Herbie himself in Whoko's place, blinking. He brings his own music, three tunes from FlyCraft's world, and his yell opens every run in place of the gong. The speaker on the title screen now opens a sound sheet, where music and sound effects mute separately and every tune the game owns can be heard by name. One rule changed: shoving a monster aside now costs a move, like a step, so a monster in the wrong place finally costs something. Thirteen themes and 66 achievements in all.

    • A free FlyCraft theme for everyone: Herbie in Whoko's place, on his own drawing board, with his boxes, his music and his yell
    • Two more FlyCraft tunes beside the launch riff, drawn at random level by level — every look now draws its music the same way
    • Music and sound effects mute separately, and a listening booth previews every tune by name
    • Shoving a monster now costs a move, like a step — best and cap are still measured without it
    • Thirteen board themes and 66 achievements, including Frequent Flyer for a clear in Herbie's company
    • Still US$2.99 once — no ads, no in-app purchases, nothing tracked, fully offline
  3. Whokoban 1.2.0 — Hardcore Mode, and Four Looks Only It Can Earn

    Whokoban gains a second way to play. Pick Hardcore when you start a run and the safety net is gone: no undo, no restart, and one lost level — a crate stranded, or the move cap reached — ends the whole run. The board wears a flame so you never forget which game you are in, and losing gets its own screen. Four board themes belong to Hardcore alone, one each for a clear on tier 1, 4, 7 and 10: Ember, Noir, Circuit Board and Gilded. This is also the first release since 1.0.2, so it carries everything since — eight themes earned by climbing, a game that calls a lost level the moment no way to finish remains, undo cut to exactly the last move, and a gong at the start of every run. Twelve themes and 65 achievements in all.

    • Hardcore mode: no undo, no restart, and a lost level ends the run — chosen per run, alongside the standard game
    • Four Hardcore-only looks: Ember, Noir, Circuit Board and Gilded, earned by clearing tier 1, 4, 7 and 10 with no net
    • Twelve board themes in all, earned in play — a theme changes how the board is drawn, never how it plays
    • The game calls a lost level on the spot, and undo recalls exactly the move that did it
    • Seventeen new achievements, 65 in total — including four for Hardcore, one of them secret
    • Every run opens with a gong; the level pool explains itself from the title screen
    • Still US$2.99 once — no ads, no in-app purchases, nothing tracked, fully offline
  4. Contain — One Page Became Seven

    Everything about Contain used to live on a single page you scrolled for a very long time, with the release notes and the legal documents in small grey text near the bottom of it. It is now seven pages that link to each other from a row under every heading, so whatever you came for is one click away rather than a scroll. The overview keeps the parts you want before deciding — what it does, what it costs, two screenshots of the real thing and the download — and the detail moved out to pages of its own: the full list of what Contain does, what it needs from your Mac and how it installs, and the handful of behaviours macOS forces on any app that moves windows. The release notes are now a proper page too, laid out release by release with what was added, changed and fixed in each, instead of a plain text file that opened unformatted in a browser tab. The privacy policy and the terms of use are unchanged, and now sit in the same row as everything else.

    • A row of links on every Contain page — overview, features, requirements, limitations, changelog, privacy, terms
    • The overview is about a third shorter, and keeps the price, the screenshots and the download
    • What Contain does, what it needs, and where macOS draws the line each have their own page
    • The release notes are formatted and readable, rather than a plain text file
    • The privacy policy and terms are one click from anywhere in the product
    • Nothing changed in the app itself — this is the website
  5. Contain 1.2.4 — The Whole Screen, and Every Desktop

    Two things Contain could not previously do. The green button now fills the entire display: the title bar goes, the container takes the whole screen, and every window you have contained is resized to match. It is not macOS's own full screen, and it cannot be — macOS gives a full-screen app a desktop of its own and lets no other app's window follow it there, so the window you contained would be left behind on the old desktop. Filling the ordinary desktop is the only version of full screen that keeps what you contained on screen, which does mean the menu bar stays, showing the menus of whatever app you are working in. Press Esc, ⌃⌘F, or the ⤡ button in the tab bar and everything returns to the size it was. The picker, meanwhile, now shows every window on the Mac rather than only the ones on the desktop in front of you. Windows parked on another desktop or another display used to be invisible to Contain, because macOS only lets an app enumerate the desktops currently showing; they are listed now, and picking one makes Contain hop over — through the app's own Window menu, the way you would — collect the window and bring you straight back. Minimized windows are pickable too, and come out of the Dock as they are contained. Where a window arrives but stays on its old desktop, Contain notices and fetches it properly rather than leaving you with a tab pointing at nothing.

    • The green button fills the whole display, with contained windows resized to match
    • Leave full screen with Esc, ⌃⌘F, or the ⤡ button in the tab bar
    • The picker lists windows on every desktop and display, not just the current one
    • Pick one and Contain fetches it for you, then brings you back
    • Minimized windows are listed, and come out of the Dock when contained
    • No change to the licence, the price, or what leaves your Mac — still nothing
  6. Contain 1.2.3 — Full-Screen Windows, and a Ticket That Travels

    Picking a full-screen window used to look like nothing happening. macOS puts a full-screen window alone on a desktop of its own and makes its position read-only while it is there, so Contain could resize it and then had no way to move it — the tab appeared, the window stayed where it was. Contain now takes the window out of full screen first, waits for macOS to finish rather than guessing at a delay, and then pins it in the container. Release it, or quit Contain, and it goes straight back to full screen exactly as it was: containing a window still leaves no trace once you stop. Separately, and more quietly: every release of Contain has been notarized by Apple, but the ticket was attached to the disk image rather than to the app inside it. macOS covered for that by checking with Apple over the network, so the app opened normally on any Mac with a connection — and could refuse to open on one without. The ticket now travels with the app itself, and the release script mounts the finished image and checks that it does, so it cannot quietly come undone again. Settings → Limitations also grew two entries: what happens to a full-screen window when you contain it, and why an app whose windows are all on another desktop does not appear in the picker.

    • Full-screen windows can be contained — Contain takes them out of full screen first
    • Released or on quit, the window goes back into full screen exactly as it was
    • The notarization ticket is now stapled to the app, not only to the disk image
    • A first launch on a Mac that is offline no longer risks being refused
    • Settings → Limitations covers full-screen windows and windows on another desktop
    • No change to the licence, the price, or what leaves your Mac — still nothing
  7. Contain 1.2.0 — We Removed Our Own Analytics

    Contain used to send six anonymous counters: that it launched, that a window was contained or released, that an action was blocked for want of Accessibility access, and the two halves of the activation flow. They were bare counts, they never carried the name of an app you contained, and Settings had a switch that stopped them. They are now gone from the app entirely — the analytics library, every event, and the code that sent them. We removed it rather than leaving it behind the opt-out, because a disabled sender is still a sender, and “we collect nothing” should describe the app you install rather than a default someone could change later. This is the same decision EasyHomebrew made yesterday, applied to the app with the most reason to earn your trust: Contain can see every window you have open. Settings → Privacy is now shorter and stronger — it says nothing is collected, and then keeps being precise about the one thing that does leave your Mac, the licence check that tells the app it has been bought.

    • All analytics removed — no usage counters, no events, no installation identifier
    • The analytics library is off the app entirely, not just switched off
    • No opt-out toggle any more, because there is nothing left to opt out of
    • Settings → Privacy now states plainly that nothing is collected
    • The licence check is unchanged, and still spelled out line by line
    • The apps and windows you contain never left your Mac, and still never do
  8. EasyHomebrew 3.0.0 — The Services Release

    A background service tells you three things: what it is, how launchd was told to run it, and what it has been printing. EasyHomebrew used to put all three behind one “i” button, in one window, three tabs deep — the same window for a six-line summary and a live log stream. Each is now its own window with its own button on the service row. The configuration window is the one that changed most: it used to show you the plist as XML, which answers “what is in this file” and none of the questions you opened it with. It now shows the command that actually runs with each argument on its own line, whether the service starts at load and restarts if it exits, a schedule written as “Every 5 minutes” or “Daily at 03:30” instead of a seconds count, and where its output goes — with every remaining key still listed, and the raw XML one click away. Logs got the same treatment. Services written in Go — colima, containerd, most of what you run — emit lines like time=… level=info msg="…", which is forty characters of machinery in front of four words of message. EasyHomebrew now recognises that format and lays it out as a record: timestamp in its own column, level as a colour-coded badge you can scan down the window, message where your eye already is. Lines in any other shape are left exactly as they were written. Security changed shape too — a scanned machine used to be a screenful of green rows with the packages that need attention pushed below the fold, and it is now a grid of cards with the vulnerable ones up top.

    • Info, Plist and Logs are three separate windows, each with its own button on the service row
    • The launchd plist is shown as fields — the command, start and restart behaviour, schedule in plain words, output paths
    • Raw XML is still one click away for the plists that do something unusual
    • Service logs in logfmt are formatted: timestamp column, level badge, message, field chips
    • Anything not in that format passes through untouched — mixed log files stay readable
    • The Security page is a card grid, with vulnerable packages and their CVEs at the top
    • Buttons switch off when there is nothing behind them: no plist, no log file, no service to restart
  9. Kyori 0.3.0 — One API Across Every Metric

    Kyori shipped five algorithms that each spoke a slightly different dialect: some had distance(), some had similarity(), and swapping one for another meant rewriting the code around it. 0.3.0 ends that. Every method — Levenshtein, Damerau-Levenshtein, Hamming, Jaro-Winkler, and Kyori itself — now exposes the same three functions: distance() where lower is better, similarity() where higher is better, and rank(), which takes a query and a list of candidates and hands back every one of them scored and ordered. Change which metric you import and nothing else has to move. The ranking itself got sharper too. Typing a prefix no longer penalises the part of the suggestion you have not read yet, so “chore li” lands cleanly on “chore list for wall”, and one mistyped character in what you did type costs one, not the length of the rest. The same words in a different order — “hotel bel-air” against “bel-air hotel” — is now a flat 1 rather than a positional pile-up. One breaking change comes with it: kyori.similarity used to be the ranking cost, and that behaviour now lives on kyori.distance; similarity() returns token overlap, where higher is better. KyoriIndex is unaffected and now runs on kyori.rank().

    • Every metric now exposes the same distance(), similarity(), and rank() functions
    • rank(query, candidates) returns each candidate scored and ordered, best first
    • Typed-prefix matches only count edits inside what you actually typed
    • The same words in a different order now cost a flat 1
    • Breaking: kyori.similarity is now token overlap — the old ranking cost moved to kyori.distance
    • KyoriIndex output is unchanged and now built on kyori.rank()
  10. EasyHomebrew 2.9.0 — We Removed Our Own Analytics

    EasyHomebrew used to send anonymous usage events: which features you opened, whether an install succeeded, roughly how many packages you had. It was aggregate, it named no packages, and you could switch it off. It is now gone entirely — the analytics library, every event, and the code that sent them, from both the main app and the menu-bar agent. We removed it rather than leaving it behind the opt-out because a disabled sender is still a sender, and “we don't track you” should describe the binary rather than a default someone could change later. There is no telemetry, no crash reporting, and no installation identifier left in the app. Settings → Privacy now says exactly that, and then does the harder thing: it lists every server the app connects to and why — the Homebrew catalogue, the vulnerability database, release notes, icon lookups, your license check, the update feed. No analytics does not mean no network, and a privacy page that hid the CVE scan would be its own kind of dishonesty. The privacy policy has been rewritten to match.

    • All analytics and telemetry removed — no usage events, no crash reporting, no installation identifier
    • Gone from the menu-bar agent too, not just the main app
    • Settings → Privacy now lists every server the app contacts and the reason for each
    • No opt-out toggle any more, because there is nothing to opt out of
    • Privacy policy rewritten to describe the app as it actually is
  11. Kyori 0.2.0 & WizJS 0.1.7 — A Double Release for Our JavaScript Libraries

    Both of our open-source JavaScript libraries shipped today. Kyori 0.2.0 rebuilds ranking around one promise — type three letters, get the right suggestion: matching now folds case, Latin accents and hyphens, prefers hits at the start of a word, and falls back to Damerau-Levenshtein when the query holds a typo. The new KyoriIndex wraps the whole loop — load your terms once, and search() returns them scored and sorted, best match first. The library also dropped its last third-party algorithm packages, so every metric is implemented in-repo. WizJS 0.1.7 answers a different itch: the Python standard library you keep reaching for in JavaScript. itertools grew to 19 lazy generators, functools covers partial, compose, once, memoize and reduce, and a new collections namespace brings Counter and DefaultDict — joined by the object helpers pick, omit and get. All of it with zero runtime dependencies.

    • Kyori ranking folds case, Latin accents, and hyphens, and prefers word-prefix matches
    • Typos still rank — Kyori falls back to Damerau-Levenshtein when nothing matches cleanly
    • New KyoriIndex: load terms once, search() returns every term scored, best first
    • Every Kyori metric now implemented natively — third-party algorithm packages dropped
    • WizJS itertools grown to 19 lazy generators — chain, zip, groupby, product, batched, pairwise
    • New WizJS collections namespace: Counter and DefaultDict, straight from Python
    • New WizJS object helpers — pick, omit, and path-safe get — with zero runtime dependencies
  12. EasyHomebrew 2.8.1 — Settings, Reorganized

    Settings had quietly become the junk drawer, so 2.8.1 tidies it. Backing up your setup and moving apps off Rosetta were never really preferences — they are things you do — so both now live in the sidebar next to Updates and Doctor, where the Backup page shows what an export would contain right now. The Settings window itself was rebuilt as a sidebar of panes, which also fixes a real bug: with eleven tabs, the ones that did not fit fell into an overflow menu that could not be clicked, leaving Language, About and Legal unreachable. And the statistics block at the bottom of the sidebar is now a drawer — closed by default, one click when you want the numbers.

    • Backup and Apple Silicon moved out of Settings into the sidebar, next to Updates and Doctor
    • The Settings window is now a sidebar of panes — Language, About and Legal are reachable again in every language
    • The sidebar statistics panel became a drawer: closed by default, Homebrew status and health score always in view
    • Environment, Menu Bar and Privacy settings now show translated titles
  13. EasyHomebrew 2.8.0 — A Fix for the Settings Crash

    A fast follow-up to 2.7.0. Opening Settings could crash the app the moment the window showed the Backup or Apple Silicon tab — the two tabs 2.7.0 itself introduced. 2.8.0 fixes that and changes nothing else. The update is already live: the app offers it on its next check for updates, or grab it from the download page.

    • Opening Settings no longer crashes the app on the Backup and Apple Silicon tabs
    • No other changes — a safe, immediate update for everyone on 2.7.0
  14. Whokoban 1.0.2 — Ten Languages, Switched Inside the Game

    Whokoban now speaks ten languages — English, Japanese, German, French, Italian, Spanish, Simplified and Traditional Chinese, Korean, and Brazilian Portuguese — and its App Store listing is written natively in each of them rather than translated. Pick yours with the globe on the title screen and the game changes on the spot: no relaunch, and a run in progress carries on. The update also adds swipe controls — one swipe is one move, so a drag can never eat into your move cap — an audio engine that repairs itself after phone calls and AirPods switching, and a launch screen that opens the way the game means to go on: black, with the Wizhut Gaming mark.

    • Ten languages: English, Japanese, German, French, Italian, Spanish, both Chinese scripts, Korean, Brazilian Portuguese
    • Switch language inside the game — instant, no relaunch, and a run in progress survives it
    • The in-app choice stays in sync with Settings › Whokoban, in both directions
    • Swipe to move: flick the board to step or push — one swipe, one move, never a drag
    • Sound that stays: the audio engine recovers from calls, AirPods switching, and whatever else iOS does to it
    • Every App Store storefront gets its own listing, written in its language
    • Still US$2.99 once — no ads, no in-app purchases, nothing tracked, fully offline
  15. Promptivo 2.6 — Scores That Track Expert Judgment

    Promptivo's scoring engine got its biggest upgrade yet. Scores are now calibrated against 22,500 LLM-judge evaluations of public benchmark prompts, then frozen — so verdicts track how a frontier model judges prompt quality while staying instant, identical on every run, and private: no model call ever sees your prompt. The scale finally behaves the way you'd expect — an empty ask lands at Poor, keyword tricks stop earning points, and a genuinely well-specified prompt can reach Excellent. The rebuilt Benchmarks page shows the full evidence, including a second, fully independent judge.

    • Verdicts now track expert judgment — calibrated on 22,500 LLM-judge evaluations, then frozen
    • Still instant, still deterministic, still private: no model call ever sees your prompt
    • The full five-grade scale is in use — vague asks land low, and "Excellent" is genuinely reachable
    • Keyword stuffing and filler no longer buy points — quality has to be written, not sprinkled
    • Fairer scoring for non-English prompts, with honest language tiers documented on the site
    • A rebuilt Benchmarks page: judge agreement, hold-out validation, and a second independent judge
  16. EasyHomebrew 2.7.0 — Move Between Macs, and Update on Your Terms

    EasyHomebrew can now save everything you have installed to a single file and restore it on another Mac, adding only what is missing so nothing you already have is touched. Updates became something you decide about rather than something that arrives: read a package's release notes before you install them, pin a package to hold the version you have, or snooze an update for a week. A new health score in the sidebar sums up what actually needs attention, and a scan finds the apps still running through Rosetta so you can move them to Apple Silicon builds.

    • Back up every formula, cask and tap to one file — and restore it on another Mac
    • Read a package's release notes before you update it, without leaving the app
    • Pin a package to hold its version, here and in your terminal
    • Snooze an update for a day, a week or a month
    • A health score in the sidebar, built only from checks that have already run
    • Find apps still running under Rosetta and reinstall them as Apple Silicon builds
    • See how large Homebrew's download cache has grown, and clear it
    • Updates grouped by the package that needs them, with dependencies tucked underneath
    • Clean Up no longer hangs on chatty commands, and long commands can be cancelled
  17. Promptivo 2.4 — The Site Now Looks Like the Instrument It Is

    Promptivo's site has a new face. The product has always been a measuring instrument — deterministic scoring, no LLM in the loop — and now it looks like one: warm paper surfaces, ink-black serif headlines, monospace numerals for every score and statistic, and a single amber signal color. That amber is not new; it has been in Promptivo's favicon from day one, and the site finally matches its own mark. Nothing about scoring changed — the same prompt still gets the same score, now presented the way a precision tool deserves.

    • A light "precision instrument" look: warm paper, ink text, one amber signal color
    • Headlines set in Instrument Serif — a font name we could not have planned better
    • Every score, statistic, and benchmark number in monospace, like a proper readout
    • A graph-paper hero, hairline borders, and measurement details throughout
    • Contrast tuned for the light theme on every page, mobile included
    • The scoring engine is untouched: same prompt, same score, before and after
  18. Whokoban 1.0 — On the App Store

    Whokoban is out. Wizhut Gaming's first title is on the App Store for iPhone, a one-time US$2.99 with no subscription, no ads, no in-app purchases and no account. It is Sokoban with one rule changed: parking every crate does not finish the level, it unlocks the exit — Whoko still has to walk to the door through the warehouse he just rearranged, so a level can be lost by solving it perfectly and stranding yourself. All 5,000 levels are rebuilt on the phone from a seed rather than downloaded, so the whole game works with no signal.

    • Out now on the App Store — iPhone, iOS 17 or later, a one-time US$2.99
    • Parking every crate unlocks the exit — you still have to reach the door
    • 5,000 levels across ten tiers, every one verified solvable and measured
    • Par is the true minimum move count, the walk to the door included
    • A level only comes round again after the other 499 on its tier
    • Monsters block your way from tier 4 — they never kill you, so shove them aside
    • 48 achievements, including one for parking every crate and stranding yourself
    • No network code at all: nothing tracked, nothing collected, every level playable offline
  19. Contain 1.1 — Out of Beta, €6 for Three Macs

    Contain is out of beta and now costs €6, once. One key unlocks it on up to three of your own Macs, with every 1.x update included — no subscription and no account to create. Your key is checked when Contain launches and never while you work, and if the licence server can't be reached, Contain keeps running for fourteen days, so a flight or an outage never costs you the app you paid for. Settings gains a License pane where you can re-check your key or move it to a new Mac.

    • €6 once — one key, up to three Macs, every 1.x update included
    • No subscription and no account; Dodo Payments handles the purchase and emails your key
    • Checked at launch and never while you work
    • Fourteen-day offline grace, so a dropped connection never locks you out
    • A revoked licence returns every contained window to the desktop before it locks
    • Settings → License — status, activation date, Re-check, and Deactivate This Mac to free a slot
    • Settings → Privacy now covers the licence: what activation sends and what stays on your Mac
  20. EasyHomebrew 2.6.0 — Smarter Search, Clearer Installs

    Search for "java" and you now get the JDK, even though the package is actually called openjdk — EasyHomebrew searches Homebrew's alternate names alongside the real ones, so "postgres", "npm" and "golang" all find the right package too. Whole sentences work, and where several packages fit, the one most people install comes first. After an install, any follow-up step Homebrew mentions now appears as a card, with one click to add a PATH line to your shell or run a suggested command.

    • "java" finds the JDK, "postgres" finds PostgreSQL, "npm" finds Node
    • Sentence-style searches work — "I want to install Java" still gets you the answer
    • Popular packages rank first, using Homebrew's public install statistics
    • Broad searches also offer the matching Persona bundle above the results
    • Follow-up steps after an install, with one click to add a PATH line or run a command
    • Packages macOS ships its own version of are marked KEG-ONLY before you install
    • A newly installed package shows as installed everywhere, with no restart
    • Favorites — star any formula or cask into a new sidebar section, kept on your Mac only
  21. Wizhut Gaming — Whokoban, a Sokoban With the Door Locked

    Wizhut.tech now has a games arm, and Whokoban is its first title. It is Sokoban with one rule changed: parking every crate does not finish the level, it unlocks the exit. Whoko still has to walk to the door through the warehouse he just rearranged, where the crates he carefully parked are the walls now in his way — so a level can be lost by solving it perfectly and stranding yourself. 5,000 levels, ten tiers, no timer and no death. A one-time US$2.99 that works with no signal.

    • Parking every crate unlocks the exit — you still have to reach the door
    • 5,000 levels across ten tiers, every one verified solvable
    • Par is the true minimum move count, including the walk to the door
    • A level only comes round again after the other 499 on its tier
    • Monsters block your way from tier 4 — they never kill you, so shove them aside
    • 48 achievements, including one for parking every crate and stranding yourself
    • A one-time US$2.99 — no subscription, no ads, no in-app purchases, no account
    • iPhone, iOS 17 or later — coming to the App Store
  22. trimmer 1.0.0 — Whitespace Off Both Ends, and Nothing Else

    Every shell script eventually needs the same small thing: strip the whitespace clinging to either end of what a command returned. The usual answers are a sed expression nobody remembers, or a $(...) that silently eats the trailing newline and works until the day there are two. trimmer is that one job as a single static binary — it reads stdin and writes stdout, so it drops into a pipeline like any other stage. Trim the whole input or each line on its own, one side or both, with or without the final newline.

    • Reads stdin, writes stdout — a pipe stage, not a program with a workflow
    • The whole input by default, or every line on its own with --lines
    • Unicode-aware: CRLF, tabs and non-breaking spaces all count as whitespace
    • --no-newline gives command substitution the exact value, with nothing clinging to it
    • --left and --right trim one side, for de-indenting without disturbing alignment
    • Streams in --lines mode, so files larger than memory are fine
    • Running it with nothing piped in prints the help instead of appearing to hang
    • Pre-built binaries for macOS, Linux and Windows — MIT licensed, no telemetry
  23. Practical UV v0.2.0 — Now Flags Vulnerable Dependencies

    Practical UV already told you which dependencies were old. It now tells you which ones are known to be vulnerable, checking them against the OSV advisory database. Each finding carries the CVE, its severity and the version that fixes it, and shows up as a diagnostic, in the package hover, as an "Upgrade … (fixes CVE-…)" quick fix, and in a new Security column in the dashboard. It is off by default, because turning it on is what sends your package names to OSV.

    • Vulnerability checks against OSV — the PyPA and GitHub Security Advisory databases
    • Every finding carries the CVE, its severity, and the version that fixes it
    • Shows up as a diagnostic, in the hover, as a quick fix, and in the dashboard
    • uv.lock resolves your version ranges, so a finding means you are affected
    • Only your own dependencies are reported — every finding is fixable where you are
    • Off by default; a one-off check runs without changing the setting
    • "No advisories" is never confused with "nothing to check"
    • Flask and typing_extensions now match their lockfile and advisory entries
    • Also covers 0.1.10 — the changelog now reaches both registries
  24. EasyHomebrew 2.5.0 — Set Up a New Mac in One Step

    A new Mac usually means remembering, one at a time, every tool you had on the last one. Personas replaces that with 27 curated bundles that install together — 17 for languages and runtimes, 10 for roles like DevOps, Security and Data & ML. Each one is a whole working setup rather than a bare compiler: pick Go and the language server, linter and debugger come with it. Essential packages are ticked for you, the rest are optional, and anything you already have is left alone.

    • 27 curated bundles that install together — 17 languages and runtimes, 10 engineering roles
    • Each bundle is a whole setup: language server, linter, formatter and debugger
    • Every package explains in one line why it belongs in that bundle
    • Core packages ticked by default, optional ones offered unticked
    • Anything already on your Mac is shown but never reinstalled
    • One queue for the whole bundle, with per-package progress and a Cancel button
    • Each bundle shows how much of it you already have
    • Fixed: Spanish now ships in release builds — Spanish Macs fell back to English until now
  25. Contain 0.4.0 — The Window Inside Stays Inside

    Grab the container's title bar and the window it was holding vanished behind the container's own empty content area, and stayed there until you clicked a tab. Contain now orders itself below the window it contains, so the two arrive at the front together and in the right order. Two neighbouring fixes come with it: containing one window of an app no longer disturbs that app's others, and selecting a tab no longer buries the container. Also covers 0.3.5 and 0.3.4.

    • The contained window no longer disappears behind the container when you drag it
    • Containing one window of an app leaves that app's other windows alone
    • Selecting a tab no longer buries the container behind the app it just activated
    • Contain no longer unhides an app that you hid yourself before it ever saw it
    • From 0.3.5: moving and resizing the container now keep up smoothly
    • From 0.3.4: a Limitations pane in Settings, explaining what macOS forces on the app
    • Still a time-limited beta — this build keeps the 20 August 2026 deadline
  26. EasyHomebrew 2.4.2 — Cancellable Upgrades and a Progress View That Follows You

    Long installs and upgrades stop being a one-way trip. Every install, update, removal and reinstall can now be cancelled, and cancelling interrupts Homebrew cleanly rather than killing it mid-step. Stopping an Upgrade All leaves the rest queued for next time. Actions started from a package row or the right-click menu now get the same progress card as everywhere else, and Upgrade All runs in its own view so the queue stays visible from any section. Also covers 2.4.1 and its New sidebar section.

    • Cancel any install, update, removal or reinstall — Homebrew is stopped cleanly
    • Cancelling Upgrade All leaves the rest queued, so restarting resumes where you stopped
    • The same progress card wherever you start an action
    • Upgrade All runs in its own view — the queue stays visible from any section
    • A Check for Updates button that re-runs every scan in one go
    • Section actions moved out of the window toolbar into a consistent action bar
    • From 2.4.1: a New sidebar section listing recently-published packages
  27. Contain 0.3.3 — First Public Beta of the Window Container for macOS

    Contain is a small macOS app that holds your other windows. Open one resizable container, pick any window you already have open, and Contain pins it inside — each window getting its own tab, so three TextEdit documents are three tabs rather than one "TextEdit". The window stays the real, fully interactive app window: no screen capture, no proxy view. Contain remembers where every window was before it adopted it and puts it back exactly there when you release it or quit. This is a time-limited beta that stops working on 20 August 2026.

    • One resizable container, one tab per contained window — windows, not applications
    • The genuine app window stays live inside, and is re-pinned within a second if it drifts
    • A grid picker with app icons, plus optional live thumbnails if you grant Screen Recording
    • ↗ or ⌘W puts a window back at the exact position and size it had before
    • Settings (⌘,) names every anonymous signal Contain sends and switches them off
    • Built-in auto-update — signed releases, checked daily
    • Notarized and Developer ID-signed, so it opens without a Gatekeeper warning
    • Time-limited beta — this build expires 20 August 2026, with a countdown in Settings
    • Requires macOS 13 or later and Accessibility permission
  28. EasyHomebrew 2.4.0 — Now Runs on macOS 14 Sonoma, Intel Macs Included

    EasyHomebrew's minimum macOS drops from 26 all the way to 14 (Sonoma) — and since Sonoma still runs on Intel, those Macs are supported again. Nothing was cut to get there: browsing, installing, upgrading, categories, services, taps, Brew Doctor and CVE checks all work the same. The Apple Intelligence extras still need macOS 26 (Tahoe), but they now switch off cleanly on older systems instead of being unavailable at all. This entry also rolls up everything since 2.2.1.

    • Minimum macOS drops from 26 to 14 (Sonoma) — everything but the AI features works the same
    • Intel Macs supported again, with universal binaries for the app and menu-bar agent
    • Apple Intelligence features still need macOS 26 (Tahoe) and now switch off cleanly below it
    • Menu-bar agent gains a status row, a version readout, and unattended auto-upgrades
    • Refreshed package catalogue — 16,196 formulae and casks
    • Clear guidance, and a link to the right settings pane, when macOS blocks a cask upgrade
    • Discover fixes: exact package names rank first, and unfamiliar names no longer come up empty
  29. Practical UV v0.1.9 — On the VS Code Marketplace, With a Clean Toolchain

    Practical UV is now published on the VS Code Marketplace as well as Open VSX, built from the same source — so it installs wherever your editor looks, whether that's VS Code, VSCodium, or Cursor. v0.1.9 itself is housekeeping rather than features: the build toolchain moved forward and clears 11 advisories, with no runtime dependency changes. One thing to check before updating — the minimum supported VS Code is now 1.125, raised from 1.118.

    • Published on both the VS Code Marketplace and Open VSX from one source — two install paths, one extension
    • Minimum supported VS Code raised to 1.125 (from 1.118) — editors on 1.118–1.124 stop receiving updates
    • Build toolchain updated (@types/node, @types/vscode, @vscode/vsce) — 11 advisories cleared, 7 high and 4 moderate
    • No runtime dependency changes — still just @iarna/toml, unaffected by the advisories
    • Changes tracked in CHANGELOG.md from this release onward
  30. EasyHomebrew 2.0 → 2.2.1 — Public Launch, Licensing & Auto-Update

    EasyHomebrew left beta on June 12 and ships as a one-time €10 purchase — no subscription, lifetime updates within the major version. As of v2.2.1 the app updates itself, checking at launch and once a day, so this is the last version you'll ever download by hand. The 2.x releases also brought right-click actions on every package row, an Upgrade All that shows its whole queue, outdated dependencies in the Updates list, one-click fixes for Brew Doctor warnings, a smarter Discover, and full localization in six languages.

    • One-time €10 purchase — no subscription, lifetime updates within the major version
    • License key powered by Dodo Payments — activate once, the menu-bar agent honours it too
    • In-app auto-update — checks at launch and once a day, installs in place
    • Right-click quick actions on every package row, and a queue-first Upgrade All with per-package status
    • Updates list now includes outdated dependencies — no more hidden pending upgrades
    • Brew Doctor warnings become grouped, one-click fixes
    • Smarter Discover with an Apple Intelligence "Best pick", plus full localization in six languages
  31. Practical UV v0.1.8 — Now Works with requirements.txt + One-Click Convert to uv

    The biggest update since launch: Practical UV now treats requirements.txt as a first-class citizen. Outdated detection, hover info, code actions and the dependency dashboard all light up automatically on requirements.txt and its variants, with comments, pip directives, URL specs and environment markers parsed correctly. Open one and a "↑ Convert to uv" action appears in the status bar — one click and your project is on uv. Saving a pyproject.toml with changed versions now offers to run uv sync for you.

    • Full requirements.txt support — outdated detection, hover, code actions, dashboard
    • Status-bar "Convert to uv" action runs uv init + uv add -r in one click
    • Recognizes requirements.txt, requirements-*.txt, requirements_*.txt, and any *.txt under requirements/
    • Handles PEP 508 markers, pip directives, direct URL specs, and comments correctly
    • "Run uv sync" prompt fires automatically on save when pyproject.toml versions change
  32. EasyHomebrew v1.6.6 — Cleaner Updates & Friendlier Admin Installs

    The Updates page gets a long-overdue makeover with a prominent Upgrade All button, a one-click Update on every outdated row, and a clean Upgrade Selected action for batch mode — extending across Installed, All Packages, Categories, and Search Results. Casks that need root install end-to-end through a friendly authorisation flow (no more cryptic sudo failures), and a live background-activity panel in Settings shows every async job in flight. Plus a rebuilt categories database that recovers ~1,100 cask classifications, font casks that categorise correctly the first time, and a calmer macOS App Store-blue treatment for update badges.

    • Cleaner Updates page — Upgrade All up front, Update on every row, Upgrade Selected for batches
    • Friendly admin-privileges flow for casks that need root, with a clear progress sheet
    • Live background-activity panel in Settings — see every async job in flight
    • New homepage-enrichment cache you can clear from Settings → Storage
    • Categories database rebuilt — ~1,100 cask classifications recovered, font casks now correct on first launch
    • Calmer App Store-blue treatment for update badges and buttons
  33. EasyHomebrew v1.6.1 — App Store-Style Pages, AI Descriptions & Install Trends

    Every package now opens an App Store-style page with everything you need to make a decision in one place. A clean stat strip shows the essentials. An AI-written description tells you what the package actually does — no more squinting at one-liners. A screenshot gallery with a native carousel and arrow-key navigation lets you preview apps before you install. Install trends for the last 30, 90, and 365 days reveal what's genuinely popular. Variants of the same app appear as click-through mini-cards. And a brand-new Games category gives 117 titles a proper home.

    • App Store-style package page with everything in one place
    • AI-written descriptions in plain language, with smart screenshots
    • Native screenshot carousel with arrow-key navigation
    • Install trends for the last 30, 90, and 365 days
    • Tap between sibling versions and flavors with a single click
    • New Games category — 117 titles reclassified
    • Smart categorisation kicks in instantly for unfamiliar packages
  34. EasyHomebrew v1.6.0 — Grid View, Variant Grouping & Faster Upgrades

    Browse your packages your way: a new toolbar toggle switches every list between a compact row view and a visual card grid, and your choice sticks across launches. Variants of the same app — think Firefox, Firefox ESR, Firefox Developer Edition — now collapse into a single tidy entry with a +N expander, so your lists feel curated rather than crowded. The grouping is smart enough to keep unrelated projects apart, even when they share a host. Plus a definitive fix for the rare "Homebrew is busy" warning that was getting in the way of upgrades.

    • List or grid view, your choice — and it sticks
    • Variant grouping turns clutter into clean, expandable entries
    • Smarter grouping that keeps unrelated apps apart
    • Cleaner Discover badge and consistent labelling everywhere
    • No more "Homebrew is busy" warning blocking your upgrades
  35. EasyHomebrew v1.5.5 — Brew Doctor That Actually Fixes Things

    The Doctor tab is no longer a wall of warnings — it's a list of one-click fixes. Every diagnostic shows up as its own card with a "Run fix" button: deprecated casks and formulae, unlinked kegs, missing dependencies, stray files, PATH issues, and more. Spot something unfamiliar? Apple Intelligence explains it in plain English on macOS 26. Errors across the app are friendlier too — clear titles, readable messages, and details tucked away until you need them. And if something fails in a batch, just tap the row to see why.

    • One-click "Run fix" for every Brew Doctor warning
    • Install all missing dependencies in a single step
    • Apple Intelligence explains unfamiliar warnings in plain English
    • Friendlier error messages with clear titles and copy-ready details
    • Tap any failed row in Upgrade All to see exactly what went wrong
    • The UI stays in sync if you switch to Terminal mid-task
  36. EasyHomebrew v1.5.3 — Reinstall, Status Panel & Auto Vulnerability Scans

    Three quick follow-ups to the public beta, rolled up into v1.5.3. The headline work landed in v1.5.2: a Reinstall button for misbehaving packages, and a new status panel in the bottom-left showing app version, packages scanned and affected, and the disk space the app uses. Vulnerability scanning now runs automatically alongside update checks, and the Updates list shows only the apps and tools you installed yourself. v1.5.3 adds opt-in anonymous usage analytics, off from Settings → Privacy.

    • Reinstall button on the package page — fresh copy without removing it from your list
    • New bottom-left status panel: version, packages scanned, affected count, and app disk usage
    • Vulnerability scanning runs automatically when checking for updates
    • Updates list now shows only user-installed apps and tools — no internal dependencies
    • BETA label on Discover so you know semantic search is still experimental
    • Stability and performance polish across package browsing, services, and Discover (v1.5.1)
    • Opt-in anonymous usage analytics — aggregate events only, off in Settings → Privacy (v1.5.3)
  37. EasyHomebrew Beta is Live — Download v1.5 Now

    EasyHomebrew has entered public beta. v1.5 is available as a free download — no App Store, no waitlist. It includes all core features: package and cask management, CVE vulnerability scanning, services management, Brew Doctor with Apple Intelligence diagnostics on macOS 26, batch operations, and the new Discover feature powered by on-device semantic search. Give it a try and send us your feedback.

    • Free public beta — download the DMG and run it on macOS 26
    • Discover: describe what you need in plain language, find the right package instantly
    • Apple Intelligence in Brew Doctor explains issues and suggests fixes
    • CVE scanning, services management, and batch operations all included
    • Available in English, French, Greek, German, Italian, and Spanish
  38. Blog: Why Your AI Prompts Fail — And How to Fix Them

    Our latest blog post breaks down why most AI prompts produce underwhelming results — and it's not the model's fault. Language models are precise instruments: vague inputs reliably produce vague outputs. The article introduces seven measurable dimensions for evaluating prompt quality — clarity, precision, chain-of-thought reasoning, information completeness, constraint verifiability, structural compliance, and informational integrity — each targeting a specific failure mode. These aren't abstract rules but practical principles drawn from state-of-the-art research that fundamentally change how you write prompts.

    • Seven evaluation dimensions that cover every common prompt failure mode
    • Prompt quality is a learnable skill — not innate talent or guesswork
    • You don't need perfect scores to get dramatically better results from LLMs
    • Grounded in peer-reviewed research on prompt engineering
  39. Announcing EasyHomebrew — A Native Homebrew Package Manager for macOS

    We're building EasyHomebrew — a native macOS app that brings a clean, intuitive GUI to Homebrew. Browse, install, upgrade, and uninstall formulae and casks without touching the terminal. It also includes built-in CVE vulnerability scanning powered by the OSV database, services management, disk usage stats, and full-text search across all available packages. EasyHomebrew is coming soon.

    • Native SwiftUI app — lightweight, fast, and built for macOS
    • Built-in CVE vulnerability scanning against the OSV and NVD databases
    • Manage packages, casks, and Homebrew services from one place
    • Brew Doctor diagnostics, batch operations, and disk usage cleanup
    • Apple Intelligence features on macOS 26+ — smart diagnostics and logo detection
  40. Promptivo — Benchmarks & Prompting Guide

    Two major additions to the Promptivo universe. The new Benchmarks page opens the hood on our scoring engine, showing how the seven quality dimensions perform against Google's IFEval and MePO. Among the findings: zero expert prompts scored "Excellent," and Information Completeness delivers the single biggest gain at +9.6%. Alongside it, the new Prompting Guide is a hands-on walkthrough with before-and-after examples for every dimension, plus checklists and techniques you can use immediately.

    • Benchmarks validated against IFEval and MePO — two peer-reviewed public datasets
    • Expert prompts averaged just 3.38/5 — room to improve exists at every level
    • Optimization produced 11× more "Good" grades and eliminated "Needs Improvement" entirely
    • Guide includes before/after examples, checklists, and score improvements for all 7 dimensions
    • Learn why "don't use X" fails and "use only Y and Z" doubles compliance rates
  41. Blog: The Science of the Ask — Why Promptivo Is the New Essential for AI Teams

    Our latest blog post dives into the research behind prompt quality and why it matters more than ever. Learn how Promptivo uses deterministic linguistic analysis — grounded in peer-reviewed studies of over 5,000 prompt pairs — to score your prompts across seven quality dimensions. Discover why clarity beats chain-of-thought scaffolding, how a few lines of structure outperform paragraphs of description, and what makes a prompt work consistently across models of all sizes.

    • Why clarity is the single highest-impact dimension for LLM output quality
    • How Promptivo turns academic research into instant, actionable feedback
    • The case for deterministic scoring: no AI calls, no latency, no cost
  42. Promptivo

    We just shipped Promptivo — a prompt scoring tool that analyzes your AI prompts across seven quality dimensions and gives you clear, actionable advice to improve them. No AI calls, no latency, no cost per evaluation — scoring uses deterministic linguistic analysis and returns results in milliseconds. Inspired by peer-reviewed research on prompt quality, Promptivo helps you write better prompts and get better results. We would love your feedback.

    • Score prompts across 7 quality dimensions: clarity, precision, context, reasoning, constraint verifiability, specificity, and more
    • Deterministic linguistic analysis — no LLM calls, no latency, no cost per evaluation
    • Research-backed: built on findings from studies of 5,000+ prompt pairs
    • Zero data retention — your prompts are never stored or sent to third parties
  43. Practical UV — VS Code Extension

    Our new VS Code extension brings the power of UV — the blazing-fast Python package manager by Astral — right into your editor. No more context switching to the terminal for dependency management. Get TOML syntax highlighting, automatic outdated dependency detection via PyPI, quick-fix upgrades, and run common UV commands straight from the command palette.

    • Outdated dependency detection with one-click upgrades
    • Run uv sync, add, and run from the command palette
    • Version selection from all available PyPI releases
    • Python and project version bumping built in