# Contributing
This is a more in-depth guide for advanced users or contributors.
## How Does It Work?
This is mainly a front for [**lean-prism**](codeberg.org/wvhulle/lean-prism/tree/main), a custom LSP server that adds an RPC method on top of the built-in LSP-compliant RPC methods provided by Lean's LSP. The additional RPC methods uses Lean's internal APIs to extract detailed proof information (tactic applications, goal transformations, go-to locations) that isn't available through standard LSP.
The name `lean-prism` comes from showing proof state through different "prisms" or perspectives - the various graph and visualization modes that let you examine your proofs from different angles.
```mermaid
flowchart
subgraph lean-prism-process["Lean RPC Server Process"]
subgraph lean-worker[Lean RPC Worker]
lean-runtime((Lean Runtime))
original-lean-lsp[Official Lean.Server]
custom-rpc-server[RPC Server with Extension]
rpc-method[LeanPrism RPC Method]
rpc-method <-->|Lean| custom-rpc-server
lean-runtime <-->|Lean| rpc-method
original-lean-lsp --> lean-runtime
custom-rpc-server <-->|Lean| original-lean-lsp
end
lake-serve[lake serve]
lake-serve -->|JSON-RPC| custom-rpc-server
end
subgraph TUI["Process: lean-tui view"]
tcp-client[TCP Client]
info-view{Interactive Proof UI}
ratatui[Ratatui Framework]
tcp-client <-->|Rust| info-view
info-view <-->|Rust| ratatui
end
subgraph Editor
editor-ui{NeoVim / Helix / Zed}
editor-lsp-client[Builtin LSP Client]
editor-ui <--> editor-lsp-client
end
```
## Debugging
If you see errors in the editor like "incompatible headers", you can try
1. Close both the TUI view and the LSP client and restart.
2. Rebuilding `lean-prism`
If that does not help, follow along with the logs while reproducing the bug (and paste the output in a bug report):
```bash
tail -f ~/.cache/lean-tui.log # TUI front-end (for debugging the Ratatui-side)
```
Some editors also have debug logs for the LSP client. For Helix:
```bash
tail -f ~/.cache/helix/helix.log
```
## Development
Don't forget to update the commit hash in `build.rs` when the JSON schema changes upstream.