Skip to content

Build. Learn. Forge. Craft. Warp.

One clone.
Every language.

PolyForge is a portable, polyglot development workspace driven entirely by mise. Clone it, run one command, and every toolchain you need is a single explicit install away — behind three commands that work identically on Windows, macOS, Linux and WSL.

Note: the repository is currently private — clone commands work once it is published.

powershell
PS D:\polyforge> git clone git@github.com:rizaldevv/polyforge.git
PS D:\polyforge> cd polyforge
PS D:\polyforge> .\polyforge.ps1 activate
✔ mise installed
✔ workspace trusted
✔ polyforge · learn · forge registered
nothing was downloaded. you install when you choose to.
PS D:\polyforge> polyforge install

Fresh machine

From bare metal to productive in four commands

Nothing about this flow is machine-specific. It is the same on a new laptop, a reinstalled OS, or a colleague's WSL box.

  1. 01

    Clone

    git clone … && cd polyforge

    One repository. It carries configuration and scaffolding only — never your code.

  2. 02

    Activate

    polyforge.ps1 activate

    Installs mise if missing, runs the trust handshake once per machine, and registers all three commands into your shell profile.

  3. 03

    Install

    polyforge install

    The entire declared toolchain, in one explicit step. Run `polyforge status` first if you want to see it before it lands.

  4. 04

    Warp

    polyforge get all && learn get all

    Every registered project and learning track clones back into place. You are where you left off.

Architecture

Toolchains that cascade

mise merges configuration two ways, and PolyForge uses both. Fragments in .config/mise/conf.d/ load alphabetically and walk up the directory tree, so a tool declared once is available everywhere. A deeper mise.toml inherits its parents' tasks and overrides only what it needs.

Adding a language is one file: drop 40-elixir.toml into conf.d/, run polyforge install, and every folder in the workspace has it.

Read the merge model →
polyforge/
├── .config/mise/conf.d/      ← merged, alphabetical
│   ├── 00-settings.toml       jobs, auto_install=false
│   ├── 10-core-tools.toml     python go rust node java
│   ├── 20-cli-tools.toml      eza bat rg fd jq delta
│   └── 30-package-managers.toml bun deno pnpm uv zig
├── mise.toml                  ← root: env, hooks, tasks
├── Workspace/
│   └── Go/mise.toml           ← inherits ↑, overrides here
├── Dev/Learn/                 gitignored · learn
└── Dev/Templates/             gitignored · forge

Design decisions

Opinionated, and willing to say why

  • Explicit installs

    auto_install = false. Entering a folder never triggers a silent download. The moment tools arrive is a moment you chose.

    Read more →
  • conf.d over includes

    mise 2026.6.x has no includes/import. PolyForge leans on what mise actually guarantees: alphabetical fragment merge plus directory-tree cascade.

    Read more →
  • Content lives elsewhere

    Dev/Learn/ and Workspace/*/*/ are gitignored. A committed registry maps names to repos, so a fresh clone stays a few kilobytes.

    Read more →
  • Parity by construction

    The PowerShell modules and the POSIX scripts are kept command-for-command identical. One muscle memory, every machine.

    Read more →

Workspace areas

Six languages out of the box, any language in one file

Add your own →
  • Pythonpython, uv
  • Gogo
  • Webnode, bun, deno, pnpm
  • C++cmake, ninja, zig
  • Dartdart, flutter
  • Javajava

Stop rebuilding your machine.

Set it up once, describe it in TOML, and carry it with you. The next machine is one clone and one command away.