The main thing that sets the ML903 NearLink apart from its competition is the presence of Huawei's NearLink. Touted as a more stable, more efficient, and lower-latency alternative to other wireless protocol standards, the expectations for NearLink are rather high. Unfortunately the ML903 NearLink fails to meet them, though whether this is despite or due to NearLink is up for debate.
On the physical level, the ML903 NearLink isn't half bad. A weight of 68 g for a medium-sized mouse without holes or RGB lighting isn't anything to write home about, but considering that a 600 mAh battery has been installed, this weight isn't totally out of line, either. Build quality is also on a good level: There is a very faint rattle when shaking coming from the main buttons, but zero creaking or flexing when applying lateral pressure to the shell, and actuating the side buttons by pressing below them is impossible. For the main buttons, ThundeRobot has opted for a new and uncommon set of switches, namely white transparent switches from Kailh. These strike a rather appealing balance between stiffness and tactility and are among the lighter switches Kailh has to offer. That said, the button design could be better, as the right main button in particular has quite a bit of pre and post-travel, which is why button response isn't as snappy as it could be. On the flip side, lateral button movement is fairly low even when explicitly provoked. For the side buttons, another set of Kailh switches sees use, which provide a pleasant and snappy button response, and the forward button in particular shines with low pre and post-travel. The back button, on the other hand, suffers from significant post-travel, and can be pushed into the shell by quite a margin. The scroll wheel encoder likewise is from Kailh, and while noise levels are on an acceptable level, the lack of tactility when scrolling is rather irritating. The individual steps lack separation almost completely, to where scrolling becomes reminiscent of the infinite scroll of Logitech's G502. For scrolling databases, this might be a good thing, but for everything else, the lack of control is far from desirable. Lastly, the feet are made of pure PTFE and are of good quality.
When looking at performance, things quickly become dire. On paper, the feature list of the ML903 NearLink seems compelling: PixArt's PAW3395 sensor, 8000 Hz wired polling, 4000 Hz wireless polling—what could go wrong? Well, everything. On the positive side, CPI deviation is very low, which is particularly relevant in that the software for the ML903 NearLink artificially limits CPI adjustment to increments of 100, even though the sensor natively supports increments of 50. Sensor performance in wired mode is at least serviceable: MotionSync is permanently enabled, which helps lower SPI timing jitter, but does add motion delay, which is why the ability to disable it is sorely missed. Furthermore, higher CPI steps have copious amounts of smoothing applied, which is relevant in that in order to take full advantage of higher polling rates such as 8000 Hz, higher CPI steps should be used, but the smoothing applied at those increases motion delay, which of course is not desired. The biggest issue, however, is the fact that the sensor response curve isn't linear—that is, roughly 15 ms worth of latency are present at the onset of motion, which continually decreases until hitting a minimum. This not only makes it impossible for me to give proper numbers, but also ruins consistency. The exception to this is 8000 Hz, and motion delay at that polling rate is indeed on a solid level at 1.0 ms over the Logitech G403 (control subject). Polling likewise is stable at 4000 and 8000 Hz, whereas both 1000 and 2000 Hz suffer from instability. Click latency is the same regardless of polling rate and sits at 2.6 ms when using the lowest debounce time of 2 ms, which is low but a far cry from the 0.1 ms posted by 8000 Hz mice such as the Razer Viper 8K or Zaunkoenig M2K.
In wireless mode, NearLink finally comes into play. The main issue here is that for whatever reason, the HID descriptor is limited to 12-bit. As a result, if the number of counts per report exceeds 2047, a malfunction inevitably follows. At higher CPI steps (10,000+) and reasonable speeds, such count numbers are common, resulting in the mouse essentially becoming unusable. The last time I've seen this was on the ROCCAT Burst Pro Air, where the 12-bit HID descriptor eventually got patched out, but the ML903 NearLink has been around for a while and has been tested using the latest firmware, so I wouldn't hold my breath for any fixes in this regard. Performance varies greatly between polling rates. At 1000 Hz, polling is mostly stable aside from periodic off-period polls, and motion delay is rather underwhelming at 2 ms relative to the G403. 2000 Hz once again has the non-linear response, but polling is stable. Finally, 4000 Hz suffers from frequent off-period polls, and only achieves parity with the G403 in terms of motion delay, which many other wireless mice can do at 1000 Hz. Click latency isn't any better: At 1000 Hz, we see 4.6 ms at 1000 Hz and a debounce time of 2 ms, 4.1 ms at 2000 Hz, and 3.4 ms at 4000 Hz. For comparison, Razer musters 0.5 ms at 4000 Hz. Given the accolades for NearLink, this is certainly disappointing, though we can only speculate whether NearLink or the MCU/firmware solution used for the ML903 NearLink is at fault. Apparently, the MCU comes from HiSilicon, which is a semiconductor company wholly owned by Huawei, but both firmware and software are rather reminiscent of Realtek. In any case, performance is mediocre at best.
The real kicker, however, is something else. During testing, I've noticed that my gun often wouldn't shoot. At first, this only happened a couple of times per hour, but the longer I used the mouse, the more frequent these instances became. Essentially, what is happening is that when pressing a main button, it is immediately released, even when keeping it physically pressed. In games, this produces rather comical results. When trying to shoot continuously by keeping the button pressed, only the first shot will come out; when trying to scope in, it will immediately be canceled before the scope-in animation can even finish. Suffice to say, not just gaming, but any kind of usage is effectively prevented by this bug, and the mouse ultimately is rendered unusable. Changing settings, connectivity, or USB ports made absolutely no difference, and from what I can tell reverting this is not possible, so we have to assume that this is a permanent change. After just eight hours of use in total, the mouse was transformed into a useless hunk of plastic, as even double-clicking icons on the desktop proved to be a most arduous task. How a bug this fundamental and grave ever made it past any stage of quality control is beyond me, provided there even is one. Since this bug is also reported by others, it cannot be discarded as a one-off occurrence or hardware incompatibility, either. As it stands, the ML903 NearLink has a non-negotiable expiry date of roughly ten hours.
Lastly, NearLink doesn't appear to be quite as efficient as claimed, either. The software has a not particularly reliable percentage-based battery life indicator, and at 4000 Hz, it went down by 15% for every two hours of usage. Assuming linear consumption, we end up with less than 15 hours, which actually falls short of what the Razer Viper V2 Pro musters on a 300 mAh battery, and with optical main button switches. Charging at least is somewhat speedy at a bit more than 0.3 A, though not overly so given the 600 mAh battery capacity. The charging cable is plenty flexible, however, and won't feel too restrictive when playing while charging or wired usage in general.
Lackluster performance and mediocre battery life aside, if something as fundamental as the main buttons of a gaming mouse stop working correctly after just a couple of hours of use, one has to wonder how a product like this ever made it to shelves. The ML903 NearLink costs $69.99 on
Mechkeys.com, though given that it is little more than a paperweight, it could cost $0 and would still be overpriced. Avoid at all costs.