Explainers · 2026-07-12 · Patreon guide

Patreon for mechanical keyboard creators: switch spring force curves and actuation physics, linear vs tactile leaf-spring bump mechanisms, USB HID protocol and N-key rollover, QMK firmware layers and tap-dance, PCB design and hotswap sockets, acoustic dampening plate materials and gasket mounting, wireless Bluetooth HID and ZMK battery management, and the Apple Tax

Mechanical keyboard Patreons retain patrons because the YouTube review plays the typing test and calls the sound “thocky” but never explains why: not why a polycarbonate plate resonates at a fundamentally lower frequency than brass when both are cut to identical dimensions, not why the USB HID boot protocol is limited to exactly six simultaneous non-modifier keycodes while NKRO requires a custom 128-bit bitmap report, and not why a tactile switch’s bump shape is a direct consequence of the cam geometry on the stem legs rather than a property of the spring. The patron who understands the Young’s modulus derivation, the Friis-equivalent latency chain, and the ZMK Zephyr devicetree configuration does not find that depth in a sound comparison video; canceling the Patreon means losing the engineering layer they came for.

Switch spring mechanics: Hooke’s law, actuation force curves, and factory variation

Spring constant, pre-travel, and total travel

Every mechanical keyboard switch contains a coil spring that provides the restoring force returning the keycap to its rest position after each keystroke. The force a spring exerts obeys Hooke’s law: F = k × x, where F is the force in newtons (or centinewtons, cN, for switch specifications), k is the spring constant in N/m or cN/mm, and x is the displacement from the spring’s natural length. For MX-compatible switches, spring constants typically fall in the range 0.30–0.65 N/mm (30–65 cN/mm). A stiffer spring (higher k) produces a heavier-feeling key because the force at any given travel position is proportionately higher.

Pre-travel is the distance from the top of the key travel (keycap at rest, spring at initial compression) to the actuation point (the moment the switch registers a keypress with the host computer). For MX-style switches, pre-travel is typically 2.0 mm; Kailh and Gateron switches vary from 1.8 mm to 2.2 mm. Total travel (also called bottom-out distance) is the total distance from rest to full key depression, typically 4.0 mm for MX-compatible switches. Post-actuation travel is the remaining distance after actuation: 4.0 − 2.0 mm = 2.0 mm. The spring is compressed an additional 2.0 mm during post-actuation travel, meaning the bottom-out force is always heavier than the actuation force for a linear spring. For a Cherry MX Red (45 cN actuation): if k = 0.45 N/mm = 45 cN/mm and the spring is at 1.0 mm initial compression at rest, then actuation force = k × (1.0 + 2.0) = 135 cN? No — the specification is the force at the actuation point relative to the keycap travel, not from the spring’s free length. Cherry specifies the Red at 45 cN operating (actuation) force and approximately 60 cN bottom-out force, giving a spring rate over the 2.0 mm post-actuation travel of (60 − 45)/2.0 = 7.5 cN/mm — much lighter than the total spring constant because the spring is already under initial compression well before the keycap reaches the actuation point. The pre-compression of the spring at rest is a design parameter set by the spring’s free length and the internal geometry of the switch housing.

Progressive springs use a variable coil pitch: the coils are spaced more closely at one end than the other, so when the switch is lightly pressed, only the loosely-spaced coils contact each other (behaving as a long, compliant spring), but as the switch is pressed further and the close-coil sections bottom-out against each other, the effective spring length decreases and k increases. The result is a spring rate that rises with displacement, giving a lighter initial feel with a stiffer feel near bottom-out. Two-stage springs achieve the same effect by nesting two separate springs of different lengths and constants; the shorter spring only engages after the longer one is fully compressed. Spring crunch is the audible and tactile sensation of coil wire scraping against adjacent coil wire at the extreme bottom-out; eliminating it requires either polished springs or a small application of a low-viscosity oil (Krytox 105, a perfluoropolyether oil with dynamic viscosity approximately 20–30 cSt at 25 °C) to each spring, filling the metal-on-metal contact points.

Factory variation and spring matching

Mass-produced switch springs have inherent manufacturing variation. Coil winding tolerances, wire diameter variation, and heat treatment variability produce a Gaussian distribution of spring constants across a production batch. For most commodity switches, this distribution has a standard deviation of approximately ±3–7 cN from the nominal actuation force specification: a batch of switches nominally rated 45 cN may contain individual switches measuring 38 cN to 52 cN. For typing enthusiasts, this variation is imperceptible across a keyboard because human tactile sensitivity at typing speeds resolves force differences only above approximately 5–10 cN. For force-graph documentation (weighing each switch with a 0.01 cN resolution force gauge and recording the full force-displacement curve), the distribution tail-ends are clearly visible. Premium spring manufacturers (Sprit, TX Keyboards) select or manufacture springs to tighter tolerances; “spring matching” (manually sorting from a batch to within ±1 cN) is sold as a premium service. The force-displacement curve at different lubing states is directly measurable and publishable: dry spring, 1× coat Krytox 105, 2× coat, and machine-lubed with a Durock lubricating station each produce a distinct damping signature on the curve. This data is the kind of measurement documentation that YouTube cannot provide at practical video runtime.

Switch type mechanisms: linear, tactile leaf-spring, clicky, and optical

Linear switches: pure spring compression

A linear switch has no mechanical feature that creates a force discontinuity during the keystroke: the force felt by the finger follows the spring curve smoothly from top to bottom. The only sound is the impact of the stem hitting the bottom of the switch housing (bottom-out) and the return of the stem to the top position (top-out). Popular linear switches span a wide range of actuation forces: Gateron Yellow (35 cN), Cherry MX Red (45 cN), Gateron Black (60 cN), Cherry MX Black (60 cN), Holy Pandas without the tactile stem (replacing the stem with a linear one, around 60 cN). The stem in a linear switch has smooth legs that descend alongside the housing walls without contacting any cam or ramp feature; the only friction during keystroke travel is between the stem legs and the housing walls, which lubing with Krytox 205g0 (a grease, viscosity 110 cSt) reduces significantly. Linear switches are preferred by typists who want a quiet, fatigue-free keystroke and by gamers who want zero tactile resistance at the actuation point.

Tactile switches: leaf-spring cam geometry

A tactile switch produces a force bump centered near the actuation point through a cam mechanism. The stem has two downward-projecting “tactile legs” — thin extensions on either side of the stem that extend below the main stem body. Inside the switch housing, there is a raised cam feature (a ramp or bump) on the inner walls. As the stem descends, the tactile legs contact the ramp and are deflected outward (acting as a leaf spring). The stored elastic energy in the deflected legs adds to the spring force, producing the force increase felt as the bump’s rising slope. At the peak of the cam, the legs reach maximum deflection (maximum stored energy) — this is the tactile peak force. At this point the legs snap past the cam peak and rapidly return to their natural position, releasing the stored energy and producing a sudden reduction in force — the tactile event. The bump depth (peak force minus the force at the bottom of the snap-back valley) is the perceived intensity of the tactile event: Boba U4 achieves approximately 17–20 cN of bump depth; Holy Panda achieves approximately 25–30 cN; Cherry MX Brown achieves approximately 4–6 cN, which is why it is frequently criticized as “like a linear with grit.” The position of the bump relative to the actuation point is a design parameter: a top-weighted tactile (bump before the actuation point) gives feedback that the key is about to actuate; an on-actuation tactile (bump at the actuation point) gives feedback simultaneous with registration; many switches are slightly offset due to tolerance stack-up.

Topre switches use a fundamentally different mechanism: a conical rubber dome sits on top of a coil spring and collapses at a specific force threshold, registering via capacitive sensing (the PCB has copper pads that form a capacitor with the dome; dome collapse changes capacitance measurably). The force unit for Topre is grams-force (gf); 45g Topre produces a pronounced tactile dome collapse with a distinctive sound profile. Electrostatic capacitive (EC) sensing eliminates physical contact wear on switch contacts — EC switches have no electrical contacts between stem and housing. Topre 30g, 35g, 45g, 55g, and 67g are the standard weights; Realforce factory-weighted keyboards mix 30g, 45g, and 55g domes by key position (finger strength varies by position) to equalize perceived effort across the keyboard.

Clicky mechanisms and optical switches

Clicky switches add audible feedback at the actuation point via one of two mechanisms. The click jacket (used in Cherry MX Blue and Gateron Blue): a secondary collar around the stem has a protruding point that catches a ledge inside the housing as the stem descends; at the actuation point the jacket snaps past the ledge with an audible click, and on return the reverse snap produces a second click. The jacket click is independent of the leaf spring mechanism; the tactile bump and the click can be designed to occur at the same or different travel positions. The click bar (used in Kailh Box White, Box Jade, Box Navy): a separate metallic spring bar is mounted in the switch housing; as the stem descends, a ramp on the stem forces the click bar to deflect downward until it snaps past the ramp and produces a click. The click bar mechanism tends to produce a crisper, higher-frequency click than the jacket mechanism and is less susceptible to contact bounce because the electrical contacts and click mechanism are spatially separated. Sound pressure level of switch clicks varies from approximately 55–65 dB SPL at 0.5 m (Box Jade) to 62–72 dB SPL for louder clicky switches — audible through office walls and a practical concern for workplace use. Optical switches (ASUS ROG, Razer): an infrared LED (typically 850 nm or 940 nm) is aimed at a photodiode across the switch housing; the stem has a light-blocking flag that interrupts the beam at the actuation point. Because there are no physical contacts, optical switches have no contact bounce (debounce time = 0 ms) and no contact wear. Hall effect switches use a permanent magnet embedded in the stem; a Hall effect sensor (e.g., DRV5013) in the PCB detects the magnetic field change; the analog output can set a programmable actuation threshold and enable “rapid trigger” (re-actuation at any position within 0.1 mm reset distance) as implemented in Wooting keyboards.

USB HID protocol: 6KRO, N-key rollover, and polling rate

HID class structure and the boot keyboard report

The USB Human Interface Device (HID) class (class code 0x03) defines how input devices enumerate on USB and communicate key states to the operating system. A keyboard uses HID subclass 0x01 (boot interface subclass) and protocol 0x01 (keyboard), which enables compatibility with BIOS and UEFI firmware that understand only the boot keyboard protocol. The boot keyboard report is a fixed 8-byte packet: byte 0 is a modifier bitmask (bit 0 = left Control, bit 1 = left Shift, bit 2 = left Alt, bit 3 = left GUI/Meta, bits 4–7 = right Control, right Shift, right Alt, right GUI); byte 1 is reserved (always 0x00); bytes 2–7 are USB HID usage IDs for up to 6 currently pressed non-modifier keys. This 6-keycode structure is the origin of 6KRO (6-key rollover): a keyboard using only the boot report cannot report more than 6 simultaneous non-modifier keypresses. If 7 or more non-modifier keys are pressed simultaneously, the keyboard reports an “error rollover” condition by placing keycode 0x01 (ErrorRollOver) in all six keycode bytes.

N-key rollover (NKRO) requires a custom HID report descriptor. A common NKRO implementation uses a 16-byte (128-bit) bitmap report where each bit position corresponds to one HID keyboard usage ID (keycode 0x04 = 'a', 0x05 = 'b', ..., 0x52 = Up Arrow, etc.); if bit n is set in the bitmap, key with usage ID n is currently pressed. All 128 bits can be set simultaneously, enabling full N-key rollover. The HID descriptor declares the report format to the host; modern operating systems read and parse the custom report descriptor automatically. Some implementations use a hybrid: they enumerate with a 6KRO boot-compatible descriptor, then switch to an NKRO report via a secondary HID interface or a vendor-specific command after enumeration, retaining BIOS compatibility while offering NKRO in OS context.

Polling rate, latency, and anti-ghosting

The USB endpoint descriptor includes a bInterval field specifying the polling interval in USB frame units (1 ms per frame for USB Full Speed, which all HID keyboards use). With bInterval = 1, the host polls the keyboard every 1 ms (1000 Hz); with bInterval = 8, polling is every 8 ms (125 Hz). At 1000 Hz polling, the maximum USB contribution to keystroke-to-registration latency is 1 ms (average 0.5 ms); at 125 Hz it is 8 ms (average 4 ms). Typical keyboards additionally debounce their switch contacts in firmware: each switch must remain in its new state for 5–25 ms before the keypress is registered, because switch contacts bounce (rapidly make and break contact 10–30× within 0.5–3 ms of initial contact). Debounce adds latency but prevents phantom multi-keypresses from a single physical keystroke. Total input latency from switch actuation to OS keypress event: firmware debounce (5–25 ms) + USB polling wait (0–8 ms at 125 Hz) + USB transfer (1 frame) + OS HID processing (1–3 ms). Optical and Hall effect switches eliminate contact bounce, enabling debounce times of 0–1 ms and correspondingly lower total latency. The practical question of whether 1000 Hz vs 125 Hz polling affects typing performance is debated; the latency difference of 4 ms average is well below most humans’ tactile and auditory reaction times (>50 ms), but for competitive gaming where total system latency compounds across keyboard, CPU, GPU, and display, every millisecond is claimed to matter. Anti-ghosting uses 1N4148 diodes (one per switch, anode to row trace, cathode to switch terminal, switch other terminal to column trace) to prevent phantom keypresses from parasitic current paths: without diodes, pressing three keys at the corners of a matrix rectangle causes current to flow backward through two switches and register a phantom fourth key at the remaining rectangle corner.

Tier structure for keyboard educators and reviewers: Switches ($5–8/month, force curve graphs for every switch reviewed, Discord channels by switch type), Measurement Files ($15–25/month, raw force-gauge CSV data for each switch in dry, lubed, and filmed states; USB latency test results via GNOME latency tester; sound files per switch per plate material), Group Buy Access ($40–60/month, early notification and reserved allocation in group buys the creator is coordinating, PCB source files for original designs).

QMK firmware: layers, mod-tap, tap-dance, and RP2040

Architecture and layer system

QMK (Quantum Mechanical Keyboard) is an open-source keyboard firmware written in C, maintaining over 1,000 keyboard definitions in its repository. QMK targets AVR microcontrollers (atmega32u4: 8-bit AVR, 16 MHz, 32 kB flash, 2.5 kB SRAM — sufficient for most keyboards but tight for feature-heavy configs) and ARM microcontrollers including the STM32F072 (ARM Cortex-M0 at 48 MHz, USB native via internal PLL eliminating the crystal requirement, 128 kB flash) and the RP2040 (dual-core ARM Cortex-M0+ at up to 133 MHz, 264 kB SRAM, 2 MB external QSPI flash, programmable I/O PIO state machines for matrix scanning). The RP2040’s PIO units are particularly useful: rather than using CPU interrupts to scan the key matrix, a PIO program running on the hardware state machine can scan all rows and columns continuously without CPU involvement, freeing both Cortex-M0+ cores for HID report building, RGB LED animation, OLED rendering, and USB stack execution.

QMK’s layer system supports up to 32 simultaneously defined layers. Each layer is a 2D array (rows × columns) of keycodes matching the physical keyboard layout. The layer precedence system scans from the highest-numbered active layer downward: when a key is pressed, QMK looks up its keycode in the highest active layer; if it finds KC_TRNS (transparent), it descends to the next lower active layer, continuing until it finds a non-transparent keycode or reaches layer 0 (the base layer, always active). Layer activation keycodes: MO(n) activates layer n for as long as the key is held; LT(n, kc) activates layer n when held and sends keycode kc when tapped; TG(n) toggles layer n; DF(n) sets the default base layer permanently. A standard implementation uses layer 0 for QWERTY, layer 1 for symbols and navigation (activated by holding a thumb key), layer 2 for function keys and media (activated by a different thumb key), with combo activations for layers 3+ for rare functions. The compiled keymap binary for a 65% keyboard with 3 layers occupies approximately 512 bytes of flash (keycode array) plus overhead.

Mod-tap, tap-dance, combos, and peripheral support

Mod-tap resolves the conflict between a key that should send a character when tapped and a modifier when held. MT(MOD_LSFT, KC_A) sends 'a' (or 'A' when combined with shift) when tapped within TAPPING_TERM milliseconds after press; if the key is still held after TAPPING_TERM, it activates left shift instead. The TAPPING_TERM default is 200 ms; this should be tuned per user — too low (100 ms) causes accidental modifier activations during fast typing; too high (300 ms) causes hold-modifier sequences to feel sluggish. Permissive hold and hold-on-other-keypress are modifier-tap configuration options that change when the hold action triggers relative to the timing and order of other key events, affecting how naturally the feature integrates with fast typing patterns. Home row mods (placing mod-tap on the ASDF and JKL; home row keys) is a technique debated in the keyboard community: they eliminate the need for modifier keys at thumb positions but require careful TAPPING_TERM tuning to avoid misfires during normal typing. Tap dance (TD()) maintains a state machine per key tracking tap count within TAP_DANCE_TERM (default 200 ms): single tap, double tap, and hold each trigger separate actions; the actions are user-defined in a tap dance action array. TD() adds a minimum latency of TAP_DANCE_TERM to each key (because QMK must wait to see if another tap follows before committing the single-tap action), making it unsuitable for frequently used keys in fast typing contexts. Combos define 2–4 key simultaneous presses that register as a keycode not mapped to any physical key; the COMBO_TERM (default 20 ms) is the window within which the combo keys must all be pressed to trigger the combo rather than individual keys. OLED display integration: QMK’s SSD1306 OLED driver renders 128×32 or 128×64 framebuffers to the display over I²C at 400 kHz; the display can show the active layer name, modifier states, WPM (words per minute, calculated from keypress timing), or custom pixel art. The display update rate is limited by I²C bandwidth: transmitting a full 128×32 framebuffer (512 bytes) over I²C at 400 kHz takes approximately 10 ms, limiting display update rates to approximately 50–100 Hz in practice.

PCB design: MCU selection, switch matrix, and hotswap sockets

Microcontroller selection and schematic design

Custom keyboard PCB design begins with MCU selection. The atmega32u4 (used in the original Teensy 2.0 and countless keyboard designs) has the advantage of universal QMK support and a mature community knowledge base, but its 32 kB flash and 2.5 kB SRAM are constraining for feature-rich firmware (OLED + RGB + complex keymap can approach the flash limit), and its USB implementation requires a 16 MHz crystal. The STM32F072 eliminates the crystal requirement via its crystal-less USB PLL (which locks to the USB frame timing), reducing BOM cost and assembly complexity. The RP2040 offers the most headroom: 264 kB SRAM accommodates large keycode arrays, full HID descriptor parsing, multi-effect RGB LED animation, and SSD1306 framebuffers simultaneously; PIO state machines handle the key matrix scan in hardware; dual Cortex-M0+ cores separate USB stack and keymap logic from LED/OLED rendering. The trade-off is that RP2040 requires external QSPI flash (1–16 MB, typically W25Q80) for firmware storage, adding one chip and eight traces.

PCB schematic for a 65% keyboard (67 keys): MCU with reset circuit and bootloader entry; USB-C connector with CC1/CC2 resistors (5.1 kΩ pull-downs for UFP detection), differential pair VUSB+ and VUSB- routed as 90 Ω differential impedance (calculated with Saturn PCB Toolkit: W = 0.15 mm, gap = 0.15 mm typical for 4-layer PCB with 0.2 mm dielectric), ESD protection on VBUS and data lines (PRTR5V0U2X: bidirectional TVS with 5 V standoff); decoupling capacitors: 100 nF ceramic (C0G/NP0 or X5R) per VDD supply pin of the MCU, 10 μF bulk electrolytic; key matrix: 5 rows × 14 columns (70 positions), one 1N4148 diode per switch (SOD-323 package for space efficiency), row pins and column pins mapped to MCU GPIO; RGB LEDs: per-key SK6812MINI-E (reverse-mounted) or WS2812B-MINI, driven from a dedicated level-shifter or MCU GPIO with sufficient current (5 V, 60 mA max per LED, current-limited by firmware brightness setting). Layer stackup for a 2-layer 1.6 mm PCB: top copper (component placement and matrix traces), bottom copper (ground plane and power), FR4 substrate. Four-layer designs add power and ground planes between signal layers, reducing EMI and trace impedance variation.

Hotswap sockets and PCB footprint choices

Hotswap sockets allow switch replacement without soldering. Kailh PG1350 hotswap socket (also called the Kailh PCB socket or CPG135001S30): a surface-mount clip with two electrical contacts (0.7 mm or 0.8 mm diameter solder pads) and three mechanical mounting contacts; compatible with MX-footprint switches (5-pin layout); recommends PCB thickness 0.8–1.2 mm for proper socket retention. The socket is typically machine-placed during PCB assembly; manual hand-soldering is straightforward with a 2–3 mm chisel tip and temperature at 310–330 °C, applying solder to the pad first (tinning), then reheating with the socket in position. Mill-Max 0305 and 7305 sockets: individual spring-loaded pin sockets with gold-plated beryllium copper contacts; each MX switch electrical pin position gets one socket pressed or soldered into a 0.9 mm through-hole in the PCB; switch pins insert into and are retained by the spring contact inside each socket. Mill-Max sockets accept all standard MX-compatible pins including 5-pin (PCB-mount) switch legs. The 0305 has a square body (fits tight layouts); the 7305 has a round body (slightly taller, better retention force). Both accept 1.0–1.6 mm PCB thickness and are rated for 10,000+ insertion cycles. The PCB design consideration: Mill-Max sockets require accurate through-hole placement (0.05 mm tolerance from IPC-7251 pad design guidelines) to ensure the switch pins align correctly; Kailh hotswap sockets require pad registration accuracy but are surface-mount and easier to inspect.

Acoustic science: plate materials, gasket mounting, and foam modifications

Young’s modulus and plate resonance

The acoustic character of a keyboard is substantially determined by the stiffness and density of its plate material. Young’s modulus E (also called the elastic modulus) measures the ratio of stress to strain in a material: E = stress/strain = (F/A) / (ΔL/L). Higher E means the material is stiffer — a given force produces less deformation. For a plate undergoing bending vibrations (which is the relevant mode for a keyboard plate struck by switch stem impacts), the resonant frequency of the first bending mode scales approximately as f ∝ (t / L²) × √(E / ρ), where t is plate thickness, L is plate length, and ρ is material density. Comparing brass (E = 100–125 GPa, ρ = 8,500 kg/m³) and polycarbonate (E = 2.4–3.4 GPa, ρ = 1,200 kg/m³): √(E/ρ) for brass ≈ √(112×10&sup9; / 8500) ≈ 3,630 m/s; for polycarbonate √(2.9×10&sup9; / 1200) ≈ 1,550 m/s. A brass plate has a plate wave speed 2.3× higher than polycarbonate of the same dimensions, corresponding to a resonant frequency approximately 2.3× higher. Higher resonant frequency = higher-pitched, brighter “clacky” sound; lower resonant frequency = lower-pitched, deeper “thocky” sound. Aluminum alloy (6061-T6: E = 68 GPa, ρ = 2,700 kg/m³) occupies the middle ground: √(68×10&sup9;/2700) ≈ 5,020 m/s — higher than brass due to its much lower density despite lower modulus. FR4 PCB material (glass-fiber-reinforced epoxy: E = 17–21 GPa, ρ = 1,850 kg/m³) produces a somewhat hollow, resonant sound characteristic of PCB-mount keyboards. Carbon fiber (unidirectional: E = 70–140 GPa in fiber direction, 10 GPa transverse, ρ = 1,600 kg/m³): the anisotropy of carbon fiber makes predicting plate acoustics complex; woven carbon fiber is common in keyboard plates, with effective E approximately 40–60 GPa in both directions.

Mounting styles and foam dampening modifications

The mounting style determines how the plate is coupled to the keyboard case and is the primary structural determinant of keystroke “feel” (the perceived give or firmness of the entire typing surface). Tray mount: the PCB is screwed directly to the bottom case tray with no plate at all; the switches are PCB-mount (5-pin), sitting only on the PCB. Maximum stiffness, minimum flex. Sound is heavily influenced by the case material (aluminum tray = harder; plastic tray = warmer). Top mount: the plate is screwed to the top half of the case; the PCB hangs from the plate by the switch pins. Stiff coupling from plate to case, brighter and more consistent flex across the keyboard. Bottom mount: the plate rests on pillars or ledges in the bottom case, screwed from below; the top case closes over the plate. Similar stiffness to top mount with slightly different resonance from the different coupling geometry. Gasket mount: the plate has tabs or ears that contact silicone elastomer gaskets (Shore A hardness typically 30–60) seated in grooves in both the top and bottom case halves; the plate floats between the two gaskets rather than being hard-coupled to either case half. Keystroke force first deforms the gasket (which has a low spring constant), then the plate flexes, giving the keyboard a bouncy, cushioned feel compared to rigid mounts. The gasket material, durometer, and contact area control the amount of plate isolation: harder gaskets (Shore A 60) are firmer; softer gaskets (Shore A 30) give more travel. Gasket mount keyboards sound quieter and thockier because the gasket absorbs and damps high-frequency energy from the plate before it couples to the case body.

Foam modifications address resonance at the component level. PCB foam (thin PE foam cut to the PCB shape, placed between the PCB and the bottom case): reduces the hollow resonance from the air gap below the PCB; absorbs high-frequency energy from switch bottom-out impacts before they reach the case. Switch films (thin PETG or POM films, 0.1–0.15 mm, placed under each switch between stem and housing bottom): reduce stem wobble (lateral play of the stem within the housing) and dampen housing vibration; popular for reducing the “scratch” sensation on tactile switches caused by imprecise stem-to-housing fit. Tempest mod: strips of masking tape applied to the underside of the PCB directly below high-resonance zones (typically the large empty areas between mounting holes); the tape adds distributed mass and internal damping (viscoelastic adhesive layer) without adding significant stiffness, reducing the PCB’s resonance amplitude. Silicone mod: RTV silicone applied inside the bottom case cavity to fill the void below the PCB; silicone’s high damping coefficient (loss factor η ≈ 0.1–1.0) absorbs vibrational energy, producing a shorter, more damped sound decay. The characterization of these modifications — before-and-after frequency spectra measured with a calibrated microphone, impedance curves, and annotated spectrograms of individual keypresses — is Patreon-exclusive content because it requires consistent controlled conditions (anechoic or treated room, stable microphone placement, identical keystroke force) that cannot be reproduced in a casual review video.

Wireless protocols: Bluetooth HID, 2.4 GHz RF, and ZMK battery management

Bluetooth HID and BLE connection parameters

Wireless keyboards communicate with the host computer via either Classic Bluetooth (Bluetooth 2.1+ EDR) or Bluetooth Low Energy (BLE, Bluetooth 4.0+). Modern keyboards use BLE exclusively. The BLE HID profile is defined by the Bluetooth SIG HID over GATT specification: a BLE keyboard exposes a HID Service (UUID 0x1812) containing HID Report characteristics (UUID 0x2A4D), one per report type (input report for key states, output report for LED state). The host (computer or phone) reads the HID Descriptor characteristic (UUID 0x2A4B) to determine the report format, analogous to USB HID descriptor parsing. BLE connection interval is the key latency parameter: the BLE connection interval specifies how often the central (host) exchanges data packets with the peripheral (keyboard), in increments of 1.25 ms, from a minimum of 7.5 ms to a maximum of 4,000 ms. At a 7.5 ms connection interval, keystroke-to-host registration latency is at most 7.5 ms from the BLE layer (plus firmware debounce); at 30 ms connection interval the BLE latency is up to 30 ms. Power consumption scales inversely: a 7.5 ms connection interval requires the radio to wake up 133× per second, consuming approximately 3–5 mA average current; a 60 ms interval consumes approximately 0.5–1 mA. Most BLE keyboards negotiate a compromise around 11.25–30 ms connection interval for daily use, with an option to request 7.5 ms for gaming modes.

The nRF52840 SoC (Nordic Semiconductor) is the dominant chip for BLE keyboard designs: ARM Cortex-M4F at 64 MHz, 1 MB flash (accommodating both Nordic SoftDevice BLE stack and application firmware), 256 kB SRAM, integrated BLE 5.0 + Bluetooth Low Energy radio, and optional 802.15.4 (Thread/Zigbee). The SoftDevice (S140 for BLE central+peripheral, S112 for peripheral only) is a pre-compiled BLE stack that runs in a protected memory region, with application code calling it via SVC (supervisor call) interrupt. 2.4 GHz proprietary RF: some keyboard manufacturers (e.g., Logitech with LIGHTSPEED/Bolt, Keychron with its 2.4 GHz dongles) use proprietary FHSS (frequency-hopping spread spectrum) protocols over the 2.4 GHz ISM band (2,400–2,500 MHz). Proprietary RF with a dedicated USB dongle achieves deterministic 1 ms polling because the dongle and keyboard are designed to synchronize their timing precisely; BLE connection interval introduces jitter (the actual connection interval can vary ±~2–3 connection interval units due to BLE connection event window widening) that proprietary RF avoids.

LiPo battery management and ZMK split architecture

Wireless keyboard batteries are lithium polymer (LiPo) cells in single-cell configurations (nominal 3.7 V, fully charged 4.2 V, fully discharged 3.0 V cutoff). The charging circuit implements CC-CV (constant current–constant voltage) charging: in the CC phase, a fixed current (typically 500 mA for a standard 1,000 mAh cell, following the C-rate rule of 1C = full charge current) charges the cell; when the cell voltage reaches 4.2 V, the charger switches to CV mode, maintaining 4.2 V while current naturally decreases as the cell approaches full charge. The charge cycle completes when the current drops to approximately C/10 (50 mA for a 500 mAh cell). The TP4056 is the most common keyboard LiPo charger IC: a linear charger in SOT-23-5 package rated up to 1 A charge current, adjustable via a single resistor (R_prog = 1,200 / I_charge in mA, in kΩ); for 500 mA charging, R_prog = 2.4 kΩ. The MCP73831 is a comparable option in a 5-pin SOT-23, also linear. Both require an external battery protection IC (DW01A or similar) to prevent over-discharge below 3.0 V and over-charge above 4.2 V. Battery life: a 2,000 mAh LiPo at 70 mA average active current (nRF52840 + key scanning + RGB LEDs off) gives approximately 28 hours of continuous use; at 5 mA idle (BLE advertising without RGB) the same battery gives 400 hours (16+ days). RGB LEDs dominate current consumption: a single WS2812B at full white brightness draws 60 mA; a 60-key keyboard with per-key RGB at full brightness draws 3.6 A, making wired operation essentially mandatory for RGB wireless keyboards. ZMK firmware on Zephyr RTOS addresses split keyboard wireless architecture: the left and right halves each contain an nRF52840, and each connects to the host independently over BLE (both appear as the same keyboard device to the host via bonding state); alternatively, one half acts as the central that relays key states from the peripheral half. ZMK’s power management aggressively enters sleep mode during inactivity, with the keyboard advertising at low duty cycle (reducing power to ~30 μA) and waking on key event.

Tier structure for wireless keyboard build educators: Build Logs ($8–12/month, detailed per-project assembly documentation with solder joint photographs, firmware flashing logs, ZMK config file shares, and Discord channels by build type), PCB Files ($20–35/month, KiCad schematic and PCB files for original keyboard designs, gerber zips for JLCPCB/PCBWay ordering, BOM with DigiKey/Mouser part numbers, assembly notes), Design Consultation ($55–80/month capped 4–6, patron submits keyboard project spec and receives documented schematic review with specific correction and improvement notes, recommended PCB stackup, and assembly strategy).

iOS rates and the Apple Tax for mechanical keyboard creators

Mechanical keyboards are overwhelmingly documented and consumed on mobile devices despite the hobby being inherently desktop-adjacent. The primary content platforms skew heavily mobile: keyboard unboxing and typing test videos on YouTube are watched on iPhones while at work or school; keyboard photography on Instagram is almost entirely mobile. YouTube mechanical keyboard content: 62–75% iOS (young adult male audience, phone-first viewing; technical tutorial content at the lower end of the range, gaming keyboard reviews at the higher end). Instagram keyboard photography: 78–88% iOS. TikTok keyboard sound comparison and unboxing: 80–90% iOS. The keyboard Patreon model is well-established: group buy access notifications, PCB design files and KiCad projects, force curve measurement CSV files, acoustic characterization data, and QMK/ZMK configuration files are all value-dense digital artifacts that justify subscription pricing and cannot be easily reproduced from YouTube content.

YouTube keyboard reviewer and group buy organizer · $250/mo Patreon · 68% iOS
iOS-billed patrons$170/mo
Apple fee at 30%−$51.00/mo
Annual loss to Apple−$612.00/yr
Multi-platform keyboard designer and PCB creator · $400/mo Patreon · 75% iOS
iOS-billed patrons$300/mo
Apple fee at 30%−$90.00/mo
Annual loss to Apple−$1,080.00/yr

Calculate your Apple Tax

Enter your monthly Patreon income and iOS percentage to see your exact November 1 impact.

Calculate my receipt

Frequently asked questions

What is the physics of switch spring force curves and how do tactile bumps work mechanically?

Switch spring force follows Hooke’s law F = k×x where k is the spring constant (30–65 cN/mm for MX-style switches) and x is compression displacement. Pre-travel is the distance from rest to actuation (typically 2.0 mm for MX); total travel is 4.0 mm; bottom-out force exceeds actuation force because the spring is further compressed in post-actuation travel. Tactile bump mechanism: the stem has two downward-pointing leaf-spring “tactile legs” that contact a cam ramp inside the housing; as the stem descends, the legs deflect (storing energy), reach peak deflection at the cam peak (peak force), then snap past the cam (sudden force drop = tactile event). Bump depth = peak force − valley force: Boba U4 ≈ 17–20 cN; Cherry MX Brown ≈ 4–6 cN. Factory spring variation is Gaussian ±3–7 cN; matched spring sets are sold to ±1 cN. Spring crunch (coil-on-coil scrape at bottom-out) is eliminated by light Krytox 105 oil application to the springs.

How does USB HID handle N-key rollover and what is the keyboard polling rate?

The USB HID boot keyboard report is 8 bytes: [modifier byte, 0x00, keycode×6]. This format supports exactly 6 simultaneous non-modifier keycodes (6KRO). NKRO uses a custom HID report: a 128-bit bitmap where each bit position = one HID keycode, supporting all keys simultaneously. The USB polling interval (bInterval in the endpoint descriptor) sets how often the host reads the keyboard: bInterval = 1 gives 1 ms (1000 Hz); bInterval = 8 gives 8 ms (125 Hz). Anti-ghosting uses 1N4148 diodes per switch (anode to row, cathode to switch, switch to column) to block parasitic current paths that would create phantom key registrations when 3+ keys are pressed simultaneously. Switch debounce firmware (5–25 ms) eliminates bounce-caused phantom keypresses for physical contact switches; optical and Hall effect switches allow 0–1 ms debounce.

How does QMK firmware implement layers, mod-tap, and tap dance?

QMK’s layer system supports up to 32 layers per keyboard; each layer is a keycode array. KC_TRNS (transparent) passes a key’s press to the next lower active layer. Layer activation: MO(n) holds layer n active; LT(n,kc) holds layer n or sends kc on tap; TG(n) toggles. Mod-tap MT(MOD, KC): sends KC on tap within TAPPING_TERM (default 200 ms), activates MOD modifier when held. Tap dance TD(): single tap, double tap, and hold each trigger separate user-defined actions, with state machine tracking within TAP_DANCE_TERM. Combos: pressing 2–4 keys within COMBO_TERM (20 ms) registers a different keycode. RP2040 advantages over atmega32u4: 264 kB SRAM, dual Cortex-M0+ cores, PIO state machines for matrix scanning without CPU overhead. ZMK (Rust, Zephyr RTOS): designed for wireless splits; configuration in devicetree .dts + Kconfig; each keyboard half connects to host over BLE independently; aggressive power management with <30 μA advertising current.

Related: Patreon for mechanical keyboard creators guide · Patreon for electronics creators · Patreon for electronic music creators · How the Apple Tax works · All explainers