Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/InventiveRhythm/fluXis/llms.txt

Use this file to discover all available pages before exploring further.

Writing fluXis storyboard scripts in a plain text editor works, but you will miss out on autocompletion, inline documentation, and type error highlighting. The fluXis installation ships a scripting/ folder that contains Lua library definition files specifically authored for sumneko’s Lua Language Server. Once the language server is pointed at that folder, your editor gains full awareness of every fluXis global — element constructors, mathf functions, AudioAnalyzer methods, easing names, enum values, and more.

What the scripting/ Folder Contains

The scripting/library/ directory holds a set of ---@meta Lua files. These files are never executed; they exist solely to teach the language server about fluXis-specific types and globals:
FileProvides
shared.luaSetVersion, RandomRange, BPMAtTime, DefineParameter, print
storyboard.luaElement constructors, Add(), screen, metadata, settings, Layer(), Anchor(), BlendMode()
skin.luaskin:sprratio(), skin:colwidth(), skin:hitpos(), skin:recoffset(), skin:recfirst()
audio.luaAudioAnalyzer, FFTParameters, FFTFrame, FFTBands
math.luamathf with all scalar and vector methods
map.luamap:NotesInRange(), map:TimingPointsInRange(), map:ScrollVelocitiesInRange(), map:HitSoundFadesInRange(), map:EventsInRange()
enums.luaEasing, HitObjectType, AnchorName, BlendMode, EventType, ParameterDefinitionType
events.luaAll event class definitions (BeatPulseEvent, FlashEvent, ShaderEvent, etc.)
struct.luaVector2, Color4, HitObject, TimingPoint, ScrollVelocity, HitSoundFade
You do not need to require or dofile any of these files in your scripts. They are read by the language server only. Including them in your Lua runtime would cause errors because they use ---@meta markers that signal “type definitions only”.

Finding the scripting/ Path

The scripting/ folder lives in the root of your fluXis installation directory, alongside the game executable. If you installed via Steam, the default path is:
C:\Program Files (x86)\Steam\steamapps\common\fluXis\scripting
On Linux the path follows your Steam library location, typically:
~/.local/share/Steam/steamapps/common/fluXis/scripting
On macOS:
~/Library/Application Support/Steam/steamapps/common/fluXis/scripting
Use the full absolute path when configuring the language server. Relative paths may not resolve correctly depending on which folder you open in your editor.

Installing the Language Server

Step 1 — Install the Extension

1

Open VS Code

Launch Visual Studio Code. If you do not have it installed, download it from code.visualstudio.com.
2

Install the Lua Extension

Open the Extensions panel (Ctrl+Shift+X), search for Lua by sumneko, and click Install. The extension ID is sumneko.lua.Alternatively, install it from the command line:
code --install-extension sumneko.lua
3

Open Your Map Folder

Use File → Open Folder to open the folder that contains your map’s .fsc file and Lua scripts. The workspace configuration you create in the next step is scoped to this folder.
4

Create .vscode/settings.json

Inside your map folder, create a .vscode/ directory if one does not exist, then create settings.json inside it with the following content — replacing the path with your actual fluXis installation path:
{
  "Lua.workspace.library": [
    "C:\\Program Files (x86)\\Steam\\steamapps\\common\\fluXis\\scripting"
  ]
}
5

Reload the Window

Press Ctrl+Shift+P, type Reload Window, and press Enter. The Lua Language Server will index the fluXis library files and activate autocomplete.

Verifying the Setup

Once the language server is configured, open (or create) a .lua file in your map folder and try typing the following. Autocomplete and type hints should appear at each step:
SetVersion(2)   -- hover shows: param v: number

function process(parent)
  local box = StoryboardBox()
  -- type "box." and see all StoryboardElement fields listed
  box.layer   = Layer("Background")
  box.anchor  = Anchor("Centre")
  box.origin  = Anchor("Centre")
  box.time    = 0
  box.endtime = 5000
  box.x       = screen.x / 2
  box.y       = screen.y / 2
  box.width   = 100
  box.height  = 100
  -- type "box:a" and see ":animate()" listed
  box:animate("Fade", 0, 500, "0", "1", Easing("OutQuad"))
  Add(box)
end
If autocomplete does not appear, check that Lua.workspace.library points to the scripting/ folder itself (not the scripting/library/ subfolder). The language server scans recursively, so pointing at scripting/ is correct.

Common Issues

Ensure the path in Lua.workspace.library uses the correct path separator for your OS (backslashes on Windows, forward slashes on Linux/macOS) and that the path ends with scripting not scripting/library. Reload the window after making changes.
This is normal and expected. The ---@meta annotation tells the language server these files are definition-only. They should not appear in your script’s directory — they live in the fluXis installation, which the language server reads as a library, not as part of your project.
Make sure VS Code opened your map folder as the workspace root, not a parent folder. The .vscode/settings.json is folder-scoped. If you opened a parent folder, move the .vscode/settings.json to that parent folder or open the correct folder.
The plugin requires Rider 2023.1 or later. Ensure your IDE is up to date. You can also install the plugin manually by downloading the .zip from the JetBrains plugin repository and using Install Plugin from Disk in the Plugins settings panel.

Next Steps

With your IDE configured, you are ready to write your first storyboard script. Check the Storyboard API page for the full element and animation reference, or the Global Functions page for math utilities, audio analysis, and parameter helpers.

Build docs developers (and LLMs) love