Aro Studio is a modular application built as a single repo:
packages/coreis the engine (headless, Node-based) — MVP completeapps/desktopis the Electron host — MVP completeapps/webis the web host (Node backend + browser UI) — MVP completepackages/modules/*are feature modules (later)
This document is the source of truth for boundaries and dependency direction.
Core → Desktop Core → Web Modules → Desktop Modules → Web Modules → Core
No other dependency direction is allowed.
- Core MUST NOT import Desktop, Web, or Modules.
- Modules MUST NOT import each other.
- Desktop MAY import Core and Modules.
- Web MAY import Core and Modules.
- Core must never expose SQL/tables/queries.
- Modules must never access the database directly.
- Modules must never access the filesystem directly outside Core workspace APIs.
Core is layered from inner to outer:
- Kernel
- ids, errors, event emitter
- Infra (private)
- SQLite connection + schema + statements
- filesystem primitives + safe path resolution
- Services (public)
- workspace, runs, logs, artifacts, tokens, validation, jobs
- Services expose intent-based methods only and must not leak persistence or infrastructure concerns.
- Execution Context
- per-run job context: logger, workspace, artifact writer, abort, progress
- Public Surface
createCore()and exported types fromsrc/index.ts
Core provides:
- Workspace management (scoped file access)
- Persistence for operational data (runs/logs/artifacts)
- Job execution model (run/cancel/progress)
- Token IO (load/save/normalize/diff)
- Validation (schema + lightweight policy checks)
Core does NOT provide:
- plugin discovery
- module loading
- Electron APIs
- UI
- cloud sync
- bidirectional Figma sync