ib_insync has been discontinued. The main developer has passed away, sadly. I guess you still can use it from the GitHub repo, but there won't be any updates coming forward.
If you use c# I have developed a wrapper that I use on a daily basis. DM me if you need it.
I still don't get why are wrappers useful? Is it just to aggregate the interface for IBKR code modifications (ie. function signatures)? Does IBKR announce code changes in advance?
I wrote a wrapper with events, I don't like the way you are forced to implement virtual functions from the Ewrapper class. I also added a model to hold data into objects. It is easier to develop your algorithms that way.
The code provided by IBKR is messy. You are free to use it but you'll end up writing something on top to get something more up to this century.
I see there are 3rd party wrappers such as ib_insync etc to simplify the IBKR API usage. What is difficult about the APIs such that wrappers are useful?
Do you have anything written in Java or Python on Github?
Python and Java are obsolete languages.