Free flight and arcade stick test
Joystick test built for throttles, twist and hat switches
Flight sticks, arcade sticks, throttle quadrants and rudder pedals arrive with far more axes than the four a console pad has, and nothing past the fourth is given a name by the specification. This page puts every axis on its own bar, paints the travel it has already covered behind the live position so a throttle that stops short becomes visible, and decodes a point-of-view hat into a compass direction rather than printing the 3.29 that a released hat genuinely reports. Force feedback is the one thing that stays out of reach: a browser can request a two-motor rumble and nothing else, so a wheel or a base with no resistance here is behaving normally.
- 100% free
- No signup
- Every axis
- Hat decoded
- Two devices at once
How to test a flight stick or arcade stick
Wake each device, prove the travel, then work out which axis is which.
Press a fire button on each device you want tested
Moving the stick is not enough to introduce it. A browser reveals a controller only after a button arrives, and axis movement on its own does not count — which is exactly the wrong way round for a flight stick, where the axes are the point. Squeeze the trigger once. If your throttle, pedals or button box are separate USB devices, press something on each of those too, because every one of them has to knock on the door for itself.
Sweep every axis to both of its stops
Take the stick fully forward, back, left and right, then twist it if it twists. Push the throttle from idle to the gate. Press each pedal to the floor. A pale band grows behind each bar to record the travel that axis has covered, with the fraction of full range beside it — so an axis that reads 96% after a full sweep is telling you it never reached its stop, which is a mechanical problem rather than a calibration one.
Identify the unnamed axes by moving one control at a time
Past the fourth axis the specification has no names to offer, so the bars are numbered and the numbering is your device's own. Move a single control and watch which bar answers: the twist axis, the throttle, the rotaries and the slider will sort themselves out in about ten seconds. A hat labels itself, because it is the only control that reports values outside the range an axis is allowed to use.
Technical specifications
| Axes per device | No ceiling — every axis published is drawn, where a console pad has 4 and a full HOTAS throttle can report 8 or more |
|---|---|
| Axis names | Only the first four, and only on a remapped device; index 4 upward is numbered because the specification has no word for a throttle |
| Travel recorded | Minimum and maximum per axis since the page loaded, painted behind the live marker, with the percentage of full range covered |
| Hat switch | Decoded into 8 compass directions; a released hat reports roughly 3.29, outside the -1 to 1 an axis is supposed to stay within |
| Devices shown at once | All of them, stacked — a stick and throttle set enumerates as two USB devices and both are listed together |
| Buttons per device | As many as it reports; DirectInput allows 128, and each one is a numbered chip that stays cyan once it has closed |
| Force feedback | Not readable and not writable from a browser — the only haptic command in the API is a two-motor rumble a wheel base does not implement |
| Storage used | None; recorded travel lives in page memory and is discarded by the clear button or by a reload |
Frequently asked questions
Why does my HOTAS appear as two separate controllers?
Because it is two separate controllers. A stick-and-throttle set connects as two USB devices with their own descriptors, their own button numbering and their own axis lists, and every operating system since USB gaming devices existed has enumerated them that way — your simulator binds them separately too. This page stacks all of them rather than making you pick one, which is the whole reason it does not draw a picture. Slot numbers come from the order the devices woke up, so unplugging one and plugging it back in can reshuffle them.
My hat switch comes through as an axis, not as four buttons.
That is the normal encoding for a point-of-view hat and not a fault. DirectInput describes a hat as a single value in hundredths of a degree with a separate 'released' state, and a browser rescales that onto one axis instead of splitting it into buttons. The eight directions land on an even ladder between -1 and 1, and the released hat lands at about 3.29 — outside the range an axis is permitted to use at all, which is precisely how this page recognizes a hat and starts printing compass directions for it. Some sticks do expose the hat as four real buttons instead; those show up as ordinary numbered chips.
Why are half my axes called Axis 4, Axis 5 and so on?
Because the standard mapping stops at four axes and has no vocabulary past them. Names exist only for a left stick and a right stick, and only when the browser recognized the device well enough to remap it — which it rarely does for flight hardware. Everything beyond that arrives in raw firmware order with an index and nothing else. No web page can do better, because the information genuinely is not sent; the HID report descriptor that would name them is not exposed to JavaScript.
My throttle rests at -1.000 instead of 0.000. Is it broken?
No, that is what a throttle should do. A stick axis is centered and swings both ways, so its rest is zero; a throttle is a one-way lever with idle at one end, so its rest is one extreme of the range and full power is the other. Rudder pedals with a toe-brake axis behave the same. What matters is that the value moves smoothly across the whole band as you push, and that both ends actually reach their stop — the range figure beside each bar is there to check exactly that.
I have three pedals but only one axis appears for them.
Older pedal sets combine the two toe brakes into a single differential axis and report rudder separately, which gives you two axes for three physical inputs. That is a hardware design choice from the days when axis counts were scarce, not something software can undo. Some sets have a switch on the underside to change between combined and separate modes. If you see three axes but one of them never moves, check whether the pedals need a separate USB connection from the stick — a set daisy-chained through a throttle sometimes enumerates only when the throttle is powered.
Does the calibration I did in Windows show up here?
Yes — the operating system's calibration is applied before the browser sees anything, so a stick you have just centered and ranged in the game controller panel reads correctly on this page too. What does not carry over is anything a game does on top: response curves, in-game dead zones, sensitivity and axis inversion all live inside the simulator and are invisible here. That difference is useful. If an axis looks correct on this page and wrong in the sim, the sim's own settings are where the problem is.
Can I check a racing wheel with this?
The inputs, yes; the force feedback, no. A wheel enumerates as a gamepad with the steering as one axis and the pedals as one axis each, and all of that reads normally here — including whether the wheel returns to exactly the same center after a full lock-to-lock sweep. Force feedback is a different matter: the only haptic command the Gamepad API defines is a two-motor rumble, which a force-feedback base does not implement, so a wheel that goes limp in a browser is behaving exactly as designed.
About sticks, hats and why the web is awkward with them
The Gamepad API was written for console pads and it shows. Its standard mapping defines four axes and seventeen buttons, which is exactly one dual-stick controller, and a device with a twist axis, a throttle, two rotaries and a slider has nowhere to put any of that. So the browser gives up on remapping it, reports an empty mapping string, and passes the axes through in whatever order the firmware numbered them. That sounds worse than it is — the values are accurate and complete, they simply arrive anonymous, and ten seconds of moving one control at a time labels the whole device. What genuinely is missing is the HID report descriptor, the part of the device that says “axis 5 is a throttle”. It is never exposed to JavaScript, so no web page can name your axes, and one that claims to has guessed from the product name.
Hats are the strangest part. A point-of-view hat is not four switches to DirectInput; it is one control that reports an angle in hundredths of a degree, plus a distinct “nothing pressed” state. When a browser folds that onto an axis, the eight directions come out as an even ladder from -1 for up round to 1 for up-left, and the released state comes out as roughly 3.29 — a value outside the range an axis is defined to use. Most testers print that number raw and leave people convinced their hat is broken. It is not, and this page uses that impossible value as the signal to treat the axis as a hat and print a direction instead. Sticks that expose their hat as four real buttons exist too, and those show up in the numbered chips like any other switch.
The last thing that catches people out is that a HOTAS is not one device. The grip and the throttle have separate USB descriptors, separate button numbering and separate slots in the browser’s list, and the slot order can change when you unplug one of them — which is also why simulators lose bindings after a reshuffle. Everything above applies to the pedals and the button box too. If what you are holding is a console pad after all, the gamepad tester is the shorter road, and an Xbox pad specifically gets drawn with names on it in the Xbox controller tester. A stick whose center wanders on its own is the same wear a thumbstick suffers and gets the same treatment in the stick drift test. Two neighbors matter for sim rigs in particular: a cockpit binds thirty keys as well as the stick, and how many of them your keyboard can report at once is the key rollover test; and if a night flight looks gray at the edges rather than black, that is the panel and not the sim, which the backlight bleed test will show you in one screen.
What happens to the axis data
Every number on this page is worked out by JavaScript running in the tab you are reading it in. Nothing you type, paste or open is uploaded, logged or kept, which is also why the tools carry on working after you disconnect from the network.
The recorded travel for each axis is a pair of numbers held in this page’s memory while the tab is open. It is not written to storage and there is no session to resume, which is why the bands start empty every time you come back.