Skip to content

Releases: abhiksark/unfocus

Unfocus v0.6.0-beta.2

Unfocus v0.6.0-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Aug 15:44
Immutable release. Only release title and notes can be modified.
962bd85

These prerelease builds are not notarized. macOS app bundles are ad-hoc signed rather than Developer ID-signed, and Windows installers are not code-signed. Verify downloads with SHA256SUMS and the GitHub build-provenance attestations.
The release also includes a CycloneDX SBOM and the bundled third-party notices.

  • Linux: X11 is qualified. APT archive metadata is signed; application binaries are unsigned. Wayland is unsupported.
  • macOS 11+: Preview, ad-hoc signed, and not notarized. Uses the system-provided AppKit and WebKit frameworks; multi-monitor behavior is not yet qualified.
  • Windows: Idle and fullscreen probes are implemented, but interactive multi-monitor qualification is pending.

Changes

Changed

  • macOS release notes, install guidance, and repository release policy now say
    exactly what ships: the app bundle is ad-hoc signed so its package signature
    can be verified locally, but it is still not Developer ID-signed or
    notarized, and first-launch Gatekeeper warnings still apply.

Fixed

  • Tauri macOS packaging now requests an explicit ad-hoc app-bundle signature
    instead of leaving the bundle in the linker-signed state. The packaged
    .app now binds Info.plist, seals resources, and passes strict deep
    codesign verification on Apple silicon.
  • Release automation now verifies the real Tauri-reported macOS .app bundle
    before artifacts are uploaded, so a linker-only macOS package cannot ship
    unnoticed again.

Unfocus v0.6.0-beta.1

Unfocus v0.6.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 Aug 13:24
Immutable release. Only release title and notes can be modified.
b0af175

These prerelease builds are not code-signed or notarized. Verify downloads with SHA256SUMS and the GitHub build-provenance attestations.
The release also includes a CycloneDX SBOM and the bundled third-party notices.

  • Linux: X11 is qualified. APT archive metadata is signed; application binaries are unsigned. Wayland is unsupported.
  • macOS 11+: Preview and unnotarized. Uses the system-provided AppKit and WebKit frameworks; multi-monitor behavior is not yet qualified.
  • Windows: Idle and fullscreen probes are implemented, but interactive multi-monitor qualification is pending.

Changes

Added

  • Added dedicated beta distribution channels: the beta APT suite and the
    unfocus@beta Homebrew cask. Existing alpha installs remain on their frozen
    channels until users explicitly migrate using the install-guide steps.
  • Optional cross-device break sync, off by default; the existing relative
    timer is unchanged while it is off. With sync enabled, breaks land on a
    shared wall-clock grid instead of counting from when the timer last
    started, so every device with a matching work duration, break duration,
    and grid offset rests at the same moment. No network is used; there are no
    accounts and no pairing, and devices never communicate. Work duration and
    break duration are ordinary settings fields and must be entered the same
    on every device; grid offset has no field of its own and is instead filled
    in automatically from each device's own clock the moment sync is turned
    on, so it only lines up between devices whose clocks were on the same UTC
    offset when sync was switched on; turn sync off and on again after a time
    change or a trip to re-derive it. Nothing detects a mismatch in any of the
    three, so compare the dashboard's break-times line on two devices to confirm
    they actually agree.

Changed

  • Replaced the generated SVG break landscape with a bundled first-party
    illustration and 4K delivery derivative, using golden-ratio placement, a
    static dawn, day, dusk, or night treatment selected from local time and held
    for the complete break, and one localized amber return fade with
    reduced-motion, higher-contrast, and constrained-crop fallbacks.
  • Centered the break message and assigned the reflective message, guidance,
    and countdown to distinct local Newsreader, system-sans, and monospace roles
    while preserving reduced-motion and higher-contrast behavior.
  • Downgrading to a build older than this one resets reminder settings to
    defaults, discarding the saved work duration and break duration.
    reminder-settings.json moves to schema v3 to carry the new sync fields
    above, and loading the file with this build rewrites it to v3 even when
    sync stays off. Older builds parse the file with deny_unknown_fields, so
    a v3 file is rejected outright; the repair path that runs on a rejected
    file then overwrites it with fresh defaults. This has always been how a
    schema bump behaves, but this is the first release where stepping back to
    an older build is a real possibility, so it is worth stating plainly: back
    up reminder-settings.json first if a rollback is possible and the saved
    durations matter.
  • With sync enabled, resuming from pause rejoins the shared grid instead of
    starting a fresh work interval, and taking a manual break no longer
    postpones the next scheduled break.
  • While it runs on macOS, Unfocus is intentionally tray and menu-bar only,
    with no Dock icon and no application menu. Reopen or focus the dashboard
    from the tray icon, which also carries the reminder controls and the quit
    action.
  • Hardened the shared overlay lifecycle on every platform. A break now builds
    every monitor's window before showing any of them, so a late failure cannot
    leave one display covered while the others are still loading. A failed
    overlay close is retried up to three times with a bounded backoff instead of
    being logged and abandoned, a sibling-close command that cannot be delivered
    immediately is retried rather than dropped, and a new break is refused while
    a previous run's cleanup is still outstanding.
  • Added tauri-nspanel as a macOS-only dependency, pinned to an immutable Git
    revision because no released crate provides the necessary Tauri 2 panel
    behavior. THIRD_PARTY_NOTICES.txt and the generated SBOM now record the
    complete locked Git identity and declared license of Git-sourced packages,
    which crates.io metadata does not supply.
  • Continuous integration now runs the locked Rust test suite on macOS instead
    of only a compile check.
  • Updated SvelteKit to 2.70.3, Bun types to 1.4.0, Svelte to 5.56.10, Vite to
    8.2.2, and the pinned Rust toolchain to 1.98.0; regenerated the lockfile and
    third-party notices.
  • Reworked History into a compact Monday-aligned calendar covering the newest
    90 local days. Fixed intensity levels represent confirmed active
    minutes, while zero activity and unavailable data remain distinct. Selecting
    a day reveals only that day's totals, hourly activity, and grouped break
    outcomes without streaks, scores, or timer controls.

Fixed

  • Break overlays on macOS did not reach other Spaces or cover full-screen
    applications. Each overlay is now a non-activating native panel at
    screen-saver level that joins every Space and acts as a full-screen
    auxiliary, so a break can cover each connected display without taking
    activation away from the app you were using. The panels stay above the layer
    the Quartz full-screen probe reads, so an overlay never classifies itself as
    the active full-screen window. macOS remains preview; this establishes no
    physical multi-monitor qualification.

Unfocus v0.5.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 16 Aug 06:05
Immutable release. Only release title and notes can be modified.
452443b

These early builds are not code-signed or notarized. Verify downloads with SHA256SUMS and the GitHub build-provenance attestations.
The release also includes a CycloneDX SBOM and the bundled third-party notices.

  • Linux: X11 is qualified. APT archive metadata is signed; application binaries are unsigned. Wayland is unsupported.
  • macOS: Preview and unnotarized. Multi-monitor behavior is not yet qualified.
  • Windows: Idle and fullscreen probes are implemented, but interactive multi-monitor qualification is pending.

Changes

Added

  • Added © 2026 Abhik Sarkar to the foot of the consumer dashboard, with only
    Abhik Sarkar linked. Explicitly activating the name asks the system browser
    to open the fixed https://abhik.ai address rather than navigating the
    dashboard away, and says so plainly if no browser could be opened. Unfocus
    itself still makes no application-originated runtime network call.
  • Kept raw Your day presence history on this device for at least 90 days,
    beyond the 24-hour live window the strip already shows. The existing
    activity-history.json file stays hot for the latest day, and segments that
    age out of it are archived into local activity-archive-<key>.json 30-day
    epoch chunks in the same config directory. This stays local-only like
    everything else in Unfocus, with no account and no network call. History
    fills forward only: compatible existing local data is preserved, but activity
    from before History was installed cannot be backfilled. Whole archive chunks
    expire together, so an older partial chunk can remain until its complete
    30-day block expires.
  • Added main-window-only range history commands for the consumer dashboard.
    get_activity_range returns bucketed activeMs, afkMs, and
    longestActiveMs values for caller-provided boundaries, and
    get_break_range returns chronological privacy-safe {atMs, kind} break
    outcomes for [start, end) queries up to 31 elapsed days.
  • Added a transient consumer History view exposing the newest 90 browser-local
    days as three newest-first 30-day pages. It follows the saved Day starts
    preference, loads on demand, shows activity and break outcomes together, and
    does not change the reminder timer, probes, or overlays.

Changed

  • Raised the break-outcome ledger's retention from 7 to at least 90 days and
    removed its fixed event cap, matching the activity history above.
    break-events.json is now bounded by the 90-day time window and keeps enough
    local break outcomes to back the history view as well as the existing day
    and week summaries. The old 512-event cap was a live defect: a 20-minute
    work interval can produce up to 72 scheduled breaks a day, and with
    natural-idle and fullscreen-suppress outcomes added in, the cap could
    already be reached inside the old 7-day window, silently undercounting the
    dashboard's week totals.

Unfocus v0.4.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Aug 08:48
Immutable release. Only release title and notes can be modified.
6e44f2c

These early builds are not code-signed or notarized. Verify downloads with SHA256SUMS and the GitHub build-provenance attestations.
The release also includes a CycloneDX SBOM and the bundled third-party notices.

  • Linux: X11 is qualified. APT archive metadata is signed; application binaries are unsigned. Wayland is unsupported.
  • macOS: Preview and unnotarized. Multi-monitor behavior is not yet qualified.
  • Windows: Idle and fullscreen probes are implemented, but interactive multi-monitor qualification is pending.

Changes

Supersedes the unpublished v0.3.1-alpha.1 draft. This public alpha includes all of that draft’s dashboard, accessibility, and release-integrity improvements.

Added

  • Added a full multi-platform install guide covering package
    selection, checksum and provenance verification, first-run defaults, local
    data and uninstall paths, build-from-source pins, and platform troubleshooting.
  • Added an elapsed-progress indicator to the consumer dashboard. It appears only
    during an active work interval and stays hidden while paused, during a break
    or preview, and whenever reminder status is unavailable.
  • Added a time axis to the Your day activity strip. Faint gridlines mark
    every fourth hour behind the bars, with the hour labeled beneath in the
    system clock format and the right edge marked now, so a bar can be traced
    to the time of day it covers.
  • Added a Day starts setting to the Your day summary. The chosen hour is
    marked with a stronger rule and a brighter label on the activity strip's time
    axis, so the day can be read from when it actually begins. The setting is kept
    on this device and never affects the break timer.
  • Added a public APT install path for Debian and Ubuntu alphas via
    abhiksark/unfocus-apt (apt install unfocus). The archive metadata at apt.abhik.ai is
    signed; application binaries remain unsigned.
  • Added slow, stepped drift and twinkle to the break scene's stars, with a
    10-18 second cadence and a dawn fade. Reduced-motion preferences stop the
    motion entirely.

Changed

  • Rebuilt the consumer dashboard as a quieter single column with plain sections,
    shared design tokens, system body fonts, sentence-case labels, and WCAG AA
    contrast at rendered text sizes. The break screen keeps its layout and uses
    the shared display font token.
  • Described Unfocus as both a break app and a local reflection surface in the
    README and package metadata. Your day and break outcomes remain
    observe-only.
  • Clarified Ubuntu as the primary qualified Linux install path: README and
    docs/install.md put the signed APT repo
    (apt.abhik.ai) first, separate package trust from
    macOS/Windows application code signing, and document APT upgrade and privacy
    notes for that path.
  • Updated the README consumer dashboard screenshot to the single-column layout
    with the Your day time axis and Day starts selector. Break-screen media
    remains unchanged.
  • Updated the frontend toolchain to Vite 8.2.1, svelte-check 4.7.5, the Svelte
    Vite plugin 7.3.0, and Node type definitions 26.2.0, and regenerated the
    dependency license notices.

Fixed

  • Fixed SBOM generation when a dependency update leaves two copies of a package
    in the lockfile. Each dependency now resolves the way the runtime would, so a
    nested copy serves its own owner while everything else sees the root copy.
  • Relayed Homebrew release dispatch through the default branch so the
    environment-restricted tap automation can receive alpha publication events.

Security

  • Overrode the transitive nanoid dependency to 3.3.18 to remediate its
    advisory, and regenerated the lockfile and third-party notices.

Unfocus v0.3.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Aug 06:10
Immutable release. Only release title and notes can be modified.
ea6f311

These early builds are not code-signed or notarized. Verify downloads with SHA256SUMS and the GitHub build-provenance attestations.
The release also includes a CycloneDX SBOM and the bundled third-party notices.

  • Linux: install the .deb, .rpm, or .AppImage. X11 only; Wayland is unsupported.
  • macOS: right-click the app and choose Open the first time. Multi-monitor behavior is not yet qualified.
  • Windows: idle and fullscreen probes report as unavailable.

Changes

Added

  • Added an observe-only Your day summary on the consumer dashboard: rolling
    last-24-hour active and away totals, longest continuous stretch, deep-block
    count, and a half-hour presence strip derived from the idle probe without
    keylogging. Probe failures freeze classification and never change the break
    timer.
  • Persisted activity segments locally across restarts (atomic JSON next to app
    settings, pruned to the rolling window). Write failures keep the previous
    complete history and leave the reminder timer unchanged.
  • Added a local break-event ledger for scheduled shown, natural idle, fullscreen
    suppress, and manual take-break outcomes, with calm dashboard counts for the
    last day and week.
  • Adapted scheduled break presentation from continuous activity and AFK history
    without changing the pure timer: after a long active stretch a short micro-idle
    no longer natural-credits; long AFK still prefers quiet natural credit when
    idle; fullscreen is never overridden.
  • Credited a due break as a natural rest when the user has already been idle for
    the break duration, instead of running a silent break phase.
  • Added pure lifecycle and accessibility contract tests that pin release-tier
    evidence rules (timer stalls, multi-monitor topology policy, and a11y
    presentation) without inventing platform qualification.
  • Implemented Windows idle (GetLastInputInfo) and foreground fullscreen
    probes (window outer rect vs monitor rcMonitor). Windows remains an early
    build until interactive qualification is recorded.
  • Scaffolded an opt-in wayland-sway Cargo feature for a Sway 1.11+ Wayland
    probe candidate (Sway IPC fullscreen, ext_idle_notifier_v1 input-idle,
    positive runtime gates). Default packages still treat Wayland as unsupported;
    no multi-monitor or release qualification is claimed.

Changed

  • Polished the consumer Your day and Break outcomes card: clearer
    loading, empty, and error copy; muted zero counts; strip legend; less
    redundant captions. Still observe-only with no timer control.
  • Documented platform status honestly for this alpha: Linux X11 remains the
    only qualified backend; macOS is preview without multi-monitor acceptance;
    Windows packages include probes but interactive multi-monitor qualification
    is pending; Wayland is unsupported in default packages; packages are not
    code-signed or notarized.

Unfocus v0.2.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Aug 11:14
Immutable release. Only release title and notes can be modified.
ec34a8b

These early builds are not code-signed or notarized. Verify downloads with SHA256SUMS and the GitHub build-provenance attestations.
The release also includes a CycloneDX SBOM and the bundled third-party notices.

  • Linux: install the .deb, .rpm, or .AppImage. X11 only; Wayland is unsupported.
  • macOS: right-click the app and choose Open the first time. Multi-monitor behavior is not yet qualified.
  • Windows: idle and fullscreen probes report as unavailable.

Changes

Added

  • Added a generated, monochrome system-tray icon with platform-specific light
    and template variants.
  • Added single-instance activation so reopening Unfocus reveals the existing
    dashboard without starting another tray or reminder timer.
  • Added a live tray status row and native controls for a bounded thirty-minute
    pause, resume, and an immediate configured break, updated at meaningful
    minute and state boundaries.
  • Added the same reminder status and controls to the dashboard. Pause expiry is
    stored locally, remains bounded across restarts, and resumes into a fresh
    work interval.
  • Added a private vulnerability-reporting policy.

Changed

  • Replaced the diagnostics-first startup screen with a scene-led consumer
    dashboard. The previous technical dashboard remains available through the
    timing editor's Advanced section, and the selected view is remembered
    locally.
  • A known tray setup failure now appears in local diagnostics and keeps the
    dashboard reachable; closing the dashboard exits instead of hiding an
    unreachable background reminder.
  • Updated the frontend toolchain to Vite 8, TypeScript 7, and the Svelte Vite
    plugin 7, and updated x11rb to 0.14.
  • Updated the GitHub Actions used for checkout, artifact transfer, and build
    provenance.
  • Improved SBOM platform metadata and regenerated dependency license notices.
  • Clarified issue forms for current package and platform-support reporting.
  • Documented the dev-first branching strategy, release workflow, download
    choices, platform status, and contributor checks.
  • Expanded CI and release Rust tests to cover all targets and features.
  • Normalized the embedded Debian package version so prereleases upgrade in
    Debian's intended alpha, beta, release-candidate, and stable order.
  • Recorded Linux tray acceptance on Ubuntu 22.04.5 GNOME 42.9 X11 with
    Ubuntu AppIndicators 42-2~fakesync1: the AppImage ran on the host, while the
    Debian package was installed in Debian 12 and the RPM in Fedora 43 against
    that same physical two-display X11 session. Wayland remains unsupported.

Unfocus v0.1.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Aug 09:47
Immutable release. Only release title and notes can be modified.

These early builds are not code-signed or notarized. Verify downloads with SHA256SUMS and the GitHub build-provenance attestations.
The release also includes a CycloneDX SBOM and the bundled third-party notices.

  • Linux: install the .deb, .rpm, or .AppImage. X11 only; Wayland is unsupported.
  • macOS: right-click the app and choose Open the first time. Multi-monitor behavior is not yet qualified.
  • Windows: idle and fullscreen probes report as unavailable.

Changes

  • Name artifacts for the release they belong to
  • Take the release id from the write instead of reading it back
  • Accept a prerelease label on a release tag
  • Look releases up by listing so drafts are visible
  • Fail closed in the release and audit gates
  • Scope overlay events to one run and stop reporting zero displays
  • Document the new checks and release pipeline
  • Pin toolchains and gate dependencies, licenses, and releases
  • Drop the unused moon halo from the scene
  • Drive the overlay from native ticks and report probe state honestly
  • Run scheduled breaks from a cached-probe reminder loop
  • Harden the Linux spike container runner
  • Create the release draft once and drop the removed macOS runner
  • Add version sync script and CI version guard
  • Add issue forms for bugs, features, and platform reports
  • Document macOS support and add build status badges
  • Report unsupported probes as unsupported rather than pending
  • Add macOS idle and fullscreen probes via Quartz
  • Declare @types/node for vite config typing
  • Add CI checks and tag-triggered release builds
  • Tighten agent guidance with directory map and verification gates
  • Add README, license, and screenshots
  • Add contributor guidance for agents
  • Add containerized X11 development runner
  • Add synchronized break overlay and diagnostics dashboard
  • Add generated Ridgeline night scene
  • Add tray, overlay windows, and X11 idle and fullscreen probes
  • Scaffold Tauri 2 app with SvelteKit frontend