# Set up for development

> The Developer module adds Git, a code editor, containers, runtimes for every language and Crystal with Cryswol in one step, and makes ~/Work for your projects.

Source: https://wolos.org/manual/developer-module

## What it is

The **Developer module** turns WolOS into a workstation for writing software, in one step. It adds Git and the GitHub command line, a code editor (Code - OSS), `mise` (one tool that installs any version of Node, Python, Go, Rust and other languages, per project), containers that run without administrator rights (`podman`), terminal tools (`lazygit`, `btop`, `zellij`, `jq`) and a programmer's font. It also adds **Crystal**, the language WolOS apps are written in, with **Cryswol**, the library that lets a Crystal program use everything WolOS offers. A *module* is a bundle WolOS keeps as one unit: added in one step, removed in one step.

## Why

Setting up a new computer for programming usually costs a day of installing, configuring and finding out what is missing. A module makes that one tick. The base system stays small for everyone else, because the module is never ticked for you. And because Crystal and Cryswol come with it, the first app you write is a real WolOS app, not a web page in a window.

## How

### While you install WolOS

1. **On the page "Apps for What You Do", turn on Developer Tools.**
   You see "Code editor, Git, containers and programming languages" under it, and the download size under the list.

   ![The installer page Apps for What You Do: Developer Tools and Creative Apps switched on, AI Assistants, Local AI and Gaming off, and "About 4 GB to download".](/img/manual/installer-modules-ticked-1280.png)
2. **Finish the install.** The module downloads while WolOS installs; without the internet it is added at the first start with a network.

### On a WolOS that is already installed

1. **Open Settings > Modules** (or type "modules" in the Settings search field) and click **Install** next to **Developer**.

   ![Settings > Modules on WolOS 0.12.0 with all seven modules under Available, each with its size and an Install button: AI Assistants, Local AI, Sessions, Console, Creative, Developer (350 MB) and Gaming. Captured in a virtual machine.](/img/manual/vm-settings-modules.png)

   You see a password sheet: adding packages for every account needs an administrator. Type your password and click **Allow**.
2. **Let it finish.** Right after the packages, Settings runs the part that belongs to your own account: it makes the folder `~/Work` for your projects and turns on the container service for you.
   You see **Ready** next to Developer. If you see **Finish Setup** instead (for example when the module was added from a terminal), click it once. It changes nothing when run again.

   ![Developer under Installed with a Finish Setup button, the other six modules still Available.](/img/manual/vm-settings-modules-finish-setup.png)

   ![After Finish Setup: Developer under Installed reads Ready, with a … menu for Remove.](/img/manual/vm-settings-modules-ready.png)
3. **Open Terminal** (**Super+Space**, type `te`, Return) and check:

   ```sh
   crystal --version
   git --version
   ```

   You see both answer with a version number.

   ![Search with "te" typed: Terminal is the first result.](/img/manual/searchbar.png)

In a terminal the same two steps are:

```sh
wol modules install dev
wol modules enable dev
```

### More tools from the Store

The Store's **Develop** page has editors, IDEs, database tools and a game engine, each one click.

![The Store's Develop page: a Godot Engine banner and Code - OSS, Godot Engine, Qt Creator, Kate, Geany, Meld, DBeaver and Emacs, each with a Get button.](/img/manual/store-develop-wide.png)

### Languages with mise

`mise` installs a language per project without touching the system. In a project folder:

```sh
mise use node@22
mise use python@3.13
```

The version is written to the project, so the next person who opens it gets the same one.

## A worked example

Alice wants to try a small web project. She opens System Settings > Modules, clicks **Install** next to Developer Tools and types her password. When the row says **Ready**, she opens Terminal, types `crystal --version` and `git --version` and sees both answer with a version number. Her projects go in the new Work folder, and she opens them in the code editor. Her laptop was ready for programming in the time it took to make tea.

## If something goes wrong

| What you see | What to do |
|---|---|
| The password sheet says "Incorrect password. Try again." although the password is right | A known problem in 0.12.0. In Terminal run `sudo /usr/lib/wolos/modules-install dev` (it asks for the same password), then click **Finish Setup** in Settings > Modules. |
| `crystal: command not found` | The module is not installed yet. Settings > Modules > Developer > **Install**, or `wol modules install dev`. |
| Developer is under **Could Not Be Added** | It could not be downloaded after several tries. Check that you're online and click **Retry**. |
| **Finish Setup** stays | The user step stopped. Run `wol modules enable dev` in Terminal: it says which step failed. |
| A container tool says it cannot reach the Docker socket | Run `wol modules enable dev` again; it turns on the container service for your account. |
| You want the space back | Settings > Modules, click **…** next to Developer and remove it, or `wol modules remove dev`. `~/Work` and your files stay. |

## Related

[Your first app in Crystal](/manual/first-app) · [The terminal and the wol command](/manual/wol-basics) · [Cryswol](/manual/cryswol-apps) · [Modules](/manual/modules)
