Named actions, so the game asks about 'move_left' and never about a key or a button. The same four names cover WASD, the d-pad and the stick with no branching, and useVector turns them into a direction with a round dead zone, which is what keeps a gentle diagonal from snapping to a straight line.
The map lives in project.json, beside the window size, and gameOptionsFromProject is the one place it becomes a running game. Click a row and press a key or a pad button to rebind it; the change is kept, so it is still there after a reload. Open the other tab to see the file.