Skip to content

Releases: itabajah/duja

v0.1.6

Choose a tag to compare

@github-actions github-actions released this 08 Aug 13:20
b8a17aa

Windows is the released platform. macOS and Linux ship as previews.

Windows: duja-setup-<version>.exe and duja-<version>-windows-x64.zip
are the released build. Developed and QA'd on real hardware.

macOS (.dmg) and Linux (.tar.gz) are unverified previews. They
are built, staged, checksummed, minisigned and provenance-attested by the same
pipeline as the Windows artifacts, and no one has ever run either one on the
hardware it targets
. Every backend on those two platforms is verified by
types, pure tests, CI and cross-referenced primary sources only. Expect
defects that no amount of that catches.

On Linux, run dujactl doctor first. It prints the display server it
found, whether overlay dimming and gamma dimming are available this session,
and the displays it can see, so a missing i2c-dev module or an unusable
compositor says so instead of looking like a hang. Two things it does not
tell you: whether your desktop has a StatusNotifierItem host (without one
the tray icon simply never appears, and nothing reports that), and anything
about macOS, where the report is display information only.

If a screen is left dim or discoloured, how you recover depends on the
transport, and it is worth reading before you need it:

  • X11: duja --restore resets the gamma on every CRTC of your X screen.
  • Wayland: duja --restore has nothing to do and says so. It is not
    broken - a wlr-gamma-control ramp lives only as long as the process that
    set it, so killing Duja is the recovery, and the compositor puts the
    output back by itself even after a hard kill.
  • macOS: duja --restore is the only route, and there is no automatic
    crash recovery behind it - the crash marker the other platforms write is
    not written there. Both binaries live inside
    Duja.app/Contents/MacOS/, so neither is on your PATH without a symlink.

Reports are the point of shipping these. A
quirk report
from a real Mac or a real Linux desktop is what moves those platforms off
preview. See SECURITY.md
for how to verify a download first.

[0.1.6] - 2026-08-08

Added

  • app,dujactl: Open real macOS displays instead of stubbing them out (#90)
  • platform,app: MacOS tray anchor geometry and the anchor-unit contract (#91)
  • platform,app: Give the tray's OS hooks a macOS half (#99)
  • app: Add the macOS gamma sink (#100)
  • app: Run the tray on macOS (#102)
  • xtask,ci: Package a universal Duja.app and ship it in a DMG (#104)
  • core,panel,ddc,app: Give a macOS built-in panel its geometry (#105)
  • core,ddc,panel,app: Drive linux monitors and backlights (#116)
  • platform: Give linux an event pump, autostart and a browser (#118)
  • dimmer: Decide what a linux session can dim, without naming one (#119)
  • ddc,dujactl: Tell a linux user why their monitors are missing (#120)
  • dimmer,panel,app: Give a linux display the rectangle it sits on (#122)
  • dimmer: Give an x11 session a real overlay (#123)
  • dimmer,app: Give an x11 session the sub-floor gamma channel (#124)
  • dimmer: Put a layer-shell overlay on the wire (#130)
  • dimmer: Give a wayland session its own gamma channel (#131)
  • platform: Give the linux tray flyout a real x11 anchor (#132)
  • app: Give linux the tray it has been building toward (#136)
  • xtask: Give linux a shippable artifact (#140)
  • app: Build the soak harness two perf budgets have cited since P4 (#146)

Changed

  • app: Split the tray.rs god-module (#81)
  • platform,app: Hoist the tray geometry into duja-platform
  • app: Build the tray once the event loop is running (#94)
  • core,ui,app: Drain the p6 checkpoint debt (#111)
  • app: Give the tray a seam before it gains a second backend (#134)

Documentation

  • status: Record the structural wave and refresh the test count (#83)
  • status: Record P6 wave 2 and the two live-install defects (#97)
  • ddc: Record why the macos edid skip must not consume a service (#108)
  • Correct six release and support claims the p6 gate falsified (#110)
  • status: Record the p6 gate results and close the phase (#112)
  • adr: Decide the two reserved linux ADRs, and a third P7 forces (#115)
  • deps: Decline x11rb 0.14 and record it as ADR-0023 (#129)
  • Split the two files that had grown past being readable (#135)
  • Re-triage what wave 5 changed, and drain the row it was told to (#137)
  • Close p7 with the gate run and both releases held (#142)
  • Plan p8, and say up front that v1.0.0 will be held (#143)
  • Ship the ports as previews, and label them where a user looks
  • Land what ADR-0024 made false, and shed 244 lines from plan.md

Fixed

  • platform: Latch the macOS pump stop so a pre-run request is not lost
  • app: Make --restore work on macOS, and say what it actually resets
  • dujactl: Merge the built-in panel instead of listing it twice (#92)
  • dujactl: Make doctor --report emit the report the docs promise (#95)
  • dimmer,app: Fall back to overlay when Windows refuses a gamma ramp (#96)
  • ddc,app: Stamp the mirror surface, not the display, on macOS (#98)
  • dimmer,ui,app: Gate both gamma captions on the OS that has the limit (#103)
  • ddc: Frame apple silicon ddc requests the way displays expect (#106)
  • app: Stop a stale panic ack from greying a healthy display (#107)
  • app: Re-assert gamma after the OS resets it (#109)
  • platform: Harden the unix socket takeover and its state directory (#114)
  • dimmer: An x11 overlay with no compositor is a black screen (#121)
  • docs,ci: Repair 140 mojibake characters and a false lint rationale (#133)
  • ui: A linux user was being told about a macos hardware quirk (#138)
  • platform: Bound the x11 anchor now that it runs on the ui thread (#139)
  • app: A clean quit no longer flattens gamma Duja never touched (#147)
  • core: SECURITY.md promised a config size cap that never existed (#148)
  • app: The soak printed to a console a release build does not have (#149)

Performance

  • app: Recover 3.9 MB of binary, and gate it so it stays recovered (#144)

Testing

  • app,ci: Pin the throttle contract and add an e2e smoke job (#82)
  • dimmer: Dedup the live overlay walk and state its precondition (#93)
  • app: Size the engine waits for a stalling ci runner (#113)
  • app: Run D-102's experiment, and stop copying the id lookup

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 26 Jul 00:43
0760060

[0.1.5] - 2026-07-26

Documentation

  • Warmer hero copy, real screenshots, no em dashes in public docs (#72)
  • Add post-1.0 future-vision brainstorm of monitor capabilities (#79)

Fixed

  • ddc,app: Keep a live monitor from sticking as software-only (#78)

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 19 Jul 19:01
e90435c

[0.1.4] - 2026-07-19

Added

  • ui,app: Dark rebrand — remade mark, exe icon, hero, and social card (#70)

Fixed

  • core,ui: Model software-only as a flag, not a display kind (#67)
  • app: Merge mirrored displays into one control (#66)

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 18 Jul 23:05
daad78e

[0.1.3] - 2026-07-18

Fixed

  • ddc: Surface the internal panel via DDC when WMI can't (#64)

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 18 Jul 20:03
a76ebe5

[0.1.2] - 2026-07-18

Fixed

  • ui: Preserve per-monitor offsets in Link all (#57)
  • ddc: Classify internal panels and dedup against WMI (#58)
  • ui: Make linked-slider fan-out instant instead of gliding (#60)
  • engine: Downgrade no-hardware displays to software-only (#59)
  • ddc: Enumerate every physical panel in mirror mode (#61)
  • ddc,engine: Bound the mirror probe and clear software-forced on reattach (#62)

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 17 Jul 19:41
40cc044

[0.1.1] - 2026-07-17

Fixed

  • dujactl: Reconnect per request so set all works over ipc (#46)
  • ci: Harden the release pipeline and document the runbook (#47)
  • app: Make worker lifecycle safe on detach, open-failure, and quit (#48)
  • app: Four correctness fixes in the tray/runtime glue (#51)
  • ui: Stop the drag-retarget, reset, and grip bugs in the flyout/settings (#52)
  • core: Key the serial-less display id on the EDID base block only (#50)
  • dimmer: Stop overlay leaks, preserve the crash marker, bound the UI wait (#49)
  • app: Keep the HDR gamma verdict live and preserve the marker on quit (#53)
  • ddc: Floor a hardware-reported continuous max at 1; pin the verify tolerance (#54)
  • platform,app: Verify the pipe server's identity; add an installer guard (#55)

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 16 Jul 15:43
06d166a

[0.1.0] - 2026-07-16

Added

  • core: Domain model wave 1 — trait, identity, continuum, debounce, fakes (#4)
  • core: Manager, sync groups, config, caps parser, quirks db, fuzz targets (#5)
  • platform: Windows event pump for display/power/session events (#7)
  • panel,ipc: Wmi internal-panel backend + ipc protocol and framing (#8)
  • app: Concurrency engine — controller actor, workers, watchdog (#9)
  • ddc: Windows dxva2 backend with transport-abstracted controller (#10)
  • app,ctl: P3 integration — headless assembly, stress harness, dujactl dev driver (#11)
  • ui: Slint flyout, pure view-models, and ci gui deps (#13)
  • dimmer: Windows overlay dimmer, gamma guard, crash marker (p4) (#14)
  • app: Assemble the tray application — continuum, dimmer wiring, config, tray+flyout (#15)
  • app,core,ddc,ctl: Global hotkeys and vcp 0x60 input switching (#17)
  • ipc,platform,app,ctl: Hardened named-pipe transport and dujactl over ipc (#18)
  • ui,app,platform,core: Settings window, autostart, opt-in update check (#19)
  • panel: Macos displayservices backend for internal panels (#21)
  • platform: Unix-domain-socket ipc transport for macos/linux (#22)
  • dimmer: Add macos overlay + gamma backend (#23)
  • ddc: Macos ddc/ci backend — pure codec, ioavservice + intel i2c (#25)
  • platform: Macos backend — pump, single-instance, autostart (#24)
  • ui: Premium redesign + dimming toggle, close, functional hotkeys (#28)
  • core: Perceptual brightness continuum (v2) (#33)
  • app: Wire the perceptual continuum + calibration UI (#34)
  • app: Reflect external brightness changes onto the slider (#35)
  • ui: Premium slider — two markers, glide, bubble, gradient (#36)
  • ui: Ruby theme, flyout header/scroll, resizable settings (#39)
  • ui: Accent colour themes and one shared icon for tray and taskbar (#41)
  • app: Static faceted-gem whirlpool icon for the executable (#42)
  • app: Ship v0.1.0 with installer, signed releases, smart updates (#43)

Documentation

  • adr: Record P1 spike verdicts — own ddc backend, software renderer (#3)
  • status: Record p6 wave-1 merge and live hardware qa (#26)
  • status: Sync test count and record the UI overhaul merge (#40)
  • security: Publish the minisign public key for v0.1.0 (#44)

Fixed

  • ci: Satisfy cargo-deny wildcard ban for internal path deps
  • core: Close P2 gate findings — contract sanity, sync-offset persistence, v0 migration (#6)
  • app,panel,core: Close p3 gate findings — restore, debounce, com affinity, ack gating, twin routing (#12)
  • app,ui,dimmer: Close p4 gate findings — throttle final-value, gamma wiring (#16)
  • platform,app: Close p5 gate findings and record the gate results (#20)
  • ui: Close five P0 live-QA defects in the tray app (#27)
  • ui: Root-cause fractional-DPI layout + close four live-QA regressions (#29)
  • ui: Round-4 - no partial paint, no launch dim, slim pill, borders (#30)
  • ui: Present the full window on every show (first-paint bug) (#32)
  • ci: Sign releases with pinned minisign 0.12, not choco 0.8.0 (#45)