Adding a language
Adding a language to PolyForge is one file. This walks through it with Elixir as the example.
-
Create a fragment in
conf.d/.Number it for the category it belongs to — see the merge model for why the number matters.
.config/mise/conf.d/40-elixir.toml [tools]erlang = "latest"elixir = "latest"The tool is now declared workspace-wide: every directory in the tree, at any depth, has it in scope.
-
Add a workspace area (optional).
If you want a home for Elixir projects with its own environment or tasks:
Workspace/Elixir/mise.toml [env]MIX_ENV = "dev"[tasks.test]run = "mix test"This file inherits everything from the root
mise.tomland theconf.dfragments, and overrides only what it names. -
Install.
Terminal window polyforge install -
Verify.
Terminal window polyforge status
Choosing the number prefix
Section titled “Choosing the number prefix”| Range | Category | Examples |
|---|---|---|
00- |
Global settings | jobs, auto_install |
10- |
Language interpreters and compilers | python, go, rust, node, java |
20- |
CLI toolbelt | eza, bat, ripgrep, fd, jq, delta |
30- |
Package managers and build tools | bun, pnpm, uv, cmake, ninja |
40-+ |
Everything you add | elixir, database clients, cloud CLIs |
Two rules keep this predictable:
- A tool belongs to exactly one fragment. Declaring it twice means the later file silently wins.
- Depend forward, not backward. If tool B needs tool A, A’s fragment must sort earlier.
Should it go in conf.d/ or a nested mise.toml?
Section titled “Should it go in conf.d/ or a nested mise.toml?”Ask where you want the tool available.
- Everywhere in the workspace →
conf.d/. This is right for interpreters and anything you use daily. - Only inside one language area →
Workspace/<Lang>/mise.toml. Right for a heavy, narrow tool that would otherwise cost everypolyforge installtime and disk.
Removing a language
Section titled “Removing a language”Delete the fragment, then:
polyforge install # reconcile the declared setpolyforge clean # reclaim cacheRemoving the declaration does not uninstall what mise already fetched. Use
polyforge clean --all for a genuinely clean slate — it runs mise implode and
removes every installed toolchain, not just this one.