Making software with IPFS/libp2p


I’m terribly sorry if this is nothing new, but I couldn’t really find anything that could help me regarding this question.

Is it really possible to develop software using both IPFS and libp2p? While there are implementations like Helia that I suspect would be perfectly capable of both as a single package, it doesn’t really seem to be hinted at anywhere in the documentation, and I can only presume that based on libp2p property of the Helia interface. Now that I’ve visited I can see that it’s mentioned there as well, but again, still, it doesn’t seem to be sufficiently explicit (some usage examples would be greatly helpful).

Then, again, there’s a question of whether my intentions are correct or not. I was thinking of developing a forum engine using IPFS and libp2p, using libp2p for coordination (informing members of new posts via pubsub) and and IPFS for data distribution (a member would present their posts as files on IPFS) as well as maybe implementing some server for the thing, if that would happen to be necessary.

I also find myself confused about implementations, which, it seems, there are separate for IPFS and for libp2p for every language (besides, as I mention, Helia, but I find myself a bit confused about that one as well). While every IPFS implementation in itself contains a libp2p implementation (or so it seems at least) is it really possible to use it? What would you recommendations be for languages like Rust or Java?

If it wouldn’t be terribly inconvenient, I invite you to share your thoughts on the matter. How would you go about making an application like that? What would you be using? Please be welcome to share your thoughts and opinions.

This is a working implementation in JavaScript:

Not sure for other languages.

Thank you for yhat suggestion, but I was more referring to the fact that there is, for instance, no obvious way of using pubsub with Helia, or how it seems that ipfs-embedded for Rust only support libp2p partially, generally speaking how you could get IPFS and libp2p separately, as a separate packages, possibly even with duplicate dependencies, maybe even spinning up two different nodes, but never together as a single package (as a dependency, not as a separate standalone desktop application).