Plan Arcadia monorepo split into open-source and proprietary repos #54

Closed
opened 2026-01-07 23:09:43 +00:00 by HugoNijhuis · 1 comment
Owner

Context

Related to #53 (git server proposal) which first raised this.

Why we're doing this:

  • Prove ES/IRIS stack via git server (needs open-source components)
  • Share generic libraries with community (manifesto: "Learn in public")
  • Focus proprietary effort on differentiators (manifesto: "Small teams, big leverage")

Research Tasks

  • Explore Arcadia structure - document all packages and their purposes
  • Map dependencies between packages
  • Identify which packages are generic vs domain-specific
  • Determine extraction boundaries (what can be cleanly separated)

Classification Criteria

From manifesto + repo-conventions skill:

Type Open Source? Reason
Infrastructure tooling Yes Builds community, low competitive risk
Generic libraries Yes Ecosystem benefits, adoption
Core platform IP No Differentiator, revenue source
Domain-specific features No Product value

When uncertain, default to proprietary. Opening later is easier than closing.

Initial Hypothesis (to validate)

Open source candidates:

  • iris - WASM UI framework (generic library)
  • ES primitives from aethereskit (generic library)

Proprietary:

  • aether core - bytecode VM, full runtime
  • adl - domain language compiler
  • eventstorming - product tooling

Recommendations to Make

  • Which packages should be open-source vs proprietary (with reasoning)
  • What to extract into eskit (just primitives? NATS integration?)
  • Dependency direction (open can't import proprietary)
  • Recommended extraction order
  • Shared interface/proto definitions location

Go Library Naming

For Go libraries (eskit, iris), names appear in import statements:

import "git.flowmade.one/flowmade-one/eskit"

Research Go naming conventions:

  • Short, lowercase names (Go convention)
  • Avoid stuttering (eskit.Event not eskit.EskitEvent)
  • Names that read well in code
  • Update /create-repo command to include Go-specific guidance if needed

Per New Repo Checklist

Each extracted repo needs:

  • vision.md (extends ../architecture/manifesto.md)
  • CLAUDE.md
  • Makefile
  • .gitea/workflows/ci.yaml
  • .gitignore
  • LICENSE (Apache 2.0 for open, proprietary header for private)

Use /create-repo command to scaffold.

Migration Approach

  • Decide: git filter-branch (preserve history) vs fresh start
  • Update import paths in remaining code
  • Set up CI for new repos
  • Update any documentation/references
## Context Related to #53 (git server proposal) which first raised this. **Why we're doing this:** - Prove ES/IRIS stack via git server (needs open-source components) - Share generic libraries with community (manifesto: "Learn in public") - Focus proprietary effort on differentiators (manifesto: "Small teams, big leverage") ## Research Tasks - [ ] Explore Arcadia structure - document all packages and their purposes - [ ] Map dependencies between packages - [ ] Identify which packages are generic vs domain-specific - [ ] Determine extraction boundaries (what can be cleanly separated) ## Classification Criteria From manifesto + repo-conventions skill: | Type | Open Source? | Reason | |------|--------------|--------| | Infrastructure tooling | Yes | Builds community, low competitive risk | | Generic libraries | Yes | Ecosystem benefits, adoption | | Core platform IP | No | Differentiator, revenue source | | Domain-specific features | No | Product value | When uncertain, default to proprietary. Opening later is easier than closing. ## Initial Hypothesis (to validate) **Open source candidates:** - `iris` - WASM UI framework (generic library) - ES primitives from `aether` → `eskit` (generic library) **Proprietary:** - `aether` core - bytecode VM, full runtime - `adl` - domain language compiler - `eventstorming` - product tooling ## Recommendations to Make - [ ] Which packages should be open-source vs proprietary (with reasoning) - [ ] What to extract into `eskit` (just primitives? NATS integration?) - [ ] Dependency direction (open can't import proprietary) - [ ] Recommended extraction order - [ ] Shared interface/proto definitions location ## Go Library Naming For Go libraries (eskit, iris), names appear in import statements: ```go import "git.flowmade.one/flowmade-one/eskit" ``` Research Go naming conventions: - [ ] Short, lowercase names (Go convention) - [ ] Avoid stuttering (`eskit.Event` not `eskit.EskitEvent`) - [ ] Names that read well in code - [ ] Update `/create-repo` command to include Go-specific guidance if needed ## Per New Repo Checklist Each extracted repo needs: - [ ] vision.md (extends ../architecture/manifesto.md) - [ ] CLAUDE.md - [ ] Makefile - [ ] .gitea/workflows/ci.yaml - [ ] .gitignore - [ ] LICENSE (Apache 2.0 for open, proprietary header for private) Use `/create-repo` command to scaffold. ## Migration Approach - [ ] Decide: git filter-branch (preserve history) vs fresh start - [ ] Update import paths in remaining code - [ ] Set up CI for new repos - [ ] Update any documentation/references
Author
Owner

Research Complete - Plan Approved

Package Split Decision

Package Name License Description
UI Framework iris Apache 2.0 WASM reactive UI (signals, routing, components)
Actor/ES Framework aether Apache 2.0 Distributed actor system + event sourcing with NATS
Product Layer arcadia Proprietary ADL compiler + bytecode VM + multi-tenant runtime

Key Decisions

  1. aether provides isolation primitives (namespaces), not opinionated multi-tenancy
  2. arcadia builds Tenant concept on top of aether.Namespace
  3. Follows industry pattern: infrastructure provides building blocks, product adds opinions
  4. Bytecode VM stays proprietary - core IP and differentiator

Extraction Order

  1. iris first - cleanest extraction, proves process
  2. aether second - core infrastructure
  3. Update arcadia - change imports to use external packages

Migration Approach

Fresh start (not git filter-branch):

  • Create new repos with /create-repo
  • Copy code files
  • Clean git history

Full plan: architecture repo plan file

## Research Complete - Plan Approved ### Package Split Decision | Package | Name | License | Description | |---------|------|---------|-------------| | UI Framework | **iris** | Apache 2.0 | WASM reactive UI (signals, routing, components) | | Actor/ES Framework | **aether** | Apache 2.0 | Distributed actor system + event sourcing with NATS | | Product Layer | **arcadia** | Proprietary | ADL compiler + bytecode VM + multi-tenant runtime | ### Key Decisions 1. **aether provides isolation primitives** (namespaces), not opinionated multi-tenancy 2. **arcadia builds Tenant concept** on top of aether.Namespace 3. **Follows industry pattern**: infrastructure provides building blocks, product adds opinions 4. **Bytecode VM stays proprietary** - core IP and differentiator ### Extraction Order 1. **iris first** - cleanest extraction, proves process 2. **aether second** - core infrastructure 3. **Update arcadia** - change imports to use external packages ### Migration Approach Fresh start (not git filter-branch): - Create new repos with `/create-repo` - Copy code files - Clean git history Full plan: architecture repo plan file
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: flowmade-one/architecture#54