# Windows build The native Windows build uses MSYS2's UCRT64 toolchain and creates a runnable folder of PE executables plus their runtime DLLs and data files. It does not reuse the GNU/Linux `build/` directory or generated `config.mk`. Install MSYS2, then install the UCRT64 packages needed by the project: ```sh pacman -S --needed \ mingw-w64-ucrt-x86_64-gcc \ mingw-w64-ucrt-x86_64-make \ mingw-w64-ucrt-x86_64-pkgconf \ mingw-w64-ucrt-x86_64-libsodium \ mingw-w64-ucrt-x86_64-curl \ mingw-w64-ucrt-x86_64-SDL2 \ mingw-w64-ucrt-x86_64-SDL2_ttf ``` From the repository root in PowerShell, run: ```powershell .\build-windows.ps1 ``` Compiler outputs, including tests and intermediate files, stay in `build\windows`. Distribution output is staged separately: `dist\windows-x64` contains only the eight user-facing programs, their runtime DLLs, assets, Scheme files, and manuals. `dist\installers` contains a portable ZIP and, when Inno Setup is installed, the setup executable. Do not distribute the contents of `build\windows` directly. The build date's Discordian calendar conversion is compiled into the GUI; no external `ddate` installation is needed. To create just the portable ZIP, run `build-windows.ps1`. To create the install wizard as well, run `build-windows-installer.ps1`. `cable-thang.exe` is a native C/S7 client using Cesspool and Sleep. Node.js and Cabal JavaScript modules are needed only for optional interoperability tests. Cable audio and video support are experimental and disabled by default, so the regular Windows build does not require FFmpeg. To enable both, install FFmpeg and build with: ```powershell pacman -S --needed mingw-w64-ucrt-x86_64-ffmpeg .\build-windows.ps1 -EnableCableMedia ``` The UCRT64 FFmpeg libraries provide Cable's AAC-LC encoder/decoder, OBS MPEG-TS ingest, and low-resolution JPEG video exchange; their runtime DLLs are copied beside the Windows executables. In `cable-thang`, `OBS INPUT` (or Ctrl+Shift+V) listens on local UDP port 5000; OBS can publish MPEG-TS there using its Custom FFmpeg Output. The GNU/Linux workflow is `./configure`, `make`, and `make install`; its default compiler output is `build/linux`. To create a staged GNU/Linux tarball, use `make package`. Release artifacts go under `dist/` on both platforms. To create a source-only archive, run `package-source.ps1`; its contents and exclusions are documented in `docs\source-distribution.md`. That configuration checks for libcurl because the Dillo-compatible `dat-dns` lookup uses HTTPS `/.well-known/dat`; it does not call the operating system DNS TXT resolver. ## Install wizard Install [Inno Setup 6](https://jrsoftware.org/isinfo.php) after installing the MSYS2 build tools. From PowerShell at the repository root, run: ```powershell .\build-windows-installer.ps1 ``` The script rebuilds the Windows applications, bundles their DLLs and runtime assets, and creates `dist\installers\dat-thang-setup-0.0.002-x64.exe`. The application identifies itself as `dat-thang v0.0.002 (prototype, pre-alpha)`; the executable file version is `0.0.2.0`. The wizard offers a per-user or all-users install, a destination folder, optional desktop shortcut, optional PATH entry for the terminal commands, and an optional launch at the end. Uninstall removes a PATH entry only when this installer added it. The app and installer use the same generic green hexagon icon. The Start menu includes dat-thang and a command prompt with the installed tools on PATH. `cable-thang.exe` is included for opening a room address from the command prompt and connects through Cesspool. `cesspool-bootstrap.exe` runs a dedicated Cesspool discovery node in the foreground. It is for an operator deploying a reachable public rendezvous host, not something chat users need to run. The node needs a stable state directory and inbound UDP on the selected port; see `docs\cesspool-bootstrap.1` for process-supervisor and firewall setup. The Windows installer includes the executable and the operator manpage in its `docs` folder. Keep the node identity outside the checkout. In PowerShell, run the development executable with `--state-dir "$env:LOCALAPPDATA\dat-gpt\cesspool-bootstrap-state"`. That keeps the private identity key in per-user application data rather than in the source tree or disposable compiler output.