I’ll give it a shot! I actually own both Forge and Bolt and am a former user and evangelist of Bolt. In fact, I have used pretty much all the major networking systems on my current project. Started with original Unity (Raknet), to TNet, to Photon, to uLink, to Bolt, to UNet. Two major things hindered almost all of these products: support and features. Ease of use was also a close third. I left the Raknet implementation because of features, TNet was simply too bare bones for my liking and Photon was a nightmare to use and on top of that the CCU costs really scared me for later down the road. uLink was the first lasting and fully implemented system I used. It had more features than you could shake a stick at, ease of use was pretty good and it was tried and tested in big titles. The only problem was, the support was horrendous and after what I heard what happened to Facepunch with Rust (pretty much extortion for support of things that should be fixed to begin with) I was very wary and scared to deal with them. The community was almost non-existent and ALL of my maybe 20 + questions went without a resolution. I found every answer I need by trial and error or by @Yukichu who seemed to be one of the only active members that had a heart big enough to help us others who weren’t as versed. It just didn’t seem to me like they cared at all about their product so I left for Bolt immediately when I saw it had released.
Now a little history on Bolt. I actually knew and loved the author of it from several assets he had made in the past and also his activity on the forums. I learned a LOT from many of his answers on the forum and he was a great guy when it came to having 1 on 1 conversations with him. He to me and I’m sure many others seemed like a ‘networking god’ and the go to guy when it came to networking in Unity. I had used several of his products prior, Lidgren kit, Slimnet, UDPKit - so I was ecstatic when I heard about Bolt. I pretty much bought the asset solely based on the author and what many knew of him at the time. I jumped on board in what I believe was the second version of it, and was the first person in what seems to be a new thing, having a chat channel for developers to converse about the product and its genre
I was very active in the chat and the forums and fell in love with Bolt for its ease of use, feature set and the fact that ALL of the hard stuff I learned how to do myself (authoritative movement, dampening and syncing of mecanim over the network, client side prediction, etc) just worked with no questions asked. The author would have long chats with me, and the others who adopted early, answered all of our questions and was in the chat almost 24 hours a day it seemed at times. Everything was going great, I converted our entire project over in the matter of a few days time and much of the implementations I had done in uLink were improved drastically.
Fast forward some months later, what I believe is the downfall of a good thing. Bolt went on sale on the asset store. You must be saying, why is that a bad thing? Surely the author would get more customers which equals more money and a bigger customer base for support right? Absolutely - but to someone who was so dedicated to support and development of his product - this seemed to be the undoing. In fact I quit the chat myself after the new surge of users. I simply spent too much time in the chat chatting and helping, when I should have been developing. The thing is, I really didn’t care at all that development had stopped and things seemed bleak. Sure it is sad and all and it is understandable that these things happen. But when you disappear and can’t be hassled to take but 5 mins out to post in places what is going on, what to expect etc especially when you have such a large customer base that depends on you, that is inexcusable. It also didn’t help to be led on by false promises and exploits of high personal gains and doings. Just as @AwesomeX_1 stated. wave longtime Bolt user there.
This was the final straw for me. It was not the first time this had happened. Maybe it didn’t happen in the same way or to the same degree but many products we tried and depended on became abandoned or the developer disappeared or simply discontinued it. It is this reason that I have built my own networking solution on top of the UNet LLAPI. I know that every feature / bug is on me and I know the system inside out, so adding or fixing those things is very easy. (usually) Another big thing I learned is that unless you absolutely cannot code something and the system is complex, you should probably just do it yourself. If the time to code it is great though, I would forgo this. I spent a LOT of wasted hours on trying to integrate and make systems work how I needed them to. The initial integration is the easy part, but when those edge cases and or bugs begin creeping in and you haven’t a clue how the system is set up, or it is coded in some fashion you aren’t familiar with or something to this degree, you will end up spending more time trying to integrate, fix, and add on to it then you would just doing the system yourself the way it was envisioned to be. A perfect example of this is UFPS. I worked with it for 1 year during our development. I made it multiplayer well before their Photon kit was out. That thing was a NIGHTMARE to integrate and to change / fix anything was a headache a lot of times you can’t ask the developers because your implementation is so specific. It is a great asset but it is far, far, FAR too complicated for what it offers in my opinion. In early this year, I finally had enough. I sat down for 1 week and coded the entirety of a new custom FPS system that did everything we needed and more. UFPS has so many scripts and you have to jump through so many hoops to find where something is coming from or where it isn’t coming from with their event system and how they store values etc. I think the entire system may have some 100+ classes. My implementation is only 10 classes, and just 2 primary ones, Weapon and Camera. Now when I need to change something, implement something etc, it takes but a few minutes rather than a couple hours to a day or so. I think assets are extremely handy to have, but you really have to learn when and when not to use them. I mainly use them to learn from or I will take bits and pieces of them to add to my system, or form my own system from. If they are just plug and play and forget, then this is the best asset to use.
As for Forge, well it is like I said earlier. Your support right now is absolutely fantastic. I had an issue with the master server and it was solved in a day. I requested a complex feature (commands) and it was added in a day. I also requested the server + client launcher which you are already working on. It was only those features in which I had wanted in the system when I was considering using it. It is some of the best I’ve seen and I own hundreds of assets. The only problem with this is, is well - the same thing happened with Bolt. Whose to say in a month from now some unforeseen circumstance comes up (I hope it doesn’t!) and your entire team has to quit the product. Networking systems aren’t like small time assets that are just ‘done’ and will work forever. They are the backbone to many networked games and a developer who plans to sell their game will have players who depend upon them to fix the bugs / issues with the system when they arise. Does having the source available help with this? Absolutely but as I said before, take for example Bolt. A lot of people don’t know how Bolt works, how to fix it when it breaks or add the features they want and heavily rely on the author to do that. Most people who also view the code of Bolt find it to be in a foreign language in the way it is coded as well as the extreme complexity.
Right now I am using Forge’s master server so I do not have to do that bit myself
If it isn’t featured enough and or there won’t be a feature I need, I can always use it to learn to build my own or add to it. This is where source access is a big deal to a developer like me. But as for the networking. I am going to stick to UNet for now. After using uLink and going to Bolt. I simply cannot go back to using RPCs and Buffered lists. Events and entity states are the way to go in my opinion. (though your implementation and UNets of NetSynced variable is a very appealing alternative) I have adopted it early and I know my circumstance is different from others because I learned so much from my experiences and versed myself well enough in networking to code my own solution. Also some internal people at Unity have been fantastic in helping me as I have uncovered quite a few bugs / and found many areas users such as myself could get confused and misuse something. It will mature with time and I have already seen a great deal of changes in stability with the past 3 months or so I have used it. Also another perk to UNet is that if I need, I can always get Premium Support from Unity. So if I have issues down the road I know dedicated support is just a few meters deep in my wallet away! I also know that if anything happens to that networking I am in trouble, because I will probably be looking for a new engine too!
It’s kind of like the whole debacle on Early Access. There are a lot of amazing games you can find on there but since peoples experiences with the bad eggs weigh so much more heavily, it makes it all that harder to find and or trust the actual good eggs. This is just my 2 cents. Hope it helps.