{
    "version": "https://jsonfeed.org/version/1",
    "title": "deckbridge",
    "home_page_url": "https://lukasmega.github.io/DeckBridge/blog",
    "description": "Release notes and news from the deckbridge project",
    "items": [
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/since-v0-15",
            "content_html": "<p>DeckBridge changed considerably since 0.15.0. AJAZZ AKP05 support landed. Widget controls grew more capable. Pairing recovery became more reliable.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"ajazz-akp05-joins-supported-decks\">AJAZZ AKP05 joins supported decks<a href=\"https://lukasmega.github.io/DeckBridge/blog/since-v0-15#ajazz-akp05-joins-supported-decks\" class=\"hash-link\" aria-label=\"Direct link to AJAZZ AKP05 joins supported decks\" title=\"Direct link to AJAZZ AKP05 joins supported decks\" translate=\"no\">​</a></h2>\n<p>AKP05E support adds ten LCD keys. Four encoders also work. Touch strip adds four zones. Stream Deck + pairing now works. Eight keys reach Elgato software. Remaining two become configurable side keys.</p>\n<p>Each side key supports widgets. Key presses can refresh widgets. Presses can also run commands. Encoders forward turns and presses. Strip taps and swipes forward too.</p>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-akp05-plus-d7fb9b9a79cbd357e6b6c6e7a97b5605.png\" alt=\"DeckBridge Web UI with mock AKP05 paired as Stream Deck Plus, showing side keys, touch strip, and knob controls\" class=\"themedComponent_wfyc themedComponent--light_Knhc\" width=\"454\"><img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-akp05-plus-dark-0169f6d67b302a159890c4fd3c86f24b.png\" alt=\"DeckBridge Web UI with mock AKP05 paired as Stream Deck Plus, showing side keys, touch strip, and knob controls\" class=\"themedComponent_wfyc themedComponent--dark_GE82\" width=\"454\">\n<p>Screenshot shows mock AKP05 pairing. AKP05E hardware received macOS testing. Retail AKP05 support remains untested. See <a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/devices#ajazz-akp05-family\">device details</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"touch-strip-gets-widget-zones\">Touch strip gets widget zones<a href=\"https://lukasmega.github.io/DeckBridge/blog/since-v0-15#touch-strip-gets-widget-zones\" class=\"hash-link\" aria-label=\"Direct link to Touch strip gets widget zones\" title=\"Direct link to Touch strip gets widget zones\" translate=\"no\">​</a></h2>\n<p>Each strip zone gets independent widgets. Zone previews double as tabs. Pick one to edit it. Three ownership modes control repainting. Elgato can own every zone. DeckBridge can override app images. Repaint mode restores widgets after feedback.</p>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-touch-strip-zones-91388917a7996f65efcd0dd6e782a11e.png\" alt=\"Live DeckBridge mock UI showing four touch strip zone tabs and widget controls\" class=\"themedComponent_wfyc themedComponent--light_Knhc\" width=\"454\"><img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-touch-strip-zones-dark-84fd005756fc919e3e15a7277aeaa788.png\" alt=\"Live DeckBridge mock UI showing four touch strip zone tabs and widget controls\" class=\"themedComponent_wfyc themedComponent--dark_GE82\" width=\"454\">\n<p>See <a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/side-keys#touch-strip-modes\">touch strip modes</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"widgets-gain-precise-text-controls\">Widgets gain precise text controls<a href=\"https://lukasmega.github.io/DeckBridge/blog/since-v0-15#widgets-gain-precise-text-controls\" class=\"hash-link\" aria-label=\"Direct link to Widgets gain precise text controls\" title=\"Direct link to Widgets gain precise text controls\" translate=\"no\">​</a></h2>\n<p>Size controls now include Fit. Wrapping handles words or characters. Narrow font fits more text. Colours, alignment, padding, and outlines adjust. Side keys show live previews. Clipped text gets visible warnings.</p>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-widget-text-style-7477170d6e9e6134c2283f52378617df.png\" alt=\"Live DeckBridge mock UI showing widget text style popover with font, colour, alignment, and spacing controls\" class=\"themedComponent_wfyc themedComponent--light_Knhc\" width=\"454\"><img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-widget-text-style-dark-9d6b28a0ddf7f3fd2d6fda0f84840c63.png\" alt=\"Live DeckBridge mock UI showing widget text style popover with font, colour, alignment, and spacing controls\" class=\"themedComponent_wfyc themedComponent--dark_GE82\" width=\"454\">\n<p>Device key art also gets cropping. Users can position images before upload. See <a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/side-keys#text-style\">widget controls</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"pairing-survives-more-disruptions\">Pairing survives more disruptions<a href=\"https://lukasmega.github.io/DeckBridge/blog/since-v0-15#pairing-survives-more-disruptions\" class=\"hash-link\" aria-label=\"Direct link to Pairing survives more disruptions\" title=\"Direct link to Pairing survives more disruptions\" translate=\"no\">​</a></h2>\n<p>Paired decks now regain connections. DeckBridge watches lost child connections. Local Elgato software can restart automatically. Restart only follows previously paired decks. Settings expose delay and manual restart.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"tray-status-gets-clearer\">Tray status gets clearer<a href=\"https://lukasmega.github.io/DeckBridge/blog/since-v0-15#tray-status-gets-clearer\" class=\"hash-link\" aria-label=\"Direct link to Tray status gets clearer\" title=\"Direct link to Tray status gets clearer\" translate=\"no\">​</a></h2>\n<p>Tray header now shows app version. Available updates show one indicator. Release checks still require user action.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"release-status\">Release status<a href=\"https://lukasmega.github.io/DeckBridge/blog/since-v0-15#release-status\" class=\"hash-link\" aria-label=\"Direct link to Release status\" title=\"Direct link to Release status\" translate=\"no\">​</a></h2>\n<p>Version 0.17.0 includes these changes. Screenshots show mock Web UI. <a href=\"https://github.com/lukasMega/DeckBridge/releases/tag/deckbridge-v0.17.0\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Download 0.17.0</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"virustotal-results\">VirusTotal results<a href=\"https://lukasmega.github.io/DeckBridge/blog/since-v0-15#virustotal-results\" class=\"hash-link\" aria-label=\"Direct link to VirusTotal results\" title=\"Direct link to VirusTotal results\" translate=\"no\">​</a></h2>\n<p>Some scanners flag 0.17.0 downloads. Findings suggest false positives. No clear malicious behavior appeared. Scans cannot prove safety. Verify downloads using <a href=\"https://github.com/lukasMega/DeckBridge/releases/download/deckbridge-v0.17.0/SHA256SUMS.txt\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">release checksums</a>. Keep antivirus protection enabled.</p>\n<details class=\"details_cC6h alert alert--info details_gA8H\" data-collapsed=\"true\"><summary>Scan results</summary><div><div class=\"collapsibleContent_XMHl\"><table><thead><tr><th>Download</th><th>Detections</th></tr></thead><tbody><tr><td><a href=\"https://www.virustotal.com/gui/file/0222989a41d85d10a39c31dbfa9d5d03c7bbfff254b015d8a5f5af407ed3b493\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Windows portable ZIP</a></td><td>1/51</td></tr><tr><td><a href=\"https://www.virustotal.com/gui/file/222cdc96420cd29802f2d38699f8fe97d5e91015ca2ef33dd52d2b7b63ab3c2e\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Windows installer</a></td><td>3/68</td></tr><tr><td><a href=\"https://www.virustotal.com/gui/file/be7bae75feb6681027644545f32d835988ba8c5f1209a5ed429f1a64bb782855\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">macOS Intel DMG</a></td><td>1/58</td></tr></tbody></table><p>Results checked September 29, 2026. Scanner results can change.</p></div></div></details>\n<details class=\"details_cC6h alert alert--info details_gA8H\" data-collapsed=\"true\"><summary>Bundled components and possible causes</summary><div><div class=\"collapsibleContent_XMHl\"><p>Windows Tauri launcher scored <a href=\"https://www.virustotal.com/gui/file/31240fb02bb852cc05d696eebb4ec1ca08ba763ccb61e85fec7695a8d16163cd\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">3/71</a>. NSIS utility DLL scored <a href=\"https://www.virustotal.com/gui/file/5ba143b5db4a87d32d6e7802e033330aae56cbceabe0d1e3ba41948385ad4709\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">2/71</a>. Portable ZIP omits NSIS. Its Txiki relay still scored <a href=\"https://www.virustotal.com/gui/file/88f1068edd95e380ecd58533ec5da7c7559f28f28d22368a3282227b2f0c05ca\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">2/71</a>. QuickJS runs inside Txiki. Extracted native DLLs scanned clean. Packaging may trigger scanner heuristics. Exact causes remain unproven.</p></div></div></details>\n<p><a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/virustotal-v0.17.0\">Read complete findings</a>.</p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/since-v0-15",
            "title": "What's new since 0.15",
            "summary": "DeckBridge changed considerably since 0.15.0. AJAZZ AKP05 support landed. Widget controls grew more capable. Pairing recovery became more reliable.",
            "date_modified": "2026-09-28T00:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Release",
                "Devices"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/performance-audit",
            "content_html": "<p>DeckBridge sits between your USB panel and the Elgato app, so it must never be slow in the\nmiddle. I profiled the hot paths and found four problems. Three were one-line fixes.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"1-the-build-was-optimizing-for-the-wrong-thing\">1. The build was optimizing for the wrong thing<a href=\"https://lukasmega.github.io/DeckBridge/blog/performance-audit#1-the-build-was-optimizing-for-the-wrong-thing\" class=\"hash-link\" aria-label=\"Direct link to 1. The build was optimizing for the wrong thing\" title=\"Direct link to 1. The build was optimizing for the wrong thing\" translate=\"no\">​</a></h2>\n<p>Rust was set to optimize for size. That setting applies to <strong>every</strong> dependency too — so\nthe JPEG encoder and image resizer were built for size as well, losing the optimizations\nthat make their number-crunching fast.</p>\n<div class=\"language-text codeBlockContainer_Gj7Y theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_uHW3\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_wi9S thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_TbEZ\"><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">time to process one image</span><br></div><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  for size   ████████████████████  3.50 ms</span><br></div><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  for speed  █████                 0.91 ms  ← 3.8×</span><br></div></code></pre></div></div>\n<p>Cost: 69 KB of extra binary.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"2-frozen-55-ms-every-2-seconds-forever\">2. Frozen 55 ms, every 2 seconds, forever<a href=\"https://lukasmega.github.io/DeckBridge/blog/performance-audit#2-frozen-55-ms-every-2-seconds-forever\" class=\"hash-link\" aria-label=\"Direct link to 2. Frozen 55 ms, every 2 seconds, forever\" title=\"Direct link to 2. Frozen 55 ms, every 2 seconds, forever\" translate=\"no\">​</a></h2>\n<p>DeckBridge scans for extra decks every 2 seconds. It asked the OS about each supported\ndevice separately — 18 questions, each making the OS walk through every USB device you have\nplugged in.</p>\n<div class=\"language-text codeBlockContainer_Gj7Y theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_uHW3\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_wi9S thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_TbEZ\"><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">time frozen, per scan</span><br></div><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  18 lookups  ████████████████████  56.84 ms</span><br></div><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  ask once    █                      3.16 ms  ← 18×</span><br></div></code></pre></div></div>\n<p>Worse, it froze the same thread that acknowledges incoming images, and the Elgato app waits\nfor each acknowledgement before sending more. So a badly timed scan delayed images reaching\nyour deck.</p>\n<p>The fix was to ask once and answer all 18 questions from that one answer. It now runs on a\nbackground thread too.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"3-an-acknowledgement-stuck-behind-a-log-nobody-reads\">3. An acknowledgement stuck behind a log nobody reads<a href=\"https://lukasmega.github.io/DeckBridge/blog/performance-audit#3-an-acknowledgement-stuck-behind-a-log-nobody-reads\" class=\"hash-link\" aria-label=\"Direct link to 3. An acknowledgement stuck behind a log nobody reads\" title=\"Direct link to 3. An acknowledgement stuck behind a log nobody reads\" translate=\"no\">​</a></h2>\n<p>One spot wrote a log line <em>before</em> sending the acknowledgement — a log line then thrown\naway, because it's debug detail and DeckBridge ships at normal logging. Build a message,\npass it around, discard it, all while the Elgato app waits. Hundreds of times per profile\nload. Swapping two lines fixed it.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"4-the-shortcut-was-slower-than-the-work\">4. The shortcut was slower than the work<a href=\"https://lukasmega.github.io/DeckBridge/blog/performance-audit#4-the-shortcut-was-slower-than-the-work\" class=\"hash-link\" aria-label=\"Direct link to 4. The shortcut was slower than the work\" title=\"Direct link to 4. The shortcut was slower than the work\" translate=\"no\">​</a></h2>\n<p>DeckBridge caches processed images. To check the cache it first computes a \"fingerprint\" of\nthe incoming image — and after fix #1, that fingerprint cost more than the processing it\nwas meant to skip:</p>\n<div class=\"language-text codeBlockContainer_Gj7Y theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_uHW3\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_wi9S thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_TbEZ\"><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  processing   ███████████           0.91 ms</span><br></div><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  fingerprint  ████████████████████  1.60 ms</span><br></div></code></pre></div></div>\n<p>Reading four bytes at a time instead of one fixed it, still reading every byte:</p>\n<div class=\"language-text codeBlockContainer_Gj7Y theme-code-block\" style=\"--prism-color:#F8F8F2;--prism-background-color:#282A36\"><div class=\"codeBlockContent_uHW3\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_wi9S thin-scrollbar\" style=\"color:#F8F8F2;background-color:#282A36\"><code class=\"codeBlockLines_TbEZ\"><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">fingerprinting cost</span><br></div><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  one byte    ████████████████████  1.60 ms</span><br></div><div class=\"token-line\" style=\"color:#F8F8F2\"><span class=\"token plain\">  four bytes  █████                 0.38 ms  ← 4.2×</span><br></div></code></pre></div></div>\n<p>A 15-key profile load went from 24 ms to 5.7 ms. Details in\n<a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/image-flow#image-cache-hash\">the image-flow docs</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"also-worth-saying\">Also worth saying<a href=\"https://lukasmega.github.io/DeckBridge/blog/performance-audit#also-worth-saying\" class=\"hash-link\" aria-label=\"Direct link to Also worth saying\" title=\"Direct link to Also worth saying\" translate=\"no\">​</a></h2>\n<p>Several good-looking ideas didn't survive measurement and were dropped, including a faster\nresize filter (saved 0.17 ms, risked visible quality) and avoiding a copy between threads\n(the runtime copies anyway).</p>\n<p>And the docs claimed image processing took \"50–200 ms\", used to justify DeckBridge's\ntwo-thread design. The real number is under a millisecond. The design is still right, but\nfor a different reason — it's the burst of USB writes <em>after</em> processing that would block\nthings. All four places quoting the wrong figure have been fixed.</p>\n<p>Full numbers and how to reproduce them: <code>rust/PERF.md</code>.</p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/performance-audit",
            "title": "Four findings from a performance audit",
            "summary": "DeckBridge sits between your USB panel and the Elgato app, so it must never be slow in the",
            "date_modified": "2026-09-18T12:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Performance"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/v0-14-2",
            "content_html": "<p>Deckbridge 0.14.2 adds an opt-out update check and live device tuning, plus a Windows\nportable zip, sharper app icons, a visible app version in the web UI, and accessibility\nfixes.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"update-check\">Update check<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-2#update-check\" class=\"hash-link\" aria-label=\"Direct link to Update check\" title=\"Direct link to Update check\" translate=\"no\">​</a></h2>\n<p>DeckBridge now tells you when a newer release is out. Once ~30 seconds after startup and\nthen every 24 hours, it makes a single unauthenticated request to the GitHub releases API\nand shows a badge in the web UI if there is something newer. It is notify-only — nothing\nis downloaded or installed — and it sends no machine id and no usage data.</p>\n<p>Turn it off with the <strong>Check for updates</strong> toggle in Settings, or <code>\"updateCheck\": false</code>\nin <code>settings.json</code>. <strong>Check now</strong> runs the check on demand. Details in <a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/privacy\">privacy</a>.</p>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-updates-51473d29ed97c7be37aa39a3dd4f8141.png\" alt=\"The Updates panel in DeckBridge settings, light theme\" width=\"454\">\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-updates-dark-a883c0f00f75ed5e4cdb29b3f9424c52.png\" alt=\"The Updates panel in DeckBridge settings, dark theme\" width=\"454\">\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"device-tuning\">Device tuning<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-2#device-tuning\" class=\"hash-link\" aria-label=\"Direct link to Device tuning\" title=\"Direct link to Device tuning\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">Image tuning now applies <strong>live</strong>: changing fit, rotation or flip repaints the dock from\nthe cached frames instead of reopening the device, so there is no disconnect flash.\nKey map, wire and splash settings still need a reopen, since the driver reads them when\nit opens the device.</li>\n<li class=\"\">Fixed the tuning form's <strong>Image fit</strong> control doing nothing on devices with a legacy\nper-device image mode override — the old override was re-applied after the merge and\noverwrote the tuned values on every frame.</li>\n</ul>\n<p>The panel text now says which changes are instant and which reconnect:</p>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-device-tuning-live-f48274ccf68a37ed7d49bdf80c078239.png\" alt=\"The device tuning panel in DeckBridge settings, light theme\" width=\"454\">\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-device-tuning-live-dark-bf1999394bc48bf64ce003241dfefe0b.png\" alt=\"The device tuning panel in DeckBridge settings, dark theme\" width=\"454\">\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"windows\">Windows<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-2#windows\" class=\"hash-link\" aria-label=\"Direct link to Windows\" title=\"Direct link to Windows\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">New <strong>portable zip</strong> alongside the NSIS installer — unzip and run, no install step.</li>\n<li class=\"\">Release executables are stamped with proper version info, so Windows file properties and\ninstaller dialogs show the real version.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"icons\">Icons<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-2#icons\" class=\"hash-link\" aria-label=\"Direct link to Icons\" title=\"Direct link to Icons\" translate=\"no\">​</a></h2>\n<p>App and tray icons are updated. On macOS the tray icon sits in the\nmenu bar — green once the deck is open and the Elgato app is connected:</p>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/tray-macos-3d74c2ac6e0288b486d7f80e1b54fc70.png\" alt=\"DeckBridge green tray icon in the macOS menu bar, with its menu open showing the status line &quot;Mirabox 293S Stream Deck + Elgato app connected&quot; and the Open Web UI, Check Requirements and Quit items\" width=\"610\">\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"web-ui\">Web UI<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-2#web-ui\" class=\"hash-link\" aria-label=\"Direct link to Web UI\" title=\"Direct link to Web UI\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">The topbar now shows the running app version, with build details in the about popover —\nhandy when reporting an issue.</li>\n<li class=\"\">Accessibility fixes across the UI, plus corrected heading structure on the blog list.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"docs\">Docs<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-2#docs\" class=\"hash-link\" aria-label=\"Direct link to Docs\" title=\"Direct link to Docs\" translate=\"no\">​</a></h2>\n<p>The README device list is now a table, so supported decks are easier to scan, and there is\nan architecture diagram.</p>\n<p>Full changelog and downloads: <a href=\"https://github.com/lukasMega/DeckBridge/releases/tag/deckbridge-v0.14.2\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">deckbridge-v0.14.2</a></p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/v0-14-2",
            "title": "deckbridge 0.14.2",
            "summary": "Deckbridge 0.14.2 adds an opt-out update check and live device tuning, plus a Windows",
            "date_modified": "2026-09-18T02:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Release",
                "Docs"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/v0-14-0",
            "content_html": "<p>Deckbridge 0.14.0 brings faster image transfers and USB discovery, easier diagnostics, and device tuning.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"performance\">Performance<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-0#performance\" class=\"hash-link\" aria-label=\"Direct link to Performance\" title=\"Direct link to Performance\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">Faster image transfers on 293S-family devices.</li>\n<li class=\"\">USB discovery scans once per sweep.</li>\n<li class=\"\">Reconnect checks run every 3–30 seconds.</li>\n<li class=\"\">Less memory overhead and WebSocket traffic.</li>\n</ul>\n<p>Profile switches now update all keys together. On a Mirabox 293S, median USB transfer time dropped <strong>54.9%</strong> across ten samples per mode.</p>\n<table><thead><tr><th>Full 15-key page</th><th style=\"text-align:right\">Before</th><th style=\"text-align:right\">After</th></tr></thead><tbody><tr><td>Median USB transfer</td><td style=\"text-align:right\">1,022 ms</td><td style=\"text-align:right\">461 ms</td></tr><tr><td>USB reports</td><td style=\"text-align:right\">76</td><td style=\"text-align:right\">62</td></tr><tr><td>STP reports</td><td style=\"text-align:right\">15</td><td style=\"text-align:right\">1</td></tr></tbody></table>\n<p>Sending one STP report per page reduces firmware stalls.</p>\n<video autoplay=\"\" loop=\"\" muted=\"\" playsinline=\"\" width=\"600\" aria-label=\"A Mirabox 293S repainting all of its keys in one sweep after a profile switch, with batched image transfers\"><source src=\"/DeckBridge/assets/medias/batch-improvement-8a4a8e0f73e61e2f708493c3e642d038.webm\" type=\"video/webm\"><source src=\"/DeckBridge/assets/medias/batch-improvement-1fd95a7f2240ef71afa3d240ecf9e986.mp4\" type=\"video/mp4\"></video>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"diagnostics\">Diagnostics<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-0#diagnostics\" class=\"hash-link\" aria-label=\"Direct link to Diagnostics\" title=\"Direct link to Diagnostics\" translate=\"no\">​</a></h2>\n<p>Run <code>deckbridge diagnose</code> to collect device details, logs, and <code>settings.json</code>. It runs without starting a server or opening the device. The Web UI provides the same report at <code>GET /api/diagnostics</code>.</p>\n<p>Settings → <strong>Logging &amp; diagnostics</strong> does the same in one click: turn on debug logging, reproduce the problem, then create the report.</p>\n<video autoplay=\"\" loop=\"\" muted=\"\" playsinline=\"\" width=\"600\" aria-label=\"Opening DeckBridge settings and expanding the Logging and diagnostics panel\"><source src=\"/DeckBridge/assets/medias/webui-diagnostics-tour-4866121a2158e4d865320d1d9878c7ac.webm\" type=\"video/webm\"><source src=\"/DeckBridge/assets/medias/webui-diagnostics-tour-2f038306e3104d96e42d1cb67f34bc98.mp4\" type=\"video/mp4\"></video>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-diagnostics-94c0963483b37eff0e21d2e06a6dc887.png\" alt=\"The Logging and diagnostics panel in DeckBridge settings, light theme\" width=\"454\">\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-diagnostics-dark-d3dc6cc5fce2c85c151c6efaadadd1e4.png\" alt=\"The Logging and diagnostics panel in DeckBridge settings, dark theme\" width=\"454\">\n<p>Commands appear in full by default. Tick <strong>Hide commands and plugin arguments</strong> — or pass <code>--redact-commands</code> on the CLI — before sharing.</p>\n<p>Rotating logs keep three files, up to 2 MB each. Startup logs help identify where a freeze occurred.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"device-tuning\">Device tuning<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-0#device-tuning\" class=\"hash-link\" aria-label=\"Direct link to Device tuning\" title=\"Direct link to Device tuning\" translate=\"no\">​</a></h2>\n<p>Use the Web UI tuning panel or <code>modelOverrides</code> in <code>settings.json</code> to adjust images, communication, and key mapping. Device identity and driver selection stay fixed.</p>\n<p>Rotation, image fit and pad fill sit under <strong>Layout</strong>; size, quality and byte limit under <strong>Image</strong>. Values apply to every unit of that model and take effect on reconnect.</p>\n<video autoplay=\"\" loop=\"\" muted=\"\" playsinline=\"\" width=\"600\" aria-label=\"Opening DeckBridge settings and expanding the device tuning panel\"><source src=\"/DeckBridge/assets/medias/webui-device-tuning-tour-afbf8b18055c2886a19ad0368e403004.webm\" type=\"video/webm\"><source src=\"/DeckBridge/assets/medias/webui-device-tuning-tour-68dcf736ad270cdd76e8cfc76cbeebc9.mp4\" type=\"video/mp4\"></video>\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-device-tuning-9462c18731b24bfce9888f9bb0575929.png\" alt=\"The device tuning panel in DeckBridge settings, light theme\" width=\"454\">\n<img src=\"https://lukasmega.github.io/DeckBridge/assets/images/webui-device-tuning-dark-b5ee313dd6996276033b34befcc12689.png\" alt=\"The device tuning panel in DeckBridge settings, dark theme\" width=\"454\">\n<p>If tuning causes problems, press <strong>Reset</strong> — or restart with <code>DECKBRIDGE_NO_OVERRIDES=1</code> to ignore saved overrides for the session.</p>\n<p>See <a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/troubleshooting\">troubleshooting</a> for details.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"device-and-platform-fixes\">Device and platform fixes<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-0#device-and-platform-fixes\" class=\"hash-link\" aria-label=\"Direct link to Device and platform fixes\" title=\"Direct link to Device and platform fixes\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">macOS: device discovery recovers after unplugging and reconnecting.</li>\n<li class=\"\">AKP153E: stable discovery and corrected icon dimensions.</li>\n<li class=\"\">Stream Deck MK.2: corrected splash rotation and key offsets.</li>\n<li class=\"\">More reliable device tuning reloads.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"releases\">Releases<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-0#releases\" class=\"hash-link\" aria-label=\"Direct link to Releases\" title=\"Direct link to Releases\" translate=\"no\">​</a></h2>\n<p>Release files are scanned for malware. VirusTotal links appear in release notes. Windows and macOS installers build faster.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"next-release\">Next release<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-14-0#next-release\" class=\"hash-link\" aria-label=\"Direct link to Next release\" title=\"Direct link to Next release\" translate=\"no\">​</a></h2>\n<p>Deckbridge will connect one deck by default, then stop USB scanning. Enable <code>\"multiDeck\": true</code> in Settings to connect another. Disabling it disconnects extra decks.</p>\n<p><a href=\"https://github.com/lukasMega/DeckBridge/releases/tag/deckbridge-v0.14.0\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Full changelog and downloads</a></p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/v0-14-0",
            "title": "deckbridge 0.14.0",
            "summary": "Deckbridge 0.14.0 brings faster image transfers and USB discovery, easier diagnostics, and device tuning.",
            "date_modified": "2026-09-17T00:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Release",
                "Devices",
                "Docs"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/v0-10-0",
            "content_html": "<p>Deckbridge 0.10.0 adds tested support for Fifine AmpliGame D6 hardware revision 2. It also refreshes dependencies and documentation.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"highlights\">Highlights<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-10-0#highlights\" class=\"hash-link\" aria-label=\"Direct link to Highlights\" title=\"Direct link to Highlights\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">Adds Fifine AmpliGame D6 support, tested with real revision 2 hardware.</li>\n<li class=\"\">Updates HID support and build tooling.</li>\n<li class=\"\">Improves documentation rendering and development setup.</li>\n<li class=\"\">Resolves several docs-site dependency advisories.</li>\n</ul>\n<p>Full changelog and downloads: <a href=\"https://github.com/lukasMega/DeckBridge/releases/tag/deckbridge-v0.10.0\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">deckbridge-v0.10.0</a></p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/v0-10-0",
            "title": "deckbridge 0.10.0",
            "summary": "Deckbridge 0.10.0 adds tested support for Fifine AmpliGame D6 hardware revision 2. It also refreshes dependencies and documentation.",
            "date_modified": "2026-09-11T00:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Release",
                "Devices"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/device-comparison-docs",
            "content_html": "<p>New comparison guidance makes supported Stream Deck-compatible hardware easier to evaluate before setup.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"what-changed\">What changed<a href=\"https://lukasmega.github.io/DeckBridge/blog/device-comparison-docs#what-changed\" class=\"hash-link\" aria-label=\"Direct link to What changed\" title=\"Direct link to What changed\" translate=\"no\">​</a></h2>\n<p>Device documentation now brings models, controls, and known behavior together. Readers can compare hardware first, then continue directly into setup instructions.</p>\n<p>Start with <a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/devices\">supported devices</a>, then follow <a class=\"\" href=\"https://lukasmega.github.io/DeckBridge/getting-started\">getting started</a> when hardware is ready.</p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/device-comparison-docs",
            "title": "Choosing supported hardware",
            "summary": "New comparison guidance makes supported Stream Deck-compatible hardware easier to evaluate before setup.",
            "date_modified": "2026-09-10T00:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Docs",
                "Devices"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/v0-9-3",
            "content_html": "<p>Deckbridge 0.9.3 fixes tray detection when Web UI runs from its sidecar. It also modernizes project tooling.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"highlights\">Highlights<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-9-3#highlights\" class=\"hash-link\" aria-label=\"Direct link to Highlights\" title=\"Direct link to Highlights\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">Reports tray availability correctly from Web UI sidecar.</li>\n<li class=\"\">Migrates TypeScript and docs workspaces to pnpm.</li>\n<li class=\"\">Pins dependencies and adopts TypeScript 7.</li>\n<li class=\"\">Hardens release automation.</li>\n</ul>\n<p>Full changelog and downloads: <a href=\"https://github.com/lukasMega/DeckBridge/releases/tag/deckbridge-v0.9.3\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">deckbridge-v0.9.3</a></p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/v0-9-3",
            "title": "deckbridge 0.9.3",
            "summary": "Deckbridge 0.9.3 fixes tray detection when Web UI runs from its sidecar. It also modernizes project tooling.",
            "date_modified": "2026-08-28T00:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Release"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/v0-9-0",
            "content_html": "<p>Deckbridge 0.9.0 shrinks its embedded txiki.js runtime from 6.4 MB to 2.4 MB. Linux releases also gain broader compatibility.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"highlights\">Highlights<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-9-0#highlights\" class=\"hash-link\" aria-label=\"Direct link to Highlights\" title=\"Direct link to Highlights\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">Reduces embedded runtime size by more than half.</li>\n<li class=\"\">Builds Linux x86_64 releases on Ubuntu 24.04.</li>\n<li class=\"\">Fixes compatibility with older glibc environments.</li>\n<li class=\"\">Refreshes CI actions and docs dependencies.</li>\n</ul>\n<p>Full changelog and downloads: <a href=\"https://github.com/lukasMega/DeckBridge/releases/tag/deckbridge-v0.9.0\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">deckbridge-v0.9.0</a></p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/v0-9-0",
            "title": "deckbridge 0.9.0",
            "summary": "Deckbridge 0.9.0 shrinks its embedded txiki.js runtime from 6.4 MB to 2.4 MB. Linux releases also gain broader compatibility.",
            "date_modified": "2026-08-19T00:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Release"
            ]
        },
        {
            "id": "https://lukasmega.github.io/DeckBridge/blog/v0-8-2",
            "content_html": "<p>Deckbridge 0.8.2 concentrates on safer dependencies and more dependable delivery workflows.</p>\n<!-- -->\n<h2 class=\"anchor anchorTargetStickyNavbar_l2Jh\" id=\"highlights\">Highlights<a href=\"https://lukasmega.github.io/DeckBridge/blog/v0-8-2#highlights\" class=\"hash-link\" aria-label=\"Direct link to Highlights\" title=\"Direct link to Highlights\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">Updates Rust and docs-site dependencies.</li>\n<li class=\"\">Addresses dynamic method-call validation.</li>\n<li class=\"\">Expands Dependabot coverage to GitHub Actions.</li>\n<li class=\"\">Modernizes artifact and Pages deployment actions.</li>\n</ul>\n<p>Full changelog and downloads: <a href=\"https://github.com/lukasMega/DeckBridge/releases/tag/deckbridge-v0.8.2\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">deckbridge-v0.8.2</a></p>",
            "url": "https://lukasmega.github.io/DeckBridge/blog/v0-8-2",
            "title": "deckbridge 0.8.2",
            "summary": "Deckbridge 0.8.2 concentrates on safer dependencies and more dependable delivery workflows.",
            "date_modified": "2026-07-31T00:00:00.000Z",
            "author": {
                "name": "Lukas",
                "url": "https://github.com/lukasMega"
            },
            "tags": [
                "Release"
            ]
        }
    ]
}