A Rust application for managing SLIM channels and participants. The Channel Manager creates and maintains SLIM sessions (channels) and handles participant invitations based on a configuration file.
The Channel Manager:
- Connects to a SLIM node and creates channels defined in the configuration
- Invites participants to channels automatically on startup
- Exposes a gRPC API for dynamic channel and participant management
cargo build --releaseCreate a YAML configuration file (see example-channel-manager-config.yaml):
channel-manager:
# Connection configuration for the SLIM data-plane node.
# Transport is inferred from the endpoint scheme:
# ws://, wss:// → websocket (TLS when wss)
# http://, https://, bare host:port → grpc
slim-connection:
endpoint: "http://127.0.0.1:46357"
tls:
insecure: true
# gRPC service address for accepting channel-manager commands.
api-server:
endpoint: "127.0.0.1:10356"
tls:
insecure: true
# Name of the channel manager in SLIM
local-name: "agntcy/otel/channel-manager"
# Shared secret for the SLIM app identity.
auth:
type: shared_secret
secret: "your-shared-secret-here"
# Channels to create on startup.
channels:
- name: "agntcy/otel/channel"
participants:
- "agntcy/otel/exporter-traces"
- "agntcy/otel/receiver"
mls-enabled: trueStart the channel manager with a configuration file:
./channel-manager --config-file config.yamlA command-line client for interacting with the Channel Manager gRPC service.
cmctl [OPTIONS] <COMMAND>--server <ADDRESS>: Simple gRPC server address (default:http://localhost:10356)--client-config <FILE>: Path to a YAML file with full gRPC client configuration (TLS, auth, keepalive, proxy, etc.). The Channel Manager API is gRPC, so websocket transport is not supported forcmctl. When provided,--serveris ignored.--disable-mls: Disable MLS for channel creation (MLS is enabled by default)
cmctl create-channel org/ns/channelCreate a channel with MLS disabled:
cmctl --disable-mls create-channel org/ns/channelcmctl delete-channel org/ns/channelcmctl add-participant org/ns/channel agntcy/ns/participantcmctl delete-participant org/ns/channel agntcy/ns/participantcmctl list-channelscmctl list-participants org/ns/channelConnect to a different server:
cmctl --server "http://192.168.1.100:10356" list-channelsConnect using full client config (with TLS, auth, etc.):
cmctl --client-config client-config.yaml list-channelsExample client-config.yaml:
endpoint: "https://channel-manager.example.com:10356"
tls:
insecure: false
ca_file: "/path/to/ca.pem"
auth:
type: static_jwt
token_file: "/path/to/token"
keepalive:
tcp_keepalive: "60s"
http2_keepalive: "60s"
timeout: "10s"Create a channel and add participants:
# Create channel with MLS enabled (default)
cmctl create-channel org/ns/team-chat
# Add participants
cmctl add-participant org/ns/team-chat org/ns/participant-1
cmctl add-participant org/ns/team-chat org/ns/participant-2
# List participants
cmctl list-participants org/ns/team-chat