Skip to main content

Backend-agnostic UI/visualisation system for atomr — actor-driven scenes across native, web, and mobile.

Project description

atomr-view — Heavy Client UI for Federated atomr Systems

Status: Implementation Phase Complete / Testing Suite Active

atomr-view is an actor-based view management system designed for heavy client applications (Desktop, Mobile, Wasm) that integrate with federated atomr clusters. It treats the UI rendering surface as a supervised peer with network-shaped failure modes, using the actor model to bridge the gap between remote state authority and local pixels.

Mental Model

In atomr-view, the UI is not a separate layer bridged by callbacks; it is a subgraph of the local ActorSystem.

  • WindowActor: Owns an OS window, its declarative scene, and child regions.
  • RegionActor: Manages a stateful subtree of the UI, typically subscribed to a remote sharded entity or a local streaming feed.
  • UiBridge: An asynchronous, backpressured conduit between the actor system and the rendering thread (e.g., winit + wgpu).
  • SceneDescription: A declarative, keyed tree of semantic UI intent (Button, Text, etc.) that the backend reconciles against native widgets.

Key Features

  • Location Transparency: UI actors interact with cluster-sharded actors using the same tell/ask/watch primitives as local actors.
  • Backpressure Discipline: The UiBridge uses conflation for state updates, ensuring the UI thread only ever processes the freshest state available.
  • Declarative Reconciliation: Keyed tree-diffing computes minimal patches, preserving local UI state (like cursor position) across updates.
  • Multi-Backend Strategy: Supports winit + wgpu + egui for desktop, with architectural hooks for Wasm (DOM) and Mobile (SwiftUI/Compose).
  • Python-First API: Full integration via PyO3, allowing UI actors and complex scene manipulation to be authored in Python.

Platform Backends

atomr-view supports multiple rendering surfaces via the UiBackend strategy:

  • Desktop (winit + wgpu + egui): The default reference implementation for high-performance desktop apps.
  • Bevy (BevyBackend): Integrates the actor system with Bevy's ECS. Use the ActorBacked component to mirror ECS entities with long-lived actors for persistence and netcode.
  • Wasm (WebDomBackend): Targets browser environments with a cooperative single-threaded scheduler that yields to requestAnimationFrame.
  • Mobile (NativeShellBackend): Bridges to SwiftUI (iOS) and Jetpack Compose (Android) via uniffi, maintaining native UI performance while keeping business logic in Rust actors.

Quick Start

Rust

use atomr_view_core::prelude::*;
use atomr_core::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let sys = ActorSystem::create("App", Config::reference()).await?;
    
    // 1. Initialize the bridge and backend
    let (cmd_tx, cmd_rx) = mpsc::channel(100);
    let (evt_tx, evt_rx) = mpsc::channel(100);
    let bridge = UiBridge { cmd_rx, evt_tx };
    
    // 2. Start the bridge actor
    let bridge_actor = sys.actor_of(Props::create(move || {
        UiBridgeActor::new(cmd_tx.clone(), evt_rx)
    }), "ui-bridge")?;

    // 3. Define a window actor
    let main_window = sys.actor_of(Props::create(move || {
        WindowActor::new("main", bridge_actor.clone())
    }), "main-window")?;

    // 4. Run the backend (blocks main thread)
    WinitWgpuBackend.run(bridge);
    
    Ok(())
}

Python

import atomr_view as view

ui = view.PyUiSystem()
ui.create_window("main", "My Federated App")

# Update the scene declaratively
root = view.SceneNode(
    key=view.SceneKey(),
    kind=view.NodeKind.Container(),
    properties=view.PropertyMap({"layout": view.PropertyValue.String("vertical")}),
    children=[
        view.SceneNode(
            key=view.SceneKey(),
            kind=view.NodeKind.Text(),
            properties=view.PropertyMap({"text": view.PropertyValue.String("Hello from Python!")}),
            children=[]
        )
    ]
)
ui.set_scene("main", view.SceneDescription(root))

Implementation Status

  • Core Foundation: UiBridge, SceneDescription, keyed diffing engine.
  • Desktop Backend: winit + wgpu + egui reference implementation.
  • Python Bindings: PyO3-based bridge with full scene manipulation support.
  • Testing: Property-based tests for diffing invariants and async integration tests.
  • Bevy Integration: BevyBackend bridging actors with ECS entities.
  • Wasm Support: WebDomBackend with cooperative cooperative scheduler hooks.
  • Mobile Flow: NativeShellBackend with uniffi bindings for native shells.

Project Structure

  • crates/atomr-view-core: Core actor logic and scene engine.
  • crates/atomr-view-backends: Swappable rendering strategies.
  • crates/atomr-view-python: PyO3 integration.
  • ai-skills/: Skills for AI assistants working with atomr-view.

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

atomr_view-0.3.2.tar.gz (50.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

atomr_view-0.3.2-cp310-abi3-win_amd64.whl (529.1 kB view details)

Uploaded CPython 3.10+Windows x86-64

atomr_view-0.3.2-cp310-abi3-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

atomr_view-0.3.2-cp310-abi3-musllinux_1_2_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

atomr_view-0.3.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

atomr_view-0.3.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

atomr_view-0.3.2-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.1 MB view details)

Uploaded CPython 3.10+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file atomr_view-0.3.2.tar.gz.

File metadata

  • Download URL: atomr_view-0.3.2.tar.gz
  • Upload date:
  • Size: 50.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for atomr_view-0.3.2.tar.gz
Algorithm Hash digest
SHA256 91d2d34acee2e97e7b464690dbf1e26054501c404e702784adbe51fd96c0f5ba
MD5 2d54ce60c093927a8fcce5478cf25d77
BLAKE2b-256 d0d3abfb118aec056887a8f35ee5db4168af69711c72bf634a6a4d5b542a56aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr_view-0.3.2.tar.gz:

Publisher: release.yml on rustakka/atomr-view

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomr_view-0.3.2-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: atomr_view-0.3.2-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 529.1 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for atomr_view-0.3.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 57bc3878482b263af8d13ac6c94e40a4e3c2d11e82eafde7893d81cd5d41f3a3
MD5 56f41cee3ace308f9a6d340022c15a26
BLAKE2b-256 e5d558dc3695919d47c2d0731bc352e766fc230460966005d978ca89f6eab508

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr_view-0.3.2-cp310-abi3-win_amd64.whl:

Publisher: release.yml on rustakka/atomr-view

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomr_view-0.3.2-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for atomr_view-0.3.2-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 522792fa11d31b8b648893fd3d365de537f332d5dc4c45404799e7831aba4010
MD5 b2ca77a7d6ca8dc75799abef3e01ec93
BLAKE2b-256 d401ba70e48bfe321c8ad885597ea15c5c6913cc56c7319df72f3a30095aaa76

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr_view-0.3.2-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: release.yml on rustakka/atomr-view

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomr_view-0.3.2-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for atomr_view-0.3.2-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 efdf2676089388525501e4b1d5c8d06f7638adf2de6528c759e855c4f5fa8809
MD5 d42238e1fcbe5eb5d0fb6e0c8fb6b2cf
BLAKE2b-256 c3af16a20d8dfe72a6497c2518dc66ecd749b12268dfa52e3581241b7eb26ecf

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr_view-0.3.2-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: release.yml on rustakka/atomr-view

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomr_view-0.3.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for atomr_view-0.3.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a38c3e096114998156df692cbe85b61889a53dc4b83349570deaf818354d4958
MD5 6a85b7ed680b4e41404293f0b53e211d
BLAKE2b-256 416c5ad73e487a38ca94b0eb77a0fde7886e898ec6846f81afde97dd3613472e

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr_view-0.3.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on rustakka/atomr-view

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomr_view-0.3.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for atomr_view-0.3.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5862d5348a69e3d711f9925f87e784d8cca74634c482d08ea11232ed63da252a
MD5 113284ae737af7fa8eb6602e11da6637
BLAKE2b-256 124141292ae622e112a05c9613ff736034a22c721205c354feea72409e12dd0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr_view-0.3.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on rustakka/atomr-view

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atomr_view-0.3.2-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for atomr_view-0.3.2-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 6c25f1add169408fef5c0094b4b634d36ad0d71c2f72ce4da49b5ccc984998f6
MD5 24c55571235e5e90b1f7f73ba7d48ec1
BLAKE2b-256 4dda3901e08dedd9bed2f71078f296825f385f4767e2bec0bfbc0f93bde384af

See more details on using hashes here.

Provenance

The following attestation bundles were made for atomr_view-0.3.2-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on rustakka/atomr-view

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page