Das Keyboard 5Q

World’s First Smart Keyboard

Receive notifications on your keyboard

Das Keyboard 5Q Side View

Track what you care about

Improve your daily productivity

The Das Keyboard 5Q is a smart RGB mechanical keyboard allowing users to display color notifications on each key. Notifications can come from applications such as Twitter, Gmail, eBay, Facebook and many others. Hundreds of applications can be configured via IFTTT and Zapier, transforming the 5Q keyboard into a RGB dashboard. An open REST API is also available for programmers.

Made possible by Kickstarter Backers

Funded over 580%

The most advanced software

Press the Q knob to read notifications

Gama Zulu RGB Switches

Dashboard view

All your notifications in one place
Gama Zulu RGB Switches

With the Dashboard view, you can quickly visualize the state of your keyboard.
Mouseover each individual key to see which notifications are streaming through.

Cloud connection

Receive IFTTT and Zapier notifications directly on the Q keyboard
Schema of the Q keyboard software

The keyboard of superlatives

The most advanced electronics

Das Keyboard 5Q Side View
Das Keyboard 5Q Gamma Zulu Switch Badge.
World's
longest
lasting
switches
Das Keyboard 5Q Color Badge.
2x ultra
enhanced
brightness
Das Keyboard 5Q RTO Badge.
45 times faster
than any
keyboard
Das Keyboard 5Q Rest API.
Program it
your way
Das Keyboard
1000 key detections/sec
Regular Keyboard
50 key detections/sec

Analog key detection: RTO

RTO: Real Time One millisecond

Due to its 1ms key detection analog technology, the Das Keyboard 5Q has unrivaled speed that will ensure it never misses a keystroke.

2x brighter: RGB+

Brilliant colors that are not washed out

Due to its enhanced brightness mode(*) and its modern switch design, the 5Q delivers intense colors that are not washed out by daylight - a problem that most RGB keyboards suffer from.

(*) requires an USB 3.0 connection.
Gama Zulu RGB Switches

Ultra-fast & comfortable Gamma Zulu mechanical key switches

Made by Omron (Japan) for Das Keyboard, the Gamma Zulu is a modern best-in-class, fast, soft tactile key switch. It lasts forever with its unequalled 100 million life cycle. The feel is amazing and allows effortless typing and gaming sessions.

Standard mechanical switches* Das Keyboard Gamma Zulu by Omron
Actuation point 2.0 mm 1.5 mm
Total travel 4.0 mm 3.5 mm
Life span 50 Million 100 Million
Contact type Single cross point Double cross point
*Based on manufacturer specifications

Learn more about the Gamma Zulu switch

Gamma Zulu switches withstand 100 million actuations. It is up to 100% more durable than most competitor’s switches. They require 45 grams to actuate at 1.5 mm — that’s for speed. The full travel is 3.5mm — that’s for comfort.

Gamma Zulu RGB LED Switches
Gamma Zulu technical specifications
Gamma Zulu Mechanical Switches Characteristics
Gamma Zulu mechanicals switch characteristics
Gamma Zulu Switch Diagram
Gamma Zulu force curves

A REST API for hackers

Do you have Code Fu?

#!/bin/sh
#-----------------------------------------------
# This script colorize a key of the Q Keyboard
# by sending a JSON signal to the its public API
# located at http://localhost:27301
#-----------------------------------------------
set -e # quit on first error.
# Q desktop public API port #
PORT="27301"
PID="DK5QPID" # product ID
ZONEID="KEY_A" # Key to colorize
# Q desktop public API url
URL="http://localhost:$PORT/api/1.0/signals"
#
# important NOTE: if field "name" and "message" are empty then the signal is
# only displayed on the devices LEDs, not in the signal center
#
echo "Sending signal to zoneId: $ZONEID at $URL"
# sending the signal to colorize the key A in red
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
    "pid": "'$PID'",
    "zoneId": "'"$ZONEID"'",
    "color": "#F00",
    "effect": "SET_COLOR",
    "name": "Hello message for '$ZONEID'",
    "message": "Message sent by script '$0'",
    "shouldNotify": true 
}' $URL

result=$?
# checking the response
if [ "$result" -eq "0" ]; then
    echo OK
    exit 0
else
    echo ERROR
    exit 1
fi
//-----------------------------------------------
// This script colorize a key of a Q Keyboard
// by sending a JSON signal to the its public API
// located at http://localhost:27301
//-----------------------------------------------

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "os"
)
// A Signal represents a message to be sent to a Q device.
type Signal struct {
    ID           int64  `json:"id"`           // Not used when creating a signal
    Pid          string `json:"pid"`          // DK5QPID
    ZoneID       string `json:"zoneId"`       // KEY_A, KEY_B, etc...
    Name         string `json:"name"`         // message title
    Message      string `json:"message"`      // message body
    Effect       string `json:"effect"`       // e.g. SET_COLOR, BLINK, etc...
    Color        string `json:"color"`        // color in hex format. E.g.: "#FF0044"
    ShouldNotify bool   `json:"shouldNotify"` // whether to show a OS notification
}
func main() {
    // Q desktop public API port #.
    port := "27301"

    // creating the signal
    oneSignal := Signal{0, "DK5QPID", "KEY_A", "Hello oneSignal", "Signal sent from a go program on a key...", "SET_COLOR", "#F00", true}

    // Encode to JSON
    signalJSON := new(bytes.Buffer)
    json.NewEncoder(signalJSON).Encode(&oneSignal)

    // Construct API URL
    url := "http://localhost:" + port + "/api/1.0/signals"

    // sending the signal to colorize the key A in red
    resp, err := http.Post(url, "application/json; charset=utf-8", signalJSON)

    if err != nil {
        log.Fatal(err)
    }

    // checking the response
    if resp.StatusCode == 200 {
        fmt.Println("OK")
        os.Exit(0)
    } else {
        fmt.Println("Error: ", resp.StatusCode)
        os.Exit(1)
    }
}
//-----------------------------------------------
// This script colorize a key of a Q Keyboard
// by sending a JSON signal to the its public API
// located at http://localhost:27301
//-----------------------------------------------
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import javax.swing.plaf.InputMapUIResource;

class create_one_signal {
    public static void main(String[] args) {
        // creating the signal as a string
        String signalJson = "{\"pid\": \"DK5QPID\", \"zoneId\": \"KEY_A\", \"name\": \"Hello oneSignal\", \"message\": \"signal sent from a java script (haha) to a key\", \"effect\": \"SET_COLOR\", \"color\": \"#F00\", \"shouldNotify\": false}";
        // Q desktop public API port #
        String port = "27301";

        // sending the signal to colorize the key A in red
        try {
            URL urlObj = new URL("http://localhost:" + port + "/api/1.0/signals");
            HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
            urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            urlConnection.setDoOutput(true);
            urlConnection.setRequestMethod("POST");

            OutputStream os = urlConnection.getOutputStream();
            os.write(signalJson.getBytes("UTF-8"));
            os.close();
            // reading the response
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            BufferedReader r = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
            System.out.println(r.readLine());
            in.close();
            urlConnection.disconnect();
            // checking the response
        } catch (IOException e) {
            System.out.println("Error while sending the signal: " + e.getMessage());
            System.exit(1);
        }
    }
}
//-----------------------------------------------
// This script colorize a key of a Q Keyboard
// by sending a JSON signal to the its public API
// located at http://localhost:27301
//-----------------------------------------------
"use strict";

var request = require('request');
// Q desktop public API url
let apiUrl = "http://localhost:27301/api/1.0/signals";
// creating the signal to colorize the key A in red
let signal = {
    "pid": "DK5QPID",
    "zoneId": "KEY_A",
    "color": "#F00",
    "effect": "SET_COLOR",
    "name": "Hello message title",
    "message": "Message body goes here...",
    "shouldNotify": true 
}
// sending the signal
request.post({
    url: apiUrl,
    headers: {
        "Content-Type": "application/json"
    },
    body: signal,
    json:true
}, function(error, response, body){
    // checking the response
    if(response.statusCode == 200){
        console.log("\n\nOK");
    } else {
        console.log("ERROR: ", body);
        process.exit(1);
    }
});
//-----------------------------------------------
// This script colorize a key of a Q Keyboard
// by sending a JSON signal to the its public API
// located at http://localhost:27301
//-----------------------------------------------
// Q desktop public API port #
$port = "27301";

$url = "http://localhost:".$port."/api/1.0/signals";
// if curl_init is undefined, run: sudo apt-get install php-curl
$ch = curl_init($url);

// construction of the signal object
$signal = new \stdClass();
$signal->pid = "DK5QPID";
$signal->zoneId = "KEY_A";
$signal->color = "#F00";
$signal->effect = "SET_COLOR";
$signal->name = "Hello oneSignal";
$signal->message = "signal sent from a php script to a key";
$signal->shouldNotify = false;

// encoding to json
$signalJson = json_encode($signal);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $signalJson);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
// sending the signal to colorize the key A in red
$result = curl_exec($ch);

// checking the response
if ($result == "OK") {
    echo $result."\n";
} else {
    echo "Error while sending the signal: ".$result."\n";
}
#-----------------------------------------------
# This script colorize a key of a Q Keyboard
# by sending a JSON signal to the its public API
# located at http://localhost:27301
#-----------------------------------------------
import json
from os.path import expanduser
import requests

HOME = expanduser("~")

# creating the signal
SIGNAL = {
    "pid": "DK5QPID",
    "zoneId": "KEY_A",
    "color": "#F00",
    "effect": "SET_COLOR",
    "name": "Hello oneSignal",
    "message": "signal sent from a python script to a key",
    "shouldNotify": False
}

HEADERS = {
    "content-type": "application/json"
}
# encoding the signal to json
SIGNAL_JSON = json.dumps(SIGNAL)
# Q desktop public API port #
PORT_NUMBER = "27301"
# Q desktop public API url
URL = 'http://localhost:'+PORT_NUMBER+'/api/1.0/signals'
# sending the signal to colorize the key A in red
R = requests.post(URL, data=SIGNAL_JSON, headers=HEADERS)

# checking the response
if R.ok:
    print R.text
else:
    print "Error while sending the signal: " + R.text
#!/usr/bin/env ruby
#-----------------------------------------------
# This script colorize a key of a Q Keyboard
# by sending a JSON signal to the its public API
# located at http://localhost:27301
#-----------------------------------------------
require 'json'
require 'net/http'

# Q desktop public API port #.
port = "27301"
# Q desktop public API url
url = 'http://localhost:'+port+'/api/1.0/signals'

# sending the signal to colorize the key A in red
uri = URI(url)
req = Net::HTTP::Post.new(uri, 'Content-type' => 'application/json')
req.body = { pid: "DK5QPID",
            zoneId: "KEY_A",
            color: "#F00",
            effect: "SET_COLOR",
            name: "Hello oneSignal",
            message: "signal sent from a ruby script to a key",
            shouldNotify: false }.to_json

res = Net::HTTP.start(uri.hostname, uri.port) do |http|
    http.request(req)
end

# checking the response
if res.body == "OK"
    puts res.body
else
    puts "Error while sending the signal: " + res.body
end
If this does not turn you on, you have no emotions.

Premium materials throughout

For a luxurious typing experience

Aluminium top

Built to last

Das Keyboard 5Q sports an anodized black aluminum top panel. Made with first class electrons, this top panel will be serving you for years to come.

Aluminium Panel
N-Key Rollover

Silicone wrist rest

World’s first

Das Keyboard 5Q features the world’s first silicone based detachable wrist rest that’s attached magnetically and helps typists rest their palms comfortably.

N-Key Rollover

Showcased in the finest publications

SPECIFICATIONS

PRODUCT INFORMATION
  • Double shot keycaps US, and ABS lasered ROW
  • Extra long 6.5ft (201m) USB cable with single type A USB connector
  • NKRO over USB for faster gaming, programming, or anything that makes you a formidable opponent in work or play
  • Anodized aluminium top panel
  • Firmware updatable
  • RTO 1ms
  • RGB+ electronics
SYSTEM REQUIREMENTS
  • Windows® 10, Windows 8.1, Windows 8, Windows 7, macOSX, Linux.
  • One 2.0 USB port, optional 3.0 USB port for enhanced brightness mode
  • Internet connection for software and cloud features
WARRANTY INFORMATION
  • 1-year limited hardware warranty
PACKAGE CONTENT
  • Das Keyboard 5Q
  • Palm rest
  • Getting started guide
PHYSICAL SPECIFICATIONS
  • Height: 1.28 in (32.45 mm)
  • Width: 9.21 in (233.8 mm)
  • Length: 17.77 in (451 mm)
  • Weight: 3.3 lbs (1.44 kg)
  • Cable: 6.5 ft (2 m)
GAMMA ZULU SWITCHES MADE BY OMRON FOR Das Keyboard
  • Feel: Soft tactile
  • Gold cross point contacts: 2
  • Durability: 100 million actuations
  • Actuation distance: 0.06 in (1.5 mm)
  • Actuation force: 1.6 oz (45 g)
  • Total travel distance: 0.14 in (3.5 mm)
AVAILABLE LAYOUTS
  • 104 US
  • 105 UK
  • 105 DE
  • 105 NO
SOFTWARE

ACCESSORIES

TRANSLUCENT KEYCAP SET
  • Without inscriptions for 104 and 105 key layouts.
  • With inscriptions for US, UK, German, French, Nordic, Spanish, and Russian.
  • With inscriptions for Dvorak Layout
BLACK, PROFESSIONAL FONT KEYCAP SET
  • With inscriptions, available only in US

5Q smart RGB mechanical keyboard

Order