It depends. For me 100% it’s worth it. It adds a lot more value to the keyboard after you realise what you can do to it. Lots of users think macros are a waste of time. But they can become bloody time savers for every day repetitive tasks. I have one for logging into my server via ssh: it does three things, open the Termjnal app on my Mac, type out a fairly long-ish string username@address then waits and types the password. But layers make keyboard bigger. You can do more with less keys. I’m using a 65% and I whilst I much prefer to have the direction keys. I don’t miss the numpad or the F-row that much. I much prefer the space my desk has. Next, tap dance (only on VIAL, not VIA) means I can have one key dedicated to media: single tap is play/pause, double tap is next song, hold is previous song, tap-hold is mute. Four functions in one key. But I have friends who are not interested in the above at all and just use the keyboard as they see it on their desk. No special functions or anything. If you have no inkling to tinker or mess around with the layout or use macros then QMK/VIA isn’t for you. Answer from Tangbuster on reddit.com
🌐
Reddit
reddit.com › r/keychron › qmk/via question: worth it?
r/Keychron on Reddit: QMK/VIA Question: Worth It?
January 21, 2024 -

I have the Keychron K2 v2., that I've had for two days now. I usually use AutoHotKey in Windows to do my macros and such, so I didn't really think I had a need for any on-board scripting. But just in case I want to upgrade down the road, what have your experiences been? Does having the scripting be directly on the board itself make a difference?

Top answer
1 of 8
9
It depends. For me 100% it’s worth it. It adds a lot more value to the keyboard after you realise what you can do to it. Lots of users think macros are a waste of time. But they can become bloody time savers for every day repetitive tasks. I have one for logging into my server via ssh: it does three things, open the Termjnal app on my Mac, type out a fairly long-ish string username@address then waits and types the password. But layers make keyboard bigger. You can do more with less keys. I’m using a 65% and I whilst I much prefer to have the direction keys. I don’t miss the numpad or the F-row that much. I much prefer the space my desk has. Next, tap dance (only on VIAL, not VIA) means I can have one key dedicated to media: single tap is play/pause, double tap is next song, hold is previous song, tap-hold is mute. Four functions in one key. But I have friends who are not interested in the above at all and just use the keyboard as they see it on their desk. No special functions or anything. If you have no inkling to tinker or mess around with the layout or use macros then QMK/VIA isn’t for you.
2 of 8
4
AutoHotKey may be more powerful in a lot of ways due to being a scripting language, but QMK/VIA/Vial macros come alive if you pair them with something like Microsoft Powertoys. More than macros though, the powerful key mapping is the biggest advantage for me personally. My Q4 is a 60% layout that I would hate without QMK functionality. Remapping the layers and keys to my needs makes it feel like a much larger layout and really speeds up my work. I can't ever buy a keyboard without QMK ever again.
🌐
Reddit
reddit.com › r/keychron › is keychron's qmk and/or via features driverless?
r/Keychron on Reddit: Is Keychron's QMK and/or VIA features driverless?
June 18, 2025 -

Is Keychron's QMK and/or VIA features driverless is what I continue asking myself and is why I haven't pulled the trigger.

I'm a coder by trade and am currently employed by an organization that, for the most part, doesn't allow third-party software of any kind. To the extent of either disabling and/or stripping built-in default Windows 11 OS apps and features.

In the end, I'm either left with attempting to get approval which almost takes a blood sacrifice and is a very lengthy process, or discovering "driverless" solutions.

I'm pretty sure QMK isn't as it has its own software however, VIA seems like a good choice from what I gather.

I need to be able to configure repetitive tasks on my personal laptop or gaming pc, and then be able to use the pre-configured shortcuts on my work computer with both wired and 2.4-GHz communication options (in case they start making us used wired) without the need of any support on my work laptop's behalf.

🌐
Reddit
reddit.com › r/keychron › via/qmk setup
r/Keychron on Reddit: VIA/QMK Setup
March 28, 2023 -

Hi Keychron Komrades!

Wondering if anyone who has experience with the QMK/VIA keyboards could answer a question. I’m looking at getting a Pro or the Q1.

I assume this software configures onboard profiles, so do these profiles remain the same whether you’re in Windows or Mac mode? Or can you set a Windows custom profile, and a Mac custom profile, that allow the keyboard to behave differently when using different operating systems?

Can you set up these profiles on your own personal computer, save them to the keyboard, and then simply use and execute them on another computer such as your work computer (which you didn’t specifically configure on)?

🌐
Reddit
reddit.com › r/keychron › keychron k10 (non pro version) qmk and via
r/Keychron on Reddit: Keychron K10 (Non pro version) QMK and VIA
February 12, 2024 -

Hello All,

Is Via/QMK supported on the non pro version of the K10? I actually like the non pro version because it has better keycaps, that's why I bought it.

I have the UK version of the K10.

Thanks for the help.

Top answer
1 of 3
2
No QMK/VIA are not supported on the non pro K series. Also they keycaps are terrible on them, thin laser etched ABS that shine so very quickly and sound terrible (I own a non pro K8 and git them off so fast)
2 of 3
2
There is a port of QMK for the K series. The Keychron K series is on the list of compatible keyboards . Though K10 isn't on the list, but that could be due to it not having been tested yet. It entirely depends on the microcontroller. Perhaps they changed microcontroller in the later versions of the K series? If they didn't, it should be relatively straightforward. The first step could be to open it up and find out what microcontroller is used. Later steps probably involves a soldering iron . To get an impression, there is this video (without any extremely irritating background music!!!!! What a relief!!!): Sonix QMK status update, installation, and demonstration with OpenRGB Some timestamps: 05 min 00 secs: PCB. Uses the same OEM platform (eVision) incl. GMMK. 07 min 30 secs: The bootloader is hardcoded into the chip. 08 min 10 secs: QMK ported to Sonix 13 min 26 secs: The demoed client application has "OpenRGB" in the title bar. 15 min 10 secs: A search engine result for "Sonix SN32F248B" Includes: On Reddit . 20 min AA secs: Demo of flashing 23 min 20 secs: Notes about the QMK and the USB protocol for OpenRGB 29 min 13 secs: Demo of OpenRGB with four (different) keyboards, incl. with audio input.The keyboard layout is requested from the keyboard 30 min 42 secs: With audio input. 31 min 30 secs: Aurora comparison. E.g. game 'Overwatch' with 'Chroma' integration.But still using OpenRGB(?) with the QMK keyboards. 35 min 20 secs: Reinstall the stock firmware All disclaimers apply
🌐
Reddit
reddit.com › r/keychron › guide to using qmk/via on the q1 - mac specific keys?
r/Keychron on Reddit: Guide to using QMK/Via on the Q1 - Mac specific keys?
September 16, 2021 -

Edit: In recent months, QMK has added actual key codes for Mission Control (KC_MCTL) and Launch Pad (KC_LPAD). Compiling the Keychron firmware against a recent version of QMK should give you those codes so you can use them properly.


I received my Q1 and really like it so far. I'm looking into getting rolling with QMK/Via but am completely new to these pieces of software.

What I'm trying to do is assign F3 and F3 to Mission Control and Launchpad on my Mac. I know that, at a basic level, I can setup a Macro within VIA, or, just assign F3 and F4 within System Preferences to those relevant commands.

However, I don't want to do that - that would lose the ability to use the F3 key as a 'real' key for example. And, there's just the sheer fun of it ha - I want to use the actual Mac keycode (as if you were buying a Magic Keyboard) and learn about VIA/QMK in the process.

I found some information about those keys (and other Mac-specific key codes) at https://github.com/qmk/qmk_firmware/issues/10111. These steps however refer to editing the raw source code of the firmware.

As far as I can tell, that's not something Keychron has made available? I can see the hex file for the firmware listed https://www.keychron.com/blogs/archived/how-to-reset-your-keychron-q1-to-factory-settings, but I don't see a way online to 'decompile' that into the C files.

I feel like others will have this question as more Q1s are sold, so what I've love to have more information about is:

  1. How do I use QMK to edit the firmware of my Keychron Q1? I don't want to write a completely new one, I just want to make small modifications to the existing firmware.

  2. How can I pass specific key codes in VIA (such as 0x29F and 0x2A0 https://www.usb.org/sites/default/files/hut1_2.pdf)? Is this possible?

  3. With the hex file provided by Keychron, can I 'edit' that file in any way?

Not sure these are the right questions to ask. Most of the documentation I can find on QMK and Via is really not geared at folks getting started, so hopefully any information here will get me over that initial hurdle.

🌐
Reddit
reddit.com › r/keychron › new to qmk/via based keyboards
r/Keychron on Reddit: New to QMK/VIA based keyboards
May 7, 2021 -

I've been using an ergodox for a number of years at home, but now that I'm going back into the office a couple days as week I thought I would invest in another programmable keyboard. I settled on the K8 pro which arrived a couple days ago. So far so good but I'm new to VIA and haven't touched QMK config so figured I'd ask before I delve to deep down this rabbit hole.

When I load the Design into VIA, it looks like I'm limited to 4 layers and 15 maros. Is this a hard limit? Is there a way to exceed that? Mostly interested in Macros. I think I have something like 45 on my ergodox.

Is there a way to do double tap/single tap/long hold functionality. Again this is something the ErgoDox does easily with their configurator, but something I don't see an easy way to do with VIA.

I've seen that there's a spacebar/layer1, I'm not a huge fan using spacebar. I've used capslock in the past and it's worked really well for mem but again I don't see any easy way to do this in VIA.

Other than a bit of a learning curve I'm really liking the keyboard so far.

Find elsewhere
🌐
Reddit
reddit.com › r/keychron › qmk setup
r/Keychron on Reddit: QMK Setup
February 8, 2025 -

I'm trying to customize my Keychron K15 Max. I downloaded original firmware from https://www.keychron.com/pages/firmware-and-json-files-of-the-keychron-qmk-k-pro-and-k-max-series-keyboards, downloaded QMK toolbox.

When I try to use my keymap JSON file in the QMK Configurator https://docs.qmk.fm/ that I downloaded from the Keychron website to modify it I get "Sorry, this doesn't appear to be a QMK keymap file."

https://imgur.com/a/d6x6PRI

How would I get this to work? https://docs.qmk.fm/feature_macros#using-macros-in-json-keymaps

Is this not the right way to edit a keymap file and 'compile' it via QMK Toolbox /Configurator. Do I need to do it a different way for Keychron K15 max?

What I'm trying to achieve is to create a Macro that would run a exe and also perform some other functions

🌐
Reddit
reddit.com › r/keychron › how to get started with qmk/via customizations
r/Keychron on Reddit: How to get started with QMK/Via customizations
July 15, 2023 -

I've recently bought Keychron V1. One of my main driving forces in picking up this keyboard is its potential for custom firmware via QMK. In my research, I haven't found starting points for this custom firmware thing. I'd love to make my keyboard perform one-shot layers. Can you guys please point out a good starting point where I can start my research. I do have a decent background in Programming and code

[Edit]: I've found a good starting point for those who are trying to attempt the same. Try checking out: https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/

🌐
Reddit
reddit.com › r/keychron › qmk on k*
r/Keychron on Reddit: QMK on K*
September 17, 2019 -

Hey there! We've compiled instructions on how to install qmk on a K6 with some guys over at Sonix Keyboard Hacking Community Discord Channel. Currently, the guide focuses on K6 with some basic functionality to get newbies started, though it is pretty much applicable to other supported/community-supported keyboards with appropriate MCUs.

Here's the link to the guide, comments and suggestions are welcome:

https://github.com/CanUnesi/QMK-on-K6/blob/main/README.md

Disclaimer: I am by no means an expert on the subject. I was just disappointed with the abandonment of the official software so I looked up online to see what I could do about it. Then I found this community and some talented people over there helped me through the steps. After I was able to get my keyboard working on qmk, I decided to make a guide for dummies. Please join us over at the community if you have additional questions!

Edit: Moved the guide to github

Edit 2: I haven't been able to keep up with the recent updates on the repo, some stuff has changed and I couldn't find the time to update the guide so here's another page managed by another member of the community, user jpe230 on the discord channel if I'm not mistaken.

https://sonixqmk.github.io/SonixDocs/

🌐
Reddit
reddit.com › r/keychron › software for keychron keyboards (keychron q6 qmk)
r/Keychron on Reddit: Software for Keychron Keyboards (Keychron Q6 QMK)
September 26, 2024 -

I recently got a new keychron keyboard and I was replacing an old Razer keyboard that I had. The razer keyboard came with Razer central which was like a software to program and change the lighting on my keyboard, is there something similar for keychron keyboards?

🌐
Reddit
reddit.com › r/keychron › how difficult is it to set up and use qmk features on keychron wireless keyboards compared to standard qmk keyboards?
r/Keychron on Reddit: How difficult is it to set up and use QMK features on Keychron wireless keyboards compared to standard QMK keyboards?
May 17, 2025 -

I'm planning to get a Keychron V1 Max or V2 Max because their specs fit so well with what I need. However, based on what I read, Keychron's QMK Fork is a bit different for wireless. This would also be my first time flashing firmware if ever I push through with the purchase and this is the reason I'm a bit worried. How much more of a headache would customizing a wireless QMK keyboard be compared to a standard QMK board? For reference, here are the features I am looking to explore:

Leader key
Mod tap or Space cadet shift
Caps Word
Autoshift or Tap-Hold
Combos
Layers and Layer Lock

Top answer
1 of 2
3
Re "How much more of a headache would customizing a wireless QMK keyboard be compared to a standard QMK board?": It depends on how new the QMK feature is. For example, combo keys work without any problems (I use them on the V6 Max I typing this on). But, for example, newer features, like chordal hold and QMK community modules ( some examples ), are not supported. I think the features you listed are older feaures that are supported, but I don't have any experience with them. You could try to find the fork date (it might be based on QMK 2023-12-18 (9539F1), but it might also be much older than that; I am not sure) and compare it with QMK changes, for example, this list of QMK release notes. Setup For the setup, it isn't any more complicated than: Knowing the location of the source code Use two or three extra parameters in the 'qmk setup' step (to reflect that the source code is in Keychron's fork). There isn't any need to mess with Git on the command line (at least not initially). References V1 Max source code . Note: In Keychron's fork and in that fork, in Git branch "wireless_playground" (not the default branch). Note that the base installation (and usage) has become much more complicated on Linux . No matter the Git branch, for example, "wireless_playground", it requires special setup of QMK (the standard QMK instructions and many other guides will not work (because they implicitly assume the main QMK repository and a particular Git branch)). Source code commits ( RSS feed . Latest: 2025-03-25).
2 of 2
1
OK, with the Git branch " wls_2025q1 ", it seems most new QMK features are included. It seems to be based on something close to the February 2025 QMK version 0.28.0 release . I have yet to test it out. I am still using "wireless_playground". Note: "2025q1" seems to refer to the QMK update, not the the early 2025 Keychron keyboard main firmware updates without source code . The two released at about the same time is probably the cause of some of the confusion. It also contains source code for some, but not all, of the original K series that received QMK support in 2024 and 2025. An updated reference is something like: V1 Max source code . Note: In Keychron's fork and in that fork, in Git branch "wls_2025q1" (not the default branch). Note that the base installation (and usage) has become much more complicated on Linux . No matter the Git branch, for example, "wls_2025q1", it requires special setup of QMK (the standard QMK instructions and many other guides will not work (because they implicitly assume the main QMK repository and a particular Git branch)). Source code commits ( RSS feed . Latest: 2025-05-09).
🌐
Reddit
reddit.com › r/keychron › qmk vs. keychron launcher
r/Keychron on Reddit: QMK vs. Keychron Launcher
March 29, 2025 -

I have a Keychron V6 Max with the knob for home use and a Keychron K10 Pro for office use. I would like to get started on using QMK to customize them. Let's face it, it's one of Keychron's greatest advantages over other brands. Can someone answer these questions for me?
a) Which one is more powerful? QMK or Keychron Launcher?

b) Can someone recommend me a QMK tutorial for a newbie for me that doesn't make me want to pull my hair out?

c) Can someone also explain to me what a tapdance is in keyboard parlance? And how VIAL comes into it?

d) Can someone recommend great macros that has made your life easier? One of my favourites that I use the Launcher to program is the quick Equation Box macro in MS Word. I also have PowerToys installed on my laptop.

Thanks in advance for answers.

Top answer
1 of 5
2
Keychron Launcher is a port of VIAL with added Keychron-specific functionality, so it's not a matter of using QMK or Launcher, it's a matter of configuring QMK using the GUI or creating new firmware for your keyboard using the QMK source code. If you are not comfortable doing system programming in C I would not recommend you go the latter route. Tap Dance is not accessible from VIA/Launcher. You will need to rebuild the firmware with VIAL instead of VIA, and use via.rocks instead of launcher.keychron.com or usevia.app. This also carries the same caveat as above... it's a risk. If you had, say, a Q4 or Q15 where there are not so many keys to play with it might be worthwhile. If you are already a decent C hacker, you could still go for it, otherwise if you want to learn I would recommend getting a cheaper board that's directly supported in the main QMK repo to learn on so you don't risk bricking your nice 100% unit. VIA and Launcher support layer-tap and mod-tap, which can do some of the same stuff as tap-dance. I typically program my boards to use layer-tap on tab and caps for layer selection on hold and the base function on tap. Some function combos are simply easier to hit with a left-hand function key.
2 of 5
2
Re "Can someone recommend great macros that has made your life easier?": There are some ideas here and a list here . And more lists: How useful do you find the macro keys on the V10/similar models? (Neovim/tiling window manager users especially!) Remapping keys or using the macros Macro Ideas I am surprised how many people seem to prefer really small layouts How is everyone using the M keys? Macro / superkey repository Macropad for efficient programming
🌐
Reddit
reddit.com › r/keychron › does anyone know how well qmk/via plays on corporate it systems?
r/Keychron on Reddit: Does anyone know how well QMK/VIA plays on corporate IT systems?
March 31, 2023 -

So I'm a happy K8 user, but I'm in a job that requires moving between computers and a lot of keyboard shortcuts like CRTL+ALT+F9. I used to use a Logitech G13 with everything programmed into it, but now I'm working on a locked down corporate IT network, so loading software onto the work computer is out.

But from what I can see QMK/VIA appears to reprogram the keyboard firmware, so I'm wondering if I can program macros into something like a Q0 at home, and have those macros function at work.

I can't find anything specifically talking about this type of situation, and I'd rather not waste the time and money, so I'm asking y'all...

Am I correct in my understand of what QMK/VIA is doing? It's rewriting the firmware to send specific key combos / commands from the device, not translating them once they arrive at the PC?

Has anyone already tried this? Did it work?

🌐
Reddit
reddit.com › r/keychron › keychron bluetooth with qmk firmware - lessons learned
r/Keychron on Reddit: Keychron bluetooth with QMK firmware - lessons learned
March 10, 2024 -

I wanted to do some advanced customizations for my Q3 Pro and found out about qmk fork: https://github.com/Keychron/qmk_firmware/tree/bluetooth_playground/

This is really something cool! I managed to do everything what I wanted with 'my keymap.c. But later I discovered that bluetooth is not working.

So I spent hours debugging until I discovered that using SAFE_RANGE for enum definitions is not actually safe. Keychron introduced new enums and defined NEW_SAFE_RANGE. So what I what i needed to do to resolve my bluetooth issue was to fix the enum value assignment:

enum custom_keycodes {
   KC_MYKEY = NEW_SAFE_RANGE 
}

Hopefully this would help somebody...

🌐
Reddit
reddit.com › r/olkb › newb; wondering some things about qmk and via
r/olkb on Reddit: Newb; wondering some things about QMK and VIA
December 14, 2022 -

I have a keycrhon Q6; my first 'real' mechanical keyboard.

I have a few questions, if some of the more experienced users could help me out here

  1. QMK and the Keychron Q6. If I understand correctly, the Keychron is QMK compatible. Does this mean that the Keychron firmware IS qmk/open source? Or does that mean its just compatible with QMK, and the actual keyboard firmware isnt open source itself?

  2. VIA is just a streamlined version of QMK with GUI, right?

  3. Third, I am using VIA. I am trying to program macros, but I REALLY need a delay (500ms) function. For example, press Macro key 1, which activates the sequence {KC_T}(delay}{500ms}{'Git Gud'}. As I understand it, VIA cannot do this delay function yet. But apparently that will be a thing in VIA version 3? I looked, but I cannot find an ETA. Does anybody have one for me?

Thanks for listening to a newb's questions. Any feedback you have is appreciated

Top answer
1 of 3
2
Not all keychron keebs are supported natively by QMK, but the Q series are supported. Now Keychron has their own fork of QMK, they do this to maintain Bluetooth support for the keeb, right now native QMK does not have great support for bluetooth, thus if you flash the native QMK firmware for your Q6, you're likely to lose bluetooth supoort. Also, though the Q6 comes with Keychron's own QMK by default, I don't think that they release the bluetooth specific source code(not sure), so by that definition, the Q6 is running a partially open source firmware(QMK - opensource, bluetooth - closed source.) VIA is like an accessory for QMK, it makes customizing QMK a lot more user friendly. Though from a security stand-point, VIA is not the most ideal 'application'. But for general use-case, it should be just fine. Implementing Delay functions require you to tinker with the actual source files of the QMK firmware for your keyboard, currently VIA does not have that kind of option AFAIK. Since Keychron's QMK fork is not fully opensource, then you might have to switch to native QMK firmware to define the 500ms delay BEFORE compiling the firmware. (Bare in mind that using native QMK might make the Bluetooth not work anymore, bluetooth might only work when Keychron's QMK is running.) Also you dont really have to worry about bricking your keeb, just don't be stupid, and ASK US HERE if you don't know or understand anything, DON'T YOLO IT. Thanks for reading 😊
2 of 3
2
Yes, Q6 firmware is fully QMK based and you can compile our fork of QMK to replicate Q6 firmware. Since QMK is evolving day by day, from time to time you'll end up with a more recent firmware than the one you can download from keychron. Via is part of QMK and offers a GUI to edit keymap on the fly. You are effectively reprogramming part of the firmware, without the need to compile it from scratch. Via has not as many options to customize your firmware as pure QMK and has bugs sometimes ( https://github.com/the-via/app/issues/82 ) Delays in macros have been added to Via recently. I think the official Q6 firmware (1.4 in the times of writing this) is already based on those changes. Your Q6 might run an older version of the firmware, so you should flash the latest as first try. If there are no delays in Via, you can compile QMK with keychron keymap to get the very latest update of the firmware. Btw., if you want to put the keyboard in bootloader mode, you can use Via and the "any" key in special tab to assign "reset" to a key. No need to pull the spacebar and press the button while plugging in the cable. Also, to reboot the keyboard, you can unplug it, press and hold ESC and replug it. Keep ESC pressed for 5 seconds, then release. The keyboard will be not responding to anything. Unplug it and replug it and it's back to defaults. The official key-combo (FN+ j + z) just worked once for me at the very beginning. I'm on ISO layout and never know if I should press literally z (which is y on ANSI), or y (which is z on ANSI) and if I should press all keys at the very same time and exactly after replugging the keyboard and if I should release them exactly after 4 seconds... to many stumbles for me with this combo.
🌐
Reddit
reddit.com › r/keychron › issue setting up custom qmk firmware for the k5 qmk version 2
r/Keychron on Reddit: Issue setting up custom QMK firmware for the K5 QMK Version 2
July 21, 2025 -

Just got a K5 QMK Version 2 and it seems good so far, but I want to set up my own custom lighting setup. I did enough research to know it is possible, but the Git repo linked on the QMK site doesn't have this particular model's source code in their keyboards section. I found the source code for this model on Keychron's website and added it to my local copy of the repo, and it does show up in the QMK MSYS program when I check then list of keyboards. But when I try to compile it I get a large number of warnings/errors. The first two are unique, but the third occurs may times over, iterating over the key numbers, then the available keyboard layouts. I didn't see much on this subreddit about this sort of thing, but I saw enough to think someone here might be able to help, or at least point me in the right direction.

So, does anyone here know enough about custom QMK firmware to help me with this?

qmk compile -kb keychron/k5_version_2/ansi/rgb -km default

☒ Not including data from file: keyboards/keychron/k5_version_2/ansi/rgb/keyboard.json

☒ rgb_matrix.driver: 'snled27351_spi' is not one of ['aw20216s', 'custom', 'is31fl3218', 'is31fl3236', 'is31fl3729', 'is31fl3731', 'is31fl3733', 'is31fl3736', 'is31fl3737', 'is31fl3741', 'is31fl3742a', 'is31fl3743a', 'is31fl3745', 'is31fl3746a', 'snled27351', 'ws2812']

☒ keychron/k5_version_2/ansi/rgb: LAYOUT_108_ansi: Matrix row for key 0 (k0A) is 0 but must be less than 0

Unrelated, but the extra Esc, Windows, and Alt keys that came with my keyboard in a small bag all seem to have scuff marks (the kind that don't just rub off) and scratches. The Esc key in particular has very obvious scratches. They keys on the board were all fine. Does anyone know the odds I'll be able to get replacements from Keychron if I ask?