Back to FocusLock

Changelog

What's new

A running log of every meaningful change to the FocusLock app and website. Newest first.

Family Controls — closed beta

  • The thing the 1.0.26 changelog promised. A parent on one machine can hard-lock specific apps and websites on a child's machine, at any time, from anywhere. Cloud-synced rules, real-time push, anti-bypass enforcement on the child side.
  • How it works. Parent signs up on their own machine, generates a 6-digit pairing code, enters it on the child's machine. From then on, the parent's dashboard shows the child's device with a live online dot, a block-now form (apps + domains), an audit log of what's happened, and an emergency-unblock button when something gets stuck.
  • The threat model FocusLock can actually defend. Killing the daemon (auto-restart watchdog), editing the family-rule cache (HMAC-signed, tamper-detected), rebooting into Safe Mode (Windows registers the service to start there too), uninstalling via Settings → Apps (now requires explicit parent authorization with a 15-minute window from inside FocusLock), and — opt-in — renaming a blocked binary (Windows Firewall blocks per-EXE-path, macOS pfctl blocks per-IP when daemon's been offline > 5 minutes).
  • The threat model FocusLock can't. A kid with administrator rights, a Linux USB boot, or BIOS access defeats all of this in minutes. The parent dashboard surfaces this directly — it now enumerates every local administrator account on the device by name with platform-specific instructions for demoting them. Nothing else FocusLock does matters until that step is done.
  • Closed beta. Free during the beta, then ~$5/mo per family for the hosted cloud once it stabilizes. Single-device FocusLock stays free forever. The full backend is open-source under the same GPL repo, so anyone can self-host their own family server and stay free that way too. Beta details + setup guide →

"No turning back" confirmation before Hardcore sessions

  • The Hardcore toggle was a one-click flip, which felt too casual for what it actually does — start a session you can't end early no matter what. Now there's a deliberate confirmation step between clicking Start and the session actually beginning: a modal spells out what's about to happen (Stop is disabled, closing the app doesn't end it, killing the daemon doesn't end it, only the timer does), and you have to type LOCK ME IN to confirm.
  • Quick-Start chips (the one-tap launchers for your saved profiles) still apply the gate when the profile is Hardcore — there's no shortcut around it. Starting a non-Hardcore session is unchanged.

Hardcore mode is now a one-tap toggle on the Dashboard

  • Before, you had to create a dedicated "Hardcore" profile to use Hardcore mode (the no-early-stop variant). That meant if you just wanted to lock in one quick session without thinking ahead, the only path was through a multi-step setup. Now the toggle lives directly on the Dashboard start screen, right below the duration picker.
  • Flip it on → session runs the full duration with no escape hatch. Flip it off → you can stop anytime. It pre-fills from your selected profile's setting, so existing Hardcore profiles still behave the same way; you can also override either direction before starting.
  • Same daemon logic as before — Hardcore mode is enforced by the background daemon, not the UI, so killing the app or rebooting doesn't end the session early.

Renamed "Parent controls" → "Settings lock"

  • The PIN-gated settings feature shipped yesterday has always been about locking your own settings so you can't disable FocusLock when willpower fails — single device, single user. Calling it "Parent controls" implied a parent-on-one-device-controlling-a-child-on-another setup that doesn't actually exist. The label was misleading, so it's now Settings lock with copy that's honest about what it does. Same PIN, same recovery key, same audit log — only the labels changed.
  • Real cross-device parental controls is a separate upcoming feature. A future release will let a parent log in on their own machine and hard-lock specific apps on a child's machine at any time, with proper anti-bypass on the child side. That's a multi-week build, not a label tweak — keep an eye out.

Parental controls — lock settings behind a PIN

  • You can now set a 4-digit PIN in Settings → Parent controls that gates every settings change behind it — profile edits, block list changes, removing a block — all prompt for the PIN before they apply. Useful if you want to set up FocusLock for someone else (a kid, yourself-in-the-past, a study group) and prevent the obvious workaround of just turning it off when willpower fails.
  • A 16-character recovery key is shown once when you set the PIN — save it somewhere safe. It's the only way to clear the PIN if you forget it. Every PIN action (set, unlock, failed attempt, recovery-key reset) goes into a local audit log you can review later.
  • Same logic ships on Windows and macOS, enforced inside the background daemon — so the lock isn't a UI sticker you can bypass by editing a file.

Site streamlined — shorter, clearer, less padding

  • Cut five sections that didn't earn their place: the duplicate stats bar (info was already in the hero), the "built for everyone" persona row, the academic studies section, the head-to-head comparison table, and the hero app mockup. The landing page is now about a third shorter and tells a tighter story.
  • The remaining flow: headline → how it works → features → reviews → the story behind FocusLock → open source → FAQ → support → final CTA.

Installer now elevates itself — no more right-click

  • The Windows installer used to silently fail to register the background daemon if you double-clicked it normally — you had to remember to right-click and pick Run as administrator. From v1.0.24 the installer triggers the UAC prompt itself on launch, so any user can double-click and just click Yes on the dialog. The daemon registers and starts automatically.

Auto-update actually works now (it didn't before)

  • Every release from v1.0.18 through v1.0.22 had a one-character typo in the public key baked into the app. Releases were signed correctly by the matching private key, but the installed app verified against a corrupted pubkey — so every "Update available" notification you ever saw failed silently behind the scenes. Fixed: the pubkey in the config now matches the key the releases are signed with. If you're on v1.0.18-v1.0.22, you need to download v1.0.23 (or later) once manually — but every future auto-update will install for real.

Daemon reliability — four bugs fixed

  • The background daemon (the part that enforces blocks at the OS level) had four separate bugs that combined to break the connection between the app and the daemon on fresh installs:
    • The SQLite library used for storing focus profiles wasn't compatible with single-file deployment — daemon crashed instantly at startup.
    • The daemon's signing key file had a permission setting so strict that the daemon couldn't read its own key on subsequent runs.
    • The IPC pipe (how the app talks to the daemon) required an OS privilege that wasn't always available — pipe was never created.
    • After fixing the first three by switching SQLite libraries, the new library's native code couldn't be loaded from a single-file bundle — another instant crash.
  • All four are now resolved. The daemon connects reliably on a fresh v1.0.22+ install.

Auto-update signing fixed

  • Auto-update actually works now. Earlier releases shipped without signature files, which Tauri's updater silently rejected on install. Rotated the updater keypair, wired the new key into CI, and verified end-to-end that signed updates now install. From v1.0.14 forward, future updates land automatically.

Achievement counter fix · CI resilience

  • Iron Will and Accountability achievements now actually unlock — they previously failed to count because the local tag used a random ID instead of the real session ID.
  • Release CI no longer gets blocked by transient cache-save failures on the GitHub Actions runner.

Visual redesign · command palette · achievements · intentions

  • Full visual redesign on a new Linear/Raycast-inspired design system — Inter typography, animated aurora background, film grain, gradient hero text, dramatic active-route glows.
  • Command palette (⌘K / Ctrl+K) — fuzzy-searchable command runner for sessions, navigation, theme toggle, and data export.
  • Achievements — 9 unlockable milestones with quiet unlock toasts and a full grid on Analytics.
  • Focus intentions — pre-session prompt persisted into the session log and shown on the active Dashboard.
  • Daily focus goal — configurable target with progress bar on the dashboard and sidebar, confetti when you hit it.
  • Smart block suggestions — one-click pills with favicons for the most-blocked sites, grouped by category.
  • Intercept page (the one you see when you try to visit a blocked site) rebuilt to match the new design, with a "what were you trying to do?" input that logs the attempt.
  • Onboarding rewritten as 4 steps: welcome → pick distractions → set goal → try a 5-min session.
  • Sidebar grouped into Configure / Insights with a live daily-progress widget at the bottom.

Auto-updates

  • FocusLock now checks for updates on launch and shows a small banner in the bottom-right when a new version is available — click Install now and the app downloads, installs, and restarts itself on the new version.
  • Updates are cryptographically signed and verified before install.
  • From this version onwards you'll never have to manually re-download — future releases come to you automatically.

Changelog page added

  • You're looking at it. New /changelog.html for tracking app releases and site updates in one place.

Site redesign — Freedom-style layout, dark palette

  • Refreshed the entire landing page: new Fraunces serif headlines, redesigned hero, hand-drawn step arrows, and a cleaner section rhythm.
  • Added a "Built for everyone" section showing who FocusLock is for — students, entrepreneurs, freelancers, parents, people with ADHD, and self-learners.
  • Added a Ko-fi donation section and Donate button in the nav.
  • Mobile nav now hides the download button and shows a desktop-only notice (FocusLock is a desktop app).
  • Final dark color palette applied across all components.

Daemon install reliability

  • Fixed an issue where the privileged daemon failed to install on first launch on some Windows setups (resolved by using the current executable path instead of the Tauri resource directory).

Windows daemon packaging fix

  • Fixed daemon installation on the new Windows package layout — the daemon binary is now staged correctly before the Tauri build.

Better downloads, hosting move

  • Download buttons now serve the installer directly instead of redirecting to GitHub — you stay on the site.
  • Added a Windows architecture picker modal (x64 / ARM64) so you don't have to guess.
  • Replaced the platform emojis with proper Windows and Apple SVG logos on download buttons.
  • Migrated hosting from Netlify to Vercel.

Reviews, newsletter, story

  • Added a live review system — leave a review right on the site, with AI moderation to keep things constructive.
  • Added an inline newsletter signup (Beehiiv-powered) for occasional updates about new features.
  • Added an "Our Story" section and a founder card so you know who built FocusLock and why.
  • Security hardening: stricter response headers, rate limiting on form endpoints, input sanitization.

New app icon

  • Replaced the app icon with a new converging-arrows design that matches the site branding.
  • CI/build improvements — macOS builds are now always unsigned (we no longer ship a signed/unsigned split), and all platform jobs run independently so one failure doesn't block the others.

Initial release

  • FocusLock launches for macOS and Windows — free and open source under GPL-3.0.
  • OS-level DNS blocking — every browser, no extension required.
  • App blocking by process name with a 2-second kill loop.
  • Friend Lock — generate a token, send it to a friend; only they can end the session early. SHA-256 hashed; you can't retrieve the original.
  • Hardcore Mode — cryptographically committed at session start; nothing ends it early.
  • Pomodoro engine with configurable work/break intervals.
  • Scheduled sessions via cron syntax — the daemon handles them even if the app is closed.
  • Focus analytics — streaks, weekly bar charts, focus score, 52-week heatmap.
  • Motivational intercept — your own message replaces blocked-site error pages.
  • Daemon runs as SYSTEM/root and starts before the desktop loads — closing or uninstalling the app doesn't stop active blocks.