Show HN: Unfucked – version every change between commits - local-first
Unfudged (or unf) is a newly launched, local-first background daemon that acts as a continuous filesystem flight recorder, automatically snapshotting every text file save. It offers a critical safety net for developers, particularly against the rapid, uncommitted changes made by AI agents or accidental rm -rf commands, going beyond what traditional VCS or IDE-specific tools provide. The community immediately recognized its utility, validating a widespread pain point of losing intermediate work and praising its robust, always-on recovery capabilities.
The Lowdown
Unfudged, or unf, is a novel local-first background daemon designed to continuously record every save of text files in specified directories. Conceived after the author experienced significant data loss due to an AI agent overwriting uncommitted work, unf aims to provide an always-on "filesystem flight recorder" that allows users to rewind any file to any point in time, even without explicit commits.
- Core Functionality: The tool operates as a background daemon, leveraging FSEvents on macOS and inotify on Linux to watch designated directories. It snapshots file contents on every save, hashing them with BLAKE3 and storing them in an object store, with metadata managed in SQLite.
- Problem Solved: It specifically addresses the vulnerability of losing uncommitted work, a problem exacerbated by the rapid and often destructive actions of AI agents, where traditional version control systems (like Git) or IDE-specific local history might fall short.
- User Experience:
unfprovides a CLI with familiargit-like commands (unf log,unf diff,unf restore,unf cat) and a Tauri-based desktop UI for visual history exploration, including activity histograms. - Robustness & Safety: A sentinel watchdog process supervises the core daemon, ensuring resilience by automatically restarting it and reconciling watched directories if it crashes. Restores also take a safety snapshot of the current state, making restores themselves reversible.
- Key Features: It's designed to be fast (<1% CPU, <100MB RAM), local-first (no cloud, no network), free, and secure (no accounts, no telemetry). It respects
.gitignorerules and skips binary files automatically. It also includes an automatic retention policy (24h full, 7d hourly, 30d daily). - Developer Notes: The project was a significant learning experience for the author, marking their first major Rust project, Apple-notarized DMG, and Homebrew tap.
Ultimately, unf positions itself as a silent, ever-present safety net for developers, offering granular, continuous versioning that complements existing VCS workflows without requiring changes to developer habits.
The Gossip
Universal Uncommitted Undoing
Many commenters immediately resonated with the core problem `unf` solves: the painful loss of uncommitted work. Users shared anecdotes of needing such a safety net, especially with the increased risk posed by AI agents making rapid, sometimes destructive, changes. The sentiment was overwhelmingly positive, with many expressing gratitude for a tool that addresses this long-standing developer frustration.
Comparative Control Systems
The discussion often turned to how `unf` compares to existing tools like JetBrains' Local History, Git's reflog or WIP modes, `jujutsu`, or even Time Machine. The author actively engaged, clarifying that `unf` distinguishes itself by continuously monitoring at the *filesystem level*, making it independent of IDEs or specific VCS commands. This approach ensures it captures every save, every second, providing a more robust and agent-agnostic safety net that *complements* rather than replaces VCS tools.
Open Source Outlook
Commenters inquired about the project's open-source status. The author explained that while it's not currently open source, this was a deliberate choice to first validate the problem and solution's shape. They expressed openness to making the code available for review and contribution if there's sufficient community interest and usage, suggesting a flexible approach to its future licensing. This theme also saw a brief intervention from a moderator regarding a user's dismissive comments, underscoring the community's value for thoughtful discussion.