Software that allows Figma to talk to hardware, enabling the creation of rapid prototypes of physical devices.
At IDEO I work on a lot of physical product designs that incorporate displays. I commonly work with UX designers whose tool of choice for rapid iteration of experiences is Figma. This allows me to connect their designs to hardware I work on in the initial design phase, and can enable tangible experiences without having to develop software that duplicates the on-screen interactions.
Download the Figproxy App from the github releases also found on the right of this page →
Open “Figproxy.pkg” and follow the prompts. This will install Figproxy in your Applications Folder
Find Figproxy in your Applications and open it.
You will get this prompt, hit OK
If the system asks you to choose a default browser, select “Figproxy” as your default.
After Figproxy is set as the system default, Select the browser that was currently your default browser when this window pops up (For example Google Chrome)
You will also need to give it Accessibility Access:
Click “Open System Preferences” and make sure Figproxy has a check next to it:
That’s it!
Figma does not support communication to other software in its API. Because we can’t go the official route, Figproxy uses two different “hacks” to achieve communication.
Note: I will be using “Arduino” as shorthand for any hardware that can speak over a serial connection as it is by far the most common platform for this usage
When you specify for Figma to go to a link, Figproxy looks at the link and if it starts with “send” (and not, for instance “http://”) we know it is intended to be routed to hardware.
In Figma you can set up an interaction like this: (this sends the character “a”)
In Arduino, you can listen for a character and perform some action like this:
if (Serial.available() > 0) {
// get incoming byte:
char incomingByte = Serial.read();
//in Figma the "Turn LED On" button sends "a", "Turn LED Off" sends "b"
if(incomingByte=='a'){
digitalWrite(LED_BUILTIN, HIGH);
}else if(incomingByte=='b'){
digitalWrite(LED_BUILTIN, LOW);
}
}
If there is more complex data you need to send you can send a string like "hello world!:
You can even send hexadecimal characters by preceding the string with “0x”
In Arduino, you can send a character like this:
Serial.print('c');
To get data into Figma, Figproxy sends characters as keypress events.
If you want to try out examples yourself you can find example Arduino Sketches in this repo and the Figma files here
Demonstrates sending and receiving data from Figma using the Figproxy utility.
Video Link
This allows you to control the colors of an LED strip from Figma. It also shows off raw hex-value data sending.
Video Link
This pushes the limits of Arduino→Figma communication - where we make a digital twin of a knob that has 100 different positions and make a “locker combo simulator” to show how we can use Figproxy to make complex interactive dynamic prototypes.
Video Link