# Protocol Implementations
There are 4 Filecoin protocol implementations (or “node software”) currently in progress:
- lotus (Go): This implementation is closest to feature-complete and is therefore, the recommended Filecoin protocol implementation.
- forest (Rust)
- fuhon (C++)
- go-filecoin (Go)
Each of these software clients implements the Filecoin protocol as described in the Filecoin protocol specification. Please note that the protocol spec and all implementations are still works-in-progress and expected to change significantly between now and Filecoin mainnet launch. To learn more about why there are multiple Filecoin implementations, please read this blog post.
Here is a snapshot of each implementation’s progress across the primary parts of the Filecoin protocol (updated June 24, 2020):
|2. Files & data||✅||🔶||🔶||✅|
|3. Virtual Machine||✅||✅||🔶||🔶|
|4. VM Actors||🔶||🔶||🔶||🔶|
|7. Storage Mining||✅||🔄||🔄||🔄 🔶|
✅ : fully featured implementation | 🔄 : reuses components from another implementation | 🔶 : partial implementation
We recommend that developers only build directly on Filecoin protocol implementations if they are very advanced developers or need to build at a very low level of the stack. Filecoin protocol implementations expose low-level APIs that developers can use to integrate Filecoin directly into their applications. These APIs and their underlying functionality are still under heavy, active development, and require familiarity with blockchains and the Filecoin protocol. For most applications, we recommend developers use FPS or Powergate.
# How to use protocol implementations
Generally speaking, you can use a Filecoin protocol implementation as a “client” (user) or a “miner” (storage provider) (see What is Filecoin? for more). Most implementations separate out the storage miner functionality into a separate process from the core node functionality. The core node runs the blockchain system, makes storage and retrieval deals, performs data transfers, supports block producer logic, and syncs and validates the chain. The storage miner process produces sector commitments and Proofs-of-Spacetime to prove they have been correctly storing storage client data, among other important functions. To be a Filecoin “client,” you need to run a full node. To be a Filecoin "miner," you must run a full node and the storage mining process.
Each protocol implementation can be run and integrated in a few different ways:
- Run directly through its CLI: This is often the best way to become familiar with the functionality and performance of Filecoin nodes, implementations, and APIs.
- Integrated as a library: Developers can integrate Filecoin nodes directly into their application by using protocol implementations as libraries. Note that this option often requires end-users to install the dependencies required for node implementations (can be cumbersome for users).
- Interact with RPC APIs: Each protocol implementation exposes an RPC API. Some implementations have wrapper libraries in various languages to make integration into applications easier. Note that most implementations also separate the APIs for the storage mining process from the full node APIs. For most application development use cases, we recommend interacting with the RPC APIs.
If interacting with the implementation’s RPC APIs, the general development pattern when integrating a Filecoin protocol implementation is for the application to do one of the following:
- Run a Filecoin node locally (e.g. run lotus locally) and have the application make RPC API requests to the local node.
- Run a Filecoin node remotely (e.g. in the cloud) and have the application make RPC API requests to the remote node.
Filecoin protocol implementations provide access to core Filecoin protocol workflows, with very few abstractions of the core concepts. This can be very useful, as it allows flexibility and precision in interacting with Filecoin network functionality. However, integrating nodes directly can require greater familiarity with how Filecoin works. To learn more about the various workflows enabled by the core Filecoin protocol, check-out the How-tos.
See a walkthrough of an end-to-end example application (the Filecoin Network Inspector) built using Lotus’ JS API client.
If you would like to run or integrate a Filecoin protocol implementation, you can use the following resources and libraries (this is an evolving list that will be updated as more resources come online):