Rind Models define structure, rules, and lifecycle semantics for runtime entities. They are registered by core systems or Extensions, stored as definitions, and instantiated by Runtimes (via the Registry) into concrete runtime instances.

Models are split into two portions, Metadata and Instance Data

Metadata

This part of the model is the serializable data expected from toml. Once loaded, it is immutable and stored as Arc<T> and can only be modified by reloading from source. It can be accessed across Runtimes to create Instance Data via Registry Instantiation.

Instance Data

Live runtime data owned/managed during execution.It is mutable and may be accessed by multiple Runtimes through controlled Registry APIs (not arbitrary shared mutation).

Example

#[model(
  meta_name = name,
  meta_fields(
    name, id
  )
)]
pub struct MyModel {
  // Metadata
  pub name: String,
  pub id: u16,
 
  // Instance data
  pub status: String,
  pub active_sessions: usize
}

This would make two structs. MyModel and MyModelMetadata, where MyModel:: M is MyModelMetadata MyModel implements Model MyModelMetadata implements NamedItem