> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fortytwo.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Quick Start

<Badge color="gray">P2P</Badge>
<Badge color="gray">Fortytwo P2P App</Badge>
<Badge color="gray">Fortytwo P2P CLI</Badge>
<Badge color="gray">Fortytwo P2P Container</Badge>
<Badge color="green">Installing</Badge>
<Badge color="blue">Launching</Badge>
<Badge color="blue">Updating</Badge>
<Badge color="blue">Stopping</Badge>

<Callout icon="sparkle" color="#0037ff" iconType="regular">
  [Join the "Hitchhiking to AGI" Program](/docs/participation)

  Submit an application to join the first wave of Inference Noderunners: [Application Form <Icon icon="arrow-up-right" />](https://tally.so/r/wQzVQk)
</Callout>

## 1. Preparing

<Steps>
  <Step title="Review the requirements">
    Verify that your device meets the '[Requirements](/docs/hardware-requirements)'.
  </Step>

  <Step title="Choose in what way you will run the Inference Node">
    <Columns cols={3}>
      <Card title="Fortytwo P2P App" icon="https://mintcdn.com/fortytwo-f43ac997/0cQCszqEw3UY-Jgf/resources/icons/Fortytwo-App-callout.svg?fit=max&auto=format&n=0cQCszqEw3UY-Jgf&q=85&s=e05855831c979f7fa6f0e280287f8d2f" href="https://docs.fortytwo.network/docs/quick-start#fortytwo-p2p-app" width="64" height="64" data-path="resources/icons/Fortytwo-App-callout.svg">
        Best for personal devices. Friendly UI, the easiest way to get started.
      </Card>

      <Card title="Fortytwo P2P Container" icon="https://mintcdn.com/fortytwo-f43ac997/0cQCszqEw3UY-Jgf/resources/icons/Fortytwo-Container-callout.svg?fit=max&auto=format&n=0cQCszqEw3UY-Jgf&q=85&s=59f2fd2525597157eb92b464cc4d3720" href="https://docs.fortytwo.network/docs/quick-start#fortytwo-p2p-container" width="64" height="64" data-path="resources/icons/Fortytwo-Container-callout.svg">
        Best for servers & VMs. Docker-based setup. Per-node GPU allocation.
      </Card>

      <Card title="Fortytwo P2P CLI" icon="https://mintcdn.com/fortytwo-f43ac997/0cQCszqEw3UY-Jgf/resources/icons/Fortytwo-CLI-callout.svg?fit=max&auto=format&n=0cQCszqEw3UY-Jgf&q=85&s=4ed7ce3bfad98ded656573609cc50b4a" href="https://docs.fortytwo.network/docs/quick-start#fortytwo-p2p-cli" width="64" height="64" data-path="resources/icons/Fortytwo-CLI-callout.svg">
        Run and manage your node from the terminal.
      </Card>
    </Columns>

    Our '[Features](/docs/inference-features)' page can help you pick what suits you best.
  </Step>
</Steps>

## 2. Installing the Inference Node

<Warning>
  **Please ensure you have received an acceptance email with an activation code before attempting to install the Inference Node.**
</Warning>

<Danger>
  **A unique activation code is required for each device the node is installed on.**
</Danger>

<Tabs>
  <Tab title="Fortytwo P2P App" icon="https://mintcdn.com/fortytwo-f43ac997/0cQCszqEw3UY-Jgf/resources/icons/Fortytwo-App-tabs.svg?fit=max&auto=format&n=0cQCszqEw3UY-Jgf&q=85&s=ebc5768dbee9b86c6c6a8d6ce9a858f7" width="64" height="64" data-path="resources/icons/Fortytwo-App-tabs.svg">
    <Tabs>
      <Tab title="macOS" icon="apple">
        <Steps>
          <Step>
            <Card title="Download Fortytwo P2P App for macOS" icon="apple" href="https://downloads.fortytwo.network/updates/latest-mac">
              [<Icon icon="download" />](https://downloads.fortytwo.network/updates/latest-mac) `downloads.fortytwo.network/updates/latest-mac`
            </Card>
          </Step>

          <Step>
            Navigate to default **downloads directory** where the Fortytwo-x.x.x-mac.dmg file is located.
          </Step>

          <Step>
            Run **Fortytwo-x.x.x-mac.dmg**.
          </Step>

          <Step>
            Follow the on-screen instructions.
          </Step>

          <Step>
            <Warning>**If you are updating from version 0.2.1 and earler, follow the steps in the [Updating from Versions 0.2.1 and Earlier](/docs/quick-start#macos%3A-updating-from-versions-0-2-1-and-earlier) section.**</Warning>

            Run the application.
          </Step>
        </Steps>
      </Tab>

      <Tab title="Windows" icon="windows">
        <Steps>
          <Step>
            <Card title="Download Fortytwo P2P App for Windows" icon="windows" href="https://downloads.fortytwo.network/updates/latest-win">
              [<Icon icon="download" />](https://downloads.fortytwo.network/updates/latest-win) `downloads.fortytwo.network/updates/latest-win`
            </Card>
          </Step>

          <Step>
            Navigate to default **downloads directory** where the Fortytwo-x.x.x-win.exe file is located.
          </Step>

          <Step>
            Run **Fortytwo-x.x.x-win.exe**
          </Step>

          <Step>
            Follow the on-screen instructions.
          </Step>

          <Step>
            Run the application.
          </Step>
        </Steps>
      </Tab>

      <Tab title="Linux (Ubuntu/Debian)" icon="linux">
        <Steps>
          <Step>
            <Card title="Download Fortytwo P2P App for Linux (Ubuntu/Debian)" icon="linux" href="https://downloads.fortytwo.network/updates/latest-deb">
              [<Icon icon="download" />](https://downloads.fortytwo.network/updates/latest-deb) `downloads.fortytwo.network/updates/latest-deb`
            </Card>
          </Step>

          <Step>
            Navigate to default **downloads directory** where the Fortytwo-x.x.x-win.deb file is located.
          </Step>

          <Step>
            Run **Fortytwo-x.x.x-win.deb**
          </Step>

          <Step>
            Follow the on-screen instructions.
          </Step>

          <Step>
            Run the application.
          </Step>
        </Steps>
      </Tab>
    </Tabs>

    ## 3. Operating Your Node

    The node will remain fully operational until it is stopped by the user, the application is closed by the user or the system restarts. You can minimize or close the application window, switch to other applications – the node will continue running in the background and will be available in system tray.

    ### Updating Fortytwo P2P App

    Fortytwo P2P App updates automatically. Sometimes the user might be asked to restart the application to install the most recent updates.

    If you face issues with the updates, you can manually check the current version of `።‖ Fortytwo P2P App` on the [Changelog page](/changelog), and then manually download and reinstall the app using the current version links:

    <Columns cols={3}>
      <Card title="Download current version for macOS" icon="apple" href="https://downloads.fortytwo.network/updates/latest-mac">
        <br />[<Icon icon="download" />](https://downloads.fortytwo.network/updates/latest-mac)
      </Card>

      <Card title="Download current version for Windows" icon="windows" href="https://downloads.fortytwo.network/updates/latest-win">
        <br />[<Icon icon="download" />](https://downloads.fortytwo.network/updates/latest-win)
      </Card>

      <Card title="Download current version for Linux (Ubuntu/Debian)" icon="linux" href="https://downloads.fortytwo.network/updates/latest-deb">
        [<Icon icon="download" />](https://downloads.fortytwo.network/updates/latest-deb)
      </Card>
    </Columns>

    You can find your current app version in the About window.

    #### <Icon icon="apple" iconType="solid" /> macOS: Updating from Versions 0.2.1 and Earlier

    <Accordion title="Unwrap for details">
      Versions 0.2.2 and above are code-signed, which means its internal app identity has changed from 0.2.1 and earlier versions.
      Because of this, the new version cannot access data previously stored in the Keychain by the unsigned builds.
      Fortytwo continues to use macOS Keychain to securely store your private key at system level.

      When launching the new version, macOS may ask for your system password to grant Fortytwo access to its secure data — you have two options:

      1. You can safely **enter your password** and click **“Always Allow”** to avoid future prompts
      2. Or you can delete the previous data and restore your profile in the new version as described below:

      <Accordion title="Steps for macOS users to reset the app data">
        <Steps>
          <Step title="Export your private key">
            <Warning>Important! If you haven't already saved your recovery phrase or at least your private key, export your private key now — otherwise, you will lose access to your account and your node.</Warning>

            How to export your private key:

            1. Right click on the Fortytwo P2P App icon in the Menu Bar.
            2. Select `Account` > `Export Private Key`.
            3. Select destination and confirm.

            Make sure to save it to a secure location.
          </Step>

          <Step title="Delete the old app">
            Open your Apps folder in Finder. Select **Fortytwo** and move it to Trash.
          </Step>

          <Step title="Delete the files left from the old app">
            Find the **Fortytwo** app folder and move it to Trash.

            Short path:

            ```bash theme={null}
            ~/Fortytwo
            ```

            Full path:

            ```bash theme={null}
            /Users/{username}/Fortytwo
            ```
          </Step>

          <Step title="Delete the old record">
            Open the **Terminal** and run this command:

            ```bash theme={null}
            security delete-generic-password -s "Fortytwo Safe Storage" || true
            ```
          </Step>

          <Step title="Install the latest version of the Fortytwo P2P App">
            <Card title="Download Fortytwo P2P App for macOS" icon="apple" href="https://downloads.fortytwo.network/updates/latest-mac">
              [<Icon icon="download" />](https://downloads.fortytwo.network/updates/latest-mac) `downloads.fortytwo.network/updates/latest-mac`
            </Card>
          </Step>

          <Step title="Launch the App">
            Run the app and sign in again using your private key or secret recovery phrase.
          </Step>
        </Steps>
      </Accordion>
    </Accordion>
  </Tab>

  <Tab title="Fortytwo P2P Container" icon="https://mintcdn.com/fortytwo-f43ac997/0cQCszqEw3UY-Jgf/resources/icons/Fortytwo-Container-tabs.svg?fit=max&auto=format&n=0cQCszqEw3UY-Jgf&q=85&s=b19f124dea7c3734255bd3063de8ac8d" width="64" height="64" data-path="resources/icons/Fortytwo-Container-tabs.svg">
    <Note>
      **Requirements:**<br />
      *hardware*<br />
      **Nvidia graphic card(s)** on <Icon icon="windows" /> Windows or <Icon icon="linux" /> Linux<br />
      **CPU on x86\_64 architecture**<br />
      *software*<br />
      **Installed** [NVIDIA Container Toolkit <Icon icon="arrow-up-right" />](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)<br />
      **Installed** [<Icon icon="docker" /> Docker <Icon icon="arrow-up-right" />](https://docs.docker.com/get-started/get-docker/)<br />
      **Installed** [<Icon icon="git" /> Git <Icon icon="arrow-up-right" />](https://git-scm.com/download/)
    </Note>

    <Steps>
      <Step title="Get the repository">
        <Card title="Fortytwo P2P Inference Node Setup" icon="github" href="https://github.com/Fortytwo-Network/fortytwo-p2p-inference-docker">
          Clone the repository
        </Card>

        <Accordion title="Cloning the Repository from GitHub">
          *Note: We do not recommend downloading and setting up the repository archive manually as it will be harder to keep Fortytwo P2P Container up to date.*

          <Tabs>
            <Tab title="Windows" icon="windows">
              <Steps>
                <Step>
                  **If you don't have Git installed:**<br />

                  Install [<Icon icon="git" /> Git <Icon icon="arrow-up-right" />](https://git-scm.com/download/win).
                </Step>

                <Step>
                  Open **PowerShell as Administrator**.
                </Step>

                <Step>
                  Navigate to your preferred installation directory with `cd` command, or run the following command to continue installation in the **default location** in your home directory:

                  ```bash theme={null}
                  New-Item -Path "$HOME\FortytwoContainer" -ItemType Directory -Force; Set-Location "$HOME\FortytwoContainer"
                  ```
                </Step>

                <Step>
                  Run the following commands to clone the node package and enter the folder:

                  ```bash theme={null}
                  git clone https://github.com/Fortytwo-Network/fortytwo-p2p-inference-docker
                  cd fortytwo-p2p-inference-docker
                  ```
                </Step>
              </Steps>
            </Tab>

            <Tab title="Linux (Ubuntu/Debian)" icon="linux">
              <Steps>
                <Step>
                  **If you don't have Git installed:** Install [<Icon icon="git" /> Git <Icon icon="arrow-up-right" />](https://git-scm.com/install/linux).
                </Step>

                <Step>
                  Open **Terminal**.
                </Step>

                <Step>
                  Navigate to your preferred installation directory with `cd` command, or run the following command to continue installation in the **default location** in your home directory:

                  ```bash theme={null}
                  mkdir -p ~/FortytwoContainer && cd ~/FortytwoContainer
                  ```
                </Step>

                <Step>
                  Run the following commands to clone the node package and enter the folder:

                  ```bash theme={null}
                  git clone https://github.com/Fortytwo-Network/fortytwo-p2p-inference-docker
                  cd fortytwo-p2p-inference-docker
                  ```
                </Step>
              </Steps>
            </Tab>
          </Tabs>
        </Accordion>
      </Step>

      <Step title="(Windows only) Download utils">
        Get required Utils by running commands from the following steps. This should download the current version of `FortytwoUtilsWindows.exe` into the folder.

        ```bash PowerShell theme={null}
        $UTILS_VERSION = (Invoke-RestMethod "https://download.swarminference.io/utilities/latest").Trim()
        Start-BitsTransfer -Source "https://download.swarminference.io/utilities/v$UTILS_VERSION/FortytwoUtilsWindows.exe" -Destination FortytwoUtilsWindows.exe
        ```
      </Step>

      <Step title="Get the private key of your Web3 account ">
        <Warning>
          Your Web3 account's private key must be different for every unique node in the network that you run simultaneously. There should be no two nodes with the same ID in the network.<br />
          *For example: if you intend to run **8 nodes** on **8×GPU rig** at the same time, you will need **8 private keys**.*
        </Warning>

        <Card title="Wallet and Account Management" href="/docs/wallet-and-account-management" icon="key" horizontal>
          This article will explain accounts and their credentials if you are new to Web3.
        </Card>

        You have the following options to get the private key:

        <AccordionGroup>
          <Accordion title="A. Create a new Web3 account with an activation code">
            1. **Create a new account**

            <Tabs>
              <Tab title="Windows" icon="windows">
                ```bash PowerShell theme={null}
                .\FortytwoUtilsWindows.exe --create-wallet <PATH_WHERE_TO_SAVE_YOUR_KEY> --drop-code <ACTIVATION_CODE>
                ```
              </Tab>

              <Tab title="Linux (Ubuntu/Debian)" icon="linux">
                ```bash Bash theme={null}
                make get-drop PRIVATE_KEY_PATH=$PATH_WHERE_TO_SAVE_YOUR_KEY CODE=$ACTIVATION_CODE
                ```
              </Tab>
            </Tabs>

            `$PATH_WHERE_TO_SAVE_YOUR_KEY` — The path where the file with your private key will be generated.<br />

            <Warning>
              * Make sure that the defined path exists.
              * If `.account_private_key` already exists in this locaiton, it will be ovewritten.
            </Warning>

            `$ACTIVATION_CODE` — Your activation code. It can only be used once.

            When executed, a new private key named `.account_private_key` will be generated at the defined path.

            <Warning>
              The log will show you the credentials of your new account. It is crucial to **write your Secret Recovery Phrase down now**. You will not be able to recover it later.
            </Warning>

            2. **Get your private key address.**

            `.account_private_key` file is a **hidden file** by default. Reveal it. **Text inside it is your private key**.

            <Accordion title="Platform-specific notes on how to reveal hidden files">
              <Tabs>
                <Tab title="macOS" icon="apple">
                  1. Open the folder in Finder.
                  2. Press `Command + Shift + .` to toggle hidden file visibility.
                </Tab>

                <Tab title="Windows" icon="windows">
                  1. Open **File Explorer**.
                  2. Select the **View** tab from the top menu.
                  3. Click **Show** → **Hidden items**.
                  4. Hidden files and folders (including `.account_private_key`) will now be visible.
                </Tab>
              </Tabs>
            </Accordion>
          </Accordion>

          <Accordion title="B. Connect the existing Web3 account with an activation code">
            1. **Connect your wallet to the program**

            <Tabs>
              <Tab title="Windows" icon="windows">
                ```bash PowerShell theme={null}
                .\FortytwoUtilsWindows.exe --drop-wallet <PUBLIC_WALLET_ADDRESS> --drop-code <ACTIVATION_CODE>
                ```
              </Tab>

              <Tab title="Linux (Ubuntu/Debian)" icon="linux">
                ```bash Bash theme={null}
                make get-drop WALLET=$PUBLIC_WALLET_ADDRESS CODE=$ACTIVATION_CODE
                ```
              </Tab>
            </Tabs>

            `$PUBLIC_WALLET_ADDRESS` — Your Web3 EVM-compatible account's public address.<br />
            `$ACTIVATION_CODE` — Your activation code. It can be used only once.

            This command will add the wallet you defined to the gas compensation program.

            2. **Get your private key address.**

            Get your Web3 EVM-compatible account's private key address from any Web3 wallet.
          </Accordion>

          <Accordion title="C. Migrate to Fortytwo P2P Container from an already existing node">
            **Get your private key address.**

            See '[Exporting Your Node ID, Your Web3 Credentials](/docs/wallet-and-account-management#exporting-your-node-id%2C-your-web3-credentials)' for instructions on how to get your private key from another Fortytwo application or get it from a Web3 wallet.
          </Accordion>

          <Accordion title="D. Fund an existing Web3 account on your own">
            **Get your private key address.**

            Get your Web3 EVM-compatible account's private key address from any of Web3 wallets.

            <Note>
              With no activation code, you’ll need to manually monitor and top-up MON and FOR balance for your node to work, with 2 MON and 100 FOR required to start the node. Your node will not automatically receive MON refills with no activation code.
            </Note>
          </Accordion>
        </AccordionGroup>
      </Step>
    </Steps>

    With Fortytwo P2P Container, you can choose the way you run your node:

    <Tabs>
      <Tab title="One node per machine" icon="dot">
        <Steps>
          <Step stepNumber="4" title="Setup the `.env` file">
            Create an `.env` file from the `.env.example` reference file and update the environment variables:

            ```bash theme={null}
            cp .env.example .env
            ```

            Open the `.env` file and specify unique credentials for the node:

            * `FT_ACCOUNT_PRIVATE_KEY` — Unique Web3 account private key<br />
            * `FT_CAPSULE_LLM_HF_REPO` and `FT_CAPSULE_LLM_HF_MODEL_NAME` — Unique model credentials

            <Accordion title="Unwrap for .env setup example">
              ```bash theme={null}
              # protocol
              FT_ACCOUNT_PRIVATE_KEY=$YOUR_UNIQUE_PRIVATE_KEY
              FT_NODE_LISTENER_PORT=42042

              # capsule 
              FT_CAPSULE_HTTP_HOST="0.0.0.0"
              FT_CAPSULE_HTTP_PORT=42442
              FT_CAPSULE_LLM_HF_REPO=Fortytwo-Network/Strand-Rust-Coder-14B-v1-GGUF
              FT_CAPSULE_LLM_HF_MODEL_NAME=Fortytwo_Strand-Rust-Coder-14B-v1-Q4_K_M.gguf

              INPUT_MODEL_CACHE=./model_cache
              ```
            </Accordion>

            Read the '[Environment Setup](/docs/inference-env-setup)' page for more details.
          </Step>

          <Step stepNumber="5" title="Pre-download the model">
            It is desirable to pre-download the model before attempting to start the node. Use the same model credentials as defined in the `.env` file.<br />
            Use this command to download a model:

            <Tabs>
              <Tab title="Windows" icon="windows">
                ```bash PowerShell theme={null}
                .\FortytwoUtilsWindows.exe --hf-repo <LLM_HF_REPO> --hf-model-name <LLM_HF_MODEL_NAME> --model-cache model_cache
                ```

                In our case it looks like this:

                ```bash PowerShell theme={null}
                .\FortytwoUtilsWindows.exe --hf-repo Fortytwo-Network/Strand-Rust-Coder-14B-v1-GGUF --hf-model-name Fortytwo_Strand-Rust-Coder-14B-v1-Q4_K_M.gguf --model-cache model_cache
                ```
              </Tab>

              <Tab title="Linux (Ubuntu/Debian)" icon="linux">
                ```bash Bash theme={null}
                make download-llm LLM_HF_REPO=$REPO_ID LLM_HF_MODEL_NAME=$MODEL_ID
                ```

                In our case it looks like this:

                ```bash Bash theme={null}
                make download-llm LLM_HF_REPO=Fortytwo-Network/Strand-Rust-Coder-14B-v1-GGUF LLM_HF_MODEL_NAME=Fortytwo_Strand-Rust-Coder-14B-v1-Q4_K_M.gguf
                ```
              </Tab>
            </Tabs>
          </Step>
        </Steps>
      </Tab>

      <Tab title="Multi-node setup on a single machine" icon="grip-dots">
        The unique strength of the Fortytwo P2P Container setup is that it allows to run several nodes on a single machine and allocate a particular GPU to a particular node. Let's explore this functionality with an example setup where we would want to launch **three nodes on a 4×GPU rig**.

        The models for this example are:

        1. [Fortytwo\_Strand-Rust-Coder-14B-v1-Q4\_K\_M <Icon icon="arrow-up-right" />](https://huggingface.co/Fortytwo-Network/Strand-Rust-Coder-14B-v1-GGUF)
        2. [VibeThinker-1.5B.Q4\_K\_M <Icon icon="arrow-up-right" />](https://huggingface.co/mradermacher/VibeThinker-1.5B-GGUF)
        3. [Qwen3-1.7B-Q4\_K\_M <Icon icon="arrow-up-right" />](https://huggingface.co/unsloth/Qwen3-1.7B-GGUF)

        <Steps>
          <Step stepNumber="4" title="Setup the `.env` files">
            Each Inference Node requires its own unqiue environment defined in the `.env` file. Since we want to run 3 nodes, we will be creating 3 environment files from the `.env.example` reference file and update the environment variables:

            ```bash theme={null}
            cp .env.example .env.strand-rust-coder
            cp .env.example .env.vibethinker
            cp .env.example .env.qwen
            ```

            Open each newly created `.env` file and specify the unique credentials for each node:

            * `FT_ACCOUNT_PRIVATE_KEY` — Unique Web3 account private key<br />
            * `FT_NODE_LISTENER_PORT` — Unique port<br />
            * `FT_CAPSULE_LLM_HF_REPO` and `FT_CAPSULE_LLM_HF_MODEL_NAME` — Unique model credentials

            For our example, this will be the setup, unwrap to see the contents of each file:

            <AccordionGroup>
              <Accordion title=".env.strand-rust-coder">
                ```bash theme={null}
                # protocol
                FT_ACCOUNT_PRIVATE_KEY=$YOUR_FIRST_UNIQUE_PRIVATE_KEY
                FT_NODE_LISTENER_PORT=42042

                # capsule 
                FT_CAPSULE_HTTP_HOST="0.0.0.0"
                FT_CAPSULE_HTTP_PORT=42442
                FT_CAPSULE_LLM_HF_REPO=Fortytwo-Network/Strand-Rust-Coder-14B-v1-GGUF
                FT_CAPSULE_LLM_HF_MODEL_NAME=Fortytwo_Strand-Rust-Coder-14B-v1-Q4_K_M.gguf

                INPUT_MODEL_CACHE=./model_cache
                ```
              </Accordion>

              <Accordion title=".env.vibethinker">
                ```bash theme={null}
                # protocol
                FT_ACCOUNT_PRIVATE_KEY=$YOUR_SECOND_UNIQUE_PRIVATE_KEY
                FT_NODE_LISTENER_PORT=42043

                # capsule 
                FT_CAPSULE_HTTP_HOST="0.0.0.0"
                FT_CAPSULE_HTTP_PORT=42442
                FT_CAPSULE_LLM_HF_REPO=mradermacher/VibeThinker-1.5B-GGUF
                FT_CAPSULE_LLM_HF_MODEL_NAME=VibeThinker-1.5B.Q4_K_M.gguf

                INPUT_MODEL_CACHE=./model_cache
                ```
              </Accordion>

              <Accordion title=".env.qwen">
                ```bash theme={null}
                # protocol
                FT_ACCOUNT_PRIVATE_KEY=$YOUR_THIRD_UNIQUE_PRIVATE_KEY
                FT_NODE_LISTENER_PORT=42044

                # capsule 
                FT_CAPSULE_HTTP_HOST="0.0.0.0"
                FT_CAPSULE_HTTP_PORT=42442
                FT_CAPSULE_LLM_HF_REPO=unsloth/Qwen3-1.7B-GGUF
                FT_CAPSULE_LLM_HF_MODEL_NAME=Qwen3-1.7B-Q4_K_M.gguf

                INPUT_MODEL_CACHE=./model_cache
                ```
              </Accordion>
            </AccordionGroup>

            Read the '[Environment Setup](/docs/inference-env-setup)' page for more details.
          </Step>

          <Step stepNumber="5" title="Pre-download models">
            It is desirable to pre-download the model before attempting to start the node. Use the same model credentials as defined in each `.env` file.<br />
            Use this command to download a model:

            <Tabs>
              <Tab title="Windows" icon="windows">
                ```bash PowerShell theme={null}
                .\FortytwoUtilsWindows.exe --hf-repo <LLM_HF_REPO> --hf-model-name <LLM_HF_MODEL_NAME> --model-cache model_cache
                ```

                In our case it looks like this:

                ```bash PowerShell theme={null}
                .\FortytwoUtilsWindows.exe --hf-repo Fortytwo-Network/Strand-Rust-Coder-14B-v1-GGUF --hf-model-name Fortytwo_Strand-Rust-Coder-14B-v1-Q4_K_M.gguf --model-cache model_cache
                .\FortytwoUtilsWindows.exe --hf-repo mradermacher/VibeThinker-1.5B-GGUF --hf-model-name VibeThinker-1.5B.Q4_K_M.gguf --model-cache model_cache
                .\FortytwoUtilsWindows.exe --hf-repo unsloth/Qwen3-1.7B-GGUF --hf-model-name Qwen3-1.7B-Q4_K_M.gguf --model-cache model_cache
                ```
              </Tab>

              <Tab title="Linux (Ubuntu/Debian)" icon="linux">
                ```bash Bash theme={null}
                make download-llm LLM_HF_REPO=$REPO_ID LLM_HF_MODEL_NAME=$MODEL_ID
                ```

                Use the same credentials as in the environment files. In our case it looks like this:

                ```bash Bash theme={null}
                make download-llm LLM_HF_REPO=Fortytwo-Network/Strand-Rust-Coder-14B-v1-GGUF LLM_HF_MODEL_NAME=Fortytwo_Strand-Rust-Coder-14B-v1-Q4_K_M.gguf
                make download-llm LLM_HF_REPO=mradermacher/VibeThinker-1.5B-GGUF LLM_HF_MODEL_NAME=VibeThinker-1.5B.Q4_K_M.gguf 
                make download-llm LLM_HF_REPO=unsloth/Qwen3-1.7B-GGUF LLM_HF_MODEL_NAME=Qwen3-1.7B-Q4_K_M.gguf
                ```
              </Tab>
            </Tabs>
          </Step>

          <Step stepNumber="6" title="Create Docker Compose files">
            Create separate compose files for each node from the `docker-compose.yml` reference:

            ```bash theme={null}
            cp docker-compose.yml docker-compose-strand-rust-coder.yml
            cp docker-compose.yml docker-compose-vibethinker.yml
            cp docker-compose.yml docker-compose-qwen.yml
            ```
          </Step>

          <Step stepNumber="7" title="Plan the GPU usage">
            Verify your GPU configuration using the nvidia-smi command:

            ```bash theme={null}
            nvidia-smi
            ```

            In our example, we established that we have a 4×GPU rig. So, we should have 4 GPUs with IDs 0, 1, 2, and 3 (shown in the first GPU column).

            Our plan is to:

            * For Fortytwo\_Strand-Rust-Coder — Use **GPU #1** and **#2**
            * For VibeThinker — Use **GPU #0**
            * For Qwen3 — Use **GPU #3**

            Fortytwo\_Strand-Rust-Coder is the largest model here, so we allocate two GPUs to it.<br />
            GPU order doesn't matter here.

            `nvidia-smi` output should be as follows:

            ```bash theme={null}
            +-----------------------------------------------------------------------------------------+
            | NVIDIA-SMI 570.195.03             Driver Version: 570.195.03     CUDA Version: 12.8     |
            |-----------------------------------------+------------------------+----------------------+
            | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
            | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
            |                                         |                        |               MIG M. |
            |=========================================+========================+======================|
            |   0  NVIDIA A10G                    Off |   00000000:00:1B.0 Off |                    0 |
            |  0%   29C    P0             58W /  300W |       0MiB /  23028MiB |      0%      Default |
            |                                         |                        |                  N/A |
            +-----------------------------------------+------------------------+----------------------+
            |   1  NVIDIA A10G                    Off |   00000000:00:1C.0 Off |                    0 |
            |  0%   28C    P0             56W /  300W |       0MiB /  23028MiB |      0%      Default |
            |                                         |                        |                  N/A |
            +-----------------------------------------+------------------------+----------------------+
            |   2  NVIDIA A10G                    Off |   00000000:00:1D.0 Off |                    0 |
            |  0%   28C    P0             58W /  300W |       0MiB /  23028MiB |      3%      Default |
            |                                         |                        |                  N/A |
            +-----------------------------------------+------------------------+----------------------+
            |   3  NVIDIA A10G                    Off |   00000000:00:1E.0 Off |                    0 |
            |  0%   28C    P0             56W /  300W |       0MiB /  23028MiB |      2%      Default |
            |                                         |                        |                  N/A |
            +-----------------------------------------+------------------------+----------------------+
            ```
          </Step>

          <Step stepNumber="8" title="Assign GPUs to Each Node">
            Edit each Docker Compose file to assign specific GPU(s) by their IDs.

            For our example, we need to make the following edits:

            <AccordionGroup>
              <Accordion title="docker-compose-strand-rust-coder.yml">
                ```bash theme={null}
                deploy:
                  resources:
                    reservations:
                      devices:
                        - driver: nvidia
                          device_ids: ['1', '2']  # Assign to GPUs 1 and 2
                          capabilities:
                            - gpu
                ```
              </Accordion>

              <Accordion title="docker-compose-vibethinker.yml">
                ```bash theme={null}
                deploy:
                  resources:
                    reservations:
                      devices:
                        - driver: nvidia
                          device_ids: ['0']  # Assign to GPU 0
                          capabilities:
                            - gpu
                ```
              </Accordion>

              <Accordion title="docker-compose-qwen.yml">
                ```bash theme={null}
                deploy:
                  resources:
                    reservations:
                      devices:
                        - driver: nvidia
                          device_ids: ['3']  # Assign to GPU 3
                          capabilities:
                            - gpu
                ```
              </Accordion>
            </AccordionGroup>

            <Note>
              Using `device_ids: ['all']` will assign all available GPUs for that node.
            </Note>
          </Step>
        </Steps>
      </Tab>
    </Tabs>

    ## 3. Operating Your Node

    With Fortytwo P2P Container, you can choose the way you run your node:

    <Tabs>
      <Tab title="One node per machine" icon="dot">
        ### Launching Fortytwo P2P Container

        If restarting your node after relaunching the terminal/OS, don't forget that the following should be executed from the node repository folder, where your `.env` and `docker-compose.yml` are located.

        <Steps>
          <Step stepNumber="6" title="Update the repository">
            To make sure that your repo is up to date, before each start, get the latest updates with the `git pull` command:

            ```bash theme={null}
            git pull
            ```
          </Step>

          <Step stepNumber="7" title="(Windows only) Update Utils">
            ```bash PowerShell theme={null}
            $UTILS_VERSION = (Invoke-RestMethod "https://download.swarminference.io/utilities/latest").Trim()
            Start-BitsTransfer -Source "https://download.swarminference.io/utilities/v$UTILS_VERSION/FortytwoUtilsWindows.exe" -Destination FortytwoUtilsWindows.exe
            ```
          </Step>

          <Step stepNumber="8" title="Launch Docker">
            Launch [<Icon icon="docker" /> Docker <Icon icon="arrow-up-right" />](https://docs.docker.com/get-started/get-docker/) and wait until its interface says "Engine running".
          </Step>

          <Step stepNumber="9" title="Build the Docker Compose services">
            ```bash theme={null}
            docker compose build
            ```
          </Step>

          <Step stepNumber="10" title="Run the services in the background">
            ```bash theme={null}
            docker compose up -d
            ```

            <Warning>
              If the model defined in the `.env` file is **not pre-downloaded**, then your node will **download it at startup**. In that case Capsule module might report `unhealthy` status if the download is too big:

              <img src="https://mintcdn.com/fortytwo-f43ac997/dYCb2ihqzSK174xD/resources/illustrations/fortytwo-container-loading-issues-s1.png?fit=max&auto=format&n=dYCb2ihqzSK174xD&q=85&s=313f45105018a44faf3d5e217fe6520f" alt="Capsule reports unhealthy status" width="978" height="83" data-path="resources/illustrations/fortytwo-container-loading-issues-s1.png" />

              The error will repeat if attempting to re-execute the `docker compose up -d` command:

              <img src="https://mintcdn.com/fortytwo-f43ac997/dYCb2ihqzSK174xD/resources/illustrations/fortytwo-container-loading-issues-s2.png?fit=max&auto=format&n=dYCb2ihqzSK174xD&q=85&s=547eb4ecbc07de232a3f0370abac0a84" alt="Attempt to execute docker compose up -d again" width="978" height="48" data-path="resources/illustrations/fortytwo-container-loading-issues-s2.png" />

              Note that **it is not a bug with your setup.**

              Technically, your Capsule is **still downloading the model** and will start when it is ready. However, in this case, you will have to manually observe when your capsule will launch inside the Docker application, watch for the `fortytwo-capsule` container, then start the `fortytwo-protocol` container from inside the Docker application.

              **The easiest way to not catch this behavior right now is to pre-download the models from step #5.**
            </Warning>
          </Step>
        </Steps>

        #### How to Make Sure it Works?

        If everything went successfully, after launch, you can verify that the nodes are running correctly with:

        ```bash theme={null}
        docker ps 
        ```

        Your node should be running in its own container with the all the available GPU resources.

        You should as well be able to open **Docker** application and see the `fortytwo-p2p-inference-docker` process running.

        If you unwrap it, you can see the logging of the node running successfully with two containers:

        * `fortytwo-capsule` — Capsule reports on the model loading and performing. Starts first.
        * `fortytwo-protocol` — Protocol reports on the network. Protocol starts only after Capsule is all set and ready.
      </Tab>

      <Tab title="Multi-node setup on a single machine" icon="grip-dots">
        ### Launching Fortytwo P2P Container

        If you are restarting your node after relaunching the terminal/OS, don't forget that the following should be executed from the node repository folder, where your `.env` and custom docker compose `.yml` files are located.

        <Steps>
          <Step stepNumber="9" title="Update the repository">
            To make sure that your repo is up to date, before each start, get the latest updates with the `git pull` command:

            ```bash theme={null}
            git pull
            ```
          </Step>

          <Step stepNumber="10" title="(Windows only) Update Utils">
            ```bash PowerShell theme={null}
            $UTILS_VERSION = (Invoke-RestMethod "https://download.swarminference.io/utilities/latest").Trim()
            Start-BitsTransfer -Source "https://download.swarminference.io/utilities/v$UTILS_VERSION/FortytwoUtilsWindows.exe" -Destination FortytwoUtilsWindows.exe
            ```
          </Step>

          <Step stepNumber="11" title="Launch Docker">
            Launch [<Icon icon="docker" /> Docker <Icon icon="arrow-up-right" />](https://docs.docker.com/get-started/get-docker/) and wait until its interface says "Engine running".
          </Step>

          <Step stepNumber="12" title="Build the Docker Compose services">
            ```bash theme={null}
            docker compose build
            ```
          </Step>

          <Step stepNumber="13" title="Run the services in the background">
            Start each node using its respective compose file and environment file:

            ```bash theme={null}
            docker compose -f docker-compose-strand-rust-coder.yml --env-file .env.strand-rust-coder -p strand-rust-coder up -d
            docker compose -f docker-compose-vibethinker.yml --env-file .env.vibethinker -p vibethinker up -d
            docker compose -f docker-compose-qwen.yml --env-file .env.qwen -p qwen up -d
            ```

            <Warning>
              If the model defined in the `.env` file is **not pre-downloaded**, then your node will **download it at startup**. In that case Capsule module might report `unhealthy` status if the download is too big:

              <img src="https://mintcdn.com/fortytwo-f43ac997/dYCb2ihqzSK174xD/resources/illustrations/fortytwo-container-loading-issues-s1.png?fit=max&auto=format&n=dYCb2ihqzSK174xD&q=85&s=313f45105018a44faf3d5e217fe6520f" alt="Capsule reports unhealthy status" width="978" height="83" data-path="resources/illustrations/fortytwo-container-loading-issues-s1.png" />

              The error will repeat if attempting to re-execute the `docker compose up -d` command:

              <img src="https://mintcdn.com/fortytwo-f43ac997/dYCb2ihqzSK174xD/resources/illustrations/fortytwo-container-loading-issues-s2.png?fit=max&auto=format&n=dYCb2ihqzSK174xD&q=85&s=547eb4ecbc07de232a3f0370abac0a84" alt="Attempt to execute docker compose up -d again" width="978" height="48" data-path="resources/illustrations/fortytwo-container-loading-issues-s2.png" />

              Note that **it is not a bug with your setup.**

              Technically, your Capsule is **still downloading the model** and will start when it is ready. However, in this case, you will have to manually observe when your capsule will launch inside the Docker application, watch for the `fortytwo-capsule` container, then start the `fortytwo-protocol` container from inside the Docker application.

              **The easiest way to not catch this behavior right now is to pre-download the models from step #5.**
            </Warning>
          </Step>
        </Steps>

        #### How to Make Sure it Works?

        After launch, you can verify that the nodes are running correctly with this command:

        ```bash theme={null}
        docker ps 
        ```

        Each node should be running in its own container with the assigned GPU resources.

        You should also be able to open the **Docker** application and see the `strand-rust-coder`, `vibethinker`, and `qwen` processes running.

        If you unwrap each one of them, you can see the logging of the node running successfully with two containers:

        * `fortytwo-capsule` — Capsule reports on the model loading and performance. Starts first.
        * `fortytwo-protocol` — Protocol reports on the network. Protocol starts only after Capsule is set and ready.
      </Tab>
    </Tabs>

    The node will remain fully operational until it is terminated by the user or the system restarts.

    ### Updating Fortytwo P2P Container

    The node **components update automatically** every time it is launched and while operational.

    However, you need to **manually update the repository** to get the latest environment updates.

    At every start, execture the following command.

    ```bash theme={null}
    git pull
    ```

    If everything is stable, check for updates on the [Changelog page](/changelog). When you see a `⊡ Fortytwo P2P Container` update available, stop your node, run the `git pull` command, and then restart the node. These commands will let you compare your current version to remote version:

    ```bash theme={null}
    git fetch
    git log -1 origin/main --format="Remote: %h %ci"
    git log -1 --format="Local:  %h %ci"
    ```

    **Update Utils if using Windows**:

    ```bash PowerShell theme={null}
    $UTILS_VERSION = (Invoke-RestMethod "https://download.swarminference.io/utilities/latest").Trim()
    Start-BitsTransfer -Source "https://download.swarminference.io/utilities/v$UTILS_VERSION/FortytwoUtilsWindows.exe" -Destination FortytwoUtilsWindows.exe
    ```

    ### Stopping Fortytwo P2P Container

    To stop a running container, either stop it from the Docker interface, or execute the following command from the folder where the `docker-compose.yml` is located:

    ```bash theme={null}
    docker compose down
    ```

    If you want to stop one particular process, replace `docker-compose-name.yml` with that process's name.

    ```bash theme={null}
    docker compose -f docker-compose-name.yml down
    ```
  </Tab>

  <Tab title="Fortytwo P2P CLI" icon="https://mintcdn.com/fortytwo-f43ac997/0cQCszqEw3UY-Jgf/resources/icons/Fortytwo-CLI-tabs.svg?fit=max&auto=format&n=0cQCszqEw3UY-Jgf&q=85&s=f2a7dbae346916e5d9c642059baebd69" width="64" height="64" data-path="resources/icons/Fortytwo-CLI-tabs.svg">
    <Tabs>
      <Tab title="macOS" icon="apple">
        <Steps>
          <Step>
            Open the **Terminal**.
          </Step>

          <Step>
            Navigate to your preferred installation directory with `cd` command, or run the following command to continue installation in the **default location** in your home directory:

            ```bash Zsh theme={null}
            mkdir -p ~/FortytwoCLI && cd ~/FortytwoCLI
            ```
          </Step>

          <Step>
            Run the following commands to download the node package, extract it, and execute the installation script:

            ```bash Zsh theme={null}
            curl -L -o fortytwo-p2p-inference-scripts.zip https://github.com/Fortytwo-Network/fortytwo-p2p-inference-scripts/archive/refs/heads/main.zip
            unzip fortytwo-p2p-inference-scripts.zip -d . && rm fortytwo-p2p-inference-scripts.zip
            cd fortytwo-p2p-inference-scripts-main
            chmod +x macos.sh && ./macos.sh
            ```
          </Step>

          <Step>
            Follow the on-screen instructions in the script to complete the setup.
          </Step>

          <Step>
            The node will start automatically.
          </Step>
        </Steps>
      </Tab>

      <Tab title="Windows" icon="windows">
        <Steps>
          <Step>
            Open **PowerShell as Administrator**.
          </Step>

          <Step>
            Navigate to your preferred installation directory with `cd` command, or run the following command to continue installation in the **default location** in your home directory:

            ```bash PowerShell theme={null}
            New-Item -Path "$HOME\FortytwoCLI" -ItemType Directory -Force; Set-Location "$HOME\FortytwoCLI"
            ```
          </Step>

          <Step>
            Run the following commands to download the node package, extract it, and execute the installation script with a temporary execution policy override:

            ```bash PowerShell theme={null}
            Invoke-WebRequest -Uri "https://github.com/Fortytwo-Network/fortytwo-p2p-inference-scripts/archive/refs/heads/main.zip" -OutFile "fortytwo-p2p-inference-scripts.zip"
            Expand-Archive -Path fortytwo-p2p-inference-scripts.zip -DestinationPath . -Force; Remove-Item -Path fortytwo-p2p-inference-scripts.zip
            cd fortytwo-p2p-inference-scripts-main
            Unblock-File -Path .\windows.ps1
            powershell -ExecutionPolicy Bypass -File .\windows.ps1
            ```
          </Step>

          <Step>
            Follow the on-screen instructions to complete the setup.
          </Step>

          <Step>
            The node will start automatically.
          </Step>
        </Steps>
      </Tab>

      <Tab title="Linux (Ubuntu/Debian)" icon="linux">
        <Steps>
          <Step>
            Open the **Terminal**.
          </Step>

          <Step>
            Navigate to your preferred installation directory with `cd` command, or run the following command to continue installation in the **default location** in your home directory:

            ```bash Bash theme={null}
            mkdir -p ~/FortytwoCLI && cd ~/FortytwoCLI
            ```
          </Step>

          <Step>
            Run the following commands to download the node package, extract it, and execute the installation script:

            ```bash Bash theme={null}
            curl -L -o fortytwo-p2p-inference-scripts.zip https://github.com/Fortytwo-Network/fortytwo-p2p-inference-scripts/archive/refs/heads/main.zip
            unzip fortytwo-p2p-inference-scripts.zip
            cd fortytwo-p2p-inference-scripts-main
            chmod +x linux.sh && ./linux.sh
            ```
          </Step>

          <Step>
            Follow the on-screen instructions to complete the setup.
          </Step>

          <Step>
            The node will start automatically.
          </Step>
        </Steps>
      </Tab>
    </Tabs>

    ## 3. Operating Your Node

    The node will remain fully operational until it is terminated by the user or the system restarts. You can minimize the terminal window or switch to other applications – the node will continue running in the background.

    ### Launching or Restarting Fortytwo P2P CLI

    <Tip>
      On October 23, 2025, we've changed the name of the default folder from `Fortytwo` to `FortytwoCLI`. If you've installed your Fortytwo CLI before this date, your default path will differ. To access the folder, look for `Fortytwo` instead of `FortytwoCLI`.
    </Tip>

    <Tabs>
      <Tab title="macOS" icon="apple">
        <Steps>
          <Step>
            Open the **Terminal**.
          </Step>

          <Step>
            Navigate to the directory where the node is installed using the **cd** command. If the node was installed in the **default location**, run:

            ```bash Zsh theme={null}
            cd ~/FortytwoCLI/fortytwo-p2p-inference-scripts-main
            ```
          </Step>

          <Step>
            Run the node startup script:

            ```bash Zsh theme={null}
            ./macos.sh
            ```
          </Step>

          <Step>
            Follow the on-screen instructions.
          </Step>

          <Step>
            The node will start automatically.
          </Step>
        </Steps>
      </Tab>

      <Tab title="Windows" icon="windows">
        <Steps>
          <Step>
            Open **PowerShell as Administrator**.
          </Step>

          <Step>
            Navigate to the directory where the node is installed using the **cd** command. If the node was installed in the **default location**, run:

            ```bash PowerShell theme={null}
            Set-Location "$HOME\FortytwoCLI\fortytwo-p2p-inference-scripts-main"
            ```
          </Step>

          <Step>
            Run the node startup script:

            ```bash PowerShell theme={null}
            powershell -ExecutionPolicy Bypass -File .\windows.ps1
            ```
          </Step>

          <Step>
            Follow the on-screen instructions.
          </Step>

          <Step>
            The node will start automatically.
          </Step>
        </Steps>
      </Tab>

      <Tab title="Linux (Ubuntu/Debian)" icon="linux">
        <Steps>
          <Step>
            Open the **Terminal**.
          </Step>

          <Step>
            Navigate to the directory where the node is installed using the **cd** command. If the node was installed in the **default location**, run:

            ```bash Bash theme={null}
            cd ~/FortytwoCLI/fortytwo-p2p-inference-scripts-main
            ```
          </Step>

          <Step>
            Run the node startup script:

            ```bash Bash theme={null}
            ./linux.sh
            ```
          </Step>

          <Step>
            Follow the on-screen instructions.
          </Step>

          <Step>
            The node will start automatically.
          </Step>
        </Steps>
      </Tab>
    </Tabs>

    ### Updating Fortytwo P2P CLI

    Fortytwo node automatically updates every time it is launched. When you start the node, it checks for the latest available version and installs any updates before running.

    If you face issues with the updates, you can manually check the current version of `>_ Fortytwo P2P CLI` on the [Changelog page](/changelog), and then manually download and reinstall the app.

    You can find your current version under `◰ Setup script — version validation` when lauhcing the CLI script.

    ### Stopping Fortytwo P2P CLI

    Press **Ctrl+C** in the terminal window to terminate the node process.
  </Tab>
</Tabs>
