{"id":39589617,"url":"https://github.com/avihut/daft","last_synced_at":"2026-04-25T20:03:09.058Z","repository":{"id":304729845,"uuid":"985496544","full_name":"avihut/daft","owner":"avihut","description":"Git extensions toolkit for powerful worktree management. Work on multiple branches simultaneously.","archived":false,"fork":false,"pushed_at":"2026-04-20T06:20:19.000Z","size":3290,"stargazers_count":3,"open_issues_count":24,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-20T07:26:44.286Z","etag":null,"topics":["cli","developer-tools","git","rust","worktree"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avihut.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-17T22:15:41.000Z","updated_at":"2026-04-20T05:21:37.000Z","dependencies_parsed_at":"2026-02-24T13:02:28.271Z","dependency_job_id":null,"html_url":"https://github.com/avihut/daft","commit_stats":null,"previous_names":["avihut/git-worktree-workflow"],"tags_count":122,"template":false,"template_full_name":null,"purl":"pkg:github/avihut/daft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avihut%2Fdaft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avihut%2Fdaft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avihut%2Fdaft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avihut%2Fdaft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avihut","download_url":"https://codeload.github.com/avihut/daft/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avihut%2Fdaft/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32274987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","developer-tools","git","rust","worktree"],"created_at":"2026-01-18T07:42:26.507Z","updated_at":"2026-04-25T20:03:09.039Z","avatar_url":"https://github.com/avihut.png","language":"Rust","readme":"# daft - Git Extensions Toolkit\n\n[![Docs](https://img.shields.io/badge/docs-daft.avihu.dev-blue)](https://daft.avihu.dev)\n[![CI](https://github.com/avihut/daft/actions/workflows/test.yml/badge.svg)](https://github.com/avihut/daft/actions/workflows/test.yml)\n[![Release](https://img.shields.io/github/v/release/avihut/daft?label=release)](https://github.com/avihut/daft/releases/latest)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Rust](https://img.shields.io/badge/rust-1.70%2B-orange.svg)](https://www.rust-lang.org/)\n[![Homebrew](https://img.shields.io/badge/homebrew-avihut%2Ftap-blueviolet)](https://github.com/avihut/homebrew-tap)\n[![macOS](https://img.shields.io/badge/macOS-supported-success)](https://github.com/avihut/daft/releases)\n[![Linux](https://img.shields.io/badge/Linux-supported-success)](https://github.com/avihut/daft/releases)\n[![Windows](\u003chttps://img.shields.io/badge/Windows-supported%20(WSL)-success\u003e)](https://github.com/avihut/daft/releases)\n\n\u003e Stop switching branches. Work on multiple branches simultaneously.\n\n![daft demo](https://github.com/user-attachments/assets/0ea922d5-6f01-4cdb-9b15-18d8a6112499)\n\n**daft** gives each Git branch its own directory. No more stashing, no more\ncontext switching, no more waiting for builds to restart.\n\n```\nmy-project/\n├── .git/                    # Shared Git data\n├── main/                    # Stable branch\n├── feature/auth/            # Your feature work\n├── bugfix/login/            # Parallel bugfix\n└── review/teammate-pr/      # Code review\n```\n\n## Quick Start\n\n```bash\n# Install (macOS)\nbrew install avihut/tap/daft\n\n# Clone a repo (creates my-project/main/)\ngit worktree-clone git@github.com:user/my-project.git\n\n# Start a feature branch (creates my-project/feature/auth/)\ngit worktree-checkout-branch feature/auth\n```\n\nEach directory is a full working copy. Run different branches in different\nterminals. Your IDE state, node_modules, build artifacts - all isolated per\nbranch.\n\n## Adopt Existing Repositories\n\nAlready have a repository? Convert it to the worktree workflow with one command:\n\n```bash\ncd my-existing-project\ngit worktree-flow-adopt\n```\n\nThis restructures your repo:\n\n```\nmy-project/                 my-project/\n├── .git/                   ├── .git/        (bare repository)\n├── src/           →        └── main/        (worktree)\n└── README.md                   ├── src/\n                                └── README.md\n```\n\nYour uncommitted changes are preserved. If you change your mind:\n\n```bash\ngit worktree-flow-eject      # Converts back to traditional layout\n```\n\n## Why daft?\n\n**Traditional Git workflow:**\n\n```\n┌─────────────────────────────────────────────────────────┐\n│  $ git stash                                            │\n│  $ git checkout feature-b                               │\n│  $ npm install        # wait...                         │\n│  $ npm run build      # wait...                         │\n│  # context lost, IDE state gone                         │\n│  $ git checkout feature-a                               │\n│  $ git stash pop                                        │\n│  # where was I?                                         │\n└─────────────────────────────────────────────────────────┘\n```\n\n**With daft:**\n\n```\nTerminal 1 (feature-a/)     Terminal 2 (feature-b/)\n┌───────────────────────┐   ┌───────────────────────┐\n│ $ npm run dev         │   │ $ npm run dev         │\n│ Server on :3000       │   │ Server on :3001       │\n│ # full context        │   │ # full context        │\n└───────────────────────┘   └───────────────────────┘\n         ↓                           ↓\n    Both running simultaneously, isolated environments\n```\n\n## Installation\n\n### macOS (Homebrew)\n\n```bash\nbrew install avihut/tap/daft\n```\n\n### Windows\n\n```powershell\nirm https://github.com/avihut/daft/releases/latest/download/daft-installer.ps1 | iex\n```\n\n### Linux / From Source\n\nDownload binaries from\n[GitHub Releases](https://github.com/avihut/daft/releases/latest) or build from\nsource:\n\n```bash\ngit clone https://github.com/avihut/daft.git\ncd daft \u0026\u0026 cargo build --release\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for detailed installation and symlink\nsetup.\n\n### Shell Integration\n\nEnable automatic cd into new worktrees:\n\n```bash\n# Add to ~/.bashrc or ~/.zshrc\neval \"$(daft shell-init bash)\"\n\n# Or for fish (~/.config/fish/config.fish)\ndaft shell-init fish | source\n```\n\n## Commands\n\n| Command                                      | Description                                     |\n| -------------------------------------------- | ----------------------------------------------- |\n| `git worktree-clone \u003curl\u003e`                   | Clone a repo into the worktree structure        |\n| `git worktree-init \u003cname\u003e`                   | Initialize a new repo in the worktree structure |\n| `git worktree-checkout \u003cbranch\u003e`             | Create worktree from existing branch            |\n| `git worktree-checkout-branch \u003cbranch\u003e`      | Create new branch + worktree                    |\n| `git worktree-checkout-branch \u003cbranch\u003e main` | Create branch from a specific base              |\n| `git worktree-prune`                         | Remove worktrees for deleted remote branches    |\n| `git worktree-carry`                         | Carry uncommitted changes to other worktrees    |\n| `git worktree-flow-adopt`                    | Convert traditional repo to worktree layout     |\n| `git worktree-flow-eject`                    | Convert back to traditional layout              |\n\nRun any command with `--help` for full options.\n\n### Shortcuts\n\nEnable short aliases like `gwtco`, `gwtcb`:\n\n```bash\ndaft setup shortcuts enable git    # gwtco, gwtcb, gwtprune, etc.\ndaft setup shortcuts list          # See all available shortcuts\n```\n\n## Hooks\n\nAutomate worktree lifecycle events with a `daft.yml` configuration file:\n\n| Hook                   | Trigger                 |\n| ---------------------- | ----------------------- |\n| `post-clone`           | After repository clone  |\n| `worktree-post-create` | After worktree created  |\n| `worktree-pre-remove`  | Before worktree removal |\n\n**Example** - install dependencies and auto-allow direnv in new worktrees:\n\n```yaml\n# daft.yml\nhooks:\n  worktree-post-create:\n    jobs:\n      - name: install-deps\n        run: npm install\n      - name: direnv-allow\n        run: direnv allow .\n```\n\n```bash\ngit daft hooks trust\n```\n\nHooks require explicit trust for security. See the\n[hooks guide](https://avihu.dev/daft/guide/hooks) for details.\n\n## AI Agent Skill\n\ndaft ships an [Agent Skill](https://github.com/anthropics/agent-skills) that\nteaches AI coding agents (Claude Code, Cursor, Windsurf, and others) the\nworktree workflow -- commands, hooks, environment tooling, and worktree-aware\nGit operations.\n\n```bash\nnpx skills add avihut/daft\n```\n\nSee the [Agent Skill guide](https://avihu.dev/daft/guide/claude-skill) for\nmanual installation options.\n\n## Requirements\n\n- **Git** 2.5+ (for worktree support)\n- **Rust** 1.70+ (only for building from source)\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n---\n\n**Pro Tip**: This workflow is powerful for frontend development, code reviews,\nhotfixes, and any project with complex build processes that benefit from\nisolation.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favihut%2Fdaft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favihut%2Fdaft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favihut%2Fdaft/lists"}