# Connecting to CLN 1. If you want to use the grpc: start the grpc-plugin and generate the bindings from the proto file for your language. 2. If you’re writing in Rust, decide which interface you want to use, then either use cln-rpc if you’re on the same machine (FS access to the socket) or use tonic-build to generate the bindings and connect over grpc (remote, no FS access). 3. If you want to write a plugin in Rust, use cln-plugin 4. If you want to write a plugin in Python, decide on whether to use grpc or JSON-RPC, then either generate the grpc bindings or use pyln-client which includes the JSON-RPC client ```mermaid flowchart LR grpc-client -->|grpc+https| grpc-plugin grpc-plugin -->|jsonrpc+uds| CLN cln-rpc -->|jsonrpc+uds| CLN pyln-client -->|jsonrpc+uds| CLN glightning -->|jsonrpc+uds| CLN glightning <-->|plugin| CLN pyln-plugin <-->|plugin| CLN cln-plugin <-->|plugin| CLN c-lightning-REST -->|jsonrpc+uds| CLN rest-client -->|REST+https| c-lightning-REST RTL -->|REST+https| c-lightning-REST sparko -->|jsonrpc+uds| CLN Spark -->|jsonrpc+https| sparko Zeus -->|jsonrpc+https| sparko commando -->|jsonrpc+uds| CLN commando-client -->|LN proto + jsonrpc| commando graphql -->|jsonrpc+uds| CLN graphql-client -->|graphql+https| graphql ``` Intended uses: 1. `cln-rpc`: contains a JSON-RPC client, that can be used for locally running nodes from Rust 2. `cln-plugin` contains the framework to drive a plugin through its lifetime 3. `cln-grpc` is a utility crate that implements the translation layer between the grpc and the JSON-RPC layer (you probably don't want to use this, unless you're re-exposing the grpc interface with custom verification, e.g., greenlight) 4. `grpc-plugin` is a builtin plugin, that uses `cln-rpc` and `cln-grpc` to expose grpc, which then gets translated to JSON-RPC and back using the `cln-grpc` crate (you likely want to start this if you have any grpc clients)