OpenDeck platform v1.0

You’d be forgiven for thinking that OpenDeck project is dead, as well as this blog – after all, it’s been more than a year since the last update. While it’s true that in the past year I haven’t had much time to work on the platform, last couple of months have been full of development again, and this post is an announcement of OpenDeck v1.0 – stable version of firmware, hardware and Web configuration utility. This time, I’ll concentrate on user-facing changes only – low-level changes are going to be discussed in future posts.

In case this is your first visit here, I’ll copy OpenDeck info straight from GitHub:

OpenDeck is a platform suited both for prototyping and developing custom MIDI controllers compatible with any MIDI software on any OS. Main part of the platform is board on which various components used to build a MIDI controller can be connected. The board supports the following components:

  • Buttons
  • Encoders
  • LEDs (single color or RGB)
  • Potentiometers
  • FSRs (force-sensitive resistors)


Since my last post, OpenDeck board went through two revisions. I’ve fixed some stuff, and added some as well, however, the basic layout is exactly the same, as well as dimensions. Final version of the board is black – it sure does look nicer compared to ugly green one.


Now there are three indicator LEDs, compared to two on last revisions. One is for power, and other two are active when there’s MIDI traffic on board (one for input and one for output). Those two LEDs serve double-purpose, as they’re both on while in bootloader mode.

On MIDI side of things, I’ve replaced 6N138 optocoupler with way-faster 6N137.

Configuration utility

This is the big news. Really big. Ever since Google announced the support for Web MIDI in Google Chrome, I wanted OpenDeck configuration utility to run inside it. Building one app which runs on any platform is definitely better than coding three different apps for Mac, Linux and Windows. Since my knowledge of web is pretty miserable, I’ve hired two guys (programmer and designer) to design and build configuration utility based on my specs. I don’t know much about low-level details of utility, but I do know it involves some magic words such as “Angular” and “Javascript”. Concept of utility is actually pretty simple – it has sidebar containing configuration blocks available on OpenDeck – MIDI, buttons, LEDs, encoders and analog stuff. It also has activity log, displaying all incoming and outgoing messages, info window and backup and restore functionality. All configuration is done using custom SysEx protocol explained here. Below are the screenshots.

MIDI configuration block

On MIDI screen, user can configure couple of settings related to MIDI protocol itself, as well as channels for MIDI messages used on OpenDeck. Toggling DIN MIDI in to USD MIDI out will result in all MIDI traffic received via DIN MIDI in connector being forwarded to USB MIDI out, so any older MIDI gear can be used as USB MIDI controllers using OpenDeck  board. You can read more about running status and note off messages here.

Button configuration block

Button window lists all buttons which are possible to configure on board. Even though board has 64 inputs for buttons, 32 analog inputs can be converted to digital inputs (that is, buttons), resulting in total of 96 possible buttons. One of the cool features of utility is that pressing the button connected to board will automatically blink the correct button ID in utility, so that you don’t have to waste time finding it. You can read about how is that accomplished here. Another cool thing is that number of buttons (or anything else) isn’t hardcoded, but generated by the utility. Before the configuration section is rendered, a request is sent to board asking it how many buttons are possible to configure, so utility is future-proof if I’m ever going to increase or decrease number of buttons, encoders etc.

Single button configuration

Clicking on certain button brings up modal window which lists all possible parameters for single button. Here, user can configure button as momentary or latching. MIDI message sent by button can be chosen as well (note or program change) and also, any MIDI ID (0-127) can be assigned to specified button. MIDI ID is used as note or program, depending on which message type is selected.

LED configuration block

LED configuration lists some global parameters applied to all LEDs, as well as list of all LEDs which are possible to configure. OpenDeck supports 48 single-color LEDs, or 16 RGB LEDs, since RGB LED is actually three LEDs in single case.

Single LED configuration

Any LED can have assigned any activation note (0-127). When local control is disabled, LED is controlled with received MIDI note and velocity. You can read more about LED control here. When enabled, any button which sends note same as activation note will control the LED instead. LED can also be configured as RGB LED. Last two options are used for testing LED states (when RGB LED is enabled, different colors can be picked from state test field).

Encoder configuration block

Encoder section displays total of 32 encoders. 64 digital inputs available on OpenDeck can be used to connect those 32 encoders (one encoder takes 2 digital inputs). Note that analog inputs cannot be used to connect encoders.

Single encoder configuration

Encoders need to be specifically enabled in order to function. Encoders send CC messages, and any CC number can be assigned to specific encoder (0-127). Two encoding modes are available: 7Fh01h and 3Fh41h, which can also be inverted.

Analog configuration block

Analog configuration section displays total of 32 components.

Single analog component configuration

Analog components need to be enabled in order to function. This is to avoid junk coming out of floating analog input when nothing is connected to it. All analog inputs can be configured as potentiometers, FSRs and buttons. Default is potentiometer. Any MIDI ID can be assigned (0-127). Potentiometer type will send CC messages with CC number specified as MIDI ID, FSR type will send MIDI note event with note being MIDI ID, and button type will send note event specified in button configuration section. Invert option applies only when potentiometer is active type. Lower and upper CC limits can be used to scale CC values coming from potentiometer and FSR.

Info window

Info window contains some basic info about the board (firmware and hardware version). Checking for updates is done by comparing last tag on OpenDeck GitHub to firmware version currently present on board, which is a very cool feature. Other options include rebooting the board, factory reset and bootloader mode, which is used for firmware update process.

I can say I’m very proud of configuration utility, as it’s one of the first WebMIDI apps used for configuration using SysEx messages! Building a MIDI controller sure does seem easy now. I haven’t had the chance of testing it on Linux distros yet, but it works (mostly) flawlessly on Windows and Mac OS X – mostly because of WebMIDI still being finicky. For instance, MIDI connection sometimes won’t be detected, and leaving the utility idle for some time can sometimes lead to issues. On top of that, Google also requires SSL connection when using SysEx messages via WebMIDI which is a real PITA. Really Google? I hope those issues will be resolved one day, but for now, I can live with it. I also hope other Web browsers will include support for WebMIDI soon – not everyone likes Chrome. There is some activity with WebMIDI implementation in Firefox, though.


Undocumented code is worthless. I’ve written extensive wiki on OpenDeck GitHub, so you can check entire documentation here – everything from schematics, connection diagrams, SysEx protocol, firmware update process etc.

Open Source

Most of OpenDeck really is open. I’ve done my best to write clean and efficient code and document entire project. Exceptions to this are board design (gerber files) and Web utility. Those two things are truly custom solutions, and OpenDeck is a platform open enough to be used without them, since my GitHub contains complete schematics and full documentation on SysEx protocol. Maybe someone will build a better board and better configuration app – who knows? In the meantime, my board and utility really are the only incentives for someone to actually spend any money on OpenDeck. At the end of the day, whenever someone buys it, it will make me invest more time into platform, which translates to less bugs, more features and possibly new products. So far, development of platform has been pretty slow. Supporting it will definitely change that.


Now that board, firmware and configuration utility are ready, you can contact me for pre-order. Pre-order here means that I’ll send the boards to manufacturing once I receive at least 10 pre-orders. I’m selling the board for 111€. Package contains:

  1. Board
  2. USB cable
  3. MIDI cable
  4. Access to online web utility
  5. One year guarantee

Bugs and feature requests can always be reported here.

Thanks for reading!

28 thoughts on “OpenDeck platform v1.0

  1. Very nice, lots of possibilities. Is there any way to chain the hardware to support more than 32 potentiometers?

  2. HI\
    maybe i missed it, but any chance it can be configured as a sysex controller / hardware synth editor?

      1. I think he wants to program rack mount midi controlled synths with it, like the oberheim matrix 1000, or the roland D-550, both cumbersome to program or in need of custom midi controllers. I’m interested too if it’s possible.

      2. If I understood right – the goal is to send and receive custom SysEx messages via DIN MIDI connector? That’s possible, just not at the moment since I’m ignoring all SysEx messages which aren’t formatted in OpenDeck-way. Should be a really simple thing to implement.

  3. 2 questions:

    1. How would I make a case and where do I get the physical knobs and buttons to attach to the PCB?

    2. Would I be able to make faders?

    1. Building the case is fully up to you 🙂 You can get faders, encoders, buttons etc on various places such as Farnell, Mouser, Digikey, Adafruit, Sparkfun, eBay etc.

      I don’t really understand your second question.

  4. This is super-interesting! I’m one of those who has struggled with and (nearly) abandoned a HighlyLiquid MIDI CPU project just because I’m an electronics noob and it’s so intimidating to get started.
    1. Will there be a very simple easy to understand quick start guide (or wiki) with such beginner information as “here’s how to connect your components to the board”?

    2. My project is planned to use 8 rotary pots as MIDI CC, but also 3 linear pots as MIDI note ON/OFF (ribbon/string-like performance), and 3 FSRs sending MIDI pressure messages. This seems the reverse of the default setup you describe. How hard would it be to customize the analog input config to achieve the setup I want?

    3. Can each linear potentiometer (for note ON/OFF) use it’s own MIDI channel?

  5. Hi!

    As I mentioned in post, there is extensive wiki on OpenDeck GitHub, ie. for connections you go here:

    It takes two clicks to enable FSR in OpenDeck GUI (click on analog type, click on FSR – see screenshots in post). FSR sends note velocity. Value depends on initially applied pressure.

    Ribbons sending note events aren’t supported yet, simply because I don’t have them.

    MIDI channel is applied globally to each message type, that is, it’s possible to set MIDI channel for Notes, CC, Program change and Input channel, but not individually for every component.


  6. Hi,

    Very interesting board! I’ve read the doc about the open deck, but i’m a bit noob…so i’ve got a simple question :
    Is it possible to assign a led to a program change button?
    I’d like to have something like 8 buttons, each of them assigned to a program change fonction. When I press PG button #1, Led #1 is turned on. And if I press PG button #2, Led #2 is turned on, and Led #1 off.
    I don’t know if it’s clear enough…
    Sorry for my english, and my noob question.
    Thanks for your work!

    1. Hi,

      yes it’s possible, just not yet – for now LEDs react only on note events, but making them listen program change events is a really simple tweak (one extra line in code). All feature requests will be implemented once I get enough pre-orders in order to justify further development. Hope you can understand that.


      1. Thanks for your reply! No problem, I understand that.
        I think I’ll preorder that board soon, hope this feature will be available!

  7. I just wanted to let you know that I am also interested in buying one if it can send SysEx. I also want to build a controller for the oberheim Matrix 1000.

    1. Hi, I don’t know how USB64 works since I don’t have one. I don’t think anything available right now is as simple as OpenDeck.

  8. Hi Shantea

    Can you operate/configure the ‘OpenDeck’ controller using the USB connection instead of using the MIDI IN/OUT connectors? If the answer is yes, how can I place a pre-order and what lead-time are we talking about?


    1. Hi Steve,

      of course. USB is the only way (for now) to use Web UI/configuration utility.

      You can send me an e-mail (shanteacontrols [at] outlook [dot] dom) for pricing/delivery details.


  9. Hi,
    it looks very great !
    If you are integrated the LED “Radio Button” behaviour as ask before
    so i pre order one or more PCB’s.

  10. Hello! Waiting for it to be on sale again. This is all I need for my projects, so sad I discovered it so late.

  11. So are these boards available at the moment? I’m gonna throw together a midi controller and this looks like a cool platform, but ordering seems a little bit messy. Hit me up on email if you’re selling within a week or two.

    Best regards

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.