Install The Athanor on Windows
The supported ordinary package is one native Windows x64 installer:
The-Athanor-<version>-windows-x64.exe
The-Athanor-<version>-windows-x64.exe.sha256
The installed runtime does not require WSL, Python, Bun, Cargo, a Rust toolchain, or a separately installed PostgreSQL or NATS server. PowerShell, MSVC, Cargo, and Inno Setup are build-time tools only.
The command examples below name 1.0.0-rc.3 because it is the last immutable
public installer artifact proven on the reference workstation. The active
source version is 0.9.6; locally installed native versions may be newer than
the last publicly published checksum-paired installer.
Verify and install
Verify the downloaded installer before elevation:
$expected = (Get-Content .\The-Athanor-1.0.0-rc.3-windows-x64.exe.sha256).Split(' ')[0]
$actual = (Get-FileHash .\The-Athanor-1.0.0-rc.3-windows-x64.exe -Algorithm SHA256).Hash.ToLowerInvariant()
if ($actual -ne $expected) { throw "installer checksum mismatch" }
.\The-Athanor-1.0.0-rc.3-windows-x64.exe
The installer requires Administrator elevation. It verifies the SHA-256 and byte
size of every staged component before it changes the active release. It then
initializes the database, applies ordered schema migrations, installs the
SolarisaelAthanor Windows service, and waits for managed readiness.
Installed topology
Product code is immutable per version. The OMP adapter is an independently installed immutable component. Operator data and secrets are separate:
%ProgramFiles%\Solarisael\Athanor\
bin\
athanor.exe the one exe: Host, service, installer, keeper, chat, status, start
athanor-omp-loader.ts stable product-owned loader
current.json native product activation pointer
versions\<version>\
release-manifest.json
bin\
athanor-substrate.exe
athanor-gui.exe pinned Godot 4.7.1 runtime (parked client)
runtime\
godot\ imported client project + GDExtension (parked)
postgresql\ EnterpriseDB PostgreSQL 18.4-2 + pgvector 0.8.6
nats\nats-server.exe NATS Server 2.14.4
components\omp-adapter\
current.json component activation pointer
versions\<releaseId>\
component-manifest.json
index.ts and other adapter artifacts
%ProgramData%\Solarisael\Athanor\
config\runtime.json
secrets\runtime-secrets.json
data\postgresql\
data\nats\
state\host\
rooms\
logs\
backups\
The stable loader reads native current.json only to obtain the native runtime
environment. It reads components\omp-adapter\current.json to select imports.
The component pointer has format, releaseId, and previousReleaseId fields.
It does not select a native product version.
The manager validates the component manifest, its release identity, every artifact size and SHA-256 value, and all four native compatibility fields before it activates an adapter. The loader repeats those checks before it imports the adapter. A failed check refuses the adapter; it does not load a version-pinned copy from the native payload.
Native current.json is the atomic product activation pointer. The component
pointer is a separate atomic adapter activation pointer. At least the active and
previous product and adapter releases are retained for their own rollback paths.
%ProgramData%\Solarisael\Athanor and the secret file have inherited access
removed and grant full control only to SYSTEM and the local Administrators group.
Tokens and database passwords are generated from the operating-system random
source, are never printed, and live only in the restricted secret file.
Managed service contract
The Rust Windows service owns only the child processes it starts. Startup remains
START_PENDING while each dependency becomes ready:
- managed PostgreSQL on
127.0.0.1:5432when managed mode is active; - NATS JetStream on
127.0.0.1:4222; - boat delivery after PostgreSQL and NATS are ready.
The service reports RUNNING after these children pass their readiness checks.
It stops delivery, NATS, and PostgreSQL in reverse order. The supervisor keeps
the verified handle for each child. It never selects unrelated processes by
name.
athanor.exe is an independent local manager and in-process multi-room Host. It
does not launch the parked Godot client and does not own OMP session lifetime. Every room route
starts with /room/<room-key>.
Run the native doctor from an elevated terminal:
& "$env:ProgramFiles\Solarisael\Athanor\bin\athanor.exe" doctor
Doctor exits nonzero if a native or component activation pointer, a native release manifest, a component manifest identity, a component artifact, native compatibility, the service, or the persistent data root is absent or invalid.
Adapter component operations
The manager is the only installed writer. To install a prebuilt adapter component, run:
& "$env:ProgramFiles\Solarisael\Athanor\bin\athanor.exe" `
install-omp-adapter --source <component-root>
<component-root> must directly contain component-manifest.json and every
declared artifact. The manager stages and verifies the component before it
renames the release directory and atomically updates the component pointer.
To roll back the adapter only, run:
& "$env:ProgramFiles\Solarisael\Athanor\bin\athanor.exe" `
rollback-omp-adapter [--release-id <releaseId>]
The manager refuses an adapter release that is incompatible with the active native manifest. These commands never change a native product version.
The Start menu contains The Athanor and Athanor Doctor.
The Athanor runs athanor.exe, which starts the Host without launching the parked Godot client.
Athanor Doctor provides lifecycle diagnostics.
Run bun gui-prototype/serve.ts from the repository root.
Open http://127.0.0.1:4175 unless PULSE_PORT specifies another port.
The web prototype at gui-prototype/ is the read-only operator surface.
It reads the Host through a loopback proxy.
Existing Solarisael House mode
An existing House must use its current PostgreSQL authority rather than starting a second server on the same port. Supply both an external database secret file and a non-secret House topology file:
{
"houseId": "solarisael",
"roomsRoot": "C:/Solarisael/Obsidian/obsidian",
"operatorStateRoot": "C:/Solarisael/Obsidian/obsidian/house/state",
"defaultRoom": "kintsu",
"hostPort": 8787,
"rooms": [
{ "room": "kintsu", "spirit": "Kintsu" },
{ "room": "kodo", "spirit": "Kodo" }
]
}
.\The-Athanor-1.0.0-rc.3-windows-x64.exe `
/EXTERNALDATABASEFILE="$env:TEMP\athanor-database-url.txt" `
/HOUSECONFIGFILE="$env:TEMP\athanor-house.json"
The installer validates every room-state file before service mutation, takes a database backup even on first external installation, runs no managed PostgreSQL child, and registers exactly one OMP loader for the invoking Windows user.
External PostgreSQL mode
Managed PostgreSQL is the default. External mode is an explicit advanced install
option and still uses the packaged NATS, delivery, Host, substrate, and client.
The external server must be reachable from the service account, provide
PostgreSQL 18 with pgvector 0.8.6 and pg_trgm, and dedicate a private role and
database to The Athanor.
Put the complete connection URL in an ACL-restricted temporary file. Do not put a password on the installer command line:
$secret = "$env:TEMP\athanor-external-db.txt"
Set-Content -NoNewline -Encoding utf8 $secret `
'postgresql://athanor:<password>@db.example.internal:5432/athanor?sslmode=require'
icacls $secret /inheritance:r /grant:r "$env:USERNAME:(R)"
.\The-Athanor-1.0.0-rc.3-windows-x64.exe /EXTERNALDATABASEFILE="$secret"
Remove-Item $secret -Force
The installer reads the file, stores the URL in the restricted runtime secret file, and never logs it. External mode does not create or delete managed PostgreSQL data. Schema compatibility and migrations remain mandatory.
Upgrade and rollback
Running a newer installer performs an upgrade:
- verify the complete new payload before mutation;
- take a schema-labelled PostgreSQL backup while the current service is healthy;
- stop the service in dependency order;
- stage the new immutable version;
- atomically update
current.json; - initialize or migrate PostgreSQL;
- start the service and require readiness.
If migration or readiness fails, activation returns to the previous version and the pre-update database backup is restored. A retained release can also be selected explicitly:
& "$env:ProgramFiles\Solarisael\Athanor\bin\athanor.exe" rollback
Rollback also takes a backup first. It restores the newer pointer and database if the older release cannot become ready.
Uninstall and purge
Windows uninstall stops and removes the service and product binaries. It
intentionally preserves every file under %ProgramData%\Solarisael\Athanor.
Reinstalling can reuse that data after compatibility checks.
Data destruction is a different, explicit command and is never run by Inno Setup:
& "$env:ProgramFiles\Solarisael\Athanor\bin\athanor.exe" purge --confirm-data-loss
Export required rooms and backups before purge. Purge removes both product and persistent data.
Legacy pre-install door
The native installer recognizes only the bounded legacy directory names
solarisael-house, athanor-omp, and
athanor-substrate. Before first activation it copies a bounded,
cache-excluding backup under
%ProgramData%\Solarisael\Athanor\backups\legacy-preinstall and records a
one-time marker. Legacy code is never used as a runtime fallback. Database
migration still requires a valid supported backup and schema lineage; the door
does not silently execute legacy Python, WSL, Bun, or shell tooling.