Open source driver for accessing raw data from the Emotiv EPOC EEG headset
Python C C++ Pure Data
Pull request Compare This branch is 8 commits ahead, 51 commits behind openyou:master.
Failed to load latest commit information.
cmake_modules The C-en-ing Nov 1, 2012
doc Updated documentation. Dec 23, 2012
include/emokit Correct doc comment for emokit_read_data Mar 6, 2014
linux Added udev rule for the headset. Sep 21, 2010
python Merge pull request #93 from kuz/master Feb 28, 2014
src Key decision for headset type was backwards Jul 3, 2014
.gitignore Added gitignore Mar 13, 2011
CMakeLists.txt Reenabling emokit_osc building Jul 3, 2014 Revert "Documentation for the unpythoning" Dec 11, 2012
INSTALL Allow envvar override to build shared libs Mar 3, 2014
LICENSE Doxygen style commented functions Mar 5, 2012 Link to go bindings Mar 6, 2014


Reverse engineering and original code written by

Contributions by


Emokit is a set of language for user space access to the raw stream data from the Emotiv EPOC headset. Note that this will not give you processed data (i.e. anything available in the Emo Suites in the software), just the raw sensor data.

The C library is backed by hidapi, and should work on any platform that hidapi also works on.



If you have a problem not covered in the FAQ, file it as an issue on the github project.

PLEASE DO NOT EMAIL OR OTHERWISE CONTACT THE DEVELOPERS DIRECTLY. Seriously. I'm sick of email and random facebook friendings asking for help. What happens on the project stays on the project.


If you are using the Python library and a research headset you may have to change the type in's setupCrypto function.

Required Libraries


C Language


C library

See epocd.c example

Python library


import emotiv
import gevent

if __name__ == "__main__":
  headset = emotiv.Emotiv()    
    while True:
      packet = headset.dequeue()
      print packet.gyroX, packet.gyroY
  except KeyboardInterrupt:



Platform Specifics Issues


Due to the way hidapi works, the linux version of emokit can run using either hidraw calls or libusb. These will require different udev rules for each. We've tried to cover both (as based on hidapi's example udev file), but your mileage may vary. If you have problems, please post them to the github issues page (

Your kernel may not support /dev/hidraw devices by default, such as an RPi. To fix that re-comiple your kernel with /dev/hidraw support

Credits - Cody

Huge thanks to everyone who donated to the fund drive that got the hardware into my hands to build this.

Thanks to Bryan Bishop and the other guys in #hplusroadmap on Freenode for your help and support.

And as always, thanks to my friends and family for supporting me and suffering through my obsession of the week.

Credits - Kyle

Kyle would like to thank Cody for doing the hard part.

He would also like to thank emotiv for putting emo on the front of everything because it's god damn hilarious. I mean, really, Emo Suites? Saddest hotel EVER.