Documentation Index
Fetch the complete documentation index at: https://mintlify.com/armory3d/armorpaint/llms.txt
Use this file to discover all available pages before exploring further.
ArmorPaint uses amake — a custom build tool located at base/tools/amake — to generate native project files for each platform. amake reads project.js configuration files in both base/ and paint/ to collect C source files, include paths, libraries, defines, and platform-specific backends. No CMake or other external build system is required; the only hard external dependency is a C compiler appropriate for your platform.
Prerequisites
Install the appropriate compiler and tools for your target platform before cloning:
| Platform | Required Toolchain |
|---|
| Windows | Visual Studio with Clang tools for Windows component enabled |
| Linux | clang plus platform libraries (see Linux tab below) |
| macOS | Xcode with command-line tools |
| iOS | Xcode with an iOS SDK and a provisioned device or simulator |
| Android | Android Studio with NDK |
| All | git |
Clone the Repository
Start by cloning the repository. The steps below assume you have run these commands first:
git clone https://github.com/armory3d/armorpaint
cd armorpaint/paint
All platform build commands are run from the armorpaint/paint directory.
Platform Build Steps
Windows
Linux
macOS
Android
iOS
WASM
Enter the paint directory
Open a Developer Command Prompt for VS (or a terminal with the VS environment loaded) and navigate to the paint directory: Run amake to generate the Visual Studio solution
amake reads project.js, resolves all source files and libraries, and writes a Visual Studio solution to build\ArmorPaint.sln.Open the generated solution
Open build\ArmorPaint.sln in Visual Studio.
Build and run
Select the Release or Debug configuration, then press Build → Build Solution (or Ctrl+Shift+B) followed by Debug → Start Without Debugging (Ctrl+F5).
Install dependencies
Install the required system packages for your distribution.Debian / Ubuntu:sudo apt install make clang libvulkan-dev libgtk-3-dev libssl-dev libxi-dev libxrandr-dev libxcursor-dev
Arch Linux:sudo pacman -S make clang vulkan-devel gtk3 openssl libxi libxrandr libxcursor
Enter the paint directory
Build and run with amake
The --run flag compiles the project in place and immediately launches the resulting binary: Enter the paint directory
Run amake to generate the Xcode project
amake generates build/ArmorPaint.xcodeproj.Open in Xcode
open build/ArmorPaint.xcodeproj
Build and run
In Xcode, select the ArmorPaint scheme and your Mac as the target, then press ⌘R to build and run.
Enter the paint directory
Generate the Android Studio project
../base/make --target android
amake generates an Android Studio project at build/ArmorPaint.Open in Android Studio
Launch Android Studio and choose Open, then navigate to armorpaint/paint/build/ArmorPaint.
Build for device
Connect an arm64 Android device (or configure an arm64 emulator), select it in the run target dropdown, and press Run (▶).
Enter the paint directory
Generate the Xcode project for iOS
../base/make --target ios
amake generates build/ArmorPaint.xcodeproj configured for an iOS target.Open in Xcode
open build/ArmorPaint.xcodeproj
Build for device
Select an iOS device or simulator as the scheme target, configure your Team and Bundle Identifier under Signing & Capabilities, then press ⌘R.
Enter the paint directory
Build, compile, and embed in one step
The WASM target requires both the --compile flag (compile in place) and the --embed flag (embed asset files using the C23 #embed directive):../base/make --target wasm --compile --embed
The --embed flag requires clang 19 or newer for C23 #embed support. Confirm your installed clang version with clang --version before building.
Serve the output
The build outputs HTML, JS, and WASM files to build/. Serve the directory with any static HTTP server — browsers block WebAssembly loaded from the local filesystem via file:// URLs.# Example using Python
cd build
python3 -m http.server 8080
Additional Build Options
--compile — Compile in Place
Pass --compile to invoke the C compiler immediately after project generation rather than opening an IDE:
Useful for CI pipelines or headless environments where launching Visual Studio or Xcode is not desired.
--embed — Embed Data Files
Pass --embed to bundle asset files directly into the binary using the C23 #embed directive. This produces a single self-contained executable with no separate asset directory:
The --embed flag requires clang 19 or newer. Using an older compiler will result in a preprocessor error on the #embed directive.
--js <script> — Run a JavaScript Tool Script
amake can execute JavaScript tool scripts during the build. Pass the script path with --js:
../base/make --js base/tools/extract_locales.js <locale_code>
The script is executed by the bundled JS runtime inside amake.
Generating a Locale File
To generate a locale JSON file for a language, run the extract_locales.js tool from the repository root (not the paint/ subdirectory):
./base/make --js base/tools/extract_locales.js <locale_code>
Replace <locale_code> with an ISO 639-1 language code, for example fr for French or ja for Japanese. The tool generates the file at:
paint/assets/locale/<locale_code>.json
Locale strings inside that file can then be translated and the file committed alongside the source.
The repository targets developers and the main branch may contain unstable or work-in-progress code. If you need a stable release, download a pre-built binary from armorpaint.org/download.