Tak
View SourceGit worktree management for Elixir/Phoenix development.
Tak (Dutch for "branch") helps you manage multiple git worktrees, each with isolated ports and databases for parallel development.

Requirements
- Elixir/Phoenix project with Ecto
- macOS or Linux (uses
lsoffor port detection) - PostgreSQL (for database management)
- Git (for worktree management)
- mise (optional, for PORT environment variable)
Installation
Add
takto your dependencies inmix.exs:def deps do [ {:tak, "~> 0.2.0", only: :dev} ] endAdd local config import to
config/config.exs(this allows tak to createdev.local.exsin each worktree with isolated port and database settings, without modifying tracked files):# At the end of config/config.exs if File.exists?("#{__DIR__}/#{config_env()}.local.exs") do import_config "#{config_env()}.local.exs" endAdd to
.gitignore:/config/*.local.exs /mise.local.toml /trees/Run
mix tak.doctorto verify your setup.
Usage
Create a worktree
$ mix tak.create feature/login
$ mix tak.create feature/login armstrong # specify name
$ mix tak.create feature/login --no-db # skip database setup
This will:
- Create a git worktree in
trees/<name>/ - Create
config/dev.local.exswith isolated port and database - If mise is installed, create
mise.local.tomlwith PORT env var - Run
mix deps.getandmix ecto.setup
List worktrees
$ mix tak.list
Shows all worktrees with their branch, port, database, and running status.
Remove a worktree
$ mix tak.remove armstrong
$ mix tak.remove armstrong --force
This will stop services, remove the worktree, delete the branch, and drop the database.
Check configuration
$ mix tak.doctor
Verifies your project is configured correctly for tak (gitignore, dev.local.exs import, etc.).
Configuration
Configure Tak in your config/config.exs:
config :tak,
names: ~w(armstrong hickey mccarthy lovelace kay valim),
base_port: 4000,
trees_dir: "trees",
create_database: trueOptions
| Option | Default | Description |
|---|---|---|
names | ~w(armstrong hickey mccarthy lovelace kay valim) | Available worktree slot names |
base_port | 4000 | Base port (worktrees use 4010, 4020, etc.) |
trees_dir | "trees" | Directory to store worktrees |
create_database | true | Whether to run mix ecto.setup on create |
How it works
Each worktree gets a config/dev.local.exs with:
- Unique port: Assigned based on name index (armstrong=4010, hickey=4020, etc.)
- Isolated database:
<app>_dev_<name>(e.g.,myapp_dev_armstrong)
If mise is installed, a mise.local.toml is also created with the PORT env var to override any inherited environment.
License
MIT