@ -31,7 +31,7 @@ I spent a couple days profiling it, trying to improve the performance to a point
## Conclusion
## Conclusion
If you'd asked me a year ago, heck, even a couple months ago, if I'd ever think about undertaking a project like this myself, I'd have said absolutely not and proceeded to go find a third party library that could do the job adequately. But recently, I've been watching [Jonathan Blow](https://youtu.be/MnctEW1oL-E) talk about building parsers and [Andreas Kling](https://youtu.be/watch?v=byNwCHc_IIM) actually build a JavaScript interpreter starting from scratch, and there's one thing that they both mentioned on multiple occasions that really stuck with me: it's just code. Sure, its input is source code, but the operations it performs to produce syntax highlighted output aren't anything insanely complicated or out of the reach of any reasonably experienced programmer.
If you'd asked me a year ago, heck, even a couple months ago, if I'd ever think about undertaking a project like this myself, I'd have said absolutely not and proceeded to go find a third party library that could do the job adequately. But recently, I've been watching [Jonathan Blow](https://youtu.be/MnctEW1oL-E) talk about building parsers and [Andreas Kling](https://youtu.be/byNwCHc_IIM) actually build a JavaScript interpreter starting from scratch, and there's one thing that they both mentioned on multiple occasions that really stuck with me: it's just code. Sure, its input is source code, but the operations it performs to produce syntax highlighted output aren't anything insanely complicated or out of the reach of any reasonably experienced programmer.
I'm not trying to claim that what I've written is anywhere near as complicated as a full-blown parser or interpreter that could be used to execute code. Nor is it a simple one.
I'm not trying to claim that what I've written is anywhere near as complicated as a full-blown parser or interpreter that could be used to execute code. Nor is it a simple one.
metadata.title = "The Sorry State of Thunderbolt 3 Docks"
metadata.category = "computers"
metadata.date = "2020-04-13 17:19:42 -0400"
metadata.shortDesc = "On a quest to find a Thunderbolt dock that meets my needs."
metadata.slug = "thunderbolt-3"
```
My primary computer is a 2019 16" MacBook Pro. It has four ports. All of which are USB-C/Thunderbolt 3. Enough words by enough people have been expended complaining about how the lack of common ports makes their lives more difficult, so instead, I'm going to complain about how the solutions for connecting non-USB-C peripherals are awful. This is something I've ranted about multiple times on the fediverse, since it's something you'd think would be a solved problem by now. But clearly it isn't, so here we go again.
<!-- excerpt-end -->
I've got a pair of monitors connected to my laptop, one of which uses Mini DisplayPort and the other of which uses HDMI. Currently, I've got a USB-C → MiniDP dongle as well as a USB-C → HDMI (and several other things) dongle. Unfortunately, they're both rather flaky. Every other time (roughly), when my laptop wakes from sleep, the MiniDP dongle won't work and I'll have to disconnect/reconnect it to get video output to that monitor. Completely unrelaed, the HDMI dongle will randomly (often multiple times a day) start outputting incorrectly. The image will wrap around by about 25% of the width of the screen, resulting in the left edge of the picture being displayed about a quarter of the way over the screen, and the rightmost quarter of the picture displaying on the leftmost quarter of the screen. Similarly, the fix for this is to disconnect and reconnect the HDMI cable. In the past three days, the two adapters have flaked out a combined 11 times. This has become particularly annoying as, given the current state of things, I'm working from home through at least mid-June. Meaning I'm using my computer far more than I otherwise would.
## A Survey of Bad Options
"Thunderbolt™ 3 – The USB-C That Does It All" boldly proclaims an [Intel press release](https://thunderbolttechnology.net/blog/thunderbolt-3-usb-c-does-it-all) from June 2015. So, let's see exactly how many choice there are that can Do It All. The ports I'm looking for are: two video outputs (preferably one DisplayPort and one HDMI), two USB type-A, and ethernet. Power delivery would be nice, but isn't a requirement. Not too much to ask, right?
This would require a DisplayPort → Mini DisplayPort adapter (this is the least of my concerns, since it could at least operate passively since MiniDP is just a different physical connector for the same protocol) as well as a USB-C → HDMI adapter, the very thing I'm trying to get away from. It also only provides 87W of power delivery, 9 watts less than the charger than comes in the box with the MacBook Pro. While plugging in the laptop's own charger isn't a big deal, I don't want to pay several hundred dollars for a device most of whose capabilities I would not be using.
Apparently, the lack of a USB-C port, two USB-A ports, S/PDIF, and two whole watts of power delivery save you $50 since this is from the same manufacturer as option 1. This option would also require chaining dongles (either USB-C → HDMI or DisplayPort → HDMI) and may not be able to fully power the laptop when under full load.
Yes, the HDMI model has an extra USB type A 2.0 port for reasons I cannot find elucidated anywhere on the manufacturer's website (I would assume bandwidth limitations, but the manufacturer claims both types of video connections support up to 4096x2160 @ 60Hz, so who knows). Either model would require me to adapt either DisplayPort → HDMI or HDMI → DisplayPort, and chaining video adapters is something I wish to avoid. In any case, a single USB-A port is not enough to connect all of my peripherals, meaning I would need yet another dongle. This also has no external power input or power delivery, so I would still be using three of my four ports.
And so we arrive at the first option that can do 100W power delivery. Of course, this would still require a DisplayPort → HDMI adapter. This one has particularly mixed reviews as to whether it works with Macs or not (they all have mixed reviews about reliability, but this one especially so). Some claim it doesn't support multiple monitors since Macs don't support DisplayPort Multi-Stream Transport.
- 2x pairs of DisplayPort/HDMI, only one of which is usable at a time
- 5x USB-A, 3.1 Gen 2
- Gigabit Ethernet
- 3.5mm audio
Using multiple of the video outputs requires Multi-Stream Transport support, meaning the sole USB-C port would need to be connected to a USB-C → HDMI/DisplayPort dongle to get a second video output (this somehow bypasses the MST requirement?). Also, apparently both the ethernet and audio are not supported under macOS.
The first option that has both a DisplayPort and HDMI connection. Of course, doesn't have enough USB-A ports, or any power delivery. Despite it's lack of ports, it would seem like one of the better options. But, I can't find any concrete information on the internet about whether or not it supports outputting to two displays simultaneously without mirroring on macOS (meaning whether MST support is required or not).
The final option is an eGPU enclosure. This one does support power delivery, enough to sustain my laptop under full load. I have an RX580 from my old Hackintosh which: has native support in macOS, is comparable to the dedicated GPU in my laptop, and has plenty of video outputs (DisplayPort, HDMI, and DVI-D). Of course, it doesn't have any additional ports (there are models which also provide USB-A and Ethernet, but the graphics card alone will consume all 40Gbps of bandwidth Thunderbolt 3 has, so adding anything more will bottleneck it and cause stability to suffer). While somewhat tempting (the idea of upgrading to a beefier graphics card is interesting), $400 is an abusrdly high cost for what amounts to: a box, a cheap fan, a cheap power supply, and a Thunderbolt controller chip.
There are even more options I haven't bothered to list since they have pretty much the exact same port selection and set of trade-offs as one of these. Even the ones that are the least bad are still very expensive for what they offer. There are even more constraints, because macOS support (even putting aside MST) is by no means a given. The ones I feel most confident about are the only brand that's sold through Apple's own store (and also some of the most expensive).
## A Historical Perspective
None of these options entirely meet my desire set of capabilities, so clearly something that does is impossible, right? There's absolutely no way a device could exist that connects to a computer, provides power to it, allows it to output multiple video signals, hooks it up to several peripherals, and connects it to a hard-wired network, right? Such an astounding assortment of ports, such a triumph of technology, and miracle of modern engineering this fantastical gizmo would be, that it couldn't possibly exist. Right?
Thunderbolt 3 was first implemented in consumer products in 2015. A full 3 years earlier, in 2012, Lenovo had released the ["ThinkPad Mini Dock Plus Series 3"](https://support.lenovo.com/us/en/solutions/migr-74447), which, in addition to an unwieldy name, has a stunning variety of ports, the likes of which the present day can only dream of. It has six USB ports; five video outputs (up to three of which can be used simultaneously), including DisplayPort, DVI-D, and VGA; audio in/out; eSATA; ethernet; and a 135W charger. Compare that to even the best, most expensive options I listed above. Quite a stark contrast. Granted, the ThinkPad dock uses a proprietary connector and doesn't haven't to care about the vastly higher bandwidth standards that modern docks do. But, accepting the different times they were released, the now 8 year old ThinkPad dock is more versatile and more useful in every way[^1]. For my exact use case of a couple of displays, a few USB peripherals, a wired network connection, and power, the ThinkPad dock would have been more than sufficient.
[^1]: It may not have an SD card reader, as is common today, but the [ThinkPad W510](https://support.lenovo.com/us/en/solutions/pd003320) it was designed to complement had one built it, along with a myriad of other ports.
## Conclusion
So, has the magnificent pairing of Thunderbolt 3 and USB Type-C delivered on its promise to be the one port that does it all? In my estimation: no, absolutely not. There's no one dock that meets my needs, and of the options that don't fulfill my requirements, there isn't a single one that is obviously the least bad. What happened? How did we go from these behemoths of connectivity to not only laptops, but docks, with vastly fewer ports. Even Lenovo's own current generation ThinkPad docks, which are based on USB-C and Thunderbolt, offer far fewer connections than 8 years ago. Maybe USB 4 (which has subsumed Thunderbolt) will fix things. Or maybe it will just introduce a whole new set of confusing constraints and restrictions to keep track of.
I don't know what I'm going to end up doing. There are so many different choices with a such huge variety of trade-offs that keeping them all in my head at once and trying to make a decision is rather difficult. Who knows, maybe I'll just stick with my broken USB-C dongles.