Skip to the content
2 layers15 × 37 mmEvil ducky, the printed circuit board in 3D

A easy to use usb-c device that preteneds to be a keyboard when plugged into a computer

Size
15 × 37 mm
Copper layers
2
Thickness
1.6 mm
Parts
28
Nets
66
Pads
188
Tracks, vias
346, 47
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
26 Aug 2026
Updated
26 Aug 2026

Overview

Evil ducky is an open-source printed circuit board by CoryPearl, from the CoryPearl/evil_ducky repository on GitHub. It is a 2-layer board of 15 × 37 mm with 28 parts on 66 nets, routed with 346 tracks and 47 vias.

It is built around the RP2040, W25Q32JVSSIQ and TLV75533PDBVR-MS, with the TPD2EUSB30DRTR, ABM8-272-T3 and JS102011SAQN among its other parts. Its parts include 13 capacitors, 7 resistors, 4 ICs, 1 diode and 1 connector. It belongs with the keyboards and input boards and the RP2040 boards of this library.

Main components

7

README

README.md

Evil Ducky

Evil Ducky is a compact USB-C HID automation board based on the RP2040. It appears to the host as a USB HID device and can send keyboard and mouse actions from a small text script embedded into the firmware.

Repository layout

  • hardware/evil_ducky_pcb/ - KiCad project for the custom RP2040 PCB.
  • firmware/dev_hid_composite/ - Raspberry Pi Pico SDK firmware using TinyUSB.
  • firmware/dev_hid_composite/main.evil_ducky - the automation script that gets embedded at build time.

Hardware

The board design includes:

  • RP2040 microcontroller
  • W25Q32JV 4 MB QSPI flash
  • USB-C plug
  • TLV75533 3.3 V regulator
  • TPD2EUSB30 USB data-line ESD protection
  • ABM8 crystal
  • Upload/run slide switch
  • Status LED on GPIO16

The KiCad project and custom footprints live in hardware/evil_ducky_pcb/.

Firmware

The firmware is a Pico SDK C project that uses TinyUSB to expose HID reports for keyboard and mouse support. During the CMake build, tools/embed_script.py converts main.evil_ducky into a generated C header, so changing the script currently requires rebuilding and reflashing the board.

At runtime, the board waits for USB HID to become ready, delays briefly for host setup, runs the embedded script once, and then leaves the status LED on if the script completed successfully. A fast blink indicates script failure.

Script format

Edit firmware/dev_hid_composite/main.evil_ducky:

text
# Lines starting with # are comments
WAIT 1000
PRESS SPACE
HOLD TAB
WAIT 500
RELEASE TAB
MOVE 50 50

Supported commands:

  • WAIT <milliseconds>
  • PRESS <key>
  • HOLD <key>
  • RELEASE <key>
  • MOVE <x> <y>

Keys can be letters, digits, common names like SPACE, TAB, ENTER, arrow keys, F1 through F12, modifiers like CTRL, SHIFT, ALT, GUI, or raw HID usages such as 0x2C.

Build and flash

  1. Open firmware/dev_hid_composite/ in VS Code with the Raspberry Pi Pico extension, or build it with the Pico SDK CMake toolchain.
  2. Build the project. The script is embedded automatically.
  3. Set the board switch to UPLOAD and connect it over USB-C.
  4. Copy the generated .uf2 file to the RPI-RP2 drive.
  5. Unplug the board, set the switch to RUN, and reconnect it.

Notes

  • The configured flash size is 4 MB (PICO_FLASH_SIZE_BYTES=4194304).
  • The USB descriptors are based on TinyUSB examples and currently identify as TinyUSB Device.
  • Script lines are limited to 160 characters.

Parts

28
QtyValueFootprintReferences
7100 nFCapacitor_SMD:C_0201_0603MetricC1, C2, C5, C6, C9, C10, C11
21 kΩResistor_SMD:R_0201_0603MetricR1, R6
21 uFCapacitor_SMD:C_0201_0603MetricC7, C8
215 pFCapacitor_SMD:C_0201_0603MetricC3, C4
227 ΩResistor_SMD:R_0201_0603MetricR4, R5
24.7 uFCapacitor_SMD:C_0201_0603MetricC12, C13
110 kΩResistor_SMD:R_0201_0603MetricR3
15.1 kΩResistor_SMD:R_0201_0603MetricR7
1680 ΩResistor_SMD:R_0201_0603MetricR2
1ABM8-272-T3evil_ducky:Crystal_SMD_ABM8-272-T3X1
1JS102011SAQNevil_ducky:SW_SPDT_CK_JS102011SAQNS1
1LED_RLED_SMD:LED_0201_0603MetricD1
1RP2040evil_ducky:QFN-56-1EP_7x7mm_P0.4mm_RP2040U1
1TLV75533PDBVRevil_ducky:SOT-23-5_TLV75533U4
1TPD2EUSB30DRTRevil_ducky:DRT-3_TPD2EUSB30U3
1UP31-CV-G-CMevil_ducky:USB_C_Plug_SameSky_UP31-CV-G-CMJ1
1W25Q32JVSSIQevil_ducky:SOIC-8_5.3x5.3mm_P1.27mm_W25Q32JVSSIQU2

Similar boards

  • 2 layers225 × 63.5 mmGnss-7-seg clock, the printed circuit board in 3D

    Gnss-7-seg clock

    Tosainu/gnss-7-seg-clock

    GNSS-powered, seven-segment table clock

    90 parts6MIT
  • 4 layers81 × 37 mmMaidenhead pocket locator, the printed circuit board in 3D

    Maidenhead pocket locator

    EdmundLimBoEn/gps-maidenhead-device

    Open-source portable GNSS Maidenhead grid locator with a 16x2 LCD

    117 parts
  • 4 layers144 × 112 mmQuadcuber, the printed circuit board in 3D

    Quadcuber

    gonewx/quadcuber

    本目录是 A1 电子源目录。打开 quadcuber.kicadpro,包含原生可编辑原理图和四层 PCB、本地符号/封装库。本设计为单块PCB,RP2040、QSPI Flash、晶振、USB-C、驱动和电源均直接焊接在板上;A0的Pico H插装已移除。马达使用EV3裸插座。接线定义仍从 ../wiring/spec.py 导入,固件未改动,也没有把 R/L 固件描述成已支持四臂控制。

    200 parts
  • 4 layers85.9 × 85.9 mmPd1180-epr r0.3, the printed circuit board in 3D

    Pd1180-epr r0.3

    techmannih/pd1180-epr

    PD1180-EPR — NEMA 34 Smart Motor-Mounted Stepper Controller with USB-C PD 3.1 EPR

    277 parts
  • 8 layers100 × 65 mmMatrixDrive RevB, the printed circuit board in 3D

    MatrixDrive RevB

    Matrixite/MatrixDrive

    MatrixDrive is a USB-loadable Mega Drive/Genesis cartridge

    143 parts
  • 4 layers119 × 63.2 mmOpenChordM1, the printed circuit board in 3D

    OpenChordM1

    FugLong/OpenChord

    An open-source music device for portable, expressive, and extensible audio creation.

    75 parts3MIT
  • 4 layers44 × 44 mmNode pcb, the printed circuit board in 3D

    Node pcb

    marino222/digital-clock72

    Kinetic Art Clock consisting of LCD displays

    55 parts2MIT
  • 4 layers210.9 × 127 mmDual panel, the printed circuit board in 3D

    Dual panel

    fchorney/krakenpad-poc

    proof of concept and research into making kraken pad

    174 parts1

Questions

How big is the Evil ducky PCB?

It measures 15 × 37 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Evil ducky use?

28 parts, built around the RP2040, W25Q32JVSSIQ, TLV75533PDBVR-MS and TPD2EUSB30DRTR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Evil ducky KiCad files?

From the CoryPearl/evil_ducky repository on GitHub, at the commit this page was made from: the board is hardware/evil_ducky_pcb/evil_ducky.kicad_pcb and its schematic hardware/evil_ducky_pcb/evil_ducky.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Evil ducky design in my own project?

Its repository states no licence, so its author keeps all rights: ask CoryPearl before reusing the design.