Mature in terms of stability. Suricata itself is really just a user of the library. However, its less mature when it comes to developer experience and stability of APIs.
For a major release, we consider the API stable as of 8.0. We won’t break the ABI/API in patch releases unless completely unavoidable. We still reserve the right to break things over major releases.
The main documentation has a dev guide, please we have examples in the source code, in 8.0.x and the main branch. The focus is primarily on bringing your own packets and threads, as in embedding the engine into an existing system that is packet based. As you have noted in your other thread, it is packet based so other streams have data have to be adapted.
Hope that helps. Its still a work in progress, but more in terms of usability and adapting to different environments.
@ish - Thank you, this is very helpful. I was not aware that Suricata itself uses libsuricata in Suricata 8.0. That is good to know and gives us confidence that the underlying library is mature and exercised as part of the Suricata engine.
Since libsuricata is built and versioned as part of the corresponding Suricata release, if we build our integration using the library from Suricata 8.0.7 which is the latest, can we expect API compatibility when upgrading to later 8.0.x patch releases? Or should a production integration pin the exact Suricata source version used to build the library? We understand that moving to a new major release may require integration changes.