Skip to content
Native support for Analog Keyboards #WootDev
Rust C++ C# Shell PowerShell C
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
ci CI: Switch to cargo rather than cross for linux as that might be the … Sep 7, 2019
includes-cpp Add FunctionNotFound expected result to initialise Sep 9, 2019
includes Add FunctionNotFound expected result to initialise Sep 9, 2019
wooting-analog-plugin @ f556967
wooting-analog-plugin-dev Travis nightly tests, setup for crate publish Aug 20, 2019
wooting-analog-sdk-updater Bump version number Sep 6, 2019
wooting-analog-virtual-control Switched to using tmp dir for test-plugin link file Sep 2, 2019
wooting-analog-wrapper Add FunctionNotFound expected result to initialise Sep 9, 2019
.gitignore Created full kb layout, various minor improvements Aug 27, 2019
.gitmodules Package wooting plugin with sdk installer Sep 4, 2019
Cargo.toml Package wooting plugin with sdk installer Sep 4, 2019
LICENSE Create LICENSE Aug 7, 2019
Makefile.toml Try get some more info for the deploy error which makes zero sense Sep 7, 2019 Slight readme update Sep 9, 2019 Add FunctionNotFound expected result to initialise Sep 9, 2019

Build Status wooting-analog-common wooting-analog-plugin-dev

Wooting Analog SDK

This repo contains all the core cross-platform components of the Wooting Analog SDK. The SDK and most of the components are built on Rust and should run on Windows, Mac and Linux, following the same steps for each platform unless otherwise specified.



On Windows the SDK & Wooting Plugin will be installed & updated automatically through Wootility (>= v3.4). If you wish to install manually, download the latest .msi from the latest release


On Linux the primarily installation method is the deb package, which includes both the SDK and the Wooting Plugin, which can be found on the latest release

To install manually:

  • Download & Extract the latest release wooting-analog-sdk-v*.*.*-x86_64-unknown-linux-gnu.tar.gz
  • Copy $extract/wrapper/sdk/ to /usr/lib. (Or to some directory and add that path to the LD_LIBRARY_PATH environment variable)
  • Follow the installation instructions for the Wooting Analog Plugin


Currently there is no installer available for Mac, so you will have to install manually.

  • Download & Extract the latest release wooting-analog-sdk-v*.*.*-x86_64-apple-darwin.tar.gz
  • Copy $extract/wrapper/sdk/libwooting_analog_sdk.dylib to /Library. (Or to some directory and add that path to the DYLD_LIBRARY_PATH environment variable)
  • Follow the installation instructions for the Wooting Analog Plugin


This SDK uses Plugins to provide support for Analog hardware, these must be located in a subdirectory of WootingAnalogPlugins. Which can be found in these places on each platform:

OS Plugins Directory
Windows C:\Program Files\WootingAnalogPlugins\
Linux /usr/local/share/WootingAnalogPlugins/
Mac /Library/WootingAnalogPlugins/

So an example path on Windows would be:

C:\Program Files\WootingAnalogPlugins\wooting-analog-plugin\wooting_analog_plugin.dll


Have a look at the SDK usage for a guide on how to use the SDK and the Plugin introduction for information on creating plugins.

Virtual Keyboard

The SDK includes a 'Virtual Keyboard' app which will emulate an Analog Keyboard and allows you to test with the Analog SDK without needing a keyboard. To use this, ensure you have the wooting-analog-test-plugin installed, on windows the installer allows you to choose if you want to install the feature. On Linux it is currently installed automatically with the deb package. If you wish to install it otherwise, you can find it in the .tar.gz for your platform from the latest release under $extract/wrapper/sdk/{lib}wooting_analog_test_plugin.{dll/so/dylib}, install it as discussed above in the Plugins section

To get the virtual keyboard, right now there are only Windows builds available from the latest release, for other platforms you'll need to build it yourself as described below.


  • wooting-analog-sdk: The core Analog SDK which handles loading of plugins. This is installed systemwide and is updated separately
  • wooting-analog-common: This library contains all common Analog SDK definitions which are used by every part
  • wooting-analog-plugin-dev: This library contains all common elements needed for designing plugins. This re-exports wooting-analog-common, so it is not required for plugins to separately depend on wooting-analog-common
  • wooting-analog-wrapper: This is the SDK wrapper which is what Applications should use to communicate with the SDK. The linked dll should be shipped with the application using it.
  • wooting-analog-test: This is a C# test application which can be used to test the SDK through the wrapper.
  • wooting-analog-test-plugin: Dummy plugin which uses shared memory so other processes can control the output of the plugin. This is used for unit testing of the SDK and allows the wooting-analog-virtual-kb to work
  • wooting-analog-virtual-kb: Virtual Keyboard using GTK which allows to set the analog value of all the keys through the dummy plugin. This allows you to test an Analog SDK implementation without an analog device
  • wooting-analog-sdk-updater: Updater tool to update the Analog SDK from Github releases


  • wooting-analog-wrapper.h: This is the header which includes everything that you need to use the SDK. (This uses wooting-analog-common.h which defines all relevant enums & structs)
  • wooting-analog-common.h: This defines all common enums, headers & structs which are needed by plugins & SDK users
  • wooting-analog-plugin-dev.h: This includes wooting-analog-common.h & additional functions which are obtained from statically linking to the analog-sdk-common library. (FOR USE WITH PLUGINS)
  • plugin.h: This is the header which plugins should use to define all functions that need to be exported for a plugin to work


Build Dependencies

  • rust
  • cargo-make
  • cbindgen (For verifying/generating headers. Should be installed automatically if necessary)
  • dotnet-core If you want to use wooting-analog-test
  • libgtk-3 If you want to build the wooting-analog-virtual-kb, follow the install instructions from here (for Windows MSVC I also had to add %VCPKGDIR%\lib to the LIB environment variable)
  • wixtoolset If you want to build the windows installer for the sdk

How to Build

Everything can be built using this command. All the outputs will be under target/debug

cargo make

The current build process is setup to verify the existing generated headers in the test phase. If you decide to make changes which effect these outputs, you can update the headers by running:

cargo make gen-headers

To run the test application:

cargo make test-app

To run the virtual keyboard (The Analog SDK must be running for this to work):

cargo make virtual-kb

To build the windows installer for the SDK:

cd wooting-analog-sdk
cargo make win-installer

The installer will be located in $gitroot/target/wix

To build the deb package for the SDK:

cd wooting-analog-sdk
cargo make build-deb

The deb package will be located in $gitroot/target/debian


All build outputs can be found under target/debug, with generated headers coming under the includes and includes-cpp directories.

Currently the headers have to be manually generated and kept in the repo. When intentional changes are made, the testing phase verifies that the pre-generated headers match what would be generated now to ensure that accidental changes aren't made to the output of the header generation.

Contributing Note

The headers generated for the wrapper, common and plugin-dev crates are verified in the CI to ensure that the current headers are up to date and that we can review any changes which are made to the headers (rather than purely generating them and potentially not knowing exactly what has changed). Before commiting (if you've made changes to any of the previously mentioned crates) you should run cargo make verify-headers to ensure that your headers are up to date, if this fails due to them being different, run cargo make gen-headers and review the changes to the headers before commiting.

Related Repositories


  • Improve docs & crates readme for common and plugin-dev packages
You can’t perform that action at this time.