#keyboards #split-keyboard #sofle #pcb #qmk #zmk #mcu #rp2040
# Overview
The Sofle is a 58-key column-staggered split by **Josef Adamčík**, designed Sept–Oct 2019 and published Feb 2020. It is a direct descendant of the [[Lily58 PCB Revision Comparison|Lily58]] — literally so: the v1 schematic still imports symbols named `SW_PUSH-Lily58-cache-Lily58_Pro-rescue`, so the project was started by opening the Lily58 Pro KiCad project. The README credits Lily58 + Corne + Helix; the LICENSE only carries an attribution notice for Lily58. Name comes from the designer's girlfriend, Sofie.
Three things worth knowing before you shop:
1. **Encoders are standard, not an afterthought.** This is the main reason to pick a Sofle over a Lily58 — the encoder has a dedicated matrix cell on every official variant, and its push-switch is a mappable key. On the Lily58 no official board has ever had one.
2. **Hotswap is mandatory on almost every variant.** The switch pin holes are *non-plated* on v1, v2, RGB, Choc and Pico — you physically cannot solder switches directly. The lone exception is the "v2 soldered" contribution.
3. **"Sofle RGB" is a separate contributed variant, not a newer Sofle.** Plain Sofle has *zero* LEDs on the PCB. RGB adds 72. They're contemporaries, both released Jan 2021.
==Also note: the Keyhive Sofle RGB is a modified fork that is firmware-incompatible with the official designs — the upstream repo says so explicitly. It has its own QMK target.==
# Design
## Constant across every official variant
- **58 key switches**, 29 per hand: 6 cols × 4 rows + **5 thumb keys**. One 1.5U position per hand (innermost thumb).
- **60 QMK/ZMK LAYOUT positions** — 58 keys plus the two encoder push-switches, which occupy matrix cells `[4,5]` / `[9,5]`.
- **1 optional EC11 encoder per half.** Footprint always present; component optional.
- **Reversible PCB** — one design, all footprints mirrored F.Cu/B.Cu. Every variant, no exceptions.
- **PJ-320A TRRS** (`MJ-4PP-9`), one per half. Serial split works over plain TRS.
- **Diodes are never pre-soldered** in the official design. Any pre-soldered offering is a vendor service.
- **License: MIT** © 2019 Josef Adamcik. Docs CC BY 4.0, firmware GPLv2 via QMK.
## How the layout differs from the Lily58
Both boards self-describe as "6×4+5", which is why people assume they're the same. They aren't:
- **Lily58's "+5"** = 4 thumb keys + 1 inner key
- **Sofle's "+5"** = 5 thumb keys, and Lily58's inner-key slot becomes the encoder position
Net switch count is identical at 58. Sofle gains a thumb key and an encoder; the encoder press is an *additional* mappable position, which is why LAYOUT is 60 rather than 58.
## Official variants at a glance
| | v1 (2019) | v2 (2021-01) | v2 soldered (2022) | RGB (2021-01) | Choc (2021-11) | Pico (2025-06) |
|---|---|---|---|---|---|---|
| Author | Adamčík | Adamčík | kb-elmo | Dane Evans | Brian Low | Ryan Neff |
| MCU | Pro Micro (48-hole) | Pro Micro (**zig-zag, 24-hole**) | Pro Micro (zig-zag) | Pro Micro (v1 fp) | Pro Micro (v1 fp) | **RP2040 Pi Pico** |
| Switch mount | Hotswap only, **MX or Choc** | Hotswap only, **MX** | **Solder only**, MX | Hotswap only, MX | Hotswap only, **Choc v1** | Hotswap only, MX |
| Per-key RGB | ✗ | ✗ | ✗ | **29/side SK6812MINI** | **29/side SK6812 MINI-E** | **29/side SK6803 MINI-E** |
| Underglow | 3-pad strip header | 3-pad header | 3-pad header | **6/side + 1 indicator** | ✗ | ✗ |
| Total LEDs | 0 | 0 | 0 | **72** | **58** | **58** |
| OLED | SSD1306 128×32 | 128×32 | 128×32 | 128×32 | 128×32 | **128×64** |
| Diode footprint | TH/SMD hybrid | TH/SMD hybrid | TH/SMD hybrid | **SMD-only** | **SMD-only** | TH/SMD hybrid |
| Bottom plate | Yes | Yes | Yes | Yes (+tenting) | **None** | Yes (+tenting puck) |
| QMK target | `sofle/rev1` | `sofle/rev1` | `sofle/rev1` | `sofle/rev1` | `sofle_choc` | `sofle_pico` |
| ZMK shield | `sofle` | `sofle` | `sofle` | `sofle` (generic) | ✗ | ✗ |
## What actually changed, revision by revision
There is **no changelog file in the repo.** The only sources are three GitHub release notes (`v1.1`, `v2.0`, `v2.0.1`), the docs site "Versions" section, and two blog posts. RGB, Choc, v2-soldered and Pico have **no tags and no release notes at all** — their timelines come from commit dates.
**v1 → v2 (released 2021-01-16).** More aggressive column stagger (pinky columns move y 52.4/53.9 → 56.5/56.5; middle column 46.21 → 45.01). Bottom row moved toward centre with the 3 outer keys column-aligned. **Kailh Choc support dropped.** Pro Micro mounting changed to staggered zig-zag holes — and asymmetrically: left half mounts bottom-up, right half top-up. Two undocumented changes found only by diffing schematics: **split-transport solder jumpers added** (`JP9 I2CSCL`, `JP10 IC2SDA`, `JP11 Serial`, replacing v1's `i2c_pin` headers), and the I²C pull-up footprint changed from `RESISTOR_mini` to `R_1206_DoubleSided`. `v2.0.1` (2021-02-04) fixed an edge-cuts layer mistake.
The designer's own caveat is worth quoting: the v2 changes *"were experiments and I have been planning to reverse them"* — v2 shipped as-is because development stalled and people were waiting.
**Sofle RGB (contributed by Dane Evans, merged 2021-01-16).** Based on v2, but **rolls the pinky stagger and encoder position back toward v1**, and **rolls the Pro Micro pinout back to v1's 48-hole footprint**. Adds 36 LEDs per side: 29 per-key SK6812MINI in a combined switch+LED footprint, 6 underglow, 1 forward-facing layer indicator. LED chains are selectable via three 3×1 headers. Diodes become **SMD-only** (`crkbd-diode`) — a through-hole 1N4148 will not fit, unlike v1/v2. ==Known defect on RGB v2.0 boards: a missing trace means only the first 4 underglow LEDs work. Fixed in v2.1 — check which board you're buying.==
**Sofle Choc (Brian Low, merged 2021-11-14).** Sofle RGB's switch layout with the v1-ish pinky stagger. **Kailh Choc v1 (PG1350) only** — not Choc v2, not Mini Choc, not MX. 58 per-key SK6812 MINI-E, **no underglow, no indicator LED**. 15mm desk-to-keycap-top. **No bottom plate at all**, deliberately, to minimise thickness — top plates are not compatible with v1/v2/RGB.
**v2 soldered (kb-elmo, merged 2022-08-28).** Layout byte-identical to v2 — I diffed all 30 switch coordinates and every one matches. The only substantive change is plated through-holes instead of non-plated holes + socket pads, i.e. **solder-only, MX**. ==Completely undocumented on the project website — no build guide, no docs section, only a one-line README credit.== It is nonetheless the base splitkb chose for the Aurora Sofle.
**Sofle Pico (Ryan Neff / JellyTitan, merged 2025-06-21).** The only official variant that isn't Pro Micro. **Raspberry Pi Pico / RP2040**, UF2 drag-and-drop flashing, prebuilt VIA firmware in-repo. 3.3V logic forces **SK6803 MINI-E** LEDs rather than SK6812 — driven through an SN74AHCT1G125 level shifter with a bypass jumper. **128×64 OLEDs** on separate ports (no jumper soldering). Genuine hybrid diode footprint takes TH or SMD. Adds Cirque trackpad headers, a Pimoroni trackball header, patch-bay headers, and tenting-puck mounts. Full-duplex TX/RX split.
## Controllers — same rules as the Lily58
See [[Lily58 PCB Revision Comparison]] for the full controller table; it applies unchanged here, since every Sofle except the Pico uses the Pro Micro footprint.
Sofle-specific notes:
- **v2 and v2-soldered use a zig-zag 24-hole Pro Micro footprint**, not v1/RGB/Choc's 48-hole dual-position one. Doesn't change what fits, but the mounting orientation is asymmetric between halves — read the build guide before soldering headers.
- **Sofle Pico is not Pro Micro compatible** and its firmware is not interchangeable with v1/v2 — different MCU, different LED part, different pin map.
- **ZMK works out of the box.** `sofle_left` / `sofle_right` are official in-tree shields with nice!nano and nrfmicro overlays included, so stock Sofle + 2× nice!nano + batteries is a first-class wireless build with no custom shield repo. Encoders, display and underglow are all `disabled` by default — opt in via `CONFIG_EC11=y` etc.
- ==ZMK has no `sofle_rgb` shield, so an RGB PCB on ZMK gets generic underglow control only. No ZMK shield exists for Choc or Pico at all.==
# Decisions
## Which one to build (2026)
- **Best value, actively stocked: 42keebs Sofle RGB V3 (€33).** The most substantive vendor fork — native nice!view support, SMD power switch and battery contacts for nice!nano wireless, separate solder jumpers for indicator vs underglow. Currently at v3.5. ==Known bug in v3.2: missing connection between the last underglow LED and the first in-switch LED; running both chains needs a hand-soldered jumper wire. Confirm which revision ships.==
- **Best multi-controller flexibility: splitkb Aurora Sofle v2 (€24.75–31.36 ex VAT).** Pro Micro / Elite-C / Elite-Pi / Liatris / nice!nano, one PCB takes MX *or* Choc v1, 60 per-key + 12 underglow LEDs on every board, tenting-puck holes, QMK or ZMK. **Not open source** — splitkb says so explicitly, no PCB sources published. Based on the v2-*soldered* outline, so **incompatible with Sofle v1 cases**. Note Aurora is now splitkb's previous generation; the Halcyon series superseded it and **there is no Halcyon Sofle**.
- **Least effort, most money: beekeeb pre-soldered Sofle MX ($198).** Everything done, south-facing RGB, 2 encoders.
- **Wireless out of the box: Eyelash Sofle ($79–116).** nRF52840, nice!view, integrated 2000mAh battery, 5 BT profiles, ZMK Studio. But see the warnings below.
- **Most open + most modern: Sofle Pico** (MIT, JellyTitan). RP2040, 128×64 screens, trackball/trackpad provisions. Self-fab from the release gerbers.
- **US buyers: KeyHive Sofle RGB ($75)** is in stock and includes 2 encoders with knobs — ==but it is the officially-disclaimed incompatible fork. You must flash `sofle/keyhive`, not `sofle/rev1`.==
## Warnings worth reading twice
- **Eyelash Sofle has no identifiable designer, no license, and no published design files.** It traces to a QQ email address and a fork chain of ZMK configs. It's ZMK-only and not an in-tree shield. Fine if you want a finished wireless board; not fine if you care about repairability or provenance.
- **It has a 5-way joystick, not a trackball.** Widely mis-described. If you want a pointing device on a Sofle, the real options are the Pimoroni trackball mount (foureight84), beekeeb's Cirque trackpad build, or Sofle Pico's documented headers.
- **Boardsource's Lulu is Lily58-based, not Sofle-based** — "100% backwards compatible with the current Lily58 solderable PCB." Common confusion. Boardsource does not sell a Sofle at all.
- **"Sofle V3.2"** as cited by Eyelash vendors corresponds to nothing in the upstream repo. It most likely refers to 42keebs' revision numbering, or is invented.
## Licensing
| Project | License | Design files public |
|---|---|---|
| Sofle v1 / v2 / soldered / RGB / Choc / Pico | **MIT** © 2019 Josef Adamcik | Yes, full KiCad |
| Sofle Pico upstream (JellyTitan) | MIT | Yes |
| Aurora Sofle v2 (splitkb) | **None — explicitly not open source** | No, DXF cases only |
| 42keebs Sofle V3 | ==Unconfirmed — no public repo for V3 sources found== | No |
| Eyelash Sofle | ==None found== | No |
Note the contrast with the Lily58 ecosystem: every *official* Sofle variant, including all four community contributions, is MIT and fully public. The closed boards are all vendor forks.
## Case and plate compatibility
- **Drop-in with stock v2 cases (MX, 19.05mm):** Sofle RGB, v2 soldered, Sofle Pico, Sofle Chico, most vendor "Sofle RGB v2.1" boards (KeyHive, beekeeb, Little Keyboards, KeebMaker, KEEBD, kriscables)
- **Own ecosystem, v2-derived, ==incompatible with v1 cases==:** Aurora Sofle v2
- **Choc-spaced, incompatible with MX plates:** Sofle Choc, 42keebs Sofle Choc V3, SofleChocWireless, beekeeb Choc kits, Eyelash LP
- **Wholly proprietary shells:** Eyelash Sofle (all), Sofle Hybrid Ergomech
- **Not a Sofle despite the confusion:** Boardsource Lulu
# Configuration
QMK targets — note there is **no `sofle/rev2`** and never has been:
```bash
# Official (Adamčík repo)
make sofle/rev1:default # v1, v2, v2 soldered AND RGB — all four are electrically identical
make sofle_choc:default # Brian Low — 58 per-key LEDs
make sofle_pico:default # Ryan Neff — RP2040
# Vendor forks (NOT interchangeable with rev1)
make sofle/keyhive:default # Keyhive's incompatible fork — Elite-C, 74 LEDs, encoder at [4,0]
make splitkb/aurora/sofle_v2:default
make mechboards/sofle:default
make keebart/sofle_choc_prog:default
```
`sofle/rev1` pin map: cols `F6 F7 B1 B3 B2 B6`, rows `C6 D7 E6 B4 B5`, encoder L `F5/F4` R `F4/F5` at resolution 2, ws2812 on `D3`, split serial on `D2`, 72 RGB LEDs split `[36,36]`.
ZMK shields, official and in-tree:
```
sofle_left / sofle_right
splitkb_aurora_sofle_left / _right
```
# Troubleshooting
- **Symptom**: only the first 4 underglow LEDs light on a Sofle RGB.
- **Cause**: missing trace to a via on the underside of **RGB PCB v2.0**.
- **Fix**: hardware defect, corrected in v2.1 boards. Documented in the official RGB build guide.
- **Symptom**: RGB works on a Keyhive board only with the wrong colours/positions, or not at all.
- **Cause**: flashed `sofle/rev1` onto a Keyhive fork. Different column pins, 74 LEDs not 72, encoder moved to matrix `[4,0]`.
- **Fix**: use the `sofle/keyhive` target. The upstream repo disclaims this board.
- **Symptom**: switches won't solder to the PCB.
- **Cause**: working as designed — v1/v2/RGB/Choc/Pico have **non-plated** switch holes. Sockets are mandatory.
- **Fix**: use Kailh hotswap sockets, or buy the v2-soldered variant if you want to solder.
- **Symptom**: on 42keebs V3.2, underglow and in-switch RGB won't both run.
- **Cause**: missing connection between the last underglow module and the first in-switch module.
- **Fix**: hand-solder an enamelled jumper wire. Vendor-documented.
- **Symptom**: encoder won't fit on an Aurora Sofle next to the microcontroller.
- **Cause**: known outstanding issue — you cannot fit a switch at that encoder position, and positions sharing a number share data pins.
- **Fix**: use a different encoder position. Not fixed as of Rev 1.1.
# TODO
- ==No official Sofle v2.1 exists. Tags are only `v1r1_order`, `v1.1`, `v2.0`, `v2.0.1`. "v2.1" appears only inside RGB and Choc *gerber filenames*, versioning those sub-designs. Vendors selling "Sofle v2.1" mean the RGB board.==
- ==Blog date conflict: the intro post is bylined 2020-02-25 but the PCB was designed 2019-09/10 and submitted to QMK 2019-11. No earlier announcement found to reconcile.==
- ==Sofle Pico QMK readme claims "2–4 rotary encoders" but the KiCad file has exactly one EC11 footprint per half. Extra encoders presumably attach via the patch-bay/Cirque headers — undocumented.==
- ==Aurora Sofle nice!view support unconfirmed. splitkb's page lists only 128×32 OLEDs; the nice!view FAQ doesn't name the Aurora Sofle and warns of 5-pin vs 4-pad footprint mismatch. Contrast 42keebs, which advertises it natively.==
- ==42keebs V3 open-source status unresolved — no public repo with their V3 KiCad/gerber sources located.==
- ==Sofle Chico (TheWerle) — another RP2040 Pico fork. License, activity, and differentiation from Sofle Pico not verified.==
# References
- [josefadamcik/SofleKeyboard](https://github.com/josefadamcik/SofleKeyboard) · [LICENSE (MIT)](https://github.com/josefadamcik/SofleKeyboard/blob/master/LICENSE) · [Releases](https://github.com/josefadamcik/SofleKeyboard/releases)
- [Docs site](https://josefadamcik.github.io/SofleKeyboard/) · [v1/v2 build guide](https://josefadamcik.github.io/SofleKeyboard/build_guide.html) · [RGB build guide](https://josefadamcik.github.io/SofleKeyboard/build_guide_rgb.html) · [Choc build guide](https://josefadamcik.github.io/SofleKeyboard/build_guide_choc.html) · [Pico build guide](https://josefadamcik.github.io/SofleKeyboard/build_guide_pico.html) · [Sourcing parts](https://josefadamcik.github.io/SofleKeyboard/sourcing_parts.html)
- Designer's blog: [introduction (2020-02-25)](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) · [evolution / v2 rationale (2020-09-15)](https://josef-adamcik.cz/electronics/soflekeyboard-evolving.html)
- [QMK keyboards/sofle](https://github.com/qmk/qmk_firmware/tree/master/keyboards/sofle) · [sofle_choc](https://github.com/qmk/qmk_firmware/tree/master/keyboards/sofle_choc) · [sofle_pico](https://github.com/qmk/qmk_firmware/tree/master/keyboards/sofle_pico) · [ZMK supported hardware](https://zmk.dev/docs/hardware)
- [PR #104 — Sofle Choc by brianlow](https://github.com/josefadamcik/SofleKeyboard/pull/104) · [kbd.news — Sofle v2 officialized](https://kbd.news/Sofle-v2-officialized-132.html)
## Variants and vendors
- [splitkb Aurora Sofle v2](https://splitkb.com/products/aurora-sofle-v2) · [changelog](https://docs.splitkb.com/product-guides/aurora-series/changelogs/aurora-sofle-v2) · [attribution / license](https://docs.splitkb.com/product-guides/aurora-series/attribution/aurora-sofle-v2) · [case compatibility](https://docs.splitkb.com/product-guides/aurora-series/case-files) · [rotary encoder guide](https://docs.splitkb.com/product-guides/aurora-series/build-guide/rotary-encoders)
- [42keebs Sofle RGB V3](https://42keebs.eu/shop/kits/sofle-rgb-hotswap-split-ergo-50-kit-black/) · [42keebs V3 build guide](https://42keebs.eu/build-guides/sofle-rgb-v3/)
- [JellyTitan/Sofle-Pico](https://github.com/JellyTitan/Sofle-Pico) · [soflepico.com](https://www.soflepico.com/) · [variant roadmap](https://www.soflepico.com/contributing/variants) · [TheWerle/Sofle-Chico](https://github.com/TheWerle/Sofle-Chico)
- [KeyHive Sofle RGB](https://keyhive.xyz/shop/sofle) · [Keyhive build guide (disclaimed fork)](https://github.com/keyhive/build_guides/blob/master/docs/keyboards/sofle-rgb.md)
- [beekeeb Sofle collection](https://shop.beekeeb.com/collections/sofle) · [Mechboards Sofle](https://mechboards.co.uk/products/sofle-kit) · [Little Keyboards Sofle RGB](https://www.littlekeyboards.com/products/sofle-rgb-pcb-kit) · [kriscables](https://kriscables.com/product-category/sofle/) · [KeebMaker](https://keebmaker.com/products/sofle-rgb-kit)
- [xkeeb Eyelash Sofle](https://xkeeb.com/product/eyelash-sofle-wireless-zmk-split-ergonomic-keyboard/) · [metakeebs](https://metakeebs.com/products/eyelash-sofle-split-keyboard) · [a741725193/zmk-sofle (de-facto upstream)](https://github.com/a741725193/zmk-sofle)
- [db-ok/SofleChocWireless](https://github.com/db-ok/SofleChocWireless) · [ergomechstore/sofle-hybrid-ergomech](https://github.com/ergomechstore/sofle-hybrid-ergomech) · [infused-kim/zmk-config-sofle](https://github.com/infused-kim/zmk-config-sofle)
- [foureight84/sofle-keyboard-pimoroni (trackball)](https://github.com/foureight84/sofle-keyboard-pimoroni) · [beekeeb Cirque trackpad docs](https://docs.beekeeb.com/keyboards-with-cirque-trackpad)
## Ancestry
- [kata0510/Lily58](https://github.com/kata0510/Lily58) · [foostan/crkbd (Corne)](https://github.com/foostan/crkbd) · [MakotoKurauchi/helix](https://github.com/MakotoKurauchi/helix)
---
- [[Lily58 PCB Revision Comparison]] · [[JLCPCB Design Notes]] · [[KiCad Design Tips]] · [[QMK Firmware]]