Est. 2004 Beginner

GlovePIE

A Windows-only scripting language for input emulation, written so that a line like W = glove.z > -50 cm turns a VR glove, a Wii Remote or a Kinect into whatever keyboard, mouse, joystick or MIDI device a game already understands.

Created by Carl Kenner

Paradigm Procedural and dataflow-flavoured: a script is a list of assignments re-evaluated every frame in an implicit loop, with conventional if/while/for statements and macros layered on top
Typing Dynamic and weak. Values are numbers, booleans, strings, vectors or 3x3 matrices, with no declarations; numeric literals can carry physical units (cm, degrees, ms, Hz) that the compiler tracks and converts automatically
First Appeared 2004
Latest Version 0.46, a build circulated in early 2012 that patches 0.45 for the Wii Remote Plus TR. The last version Carl Kenner released in the normal way was 0.45, dated 31 December 2011 in its own readme

GlovePIE - Glove Programmable Input Emulator - is a Windows program with a scripting language inside it, and the language is the interesting part. Its job is translation: a script reads whatever exotic device you own and writes whatever ordinary device your software expects. The canonical four lines from Carl Kenner’s own documentation say the whole thing at once:

W = glove.z > -50 cm
S = glove.z < -70 cm
A = glove.x < -10 cm
D = glove.x > 10 cm

Four assignments. On the right, the position of a virtual reality glove in centimetres. On the left, the WASD keys. Nothing declares a variable, nothing opens a loop, nothing converts units, and nothing polls a device. The script is simply true continuously: while it runs, the W key is held down exactly when the glove is further forward than 50 centimetres, and released when it is not.

Origins

Kenner, a developer based in Adelaide, South Australia, came to the problem from the hardware side. The Essential Reality P5 was a 2002 consumer VR glove that was cheap, briefly fashionable, and poorly supported; Kenner had already written a third-party Dual Mode Driver for it that the P5 community preferred to the official one. The glove worked, but almost no game knew what a glove was. A driver alone could not close that gap, because the games were compiled against keyboards, mice and DirectInput joysticks.

So he wrote an emulator, and gave it a language rather than a configuration dialog. The first public version, numbered 0.10, arrived in 2004 - the copyright line carried by every subsequent release reads “Carl Kenner 2004-”, though several download catalogues date the project to 2005. Its release notes are candid about the state of things: it shipped without instructions, and shortly after upload Kenner discovered that the multiplication operator performed division, having never tested multiplication because P5 coordinates are large numbers he had only ever divided. His suggested workaround, until a fix, was to divide by the reciprocal.

That tone - a working tool, released early, annotated with its own defects - runs through the entire changelog. Later entries include “Various other bugs fixed, and new bugs introduced” and “Some new bugs added (I’m guessing)”.

The language

PIEScript is small, and its central idea is the frame loop. A script is compiled once and then executed from top to bottom, over and over, at a rate the script itself can set through PIE.FrameRate. Every assignment is therefore a standing relationship rather than a one-time event, which is why the WASD example needs no while and no event handlers. One subtlety follows directly: outside an if statement, an assignment only writes its target when the expression’s value changes, so a script does not fight with the rest of the system over a key that nothing is asking it to press. Inside an if, assignment is unconditional.

Around that core sits a deliberately permissive syntax. Assignment can be written three ways - key.Enter = glove.ButtonA, the Pascal-style :=, or backwards as expression => target. Comments can be //, /* */, ', REM or %, so users arriving from C, BASIC, Pascal or shell scripting all guess right. begin/end blocks, div and mod, and for ... to ... step ... do come straight out of Object Pascal, which is unsurprising given that the interpreter itself was written in Delphi - the 0.28 readme blames a Delphi 6 bug for temporarily dropping Windows 95, and the earliest release notes advertise that every maths function in the Delphi runtime was exposed to scripts.

Three features are unusual enough to be worth singling out.

Physical units are part of the type system. Numbers can be written 50 cm, 30 degrees, 100 ms, 100 Hz, and the compiler converts between compatible units automatically and rejects nonsense. Later versions added units of weight and force, and musical intervals - semitones, cents, octaves, major seconds - so a MIDI script can transpose in the notation a musician actually uses. Very few scripting languages of any era carry dimensions through arithmetic; for a language whose whole subject matter is sensor data, it is exactly the right choice.

Vectors and matrices are primitives. var.v = [1,-3,2] cm and var.v = 1i -3j +2k both work, var.m = p5.RotMat pulls a 3x3 rotation matrix out of the glove driver, and . is the dot product. Orientation maths is the daily work of input emulation, and it is built in rather than bolted on.

Time-aware functions are first-class. Delta(x) reports how much a value moved since the previous frame; Smooth(x) averages over frames to damp out hand tremor; Pressed, DoubleClicked and HeldDown turn a continuous signal into discrete events; wait 100 ms suspends only the macro containing it, not the script. DeadZone(joy.x, 10%) and MapRange(x, a, b, c, d) cover the two adjustments every controller mapping needs. These functions encode the difference between raw sensor output and something a game can be played with, and they are the reason a useful GlovePIE script is usually under twenty lines.

Output is equally direct. Assigning to a key name presses it. Type("hello") sends a string. Say speaks through the Windows speech synthesiser, and Said(...) reads back from the recogniser, so voice commands are just another input column. SendOsc(ip, port, address, ...) puts a value on the network. MIDI, joystick axes through the PPJoy driver, force feedback, multiple independent mouse cursors and even Wiimote memory pokes are all reachable from the same flat namespace.

Growth by accessory

GlovePIE’s version history is a fossil record of consumer input hardware. Versions 0.21 and 0.22 added support for professional gear - Polhemus, Ascension, Intersense and WorldViz trackers, 5DT and FakeSpace gloves, the eMagin Z800 headset, and Concept 2 rowing machines. Then, in late 2006, the Wii arrived, and everything changed.

The Wii Remote was a Bluetooth HID device that any PC could pair with, and it was among the first mass-market motion controllers. Wiimote support landed in version 0.22, with Kenner’s own site announcing it on 3 December 2006, a fortnight after the console launched. From then on the changelog reads as a chase: across versions 0.23 through 0.28 came multiple Wiimotes, sensor-bar handling, the Nunchuk, the Classic Controller, calibration, battery reporting and the Wiimote speaker; 0.29 added the WiimoteScripts folder; 0.30 brought the PlayStation 3 SIXAXIS and TrackIR emulation; 0.40 added MotionPlus, gesture recognition and the Balance Board; 0.43 added drum kits and DJ Hero turntables; and 0.45 built in the Kinect. The changelog does not always pin a feature to a single version, so the version each accessory first appeared in is approximate.

The audience changed with it. A tool written for a few hundred owners of a discontinued VR glove became the default answer, for several years, to “how do I use my Wiimote on my PC” - and, after the Kinect was opened up in late 2010, to the same question about skeleton tracking.

The licence

GlovePIE’s licence is one of the strangest attached to widely used software, and it is part of why the project is remembered. Beyond the ordinary terms, it forbade any military use whatsoever - including on a military base, and including recruitment games such as America’s Army - and prohibited export to or use in Israel until stated political conditions were met. This was not merely written down: according to the 0.19 release notes, the “boycott of Israel is enforced by code,” and 0.40 lists “improved copy protection (to stop it running in Israel)” as a feature. A separate clause forbade using GlovePIE to cheat in online games, on the practical grounds that bans would hurt everyone trying to play with a glove, and another singled out NaturalPoint, whose TrackIR protocol GlovePIE emulated, prohibiting them from studying the program in any way.

Kenner also never released the source. That decision, more than anything else, determined what happened next.

Dormancy and preservation

Development stopped in early 2012. Version 0.45 on 31 December 2011 was the last full release; the 0.46 build that followed days later was a targeted patch for a Wiimote hardware revision, offered with Kenner’s own note that he did not know whether it would work. Then glovepie.org went down.

What was left was a closed-source Windows executable, built with a 2000s-era Delphi toolchain, depending on Bluetooth stacks and driver models that Windows has since changed repeatedly. A GitHub preservation project began in November 2019, re-hosting the surviving builds from 0.28 through 0.46 and copying the manual into a wiki before the original pages decayed further. A companion effort is attempting to reconstruct source code from the binary, with the explicit reasoning that a program nobody can rebuild will eventually stop running on a supported operating system.

The language’s ideas outlived the binary. FreePIE, an open-source Programmable Input Emulator whose README describes itself as “very similar to the popular utility GlovePIE, but encourages open development and integration with any device,” reproduces the same frame-loop, assignment-driven model with Python as the scripting layer.

Why it matters

GlovePIE is a case study in the value of a small domain-specific language over a configuration screen. Every competing solution of the era - vendor utilities, per-game profile editors - gave you a table of source-to-destination mappings. Kenner gave you expressions, and the difference is qualitative: you can write a dead zone, an exponential response curve, a smoothed accelerometer tilt, a chord of three keys triggered by a gesture, a mouse cursor whose speed depends on how far your hand has moved since the last frame. None of those fit in a table.

It also demonstrates, less happily, what closed source does to a tool that a community depends on. The language design was good enough that a Python-based successor copied it. The implementation was locked in a binary, and when its author moved on, the only options left were archaeology and reverse engineering - which is, in the end, why it is worth a page here.

Timeline

2004
Carl Kenner, an Australian developer already known in the Essential Reality P5 Glove community for his third-party Dual Mode Driver, publishes the first Programmable Input Emulator. The oldest entry in the version history bundled with later releases is version 0.10, whose notes open "I have uploaded the current version of my Programmable Input Emulator" and admit it shipped with no instructions and a multiplication operator that performed division. Every official release from then on carries the copyright line "Carl Kenner 2004-", which is the firmest evidence for the start year; some download catalogues date the project to 2005 instead
2005
Versions 0.11 through 0.19 turn a toy into a language. The 0.19 notes list vectors, 3x3 matrices, a dot-product operator, approximate-equality operators, factorial, string functions, the ability to call any function in any DLL, and a Doom 3 script demonstrating real walking, jumping and crouching with the glove. Exact release dates for these versions are not recorded in the surviving readme, so only their ordering is certain
2006
Version 0.20 adds Open Sound Control output, force-feedback gamepads, multiple mice tracked individually, multiple on-screen cursors, and the Delta function for frame-to-frame change. It also drops Windows 95, which the readme attributes to a bug in Delphi 6
2006
Wiimote support arrives in version 0.22, weeks after the Wii launched on 19 November 2006. The official site, signed by Kenner and dated 3 December 2006, leads with "NEW! Wiimote Support!" This is the change that takes GlovePIE out of the small VR-glove world and into mainstream PC gaming forums. Versions 0.23 through 0.28 then chase the accessory line: multiple Wiimotes, sensor-bar handling, Nunchuk, Classic Controller, calibration, battery level and the Wiimote speaker
2006
Version 0.28 is released on 22 December 2006, according to the date in its own bundled readme
2007
Version 0.29 follows on 4 January 2007, again per its bundled readme, adding a WiimoteScripts folder, an OutputToFile function, tray minimising and scripts that replay classic Zelda, Mario and Metroid games with Wii-style controls. Version 0.30, whose manual carries a 2007 copyright, brings PlayStation 3 SIXAXIS support, TrackIR emulation, touchpad and SpaceBall input, translation files and partial Windows Vista support
2009
Version 0.40 is dated 31 December 2009 in its readme. It adds Wii MotionPlus, gesture recognition for Wiimotes, Nunchuks and SIXAXIS controllers, Unicode, Balance Board support and automatic Bluetooth-stack detection - and, notoriously, tightens the copy protection that refuses to run the program in Israel
2010
Version 0.43 is reportedly announced on the project blog on 25 January 2010. It fixes drum kits and DJ Hero turntables, allows non-Latin variable names, improves code completion, and repairs the long-standing bug where European decimal separators made the compiler reject 0.1 as an invalid floating point number
2011
Version 0.45, dated 31 December 2011, is declared officially free, adds built-in Microsoft Kinect support so no third-party bridge is needed, imports gesture files from USC's FAAST toolkit (incompletely, the changelog concedes), and moves rendering from Direct3D 8 to Direct3D 9. It is the last conventional release
2012
A developer blog post dated 4 January 2012 describes the Wii Remote Plus TR, a revision of the Wiimote that reports a different product ID and breaks 0.45. Kenner posts a modified build - the version circulated as 0.46 - noting he does not know whether the change is sufficient. Its bundled readme still identifies itself as 0.45. Public development stops here
2019
With glovepie.org offline and no source code ever published, a preservation repository appears on GitHub, reportedly in November 2019, re-hosting the surviving binaries from 0.28 to 0.46 and transcribing the manual into a wiki. A companion project later begins reverse-engineering the executable, on the reasoning that a closed Windows binary with no maintainer will eventually stop running

Notable Uses & Legacy

Wii Remote gaming on the PC

This was GlovePIE's mass audience. Once a Wiimote was paired over Bluetooth, a short script mapped its accelerometers, infrared pointer, Nunchuk stick and buttons onto whatever keys and mouse motion a Windows game expected. Kenner shipped a WiimoteScripts folder from version 0.29 onward, including scripts that recreated the exact Wii control schemes for older Zelda, Mario and Metroid titles running under emulation, and large numbers of user-written .PIE files circulated on gaming forums for years afterwards

Kinect input emulation

After the Kinect was reverse-engineered in late 2010, GlovePIE became one of the standard ways to drive an ordinary PC game with skeleton tracking. Version 0.45 built Kinect support in directly, removing the need for a separate OpenNI bridge, and added an importer for gesture files from FAAST, the Flexible Action and Articulated Skeleton Toolkit from USC's Institute for Creative Technologies

Head tracking and TrackIR emulation

GlovePIE could impersonate a NaturalPoint TrackIR device to any game that supported one, letting flight and racing simulator players feed head-orientation data from cheaper hardware into the TrackIR API. The 0.45 changelog records this emulation working in DiRT 3 and Operation Flashpoint: Red River. The licence text pointedly forbids NaturalPoint or its agents from decompiling, disassembling or even viewing the program in a hex editor

Gestural control of music software

Because GlovePIE emits MIDI and Open Sound Control as readily as keystrokes, it became a low-cost bridge in electronic music setups: a Wiimote or glove producing six degrees of freedom, mapped through a script into continuous controller messages for a DAW or a hardware synth. Practitioner write-ups treat it as the Windows counterpart to macOS tools such as junXion, with the caveat that it has not been updated since 2011

Human-computer interaction teaching and research

University HCI courses and student projects in the late 2000s reportedly pointed at GlovePIE as the shortest path from a Wiimote to a working prototype, since it removed the need to write Bluetooth HID code before testing an interaction idea. It appears in course resource lists and project reports of the period as the tool used to redirect Wiimote data into an existing application

Virtual reality gloves and trackers

The original purpose, and the reason for the name. GlovePIE spoke to the Essential Reality P5 Glove, 5DT Data Gloves, FakeSpace Pinch Gloves, the eMagin Z800 head-mounted display, and research trackers from Polhemus, Ascension, Intersense and WorldViz - hardware that mostly shipped with SDKs rather than Windows drivers, and which GlovePIE turned into something an off-the-shelf game could consume

Language Influence

Influenced By

Object Pascal BASIC

Influenced

FreePIE

Running Today

Run examples using the official Docker image:

docker pull
Last updated: