Docs
Install

Windows Server

Run 3AM on Windows Server 2022 or 2025, through a Linux VM on Hyper-V or through WSL2.

3AM ships as Linux containers. On Windows Server you run them inside Linux, in one of two ways:

OptionBest forWhy
A Linux VM on Hyper-VProduction (recommended)A normal Linux server: the most predictable networking, reboots and support
WSL2Smaller installs, or where VMs are hard to getNo separate VM to manage, but networking and start-at-boot need the extra steps below

Status

These steps are documented but not yet part of 3AM's certification runs. The Linux VM path is the same as Linux once the VM exists.

Run these in PowerShell as Administrator.

Enable Hyper-V

Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

Create the VM

Use your standard Linux image (RHEL, Rocky, Ubuntu…). For example, with 4 vCPUs, 8 GB of memory and a 60 GB disk:

New-VM -Name 3am -MemoryStartupBytes 8GB -Generation 2 -NewVHDPath "D:\VMs\3am.vhdx" -NewVHDSizeBytes 60GB -SwitchName "External"
Set-VMProcessor -VMName 3am -Count 4
Set-VMFirmware -VMName 3am -EnableSecureBoot On -SecureBootTemplate MicrosoftUEFICertificateAuthority
Add-VMDvdDrive -VMName 3am -Path "D:\ISO\rhel-9.iso"
Start-VM -Name 3am

-SwitchName is a Hyper-V virtual switch connected to your network (Get-VMSwitch lists them).

Verify the bundle on Windows, then copy it to the VM

Get-FileHash .\3am-0.1.0.tar -Algorithm SHA256
scp .\3am-0.1.0.tar you@3am-vm:~

Compare the hash with the one 3AM sent you. The installer also verifies every file inside the bundle.

Install as on Linux

Continue with Linux inside the VM.

Option B: WSL2

Requires Windows Server 2022 (with the latest cumulative update) or Windows Server 2025. Run in PowerShell as Administrator.

Install WSL2 with Ubuntu

wsl --install -d Ubuntu-24.04
# restart if asked, then:
wsl --set-default-version 2
wsl -l -v

Give WSL enough memory and keep it running

Create C:\Users\<you>\.wslconfig:

[wsl2]
memory=8GB
processors=4
# Windows Server 2025: share the host's network, so other machines can reach the console directly
networkingMode=mirrored

Then restart WSL: wsl --shutdown.

Install Podman inside Ubuntu and run the installer

Copy-Item .\3am-0.1.0.tar \\wsl$\Ubuntu-24.04\home\<you>\
wsl -d Ubuntu-24.04

Inside Ubuntu:

sudo apt-get update && sudo apt-get install -y podman
cd ~ && tar -xf 3am-0.1.0.tar && cd 3am-0.1.0
./install.sh --bind 0.0.0.0

WSL has no /etc/machine-id by default, so create one before installing. It becomes this install's licence fingerprint:

sudo systemd-machine-id-setup || (cat /proc/sys/kernel/random/uuid | tr -d - | sudo tee /etc/machine-id)

Start 3AM when the server boots

WSL starts only when something uses it. Create a scheduled task that starts it at boot:

$action  = New-ScheduledTaskAction -Execute "wsl.exe" -Argument "-d Ubuntu-24.04 -u root -- podman start 3am-model 3am-core"
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "3AM" -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest

(With rootless Podman, use your user instead of root, and set the task to run as that user.)

Reach the console from other machines

With networkingMode=mirrored (Windows Server 2025), the console is on the server's own address. On Windows Server 2022, forward the port from Windows to WSL and allow it through the firewall:

$wslIp = (wsl -d Ubuntu-24.04 hostname -I).Trim().Split(" ")[0]
netsh interface portproxy add v4tov4 listenport=8700 listenaddress=0.0.0.0 connectport=8700 connectaddress=$wslIp
New-NetFirewallRule -DisplayName "3AM console" -Direction Inbound -Protocol TCP -LocalPort 8700 -Action Allow

The WSL address can change after a restart. Re-run the netsh line, or add it to the scheduled task. Better still, put your reverse proxy with TLS in front.

Next

Install the licence, then connect your tools in the setup wizard.

On this page