No description
  • Rust 89.7%
  • CSS 3.8%
  • Shell 2.4%
  • Swift 1.6%
  • HTML 1.2%
  • Other 1.3%
Find a file
fatmaebrahim f3de66dfdd
All checks were successful
Build and Test / build (push) Successful in 5m6s
Fix songs count on delete (#181)
### Summary:
  - After song.delete, walk the snapshotted playlists and call playlistservice.remove_song for any that contained the deleted sid.
  - Refetch songs and playlists and set both signals so the row disappears immediately and sidebar counts drop.

### Related Issues:
- lhumina_code/hero_os#101

Reviewed-on: #181
2026-04-28 13:56:34 +00:00
.forgejo fix(ci): unbreak workspace build (#85) 2026-04-21 05:56:16 +00:00
archipelagos Fix songs count on delete (#181) 2026-04-28 13:56:34 +00:00
core fix(core): hide native calendar-picker icon on DateField 2026-04-22 06:54:37 +02:00
docs feat: sessions 17-18 — native dioxus islands, new URL routing, OSIS auth fix, build safety 2026-04-12 09:58:05 -04:00
examples fix(ci): unbreak workspace build (#85) 2026-04-21 05:56:16 +00:00
native/livekit_bridge feat: port functional fixes from development + cargo fmt 2026-02-19 11:28:16 +01:00
scripts feat: sessions 17-18 — native dioxus islands, new URL routing, OSIS auth fix, build safety 2026-04-12 09:58:05 -04:00
server chore(lint): clear fmt + clippy unused_mut on archipelagos_server 2026-04-27 20:49:29 -04:00
.gitignore refactor: replace backend_url with host field + rename app.rs to island.rs 2026-02-09 00:09:25 +01:00
buildenv.sh refactor: flatten calendar, files, mycelium archipelagos and port contacts 2026-02-16 17:18:05 +01:00
Cargo.toml feat(office): native Dioxus file browser + iframe-only OnlyOffice editor 2026-04-23 14:43:09 +02:00
index.html WASM optimization: wee_alloc, standalone feature, and metadata refactoring 2026-02-01 11:10:16 +01:00
Makefile fix: make CI build workflow pass 100% on all workspace crates 2026-02-23 21:38:05 -05:00
README.md feat: complete zinit → hero_proc migration (#65) 2026-03-20 10:31:58 -04:00
rust-toolchain.toml ci: pin toolchain to 1.93 2026-04-20 14:29:58 +02:00

Hero Archipelagos

Modular Dioxus 0.7 WASM island applications that connect to backend services via hero_osis_sdk (structured data) and herofossil-webdav-client (files).

Core Principles

  1. Dioxus components — Built with Dioxus 0.7 for Rust-based reactive UI
  2. WASM modules — Compiled to WebAssembly, run in the browser
  3. hero_osis_sdk consumers — Use the unified SDK client to communicate with hero_osis
  4. Embeddable — Imported as library components into host applications (embedded mode)
  5. Pure Rust + WASM — No Python servers, no Node.js

Quick Start

# Prerequisites: Rust 1.85+
rustup update stable

# Source environment variables (API keys)
source ~/.config/env.sh

# Start the showcase dev server
make run

# Or directly with Dioxus CLI
cd server && dx serve

Required environment variables:

  • GROQ_API_KEY — Groq API key for AI features

Project Structure

hero_archipelagos/
├── Cargo.toml              # Workspace definition
├── Makefile                # Build commands
├── core/                   # Shared library for all islands
│   └── src/
│       ├── context.rs      # IslandContext (host, context_name, user, theme, view)
│       ├── island.rs       # IslandSize, IslandMode, IslandInfo, Island trait
│       ├── metadata.rs     # IslandMetadata, ArchipelagoMetadata (build-time)
│       ├── wrapper.rs      # IslandWrapper component (host chrome)
│       ├── views.rs        # ViewDef, ViewList
│       ├── events.rs       # Custom event helpers
│       ├── mcp_macros.rs   # MCP DOM-based tool execution
│       ├── platform.rs     # Platform abstraction (web/mobile)
│       ├── styles.rs       # Shared CSS helpers
│       └── web_component.rs # Custom element registration (standalone mode)
│
├── archipelagos/           # Island crates grouped by domain
│   ├── messaging/          # chat, chats, chat_preview, message
│   ├── communication/      # room, call
│   ├── identity/           # contacts, contact
│   ├── calendar/           # calendar, month, week, day, event, new_event
│   ├── productivity/       # projects, tasks, kanban, sprints, stories
│   ├── files/              # filesystem
│   ├── intelligence/       # ai, intelligence, agents, roles, knowledge, templates
│   ├── system/             # contexts, settings, services, service, theme
│   ├── business/           # business, contracts, finance, hr
│   ├── library/            # album, photo, photos, player, playlists, songs
│   ├── code/               # Code browsing (branches, commits, files)
│   ├── mycelium/           # Decentralized cloud management
│   ├── embed/              # Iframe containers (panel, card, row, hero, hero_service, ...)
│   ├── archipelagos/       # Meta-browser (archipelagos, archipelago, island)
│   └── browser/            # Web browser
│
├── server/                 # Showcase UI (Dioxus web app)
│   ├── src/
│   │   ├── main.rs
│   │   ├── island_display.rs  # Island renderer with IslandWrapper
│   │   └── generated/         # Auto-generated by build.rs
│   │       ├── island_content.rs  # Island component imports + match arms
│   │       ├── registry.rs        # Archipelago/island metadata
│   │       ├── router.rs          # Island routing
│   │       └── props_registry.rs  # Props metadata
│   └── build.rs            # Auto-discovers islands from Cargo.toml metadata
│
├── docs/                   # Documentation
└── examples/               # Example applications

Available Archipelagos

Archipelago Islands SDK Features
Messaging chat, chats, chat_preview, message communication
Communication room, call communication
Identity contacts, contact identity
Calendar calendar, month, week, day, event, new_event calendar
Productivity projects, tasks, kanban, sprints, stories projects
Files filesystem herofossil-webdav-client
Intelligence ai, intelligence, agents, roles, knowledge, templates ai, embedder
System contexts, settings, services, service, theme base
Business business, contracts, finance, hr business
Library album, photo, photos, player, playlists, songs library
Code code code
Mycelium mycelium mycelium
Embed panel, card, row, hero, hero_service, proc, redis, ... N/A (iframe)
Archipelagos archipelagos, archipelago, island base

Embedding Islands

Islands are standard Dioxus components. Import them as library dependencies:

[dependencies]
hero_archipelagos_core = { path = "path/to/core" }
hero_archipelagos_contacts = { path = "path/to/archipelagos/identity/contacts", default-features = false, features = ["web"] }
use hero_archipelagos_contacts::island::ContactsIslandApp;
use hero_archipelagos_core::IslandContext;

#[component]
fn MyApp() -> Element {
    let context = IslandContext::default();
    rsx! {
        ContactsIslandApp { context: context }
    }
}

Context Configuration

Islands receive configuration via IslandContext:

Field Description Example
host Hero Zero host (service URLs derived from this) localhost
context_name Current workspace/context default
user User identity (display_name, public_key, avatar_url) UserIdentity
theme Theme name dark
view Current view / entity ID list, chat_sid:abc123

Service URLs are derived from the host:

  • context.osis_url()http://{host}:3377 (hero_osis JSON-RPC)
  • context.forge_url()http://{host}:7365 (hero_fossil WebDAV)

SDK Integration

Each island uses hero_osis_sdk with domain-specific features:

// In Cargo.toml
hero_osis_sdk = { workspace = true, features = ["calendar"] }

// In your service
use hero_osis_sdk::calendar::CalendarUnifiedClient;

pub async fn fetch_events(osis_url: &str, context: &str) -> Result<Vec<Event>, String> {
    let client = CalendarUnifiedClient::new(osis_url, context);
    client.event_list().await
}

Documentation

License

Apache-2.0