Skip to content

Adding a language

Adding a language to PolyForge is one file. This walks through it with Elixir as the example.

  1. 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.

  2. 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.toml and the conf.d fragments, and overrides only what it names.

  3. Install.

    Terminal window
    polyforge install
  4. Verify.

    Terminal window
    polyforge status
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 every polyforge install time and disk.

Delete the fragment, then:

Terminal window
polyforge install # reconcile the declared set
polyforge clean # reclaim cache

Removing 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.