Most important idea: choose the backend based on how close you need to be to the engine runtime, not just which language you personally like.
Important choices
| Backend | Best use |
|---|---|
| SoulScript | Readable timing-based gameplay and menu scripting |
| HScript and Iris | Deep engine control with direct access to gameplay objects |
| Lua | Familiar FNF-style mod scripting on supported targets |
| Python | Desktop-only tool callbacks and external process helpers |
| JavaScript | Desktop-only Node process hooks and utility tasks |
Important callbacks
create() onCreate() onPostCreate() onSongStart() onUpdate(elapsed) onUpdatePost(elapsed) onBeatHit(beat) onStepHit(step) onDestroy()
These are the callbacks most creators need to understand first. They define setup, song start, per-frame work, rhythm hooks, and cleanup.
Important rules
Do not use Python or JavaScript for frame-heavy gameplay
They are external process bridges. Keep them for tools, validation, and occasional callbacks.
Use SoulScript for readable timed behavior
It is the easiest entry point for creators who want results quickly.
Use HScript or Iris when you need real engine reach
They are the direct path for custom states, gameplay overrides, and deeper systems work.
Keep heavy file access out of update loops
Read assets and data once, cache results, and prefer beat, step, event, or timer hooks over per-frame work when possible.
Quick confidence meter
SoulScript is the easiest start. HScript and Iris are the strongest for deep engine work. Python and JavaScript should stay tool-side.