Description
Checklist
- This is not brainstorming ideas. If you have an idea you'd like to discuss, please open a new discussion on the lotus forum and select the category as
Ideas
. - I have a specific, actionable, and well motivated feature request to propose.
Lotus component
- lotus daemon - chain sync
- lotus fvm/fevm - Lotus FVM and FEVM interactions
- lotus miner/worker - sealing
- lotus miner - proving(WindowPoSt/WinningPoSt)
- lotus JSON-RPC API
- lotus message management (mpool)
- Other
What is the motivation behind this feature request? Is your feature request related to a problem? Please describe.
Currently, the Filecoin JSON-RPC API is tightly coupled with Lotus, making it difficult for other node implementations and ecosystem tools to rely on a clear, shared specification. This results in:
-
Inconsistent behavior across implementations (e.g., Lotus, Lotus Gateway, CLI, lotus-shed, etc.)
-
Difficulty in understanding and using the API from different programming languages due to complex or unclear type definitions
-
Ad hoc negotiations about what RPC methods should be public, with API access policies spread across teams and custom logic
-
Limited visibility into the evolution of the API across versions (v0, v1, v2), and no shared view of which methods are stable, experimental, or deprecated
-
For RPC providers what should or shouldn't be made accessible via public RPC is currently a messy negotiation between the Lotus Gateway, what is deemed efficient by implementers, and different teams making custom requests for their own use cases
-
Attempts to create a specification such as the Common Node API effort has been overly complex and difficult for other teams to adopt and support.
A standalone repository would:
-
Enable better visibility, discussion, and governance around API changes and stable, mutable and experimental versions
-
Allow node implementations to run shared conformance tests
-
Provide a single source of truth for stable API behavior
-
Help clarify expectations around permissions, caching strategies, and public/private method exposure
-
Support maintainability and onboarding for external developers and RPC providers
Stakeholders impacted:
- Node Implementation Teams: Gain clarity and a shared contract for API behavior
- RPC Providers: Can apply their own logic (e.g., permissions, caching) more reliably
- Library Developers: Benefit from a clear and language-agnostic API spec
- Builders and DApp Developers: Get consistent and predictable developer experience
- Filecoin Community: Gains confidence in a standardized and stable API and update process
Describe the solution you'd like
The ideal state would be the Filecoin and Ethereum JSON RPC API separated out into its own repository with supporting conformance tests that all node implementations can interface with.
-
Every node implementation including Lotus can pull in the API interface and run conformance tests against it.
-
Updates to the API are made to this repo and discussed and approved across stakeholder teams so that the logic and history are made more clear to all teams.
Describe alternatives you've considered
While the Common Node API effort was considered valuable several years ago, not much progress has been made on it and there is no built-in way to have all teams adopt it and find immediate utility from it. The original creator has also left the project. We need a strategy that is more technically direct and immediately useful.
OpenRPC support was also added to Lotus years ago but is currently not working and RPC API documentation is lacking.
Instead of reviving these efforts, this proposal offers a simpler, more technically direct path: separate the API definition into its own repo, with conformance across implementations. This ensures shared accountability and a better foundation for long-term maintainability.
Additional context
This approach mirrors how other successful protocols (e.g., Ethereum) separate their API specs from specific implementations, enabling faster iteration, better tooling, and broader ecosystem alignment.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status