Home / processes / RECOMMENDED-CONSOLIDATION

Recommended Repository Consolidation for LARC

๐ŸŽฏ Goal

Simplify the LARC ecosystem while maintaining architectural clarity: keep @larcjs/core and @larcjs/ui as separate, focused packages.

โœ… Your Reasoning is Sound

Keep core and components separate because:
  • โœ… Core is standalone - users shouldn't need components to use the bus
  • โœ… Different audiences - bus users vs. component library users
  • โœ… Independent versioning - core is stable, components evolve faster
  • โœ… Clear value proposition - "Use just the bus, or add components"
  • โœ… Smaller installs - npm install @larcjs/core stays minimal
  • This is architecturally correct. The problem is the 10 OTHER repos around them.


    ๐Ÿ“Š Current State (10 Repos)

    | Repo | Purpose | Action | |------|---------|--------| | core | PAN messaging bus | โœ… Keep separate | | components | 57 UI components | โœ… Keep separate | | core-types | TS types for core | ๐Ÿ”„ Consolidate | | components-types | TS types for components | ๐Ÿ”„ Consolidate | | site | Documentation | ๐Ÿ”„ Consolidate | | examples | Demo apps | ๐Ÿ”„ Consolidate | | apps | More demo apps | ๐Ÿ”„ Consolidate (merge with examples) | | devtools | Chrome extension | ๐Ÿ”„ Consolidate | | larc | Meta repo | ๐Ÿ”„ Become monorepo | | .github | Org files | ๐Ÿ”„ Consolidate |


    ๐ŸŽจ Proposed Architecture

    Final Structure: 3 Repositories

    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  github.com/larcjs/core                                 โ”‚
    โ”‚  โ”œโ”€โ”€ src/                  (PAN bus implementation)     โ”‚
    โ”‚  โ”œโ”€โ”€ tests/                (261 tests)                  โ”‚
    โ”‚  โ”œโ”€โ”€ package.json          (@larcjs/core v1.1.1)       โ”‚
    โ”‚  โ””โ”€โ”€ README.md             (Core-focused docs)          โ”‚
    โ”‚                                                          โ”‚
    โ”‚  Published: @larcjs/core                                โ”‚
    โ”‚  Size: 40KB minified (128KB unminified), Zero dependencies โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  github.com/larcjs/components                           โ”‚
    โ”‚  โ”œโ”€โ”€ src/                  (57 components)              โ”‚
    โ”‚  โ”œโ”€โ”€ tests/                                             โ”‚
    โ”‚  โ”œโ”€โ”€ package.json          (@larcjs/ui v1.1.0) โ”‚
    โ”‚  โ””โ”€โ”€ README.md             (Component library docs)     โ”‚
    โ”‚                                                          โ”‚
    โ”‚  Published: @larcjs/ui                          โ”‚
    โ”‚  Peer Dep: @larcjs/core ^1.1.0                         โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  github.com/larcjs/larc (Monorepo - Development Hub)    โ”‚
    โ”‚  โ”œโ”€โ”€ packages/                                          โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ core-types/      (@larcjs/core-types)         โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ components-types/(@larcjs/ui-types)   โ”‚
    โ”‚  โ”‚   โ””โ”€โ”€ devtools/        (@larcjs/devtools)           โ”‚
    โ”‚  โ”œโ”€โ”€ docs/                                              โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ site/            (Documentation website)       โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ guides/          (Tutorials, how-tos)          โ”‚
    โ”‚  โ”‚   โ””โ”€โ”€ api/             (API reference)               โ”‚
    โ”‚  โ”œโ”€โ”€ examples/                                          โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ basic/           (Simple examples)             โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ contact-manager/ (Full app)                    โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ invoice-studio/  (Full app)                    โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ hybrid-dashboard/(React+Vue+LARC)             โ”‚
    โ”‚  โ”‚   โ”œโ”€โ”€ offline-todo/    (State management)            โ”‚
    โ”‚  โ”‚   โ””โ”€โ”€ ...                                            โ”‚
    โ”‚  โ”œโ”€โ”€ .github/             (Workflows, templates)        โ”‚
    โ”‚  โ”œโ”€โ”€ package.json         (Workspace root)              โ”‚
    โ”‚  โ””โ”€โ”€ pnpm-workspace.yaml                                โ”‚
    โ”‚                                                          โ”‚
    โ”‚  Not published as a whole, but packages/* are           โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

    ๐Ÿ“ฆ Package Publishing Strategy

    Published to npm

    | Package | Repo | Purpose | |---------|------|---------| | @larcjs/core | core | Standalone messaging bus | | @larcjs/ui | components | UI component library | | @larcjs/core-types | larc/packages/core-types | TypeScript types for core | | @larcjs/ui-types | larc/packages/ui-types | TypeScript types for components | | @larcjs/devtools | larc/devtools | Chrome extension (maybe) |

    Not Published (Development Assets)

    • Examples (live on GitHub Pages)
    • Docs site (live on GitHub Pages)
    • Workspace config

    ๐Ÿš€ Developer Workflows

    For Core Development

    # Clone core repo
    git clone https://github.com/larcjs/core.git
    cd core
    npm install
    npm test
    npm run build
    
    # Publish
    npm version patch
    npm publish
    
    # Update types
    cd ../larc/packages/core-types
    # Update types to match
    npm version patch
    npm publish

    For Components Development

    # Clone components repo
    git clone https://github.com/larcjs/components.git
    cd components
    npm install
    npm link @larcjs/core  # or use published version
    npm test
    npm run build
    
    # Publish
    npm version minor
    npm publish
    
    # Update types
    cd ../larc/packages/ui-types
    # Update types
    npm version minor
    npm publish

    For Examples/Docs (Most Common)

    # Clone monorepo
    git clone https://github.com/larcjs/larc.git
    cd larc
    pnpm install  # Installs all packages
    
    # Work on examples
    cd examples/contact-manager
    # edit files...
    # Uses published @larcjs/core and @larcjs/ui
    
    # Work on docs
    cd docs/site
    # edit docs...
    
    # Work on types
    cd packages/core-types
    # edit types...
    
    # Single commit for related changes
    git add .
    git commit -m "Add example and docs for new feature"
    git push

    ๐Ÿ”„ Migration Steps

    Phase 1: Consolidate Examples (2 hours)

    Merge apps into examples:
    cd larc
    mkdir -p examples
    
    # Move from apps repo
    git clone https://github.com/larcjs/apps.git temp-apps
    mv temp-apps/contact-manager examples/
    mv temp-apps/invoice-studio examples/
    mv temp-apps/markdown-notes examples/
    mv temp-apps/data-browser examples/
    rm -rf temp-apps
    
    # Merge with existing examples
    git clone https://github.com/larcjs/examples.git temp-examples
    mv temp-examples/* examples/
    rm -rf temp-examples
    
    # Organize
    examples/
    โ”œโ”€โ”€ README.md
    โ”œโ”€โ”€ basic/              (Simple, quick demos)
    โ”œโ”€โ”€ intermediate/       (Real features)
    โ””โ”€โ”€ advanced/           (Full applications)
        โ”œโ”€โ”€ contact-manager/
        โ”œโ”€โ”€ invoice-studio/
        โ”œโ”€โ”€ hybrid-dashboard/
        โ””โ”€โ”€ ...
    
    git add examples
    git commit -m "Consolidate all examples"

    Phase 2: Move Types to Monorepo (1 hour)

    cd larc
    mkdir -p packages
    
    # Move core-types
    git clone https://github.com/larcjs/core-types.git packages/core-types
    rm -rf packages/core-types/.git
    
    # Move components-types
    git clone https://github.com/larcjs/components-types.git packages/ui-types
    rm -rf packages/ui-types/.git
    
    # Update package.json to reference published packages
    # packages/core-types/package.json
    {
      "name": "@larcjs/core-types",
      "version": "1.1.1",
      "peerDependencies": {
        "@larcjs/core": "^1.1.0"
      }
    }
    
    git add packages
    git commit -m "Move TypeScript types to monorepo"

    Phase 3: Move Documentation (1 hour)

    cd larc
    mkdir -p docs
    
    # Move site
    git clone https://github.com/larcjs/site.git docs/site
    rm -rf docs/site/.git
    
    git add docs
    git commit -m "Move documentation to monorepo"

    Phase 4: Move DevTools (30 min)

    cd larc/packages
    
    git clone https://github.com/larcjs/devtools.git devtools
    rm -rf devtools/.git
    
    git add devtools
    git commit -m "Move DevTools to monorepo"

    Phase 5: Set Up Workspaces (30 min)

    # Create pnpm-workspace.yaml
    cat > pnpm-workspace.yaml << EOF
    packages:
      - 'packages/*'
    EOF
    
    # Create root package.json
    cat > package.json << EOF
    {
      "name": "larc",
      "version": "1.0.0",
      "private": true,
      "description": "LARC Development Monorepo",
      "workspaces": [
        "packages/*"
      ],
      "scripts": {
        "build": "pnpm -r build",
        "test": "pnpm -r test",
        "dev": "pnpm -r --parallel dev",
        "clean": "pnpm -r clean",
        "publish-types": "pnpm --filter '@larcjs/core-types' publish && pnpm --filter '@larcjs/ui-types' publish"
      },
      "devDependencies": {
        "@changesets/cli": "^2.27.0"
      }
    }
    EOF
    
    pnpm install
    git add .
    git commit -m "Set up pnpm workspaces"

    Phase 6: Archive Old Repos (15 min)

    Don't delete! Archive for history:
    # On GitHub, go to each repo:
    # Settings โ†’ Archive this repository
    
    Archive these:
    - larcjs/apps
    - larcjs/examples
    - larcjs/site
    - larcjs/core-types
    - larcjs/components-types
    - larcjs/devtools
    
    Add README to each:
    "This repository has been consolidated into https://github.com/larcjs/larc
    See [path] for the code."

    ๐Ÿ“‹ Final Repository Structure

    github.com/larcjs/core (Active)

    core/
    โ”œโ”€โ”€ src/
    โ”‚   โ”œโ”€โ”€ pan.mjs
    โ”‚   โ”œโ”€โ”€ components/
    โ”‚   โ””โ”€โ”€ index.js
    โ”œโ”€โ”€ tests/
    โ”œโ”€โ”€ package.json        (@larcjs/core)
    โ””โ”€โ”€ README.md

    github.com/larcjs/components (Active)

    components/
    โ”œโ”€โ”€ src/
    โ”‚   โ”œโ”€โ”€ components/
    โ”‚   โ”œโ”€โ”€ styles/
    โ”‚   โ””โ”€โ”€ index.js
    โ”œโ”€โ”€ tests/
    โ”œโ”€โ”€ package.json        (@larcjs/ui)
    โ””โ”€โ”€ README.md

    github.com/larcjs/larc (Active - Monorepo)

    larc/
    โ”œโ”€โ”€ packages/
    โ”‚   โ”œโ”€โ”€ core-types/
    โ”‚   โ”‚   โ”œโ”€โ”€ index.d.ts
    โ”‚   โ”‚   โ””โ”€โ”€ package.json    (@larcjs/core-types)
    โ”‚   โ”œโ”€โ”€ components-types/
    โ”‚   โ”‚   โ”œโ”€โ”€ index.d.ts
    โ”‚   โ”‚   โ””โ”€โ”€ package.json    (@larcjs/ui-types)
    โ”‚   โ””โ”€โ”€ devtools/
    โ”‚       โ”œโ”€โ”€ src/
    โ”‚       โ”œโ”€โ”€ manifest.json
    โ”‚       โ””โ”€โ”€ package.json    (@larcjs/devtools)
    โ”œโ”€โ”€ examples/
    โ”‚   โ”œโ”€โ”€ README.md
    โ”‚   โ”œโ”€โ”€ basic/
    โ”‚   โ”‚   โ”œโ”€โ”€ hello-world.html
    โ”‚   โ”‚   โ”œโ”€โ”€ message-passing.html
    โ”‚   โ”‚   โ””โ”€โ”€ ...
    โ”‚   โ”œโ”€โ”€ intermediate/
    โ”‚   โ”‚   โ”œโ”€โ”€ form-validation.html
    โ”‚   โ”‚   โ”œโ”€โ”€ tabs-routing.html
    โ”‚   โ”‚   โ””โ”€โ”€ ...
    โ”‚   โ””โ”€โ”€ advanced/
    โ”‚       โ”œโ”€โ”€ contact-manager/
    โ”‚       โ”œโ”€โ”€ invoice-studio/
    โ”‚       โ”œโ”€โ”€ hybrid-dashboard/
    โ”‚       โ””โ”€โ”€ offline-todo/
    โ”œโ”€โ”€ docs/
    โ”‚   โ””โ”€โ”€ site/
    โ”‚       โ”œโ”€โ”€ index.html
    โ”‚       โ”œโ”€โ”€ docs/
    โ”‚       โ”œโ”€โ”€ guides/
    โ”‚       โ””โ”€โ”€ api/
    โ”œโ”€โ”€ .github/
    โ”‚   โ”œโ”€โ”€ workflows/
    โ”‚   โ”œโ”€โ”€ ISSUE_TEMPLATE/
    โ”‚   โ””โ”€โ”€ PULL_REQUEST_TEMPLATE.md
    โ”œโ”€โ”€ package.json
    โ”œโ”€โ”€ pnpm-workspace.yaml
    โ”œโ”€โ”€ README.md
    โ””โ”€โ”€ CONTRIBUTING.md

    ๐ŸŒ URLs After Consolidation

    Package Installs (Unchanged)

    npm install @larcjs/core
    npm install @larcjs/ui
    npm install -D @larcjs/core-types
    npm install -D @larcjs/ui-types

    GitHub URLs (Simplified)

    Source code:
    • https://github.com/larcjs/core
    • https://github.com/larcjs/components
    • https://github.com/larcjs/larc
    Documentation:
    • https://larcjs.com/docs/
    • https://larcjs.com/examples/
    Examples:
    • https://larcjs.com/examples/basic/
    • https://larcjs.com/examples/advanced/contact-manager/

    ๐Ÿ’ก Benefits of This Structure

    For Core/Components Users (External)

    • โœ… Clear separation: bus vs. components
    • โœ… Minimal installs
    • โœ… Independent versioning
    • โœ… No change to their workflow

    For Contributors (Internal)

    • โœ… Fewer repos to clone (3 vs 10)
    • โœ… Examples all in one place
    • โœ… Types updated alongside features
    • โœ… Docs co-located with examples
    • โœ… Single source of truth

    For Maintainers

    • โœ… Fewer repos to manage
    • โœ… Simpler CI/CD (3 repos vs 10)
    • โœ… Coordinated releases for types
    • โœ… Easier to keep docs in sync

    ๐Ÿ”„ Alternative: Keep It Super Simple

    If you want even simpler:

    Option B: Just 2 Repos

    github.com/larcjs/core        (Stay as-is)
    github.com/larcjs/components  (Stay as-is)
    
    Everything else โ†’ Archive or move to wiki
    Rationale:
    • Types published as patch releases from core
    • Examples live in README or GitHub Pages
    • Docs on website only
    Result: 10 repos โ†’ 2 repos (most extreme)

    ๐Ÿ“Š Comparison

    | Approach | Repos | Complexity | npm Packages | Best For | |----------|-------|------------|--------------|----------| | Current | 10 | High ๐Ÿ˜ซ | 5 | Nothing | | Recommended (3) | 3 | Low ๐Ÿ˜Š | 5 | Most teams | | Extreme (2) | 2 | Minimal ๐Ÿคฉ | 2 | Solo maintainer |


    โœ… Recommended Action Plan

  • Keep as separate (Don't touch):
  • - core - Published package - components - Published package
  • Consolidate into larc (Do this):
  • - core-types โ†’ larc/packages/core-types - components-types โ†’ larc/packages/ui-types - devtools โ†’ larc/devtools - site โ†’ larc/docs/site - examples + apps โ†’ larc/examples - .github โ†’ larc/.github
  • Archive (Safe to archive):
  • - Old apps repo (merged into examples) - Old examples repo (merged into larc) - Old site repo (moved to larc) - Old type repos (moved to larc) - Old devtools repo (moved to larc) Timeline: 5-6 hours one-time effort Benefit: Simpler forever ๐ŸŽ‰

    ๐Ÿš€ Ready to Execute?

    I can help create the migration scripts. Just say the word!