This is a Bun workspace coordinating development across independent repositories in the manic-js organization.
~/manic-workspace/
├── core/ (manic-js/core - main framework)
├── bundler/ (manic-js/bundler - standalone bundler)
├── providers/ (manic-js/providers - deployment adapters)
├── create-manic/ (manic-js/create-manic - CLI scaffolding)
├── tui/ (manic-js/tui - terminal UI)
├── plugins/
│ ├── tailwind/ (manic-js/plugin-tailwind)
│ ├── unocss/ (manic-js/plugin-unocss)
│ ├── mdx/ (manic-js/plugin-mdx)
│ ├── mcp/ (manic-js/plugin-mcp)
│ ├── seo/ (manic-js/plugin-seo)
│ ├── sitemap/ (manic-js/plugin-sitemap)
│ ├── api-docs/ (manic-js/plugin-api-docs)
│ └── pwa/ (manic-js/plugin-pwa)
├── docs/ (manic-js/docs — cloned locally; not tracked in Rahuletto/manic)
├── examples/
│ ├── starter/ (manic-js/example-starter)
│ └── chatbot/ (manic-js/example-chatbot)
├── demo/ (Rahuletto/manic - testbench)
│
├── package.json (workspace root config)
├── bun.lock (shared lockfile - LOCAL ONLY)
└── DEVELOPMENT.md (this file)
# Use HTTPS (default)
git clone https://github.com/Rahuletto/manic manic-workspace
cd manic-workspace
# OR use SSH (if you have SSH keys configured)
git clone git@github.com:Rahuletto/manic.git manic-workspace
cd manic-workspaceRun setup to clone all manic-js/* repos:
./setup.sh # Clones all 16 manic-js/* repos into subdirectoriesThe setup script automatically detects your git protocol (SSH or HTTPS) from your git config and uses the same for cloning all repos.
Note on demo: The demo/ directory is included in the Rahuletto/manic repository (this repo). It is NOT cloned separately by setup.sh to avoid recursive cloning. The demo is the primary testbench for verifying framework changes.
Run ./setup.sh before the first bun install so every workspace directory
(including examples/starter and examples/chatbot) exists; otherwise Bun will
report missing workspaces.
bun install # Links all workspaces, creates shared bun.lockImportant: The bun.lock file at the workspace root is committed to the repository. It ensures:
- Reproducible builds across developers and CI/CD
- Consistent dependency versions for the integrated workspace
- All workspace packages see the same dependency tree locally
Note: Individual packages (core, plugins, etc.) may have their own bun.lock files when used standalone outside the workspace.
This command creates symlinks in node_modules pointing to each workspace, enabling hot reload during development.
Edit directly in the workspace directory:
# Edit a plugin
edit plugins/tailwind/src/index.ts
# Changes are immediately reflected in demo via symlinks
cd demo && bun devEach directory is a full git repository. Push changes normally:
cd plugins/tailwind
git add src/index.ts
git commit -m "feat: update tailwind integration"
git push origin main # Pushes to manic-js/plugin-tailwindOnly change DEVELOPMENT.md, setup.sh, or package.json here. Rarely needed.
git add DEVELOPMENT.md
git commit -m "docs: update setup instructions"
git push origin main # Pushes to Rahuletto/manicbun run dev # Equivalent to: cd demo && bun devAll workspace packages are symlinked and hot-reload on changes.
bun run build # Runs `bun run build` in each workspacebun run test # Runs `bun run test` in each workspacebun run release # Publishes all packages to npm (coordinated)When you run bun install, Bun automatically:
- Detects workspaces in
package.json - Creates symlinks in
node_modules/@manicjs/*→ to each package'ssrc/ - Watches files in demo
# Example: edit plugin-tailwind
edit plugins/tailwind/src/index.ts
# save → demo's dev server detects change → hot reloadsNo build step needed. Direct source file watching.
- Clone the repo into the appropriate directory
- Add it to
workspacesinpackage.json - Run
bun installagain
Clone it standalone:
git clone https://github.com/manic-js/plugin-mdx
cd plugin-mdx
bun install
bun testThe workspace is optional; each repo works independently.
Each repo publishes independently via CI/CD. Optional: use scripts/release.sh to batch-publish all at once.
No. Each repo has its own git history. Push individually:
cd core && git push
cd ../bundler && git push
cd ../plugins/tailwind && git push
# etcThe workspace root bun.lock IS committed to the repository. This is critical because:
- ✅ Ensures reproducible builds across developers
- ✅ Prevents "works on my machine" dependency issues
- ✅ Provides exact version pinning for the integrated workspace
- ✅ Required by CI/CD pipelines for consistency
Each independent repo (core, plugins, etc.) may also have its own bun.lock file when used standalone outside the workspace context.
Do not ignore the root bun.lock. Commit it with your changes.
Submodules (❌ old): Tracked commit pointers in umbrella, merge conflicts, complex workflow.
Workspaces (✅ new): Just symlinked directories, each repo is independent, simple push flow.
Ensure demo is running with bun dev:
cd demo && bun devCheck that the package is listed in demo's package.json dependencies.
The workspace bun.lock is local. Delete and regenerate:
rm bun.lock
bun installOlder setups cloned those at the top level. Remove the old folders (each is its own git
repo — keep any work you need, then delete) and run ./setup.sh again. New clones go to
examples/starter and examples/chatbot.
Check GitHub token:
gh auth statusEnsure you have access to manic-js org repos.
- Bun Workspaces: https://bun.sh/docs/cli/install#workspaces
- Manic Docs: https://manic-docs.vercel.app
- Contributing: See CONTRIBUTING.md in each repo
Open an issue in the appropriate repo:
- Core framework: https://github.com/manic-js/core/issues
- Specific plugin: https://github.com/manic-js/plugin-{name}/issues
- Demo/testbench: https://github.com/Rahuletto/manic/issues