Epomaker Shadow S Mechanical Keyboard Review
I like the Epomaker Shadow S. It has some of the issues that turned me off the Shadow X, but broadly feels like a better keyboard in the ways that matter. It almost feels as if Epomaker read my review and fixed a lot of my bugbears. The result is a keyboard I’m happy to have out on my desk and in active use, rather than relegated to its box.
In the interest of full disclosure I want to make clear something that I always took for granted as heavily implied by the context of my blog; Epomaker sent me both the Shadow X and Shadow S free of charge, along with two other keyboards and the EK21 num-pad. I’d like to think my writing isn’t coloured by this fact, but it might be. In fact pretty much everything I review here has been obtained for free, and I’ve made it the norm to take that as the default and only tend to mention when I have paid for something, not vice versa.
Right, onwards!…
Like most of Epomakers boards, though there’s a small selection of ISO options, the Shadow S is ANSI- for the uninitiated that’s the layout you might find in America and not the one – with the backslash left of Z – that us Brits are used to. I’ve used so many different keyboards, to say nothing of the spanner Apple throws into the works, that this isn’t a problem to me. I’d still rather an ISO European keyboard than an ANSI US one, since my fingers miss that backslash/tide key (or backtick on macOS). If you’re looking for ISO, though, stop reading and move on- this keyboard ain’t for you!
Still here? Okay, let’s continue…
Much to my disappointment the backlight LEDs are still south-facing – that means they peek through the gaps between the keys and dazzle your eyes – but they’re rather less in-your-face than the Shadow S. Once again the keycaps are single shot and opaque, so it’s probably more apt to call the LED lighting “underlighting” rather than “backlighting”. There are 18 backlight modes, with a Fn key combo granting access to switch between them, control speed, brightness and other settings. This includes saturation control, so you can dial the LEDs down to a satisfying pastel to match the pink Shadow S, or even turn a colourful effect right down to monochrome.
I suppose I’d be lying if I said the underlighting effect – which is definitely better on the S than the X – wasn’t growing on me. It is, but I really do prefer being able to see my key labels. I’m a dummy like that.
Despite better switches there are still no LED diffuser inserts. There is, however, a positioning plate across the whole top surface of the keybed which offers some diffusion, though I don’t believe this is its intended purpose. The overall lighting effect is less dazzling and more subtle, though each key still has a hot-spot of light right beneath it. I found the diffuser setup on the CIDOO Nebula more effective, though it has some select LEDs that dazzle right through the top plate.
In addition to the LED underlighting there’s a feature LED underneath the PgDn key. This is an odd addition, since it serves no real purpose, cannot convey status information, cannot be controlled from VIA and just generally feels like a light for light’s sake. I can count on precisely no fingers how many times I’ve wanted additional LEDs shining up directly from my keyboard. Thankfully you can turn it off with Fn + PgUp.
I tested the pink Shadow S and while I mostly like the colour, I’m a little disappointed with the black text on the darker keys. This seems like a missed opportunity to have these keys the inverse of the lighter ones- with white text instead. In the dark with the backlight on, the black text really pops and looks ugly as a result. It doesn’t help that the bold font lacks finesse. I can’t really fault the keycaps otherwise, though, they’re a nice matte finish with no visible mould marks or defects and the pink-on-white keys are subtle and nice.
Thanks to the Sea Salt switches, I found longer keys to be much, much more stable than the likes of the Shadow X and CIDOO Nebula. You can buy the Shadow S with the same Wisteria switches I tested on the Shadow X. Don’t. Just don’t. Sea Salt switches are quieter and more stable, and – despite costing more than the Wisteria standalone – don’t bump up the price.
This translates to better stability on the larger keys that don’t have additional support – particularly tab and capslock – so they don’t rock from side-to-side when you press them on the edges. Stablisers, by the way, are like little dummy switches either side of the real switch and often connected by a little metal bar. They keep the key stable when it’s pressed anywhere but the middle and are the reason the spacebar doesn’t just flap around like a see-saw.
As for build quality the Shadow S is quite loud and proud about its very utilitarian plastic construction. It’s not the most beautiful keyboard you’ll ever meet, but it does have a certain vintage charm about it. It feels solid, though the case has some moderate flex and twist. There were no gaps or flaws in the unit I tested. I can’t seem to figure out if I love or hate the pink and white colour scheme, but it does look fantastic contrasted with the black/pink EK21- even if the pinks are quite obviously different.
The knob – which defaults to volume control and mute – consists of a metal cover screwed onto a plastic mounting post. It drives a continuous rotary encoder which defaults to controlling volume up/down and mute (you can re-bind it with VIA). Its proximity to the LCD makes it look like it could act as some sort of UI control for the keyboard- it can’t. Fortunately up here it’s spaced apart from keys on the left/right so it’s easy enough to turn freely, though it does get a little cozy with PgUp. Just don’t have big thumbs, ok?
The little LCD – a 135×240 pixel IPS TFT – displays a much, much more refined UI than the Shadow-X. It includes a cleanly presented date, time and battery status with a row of icons beneath communicating the current connectivity mode. It’s basically a substitute for a set of indicator LEDs and, on a keyboard this complete, it’s not superfluous at all. Unfortunately as a predominately macOS and Linux user I haven’t figured out how to set the time/date (or have I? more on that later). It would be cool to have these simply not show up unless configured and enabled by software.
In the middle of the rear edge there’s a recess for storing the 2.4GHz dongle, a switch for mode (2.4GHz, Bluetooth or Wired), a switch for Windows/Mac and a USB Type-C port for USB mode or charging.
Tri-mode connectivity works well – you can flip the switch between 2.4GHz/Wired/Bluetooth and get a prompt connection to any of your paired devices. It works well as a means to share one keyboard between multiple devices, but without a mouse you might find that less than useful. I have been using the Shadow S on my desk connected to my PC (via a wire) and Pi (via the 2.4GHz dongle) and just flipping the switch to shift between both. Yes, I have two mice side-by-side and it’s very confusing. Yes I know software KVMs exist.
As with, I think, every Bluetooth-compatible keyboard I’ve tested you can pair up to three devices and switch between them with Fn + Q, W, E. You can also re-bind the keys to switch profiles, but the status LEDs – the RGB LEDs that light up blue behind the corresponding key – do not follow the rebound keys. For instance if you re-bind Bluetooth Profile 1 from Q to Fn + 1 then the Q key will still flash blue to indicate this profile is selected. This bug is present in other? QMK-based keyboards, too, with the Keychron K3 Pro also hardcoding the indicator position. There should be no reason for this, since the keyboard should have full control over all of the LEDs and it should also know which key is bound to which feature.
From some sleuthing into Keychron’s Bluetooth module (the K3 Pro has a similar issue), I found the list of matrix LEDs hard-coded in the config.h for each specific keyboard. This means that the LEDs used by Bluetooth status indication are fixed in code, rather than looking up the correct position based on the Bluetooth profile select keys in the current layer. I suspect Epomaker do something very similar. This is understandable because it’s quick and easy to get working, but it’s not so useful if you want to rebind those keys. It should be noted that the firmware already has a complete map of key position to LED matrix index – this is “led_config_t” in QMK terms – since some of the lighting effects react to or spread from the particular keys you press.
Disassembly
The case is screwed together by four crosshead screws which aren’t disguised or covered over. They’re all the same length, so you can’t mix them up. Once the screws are undone you must release three plastic clips along the front edge- I just wedged my thumb into the gap and slid it along the length of the keyboard. Easy enough, until I realised I’d injured it at a bouncy castle soft play. The same trick also worked for three similar plastic clips along the back edge. What can I say, my thumb already hurt might as well get the job done. If you haven’t forgotten to remove the knob, the top should now lift straight off and release the 12 foam isolation pads that keep the PCB floating inside the keyboard chassis, and consequently help dampen sound and – presumably – also help reduce typing fatigue.
Lifting the top reveals that the light bar comprises three individual LEDs shining through a gap in the damping foam.
Once the top is removed you can also use a spudger – or probably a small screwdriver if you’re reckless – to release the six clips that retain that white trim at the front and back. Useful if you want to separate it for painting.
Removing the floating keybed is a synch, it just lifts right out of the base though you need to be super careful of the ribbon cable connecting it to the USB Type-C/switch PCB screwed into the bottom of the keyboard (those things have to stay still, even if the rest floats) and the small two-wire JST connector cable attaching the battery.
Beneath the keybed is a layer of damping foam and beneath that is a final layer of – I think – silicone rubber. Combined these keep the pointy bits underneath the keyboard PCB from having a disagreement with the battery, a 4000mAh, 3.7v LiPo.
Things are at least somewhat repairable. You could easily replace the battery, and conceivably replace the USB Type-C/switch PCB if you found a donor keyboard. Even the LCD screen has a little flat flex connector. A little sleuthing reveals it’s a 1.14” ST7789-based IPS TFT with a resolution of 135×240. If you somehow managed to break it, you could probably find a replacement. It’d also make a great salvage part one day- ST7789 displays are easy as pie to drive.
The sceptic in me believes Epomaker are designing for part re-use more than repairability here, but as a consequence the Shadow-S is wonderfully modular. Perhaps a little of Epomaker’s DIY Kits DNA has carried over into their ready to go ranges.
The SOC inside Shadow-S is a 56-pin “Miller UK9481-1122.” I don’t know if this is supplied by Westberry or is some mystery meat chip, but it handles everything from lights, key scanning and wireless modes in one package. Either way, if you wanted a project board to try porting mainline QMK then this is probably not it.
Okay that’s the hardware done. Let’s get into the software… strap in!…
Westberry
You might be forgiven for thinking “What’s this Westberry VIA that Epomaker link me to? That’s not… the real VIA website?”. You’d be right.
When investigating the software situation for the Shadow S, all roads led to Changzhou Westberry Technology Co., Ltd. A little sleuthing revealed that Epomaker’s new VIA-compatible keyboards are probably based upon Westberry’s turn-key SoC (system-on-chip) for Gaming Keyboards.
When they’re not making Cortex M3-based chips suspiciously similar to STM’s STM32F1 range, Westberry basically offer Gaming Keyboard As A Service. This involves providing firmware and a fork of the VIA customisation software in a single package so brands like Epomaker can focus on aesthetics.
I dug into the Westberry software ecosystem, finding their out of date, hard fork of the VIA web app hosted on GitHub pages with a feeble and now vestigial attempt to redirect the keyboard definitions directory elsewhere. Presumably they ran into the same duplicate VID/PID issues I did and gave up adding proper support.
While what Westberry are doing is, for the most part, above board I was unable to find any firmware sourcecode for the Epomaker Shadow-S. From what I can glean, the 2.4GHz / USB / Bluetooth tri-mode feature of these keyboards is not officially supported by QMK since they haven’t identified a universal way to support it. As such manufacturers like Westberry must fork (take a copy of) the QMK software and modify it to support their specific hardware configuration. Westberry have several accepted commits to the official QMK codebase, plus some VIA keyboard definitions- but none of these apply to the Shadow-S or its Tri-mode chip, though some “Glorious Gaming” products – which I can’t find because their website is now a holding page – use the same VID/PID.
The official word from Epomaker is that their VIA-compatible software stack is not derived from QMK, so sourcecode is not available. I find this claim difficult to believe, since not-inventing-here an entire keyboard software stack is a rather ambitious distraction (I should know, I’ve done it at least twice), but I have no way of verifying it one way or another at time of writing. To be fair- it’s at last plausible that a company specialising in selling keyboards (or their partner, specialising in selling keyboard solutions) would roll their own. Despite my comparison to Keychron’s Bluetooth module, the Epomaker Shadow S does behave subtly differently – hitting Fn + BT1, for example, will do nothing on the QMK Keychron K3 until you release the Fn key. On the Epomaker Shadow S, switching Bluetooth profiles is instant – the selected profile is also indicated on the LCD display – and you can hold down Fn while tapping between them. This notable quirk implies a low-level difference between input handling methods that potentially supports Epomaker’s claim.
Software
The “VIA” compatibility is one of the headline features of Epomaker’s Shadow-S. VIA is a both a tool and a standard for tweaking custom key bindings, macros, lighting effects and more on mech keyboards usually running the QMK firmware. VIA is an open-source project run by volunteers who are not affiliated with Epomaker. From my brief glance into their Discord and GitHub repositories, however, they are remarkably tolerant of keyboard manufacturers misappropriating their work– perhaps they’ve resigned to the fact there’s little they can do about it. The VIA team have no real interest in supporting these keyboards, however, and are marching ahead with new features and a revised version of their protocol that are not backwards compatible.
As such Epomaker points to a fork of VIA run by “Westberry” – that aforementioned “turnkey gaming keyboard” company. This fork comes with its own desktop wrapper just like the real deal and this, presumably, points to their own hosted copy of the VIA website/app which can be pinned to a point in time where it just kinda almost works with their keyboards.
As far as I can tell, the Westberry fork of via is hosted on GitHub pages and available publicly at via.evove.top.
However, you *can* use the official VIA web app. At least for now.
Getting VIA to work was a little tricky, and required some steps not clearly documented in the instructions. It seems possible to use the web version (the download is just an Electron wrapper around the website) by going to https://usevia.app/settings and clicking the “Show Design tab” toggle. This will give you a new paintbrush top-level tab where you can load the JSON file supplied by Epomaker. The link to the USB VIA JSON file was broken in the PDF and printed manual, requiring a little sleuthing for me to find it. I reported this to Epomaker and they fixed it promptly, so you’ll never have to know… wait… whoops! I guess you do now.
As Epomaker suggests, you’ll also need to switch the “Use V2 definitions (deprecated) toggle.” This… is not good, and was raised almost two years ago as an issue and cause for confusion with Keychron keyboards. Expecting customers to do more than load up an app and have it Just Work is a pretty big ask.
Another small gotcha- on Safari or Firefox loading the usevia website will give you a “USB Detection Error.” You’ll need Chrome, Edge (which is basically Chrome) or Opera (people still use that?) On macOS I grabbed ungoogled-chromium. On Linux (Pop!_OS) I just used the Chrome snap.
While there are definitely some hiccups getting VIA playing nice with Epomaker keyboards, you only have to jump through hoops once (at least, I hope) and it’ll be fine thereafter. At least until VIA remove support for the deprecated V2 definitions entirely. Since the VIA web app and downloadable wrapper are both effectively always up-to-date this could – in theory – happen at any time. Westberry’s version is kept deliberately behind the curve, so if you’re using that you can at least hope it’ll always work.
In addition to the small hiccups I also noticed VIA reporting errors when I tweaked backlight settings. Changing the backlight mode via VIA’s menu still seemed to work, however.
Another gotcha I discovered while delving deep, deep into the rabbit hole of VIA and keyboard definitions is that Epomaker’s keyboards share a VID and PID, or Vendor and Product ID respectively. This may be because they’re using that turnkey Gaming Keyboard SOC from Westberry. For example the CIDOO Nebula I tested has the same exact VID/PID in its JSON definitions – and indeed when I query the board directly – as the Shadow S which, in practice, means you can only have one set of JSON files loaded. The average user will probably only have one of these keyboards, but if you have two and your keyboard gets misidentified then you’ve probably got the wrong files loaded and need to visit the Design tab again.
If, like me, you feel empowered to fix this software situation even just to make tinkering a little easier on yourself… don’t bother. Even if you go through the arduous process of setting up a version of VIA with Epomaker keyboards in its definitions, these VID/PID combinations will loudly conflict so it’s currently very, very tricky to make one web app that Just Works with all of these keyboards. Small wonder nobody has done it yet!
Another oddity in Epomaker’s implementation of key mapping is the Win/Mac switch along the back of the keyboard. There is an expectation that this should switch layers within QMK, indeed on the Keychron K3 Pro it switches from layer 0 to layer 2, which then makes the Fn-shifted layers 1 and 3 respectively. In the case of the Epomaker Shadow S there seems to be some very explicit logic that swaps Left Win/Alt (and maybe applies some other macOS vs Windows tweaks?) ad hoc. This means you cannot use the slide switch as a means for switching between your own customised layers as you might with a QMK-based keyboard. It also means there’s no indication in VIA what these keys do in any given mode. I tried re-binding Win/Alt to X and Y to see if the switch would swap those. It didn’t. I tried binding some other keys to Win/Alt to see if it would swap those. It also didn’t. There’s some very specific special-case logic at play here. If you want that WIn/Mac switch to provide more useful and complete remaps between operating systems then, sorry, no dice!
The last footnote to the VIA saga is Bluetooth, but this applies to all VIA-compatible keyboards. If you’re planning to use exclusively Bluetooth connections then you’ll not be able to casually fire up VIA and tweak your setup. VIA requires either USB or a 2.4GHz (USB dongle based) connection. Epomaker supply a separate JSON definitions file for each of these modes (the USB PID is different, but not much else). The saving grace is, of course, that your customisations are saved directly to the board – you can set up in USB mode and use your configuration over Bluetooth just fine.
As for whether any of this will improve- I don’t know. Epomaker mentioned that there’s a V3 update – which will take a lot of the pain out of setting up the Shadow S – in the works but I wouldn’t hold out any hope and I certainly can’t evaluate a keyboard on promises.
Chief on my wishlist would be full VIA 3.0 compatibility and the ability to make the Win/Mac switch change the default layer so the OS-specific customisations can be more visible. On the Shadow S by default layers 0, 2 and 3 are identical so there’s some wasted potential for those who don’t want contrived Fn combos.
Adventures In LCD Clock Setting
As the VIA saga might suggest, Epomaker’s LCD software – dubbed “Image Custom Tool” is not much better- it’s a Windows only, 32bit only inherited mess that appears to have been for one, or maybe a dozen, prior keyboards, maybe even from other manufacturers. The installed application files seem to have references to Windows Vista (yeah, EOL 2017!) and dates around 2018 and 2019 in strings like “eevision_A_mp_001_20180108_ak60”. Where this software comes from and how it ended up being the image customisation tool for Epomaker LCDs is anyone’s guess but the jank doesn’t stop at the sourcecode.
The UX for setting custom LCD pictures or animations is, for the most part, usable, but there are included paint features which give you a 1, 2 or 3px cursor to painfully paint the 240×135 pixel canvas. I’d comment on its ability to import gif files or videos and convert them for display on the LCD, but I was running the whole thing in a Windows 7 VM on my mac with no easy access to content.
“Image Custom Tool” also quietly sets the Epomaker Shadow S clock, something that appears to be undocumented everywhere I looked. If you’re running macOS or Linux you’re out of luck and will get that perpetual “unset oven clock” experience.
This bugged me enough that I wasted six hours of my life trying to set up a VM on macOS to host USB packet capture and Wireshark so I could unlock “image Custom Tool’s” secrets and write a script to set the clock. I was successful, and with any luck it’ll work on a few more of Epomaker’s boards, but, uh, you can set some interesting values…
(Yeah that was pretty much the real time I actually got this working…)
Anyway, if you want to set your clock then here’s a trash Python script that should do it. If you don’t know what to do with this script, you probably shouldn’t be running dodgy stuff from some guy off the internet. No, really, this is thoroughly untested and may totally brick your keyboard.
Overall
The Shadow S is a decent keyboard marred by a few minor – mostly software – issues. The hoop jumping required to set up VIA and the uncertainty around its future make it difficult to recommend to anyone who sees it as a must-have feature.
The key caps are great quality, but the font/colour choices are a little meh. They would, if nothing else, be fertile ground for experimentation with replacements… yeah the infinite multiverse of alternate key cap options is calling to me.
If you just want a keyboard that works out of the box over USB, 2.4G wireless and Bluetooth then it’s a solid buy, with a reassuringly modular design that might even permit a repair or two. You can certainly replace the battery and – if you’re brave enough – the LCD.
You don’t need to get involved with software at all to get a decent experience, and all of the RGB lighting control is available via well-documented shortcuts.
Nonetheless it bears emphasising that using a developer feature to load deprecated V2 definitions into VIA is not exactly my idea of support. I don’t think it’s reasonable for Epomaker, or any other brand recommending this absurd process, to make the bold headline “VIA” support claims they do currently. As such I’d recommend looking elsewhere if you value robust, mainline, community-endorsed QMK/VIA support.
There’s no smoking gun to let me decisively point to Shadow-S (and other Epomaker boards) as using a hacked-upon, licence violating derivative of QMK, but it’s widely assumed that they do. Even if Westberry wrote their own custom firmware, both they and Epomaker have forks of QMK so it could hardly be a cleanroom effort. I’m a FOSS developer by trade, so I’ll keep sleuthing. If you’ve got any insight, I’d love to hear it.
In summary, I can only hope for an updated, or even mainline QMK firmware for these boards- I am not optimistic, but you never know. In its current state VIA support is functional, but tedious. Points for a keyboard configurator that works on Linux, though.
And there’s the rub- open source software can be a great asset if you’re willing to let go and cede some control to motivated and passionate hobbyists, but it’s seldom a primary concern for businesses. I can’t find it in myself to be mad that Epomaker chose this route (though I probably should be), but I sure am disappointed.
The TLDR- the Epomaker Shadow S is a decent keyboard sorely in need of a software strategy to match.
Now since you know unequivocally that I get stuff for free to write about, you should also know that I very, very rarely sell it. One of four things happens to everything I test- either I keep it and use it regularly (a.k.a “main” it), I keep it and use it as and when I need, I give it away to someone who needs it, or it rots for an eternity in a box somewhere until it’s consigned to the bin. As such I’d like to introduce a little ratings system here: Main, Keep. Give away. Bin.
The Epomaker Shadow-S is a solid Keep and I’m currently still using it as my main workstation keyboard.
(Psssst. I’m mostly being hyperbolic about the bin part… mostly.)