Skip to main content

Building

1. Install the libraries​

From the repository root:

haxelib setup # once per machine

# Windows
setup\windows.bat

# Linux / macOS
sh setup/unix.sh

The setup script installs everything in hmm.json, including the pinned Git forks of lime, openfl, flixel, hxcpp, hxvlc, funkin.vis and grig.audio.

2. Build​

haxelib run lime build windows -Dofficial
haxelib run lime build neko -Dofficial
haxelib run lime build html5 -Dofficial
haxelib run lime build flash -Dofficial -D disable-version-check
haxelib run lime build air -Dofficial -D disable-version-check -DAIR_SDK=C:\AIR\AIRSDK_51.2.2

lime test <platform> builds and launches the result. <platform> is windows, linux, mac, android, ios, html5, neko, flash or air.

First build takes a while

A cold C++ build of a Flixel game takes roughly 5–10 minutes depending on your machine. Subsequent builds reuse the hxcpp compile cache.

3. Clean​

lime test cpp -clean
# or simply remove the build output
rm -rf export build

Targets​

TargetCommandNotes
Windowslime test windowsprimary target; MSVC toolchain
Linuxlime test linuxneeds g++ and libvlc
macOSlime test mac
Androidlime build androidruns configureAndroidRuntime to copy libc++_shared.so
iOSlime build ios -nosignthe form CI uses
HTML5lime build html5no Lua/Python/video
Nekolime build nekoquick sanity target
Flashlime build flash -D disable-version-checkrelies on the haxelib patches
AIRlime build air -D disable-version-check -DAIR_SDK=<path>compiles as a SWF target

Build defines​

Defines are passed as -D<name> (or -D<name>=<value>) on the lime command line. The most relevant ones:

DefineEffect
-Dofficial / -DofficialBuildmarks the build as an official release build
-DMODDING_LEVEL=0|1|2script support: none / Lua / Lua + Python (desktop default 2)
-DNO_BUILTIN_CONTENTstrips all base-game songs, weeks, characters and art — see below
-DULTRA_OPTIMIZEDmaximum-speed build (work in progress)
-DULTRA_HTML5HTML5-specific optimization pass (work in progress)
-DDEBUG_TRACY / FEATURE_DEBUG_TRACYTracy profiler instrumentation
-Ddisable-version-checkrequired for flash and air
-DAIR_SDK=<path>location of the AIR SDK

See Project configuration for the full feature-flag list and how project.hxp turns them into compiler defines.

Script modding levels​

lime test windows -DMODDING_LEVEL=1 # Lua only, no Python VM in the binary
ValueLuaPythonTypical use
0✗✗smallest build, hardcoded mods only
1✓✗Psych/JS Engine compatibility without the Hython cost
2✓✓default on desktop and mobile

The level is read by project.hxp and translated into the LUA_ALLOWED and PYTHON_ALLOWED feature flags, which guard the corresponding code with #if. Code behind a disabled flag is not merely skipped at runtime — it is not compiled at all.

Content-stripped builds​

lime test windows -DNO_BUILTIN_CONTENT

Builds the engine without the base game's copyrighted content — song audio, charts, character/week/stage JSONs, cutscene videos and the related art are all excluded. What stays: SFX, menu/pause/game-over music, the UI shell (fonts, sound tray, splash), small runtime text files, and the bundled mods/ folder.

The game still boots: characters, icons, stage art, week cards and dialogue portraits fall back to code-generated placeholders, the title dancer is hidden, and story/freeplay show their "no weeks" message until a mod supplies content. All editors remain usable.

Build output​

PathContents
export/<target>/bin/the runnable game
build/<type>/haxe/*.hxmlthe generated Haxe command lines — useful for checking class-path order
build/<type>/android/bin/the generated Gradle project for Android

Both build/ and export/ are git-ignored.

Convenience scripts​

art/scripts/ contains batch files used during development:

ScriptPurpose
build_x64.bat, build_x32.batrelease builds
build_x64-debug.bat, test_x64-debug.batdebug build / run
test_x64.batrelease build and run
compress.ps1packaging helper
debugThingyMajiggy.batdebug launcher

VS Code users get the same commands as tasks (.vscode/tasks.json) and a debug configuration backed by hxcpp-debug-server (.vscode/launch.json).