{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Sandefjord Software — What's New",
  "home_page_url": "https://patrickjaillet.github.io/sandefjord-software/whats-new.html",
  "feed_url": "https://patrickjaillet.github.io/sandefjord-software/feed.json",
  "description": "Every release from every Sandefjord Software application, newest first.",
  "language": "en",
  "items": [
    {
      "id": "microshader-3.0.1",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v3.0.1",
      "content_text": "UX feedback fix: the Controls panel becomes a persistent right-side inspector instead of a full-screen tab, and two actions that were previously keyboard/command-palette-only get visible buttons. ### Changed The \"Controls\" tab is removed; `Win32GolfControls` now renders as a fixed-width (300px) inspector docked to the right edge, visible on every tab except Viewport (which keeps the full window width, needed for Compare mode's split render). All other tab content (editors, Diff, Trace, Stats, Appearance, About) narrows to make room; the Source/Golfed minimap repositions to stay left of the inspector instead of the raw window edge. The pass-checkbox list switched from two columns to one: the two-column layout was sized for a full-width tab and truncated labels like \"Common subexpressions\" once squeezed into the 300px inspector. Single column uses the inspector's full available height instead, with no truncation. ### Added A \"Golf\" button at the top of the inspector runs the same recompile action as `F5` or the command palette's \"Run golf\" entry — previously keyboard/palette-only. A \"Formatted view\" toggle button in the top-right of the Golfed tab's content area, mirroring the existing `Ctrl+Shift+F` chord — previously also keyboard/palette-only. Both new buttons (`src/ui/win32_tool_button.h/.cpp`, a small reusable owner-drawn button) are registered for UI Automation like every other Phase 26 control, verified live with the same `System.Windows.Automation` client used throughout that phase.",
      "date_published": "2026-07-22T00:00:00.000Z"
    },
    {
      "id": "microshader-3.0.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v3.0.0",
      "content_text": "*Breaking change**: µShader's UI framework is now native Win32 + Direct2D/DirectWrite/GDI+ + WGL-hosted OpenGL — Dear ImGui, SDL3, and the ImGuiColorTextEdit widget are fully removed from the build. `ushader.exe` is the Win32 shell built through Phases 22–26; the old SDL3/ImGui app is gone, not just superseded. This closes the Phase 22–27 migration arc. This release ships a deliberately smaller, curated feature set, not full parity with the retired app — see \"Removed / not yet ported\" below and `ROADMAP.md` Phase 28 for the tracked follow-up plan. ### Changed `CMakeLists.txt`: removed the `SDL3`, `imgui`, and `imguicolortextedit` `FetchContent` dependencies and library targets; links `user32`, `gdi32`, `gdiplus`, `d2d1`, `dwrite`, and `opengl32` directly (all in-box on every Windows 10/11 edition, including LTSC 2019 — no separate runtime to install). The former `ushader_win32_shell` CMake target is renamed `ushader`, reclaiming the name from the deleted SDL3 app; its subsystem changed from `/SUBSYSTEM:CONSOLE` (a development-time console window) to `/SUBSYSTEM:WINDOWS` — verified live that no console window appears. `theme_tokens.h`'s color constants moved off `ImVec4` (the one remaining header-level ImGui dependency the Win32 shell had picked up) onto a local `tokens::Color4` struct with the same field layout. `installer/ushader.iss`, `README.md`, and `THIRD_PARTY_NOTICES.md` rewritten to describe the actual shipped shell and its real dependencies (previously: FFmpeg, `gif-h`, Inter/Lucide fonts — all removed, see below). ### Removed / not yet ported Six features from the retired ImGui app did not make it into the Win32 shell during Phase 26 and were deferred rather than bundled into this release — tracked in `ROADMAP.md` Phase 28, not silently dropped: Golfing profiles (`.ushaderprofile` save/load, `Maximum`/`Safe`/ `None` built-ins) — the CLI's `--profile` flag and the published schema are unaffected, this is only the GUI-side save/load UI. Multi-document workspace (multiple open shaders as separate tabs) and the session-restore-on-launch behavior that depended on it. One-click \"Copy as Shadertoy / Bonzomatic / bare main()\" clipboard exports. Importing a Shader Minifier–style exclude-name list. Self-contained HTML session report export. Viewport capture/recording: PNG screenshots, and GIF/MP4/WebM recording (the latter bundled `ffmpeg.exe` and `gif-h`, both now removed along with the feature). ### Fixed `assets/fonts/` (`Inter.ttf`, `lucide.ttf`) removed — unused once the ImGui shell that loaded them was gone; this phase's own opening sentence explicitly named the Lucide font as something that must not survive it. Several latent build issues surfaced only once SDL3/ImGui's incidental include-path and link propagation went away: `exclude_list_import_test` needed a real source swap (`file_dialog_sdl.cpp` → `file_dialog.cpp`, and `import_exclude_list_action` changed from taking `SDL_Window*` to `HWND`), three test targets had a dead `SDL3::SDL3` link, and `ushaderprofile_schema_test` was missing an explicit `rust_core` link it had never needed before. `workspace.h`/`.cpp` and `golf_controls.h` had a transitive dependency on the deleted `theme.h`, decoupled with a local literal default and by dropping dead SDL-specific declarations. `scripts/check_contrast.py`'s token-parsing regex updated for the `ImVec4` → `Color4` rename — re-verified all four text/background pairs still pass WCAG AA (5.87:1 to 13.36:1). ### Known gap The Windows 10 LTSC 2019 hardware/VM acceptance pass from `ROADMAP.md` Phase 27 has not been performed — this development environment has no LTSC 2019 target. Everything verifiable here (clean build, all 8 test executables passing, `wgl_equivalence_test` still 5/5 bit-exact, live UI smoke test) is done.",
      "date_published": "2026-07-22T00:00:00.000Z"
    },
    {
      "id": "z-gl-shadertoy-2.13.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=z-gl-shadertoy",
      "title": "Z-GL-Shadertoy v2.13.0",
      "content_text": "## What's changed This release removes several features that added maintenance surface without matching real usage: **Share links** — the share-link toolbar button and its versioned multi-pass variant. **Crash reporting** — the opt-in crash-report prompt and its underlying error-log forwarding. **Post-processing pipeline** — bloom, tone mapping, vignette, CRT filter, FXAA, TAA, film grain, and LUT color grading, along with the features built on top of it (FX Stack, Style Layers, Shape Mask, Color Remap, color-blindness simulation). **Performance panel** — the toolbar button and its popup (frame budget, FPS cap, resolution, profiling, GPU capabilities). **Tools menu** — the toolbar's overflow menu and its pinned-tools system, along with pop-out viewport, the standalone shader-docs panel (F1 still opens the full Help Center), the workspace panel, the Ray Marching Assistant, SDF Visualizer, SDF Composer, presentation mode, and the local \"open shader file\" / \"import ZIP\" actions. **Preset library** — the preset-browsing drawer, its save/wizard dialogs, and its ShaderToy-import row. Loading presets via the embed API and importing local shader/preset files continue to work. **Layout presets** — the layout toolbar button, built-in presets (Coder / Performer / Animator / Minimal), custom saved layouts, and the detach-panel feature. Manual panel/inspector resizing and the Uniforms/Channels tab switcher are unaffected. See CHANGELOG.md for full details. ## Installation Download and run the installer for your platform: **`Z-GL Shadertoy_2.13.0_x64-setup.exe`** — NSIS installer (recommended) **`Z-GL Shadertoy_2.13.0_x64_en-US.msi`** — MSI installer",
      "date_published": "2026-07-21T00:00:00.000Z"
    },
    {
      "id": "z-gl-shadertoy-2.12.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=z-gl-shadertoy",
      "title": "Z-GL-Shadertoy v2.12.0",
      "content_text": "Full UI redesign of z-gl in the style of professional motion-graphics compositing software: Fixed 800x450 composition viewport, no fluid resizing. Single fixed dark theme (old multi-theme system fully removed). Sliders redesigned as scrubbable numeric fields. App-wide text/border contrast pass for readability. Compositor-style skin on the sidebar, inspector, toolbar, and panel tabs. See [CHANGELOG.md](https://github.com/Patrickjaillet/Z-GL-Shadertoy/blob/main/CHANGELOG.md) for full details. ## Downloads **Z-GL Shadertoy_2.12.0_x64-setup.exe** — NSIS installer (recommended) **Z-GL Shadertoy_2.12.0_x64_en-US.msi** — MSI installer",
      "date_published": "2026-07-21T00:00:00.000Z"
    },
    {
      "id": "microshader-2.0.1",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v2.0.1",
      "content_text": "Drag-and-drop .glsl files onto the main window to open each as a new tab. Recent Files list under the File menu, persisted to %APPDATA%\\ushader\\, with automatic pruning of missing entries.",
      "date_published": "2026-07-19T00:00:00.000Z"
    },
    {
      "id": "aiprompt-1.0.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=aiprompt",
      "title": "AIPrompt v1.0.0",
      "content_text": "First stable release of AIPrompt: a Windows desktop app to build, organize, and assemble AI prompts from a local library of reusable terms and phrases, and to generate structured `ROADMAP.md` files. ## Installation Download `AIPromptSetup_x64.exe` below, run it (no administrator rights required), and launch AIPrompt from the Start Menu or Desktop shortcut. Windows 10/11 x64, self-contained (.NET 8) — no separate runtime install needed. ## Highlights since the last pre-release ### Added Automatic semantic versioning: a single `VERSION` file drives `Version`/`AssemblyVersion`/`FileVersion`/`InformationalVersion` across all projects, with a local build script (`scripts/build.ps1`) that auto-increments `PATCH` Windows installer built with Inno Setup 6 (per-user install, Start Menu / Desktop shortcuts, clean uninstall) and a one-step build script (`scripts/build-installer.ps1`) Final `README.md` with installation instructions and real application screenshots `CONTRIBUTING.md`, issue templates, and `CODEOWNERS` ### Changed About tab now shows the full informational version (including pre-release suffixes) instead of a truncated 3-part version ### Fixed Removed a stray AI co-author mention found in git history during the final compliance pass (history rewritten, affected tags recreated) See `CHANGELOG.md` for the complete history.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "glsl-hyper-golfer-1.0.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=glsl-hyper-golfer",
      "title": "GLSL-Hyper-Golfer v1.0.0",
      "content_text": "No release notes provided.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "microshader-1.2.5",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v1.2.5",
      "content_text": "## New golf pass: common subexpression elimination When two declarations in a row initialize with a token-identical pure expression, the later ones now reference the first variable instead of recomputing it, e.g. `float a=dot(p,p),b=dot(p,p);` becomes `float a=dot(p,p),b=a;`. Deliberately scoped narrow for safety: only whole declaration initializers, only pure builtins/constructors (never a user function), and the candidate cache is cleared on every block boundary and any non-matching statement. Two real bugs were found and fixed during development, both now covered by regression tests: A variable-name lookup that read the pre-rename identifier instead of the actual rendered name. A cache-invalidation check that missed a brace following `)` or `else` rather than `;`. New \"Common subexpressions\" toggle in the Passes panel, matching per-pass counter in the stats panel. Unsigned installer - Windows SmartScreen may show an \"unknown publisher\" warning; click \"More info\" -> \"Run anyway\". Verified on Windows 10 (LTSC 2019, build 17763); not independently verified on Windows 11.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "microshader-1.2.4",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v1.2.4",
      "content_text": "## New golf pass: algebraic identity simplification First step toward the most powerful GLSL golfing engine possible while never changing shader behavior (tracked going forward under ROADMAP.md Phase 11). Removes x*1, 1*x, x/1, x+0, 0+x, x-0 for a bare identifier x. Rewrites pow(x,2.) to x*x for a bare identifier/number x. Restricted to single-identifier operands so it can never duplicate or drop something with a side effect. New \"Algebraic identities\" toggle in the Passes panel, new per-pass counter in the stats panel. Covered by a new fixture (fixtures/algebraic_identities.glsl) and 4 new Rust unit tests. Unsigned installer - Windows SmartScreen may show an \"unknown publisher\" warning; click \"More info\" -> \"Run anyway\". Verified on Windows 10 (LTSC 2019, build 17763); not independently verified on Windows 11.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "microshader-1.2.3",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v1.2.3",
      "content_text": "## Phase 10 follow-up: two more gaps closed Checkboxes (all 16, across golf-pass toggles, \"Aggressive golf\", \"Formatted view\", \"Compare\") are now a bespoke flat 12px square matching the Phase 10 spec, instead of the default ImGui shape. The \"Protected names\" field now shows a 1px accent focus ring while being edited. Unsigned installer - Windows SmartScreen may show an \"unknown publisher\" warning; click \"More info\" -> \"Run anyway\". Verified on Windows 10 (LTSC 2019, build 17763); not independently verified on Windows 11.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "microshader-1.2.2",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v1.2.2",
      "content_text": "## Small Phase 10 follow-up \"Run golf\" is now the one accent-filled primary button in the UI, matching Phase 10's design intent that it be the single clearly-primary surface. ROADMAP.md's Phase 10 sub-sections (10.1-10.7) retrofitted with checkboxes and honest per-item notes on what matches the original spec exactly versus what was pragmatically approximated. Unsigned installer - Windows SmartScreen may show an \"unknown publisher\" warning; click \"More info\" -> \"Run anyway\". Verified on Windows 10 (LTSC 2019, build 17763); not independently verified on Windows 11.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "microshader-1.2.1",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v1.2.1",
      "content_text": "## Phase 10: dark UI/UX overhaul Full replacement of the white theme with a dark, Adobe Premiere Pro-style editing workspace: Named color-token table backing every UI color. Compact chrome: 2px corner radius, flat accent-underlined tabs, thin scrollbars. Custom borderless window frame with its own title bar (icon, minimize/maximize/close). Dark text-editor palette for Source/Golfed panels. Viewport restyled as a Program Monitor: black letterboxing, compile-status dot, timecode readout. Icons now shift color between idle/hover/active states. About popup rebuilt as a dark card. New design references under docs/design/, WCAG AA contrast-checked. Also fixes a crash when minimizing the window (found and fixed during verification of this release). Unsigned installer - Windows SmartScreen may show an \"unknown publisher\" warning; click \"More info\" -> \"Run anyway\". Verified on Windows 10 (LTSC 2019, build 17763); not independently verified on Windows 11.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "microshader-1.2.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v1.2.0",
      "content_text": "## Changes since v1.0.0 Viewport recording: capture the running shader to an animated GIF, or to MP4/WebM. MP4/WebM now encode through a bundled ffmpeg.exe (no separate install or PATH entry needed) - see THIRD_PARTY_NOTICES.md for the FFmpeg (GPL) attribution this requires. Fixed: Open/Save for .glsl files silently failed on non-ASCII paths. Fixed: a stray console window appeared behind the main window on launch. Fixed: docked panels exposed a \"Hide tab bar\" menu that could hide a panel's tab. Unsigned installer - Windows SmartScreen may show an \"unknown publisher\" warning; click \"More info\" -> \"Run anyway\". Verified on Windows 10 (LTSC 2019, build 17763); not independently verified on Windows 11.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "microshader-1.0.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=microshader",
      "title": "µShader v1.0.0",
      "content_text": "First stable release of uShader, a native Windows 10/11 GLSL shader golfer. ## Highlights Golfing engine: identifier renaming, numeric literal shortening, and whitespace stripping always run; an aggressive mode adds 14 further transformation passes (dead-code elimination, constant folding, declaration merging, function inlining, and more), each individually toggleable, plus a protected-names list. Live viewport with the standard Shadertoy uniform set (`iTime`, `iResolution`, `iMouse`, `iDate`, `iFrame`, `iFrameRate`), and a Compare mode that renders the source and golfed shaders side by side. GLSL-aware text editor with syntax highlighting and error-line highlighting on compile failure, plus a \"Formatted view\" toggle for the golfed output. Reduction stats: char/byte counts, reduction percentage, per-pass counters, and size-budget badges. Import/export: open and save `.glsl` files, copy the golfed output, export in Shadertoy format, and capture the viewport to PNG. About panel with logo, copyright, and links. ## Installing Download `uShader-Setup-1.0.0.9.exe` below and run it. The installer is unsigned (no code-signing certificate available), so Windows SmartScreen may show an \"unknown publisher\" warning — click \"More info\" -> \"Run anyway\". Requires Windows 10 or 11 (64-bit). Verified on Windows 10 (LTSC 2019, build 17763); not yet independently verified on Windows 11. See [CHANGELOG.md](https://github.com/Patrickjaillet/MicroShader/blob/main/CHANGELOG.md) for the full per-phase history.",
      "date_published": "2026-07-18T00:00:00.000Z"
    },
    {
      "id": "shaderfmt-1.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=shaderfmt",
      "title": "ShaderFmt v1.0",
      "content_text": "No release notes provided.",
      "date_published": "2026-07-12T00:00:00.000Z"
    },
    {
      "id": "shaddem-1.0.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=shaddem",
      "title": "Shaddem v1.0.0",
      "content_text": "No release notes provided.",
      "date_published": "2026-07-10T00:00:00.000Z"
    },
    {
      "id": "shaddem-0.1.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=shaddem",
      "title": "Shaddem v0.1.0",
      "content_text": "No release notes provided.",
      "date_published": "2026-07-08T00:00:00.000Z"
    },
    {
      "id": "numis-euro-5.0.0",
      "url": "https://patrickjaillet.github.io/sandefjord-software/software.html?id=numis-euro",
      "title": "Numis-Euro v5.0.0",
      "content_text": "No release notes provided.",
      "date_published": "2026-06-15T00:00:00.000Z"
    }
  ]
}
