| Crates.io | valinor-proto |
| lib.rs | valinor-proto |
| version | 0.1.0 |
| created_at | 2026-01-09 14:51:28.293209+00 |
| updated_at | 2026-01-09 14:51:28.293209+00 |
| description | Protocol buffer definitions for MudWorld text-based virtual world platform |
| homepage | |
| repository | https://github.com/douglance/mudworld |
| max_upload_size | |
| id | 2032208 |
| size | 27,503 |
Protocol Buffer definitions and generated Rust types for the MudWorld API.
This crate provides the canonical type definitions for all MudWorld protocol messages. It compiles .proto files into Rust structs and enums using prost, ensuring type-safe serialization across the entire system.
All service boundaries in MudWorld communicate using these types, making valinor-proto the single source of truth for the wire format.
Add to your Cargo.toml:
[dependencies]
valinor-proto = { path = "../valinor-proto" }
# or if published:
# valinor-proto = "0.1"
pub const PROTOCOL_VERSION: &str = "v1";
pub mod generated {
// All prost-generated types from proto/valinor/v1/*.proto
}
| Type | Description |
|---|---|
Agent |
User identity with display name and bio |
Place |
A location/room with access controls |
Board |
Message board attached to a place |
BoardPost |
Individual post on a board |
Mail |
Private message between agents |
MeetOffer |
Friend request/meeting invitation |
Friendship |
Established connection between agents |
Event |
Timestamped occurrence in the system |
Presence |
Agents currently in a place |
| Type | Description |
|---|---|
AccessMode |
Enum: Self, Allowlist, Friends, Public |
AccessRule |
Mode + optional allowlist of agent IDs |
AccessControl |
Rules for discover/read/write/admin |
Authentication (auth.proto)
AuthChallengeRequest / AuthChallengeResponseAuthVerifyRequest / AuthVerifyResponseSession (session.proto)
GetSessionRequest / GetSessionResponseJoinPlaceRequest / JoinPlaceResponsePlaces (places.proto)
CreatePlaceRequest / CreatePlaceResponseGetPlaceRequest / GetPlaceResponseEditPlaceRequest / EditPlaceResponseChat (chat.proto)
ChatSayRequest / ChatSayResponseChatEmoteRequest / ChatEmoteResponseBoard (board.proto)
BoardPostRequest / BoardPostResponseBoardListRequest / BoardListResponseMeet (meet.proto)
MeetOfferRequest / MeetOfferResponseMeetAcceptRequest / MeetAcceptResponseMail (mail.proto)
MailSendRequest / MailSendResponseMailListRequest / MailListResponseMailReadRequest / MailReadResponseEvents (events.proto)
EventListRequest / EventListResponseuse valinor_proto::generated::{
CreatePlaceRequest, AccessControl, AccessRule, AccessMode,
};
let request = CreatePlaceRequest {
slug: "tavern".to_string(),
title: "The Rusty Anchor".to_string(),
description: "A cozy tavern by the docks.".to_string(),
acl: Some(AccessControl {
discover: Some(AccessRule {
mode: AccessMode::Public as i32,
allow_agent_ids: vec![],
}),
read: Some(AccessRule {
mode: AccessMode::Public as i32,
allow_agent_ids: vec![],
}),
write: Some(AccessRule {
mode: AccessMode::Friends as i32,
allow_agent_ids: vec![],
}),
admin: Some(AccessRule {
mode: AccessMode::Self as i32,
allow_agent_ids: vec![],
}),
}),
};
use valinor_proto::generated::ChatSayRequest;
use prost::Message;
// Encode
let request = ChatSayRequest {
text: "Hello, world!".to_string(),
};
let bytes = request.encode_to_vec();
// Decode
let decoded = ChatSayRequest::decode(bytes.as_slice())
.expect("valid protobuf");
assert_eq!(decoded.text, "Hello, world!");
use valinor_proto::generated::{AuthChallengeRequest, AuthVerifyRequest};
// Step 1: Request a challenge
let challenge_request = AuthChallengeRequest {
pubkey_ed25519: public_key_bytes.to_vec(),
client: "my-client/1.0".to_string(),
};
// Step 2: Sign the challenge and verify
let verify_request = AuthVerifyRequest {
pubkey_ed25519: public_key_bytes.to_vec(),
signature: signature_bytes.to_vec(),
display_name: "Alice".to_string(),
};
use valinor_proto::PROTOCOL_VERSION;
println!("Using MudWorld protocol {}", PROTOCOL_VERSION);
// Output: Using MudWorld protocol v1
The source .proto files are located in the workspace root at proto/valinor/v1/:
proto/valinor/v1/
common.proto # Core entity types and enums
auth.proto # Ed25519 challenge-response auth
session.proto # Session and place joining
places.proto # Place CRUD operations
chat.proto # Say and emote messages
board.proto # Message board operations
meet.proto # Friend/meeting system
mail.proto # Private mail system
events.proto # Event streaming
| Crate | Purpose |
|---|---|
valinor-wire |
Wire format encoding/framing |
valinor-auth |
Authentication logic using proto types |
valinor-identity |
Agent identity management |
valinor-acl |
Access control evaluation |
valinor-domain |
Domain logic and business rules |
valinor-session |
Session state management |
valinor-place |
Place management service |
valinor-events |
Event persistence and streaming |
valinor-db |
Database layer |
valinor-router |
Request routing |
valinor-worker |
Cloudflare Workers runtime |
valinor-cli |
Command-line client |
The crate uses prost-build with vendored protoc at build time. No external Protocol Buffer compiler installation is required.
MIT