The Problem A developer entering this repo faces a deeply interconnected core package (packages/bubble-core) with 646 internal modules and 1176 import edges, 22 of which participate in circular dependencies. Changes to oversized files like ai-agent.ts (1830 lines) or the execution store ripple widely due to high instability scores (up to 0.91) and hub-module churn (67 dependents on a single types file). The platform’s value—exportable TypeScript workflows—is undercut by the cognitive load required to navigate and modify the codebase.
What This Does BubbleLab is a Typescript-native workflow automation platform comprising four self-contained projects: packages/ (396 code files, 14 data files), apps/ (349 code files, 44 data files), tools/ (6 code files), and scripts/ (3 code files). It compiles natural-language prompts into production-ready TypeScript workflows using a composable bubble system, provides full execution tracing with token/cost tracking, and supports import from n8n-style platforms and instant TypeScript/API export. The UI runs on React + Tailwind via Vite; the API server is a Node/Bun service with Docker deployment.
How It Is Wired Execution starts at apps/bubble-studio/index.html and apps/bubble-studio/src/routes/index.tsx. The API entry is apps/bubblelab-api/src/index.ts, which mounts a DB schema at apps/bubblelab-api/src/db/index (Ca 31, Ce 3, instability 0.09). Core control flows through packages/bubble-core/src/index (Ca 8, Ce 79, instability 0.91), a hub receiving imports from 67 modules including packages/bubble-core/src/types/bubble (Ca 67, Ce 1, instability 0.01). Circular imports affect 22 modules across bubble-factory.ts, ai-agent.ts, and schemas/index.ts, requiring care when extending the bubble system. The import graph was fully resolved across 650 code files; no architecture beyond these measured edges has been mapped.
How To Use It Setup is defined by the repo’s dependency files. Install with:
pnpm install
Start the development environment with:
pnpm run dev
Open http://localhost:3000. To generate workflows with the AI assistant (Pearl), set GOOGLE_API_KEY and OPENROUTER_API_KEY in apps/bubble-studio/.env.example; the default models are gemini-3.0-pro for generation and morph-v3 for editing. Scaffold a new project with:
npx create-bubblelab-app
No evidence was found for automated CI setup beyond the provided GitHub Actions workflows; a dependabot.yml or equivalent is absent and would need addition for dependency updates.
Real-World Use A developer can clone the repo, install dependencies, and invoke the studio at localhost:3000 to build a flow visually. Using the reddit-scraper template as reference, the resulting workflow file (reddit-news-flow.ts) comprises roughly 50 lines of clean TypeScript that defines nodes, edges, and transformation logic. The exported code runs independently of the studio, can be checked into version control, and integrated into existing CI/CD pipelines. Token usage and execution traces are available in the built-in observability panel.
Code Health & Issues
HIGH– Pin third-party GitHub Actions to commit SHAs:.github/workflowsusesoven-sh/setup-bun@v2,pnpm/action-setup@v4; tags can move, risking unpredictable execution with secrets.HIGH– Replace wildcard CORS origin:apps/bubblelab-api/src/index.tsusescors()with*; paired with credentials this allows any site to make authenticated requests.MEDIUM– Enable Dependabot or Renovate: 15 manifests have no update bot configured; unpatched advisories risk accumulation.MEDIUM– Pin container base image by digest:Dockerfile.apiusesnode:20-slim,oven/bun:1.1.38-debianwithout digest; mutable tags change the CVE surface unseen.MEDIUM– Gate pull requests on dependency vulnerability scan: nodependency-review-actionorosv-scannerdetected in CI.MEDIUM– Move large binaries to Git LFS:editing-flow.gif(13.8MB),running-flow.gif(13.1MB) are stored in the repo, inflating clone size and CI checkout cost.MEDIUM– Setpersist-credentials: falseon checkout:.github/workflows/ci.ymlkeeps the token for all later steps.MEDIUM– Add non-root USER to Docker image:Dockerfile.apihas noUSERdirective; processes run as root.LOW– Settimeout-minuteson workflow jobs: one CI job declares no timeout, risking overlap on the two-hourly schedule.
All findings above derive from static analysis of the repository’s structure, import graph, and CI configuration. No additional issues are invented here.
The Bottom Line BubbleLab offers a rare combination of full observability and code exportability for TypeScript workflow automation, with a clean visual editor and exportable logic that avoids proprietary lock-in. The main trade-off is a steep navigation cost: the core package’s circular imports, outsized files, and absent dependency automation mean new contributors need time to map dependencies before making safe changes. It’s well-suited for teams that value type safety and exportable code over out-of-the-box CI polish, and who can invest in mapping the measured import graph before heavy modification.