Riffle 1.5: bring your own themes and languages
Riffle ships around 60 themes and knows 46 languages, and until now that was the end of the conversation. If your theme wasn't in the list, or your file type wasn't recognized, there was nothing you could do about it. Riffle 1.5 opens both up.
Settings has a new Syntax tab that manages themes: add one from disk, see what you've added, remove one when you're done with it. It reads the VS Code / shiki theme JSON that nearly every editor theme is published as, and real TextMate .tmTheme files too, so a theme you've carried around for a decade still works. Themes published as JSON with comments in them, which Cobalt2 and Shades of Purple both are, no longer get turned away at the door.
The same tab browses a gallery of themes and languages published alongside Riffle's updates, with a preview of each theme's colors, who made it and under what license, and one click to install. It's a feed rather than something baked into the app, so new entries appear without waiting for a Riffle release, and it works offline by showing the last catalog it downloaded.
Languages take the same treatment. A language is a JSON file naming the extensions it claims plus its keywords, comment markers and string delimiters, dropped in ~/Library/Application Support/Riffle/Languages or installed from the gallery. At its smallest it's four lines pointing an extension at a language Riffle already knows, which is all it takes to color .blade.php as PHP or your in-house .conf dialect as INI. Multi-part extensions work and beat a shorter match, so a Blade definition takes page.blade.php while plain .php files stay PHP. Comparisons you already have open re-read themselves when you add or remove one, so there's no closing and reopening tabs to see the change.
Thirteen languages are ready to install from the gallery on day one, including AL for Microsoft Dynamics 365 Business Central, Blade, Liquid, Jinja, Handlebars, PowerShell, Julia, Solidity, F#, Groovy and Jenkins pipelines, Prisma, MDX, and .env files.
Reviewing a list of files
riffle review --pairs <manifest.json> opens the review window over any set of before/after pairs a JSON file names, with no repository involved at all. Add --watch and Riffle re-reads the manifest whenever it changes, revising the rows it changed and adding the ones it newly touched, in the window that's already open rather than in another one. It's built for coding agents and useful to anything that can write a list: a build's before and after outputs, a migration's inputs, a batch of generated files.
The Riffle plugin for Claude Code uses it. The end of an agent's turn now opens one window listing every file it changed, each against a snapshot taken before the agent first touched it, instead of a tab per file capped at five. Later turns land in the same window. Files you edited yourself are still excluded, which is the entire reason for the snapshots. The tab is named after the project, so two agents working in two checkouts stay apart, with the full path and the agent's name in the window itself.
Riffle is $29.99 once, with a 14-day full-feature trial and a free tier that keeps unlimited 2-way diff forever. Get it from the Riffle page or with Homebrew: brew install --cask skulkworks/tap/riffle. Full details are in the changelog.