BubbleLab: An Apache-2.0 Workflow Engine You Can Host Without the Slack Layer
Open-core workflow engine powering Bubble Lab — and fully runnable, hostable, and extensible on its own.
At a glance
- What is it?
- BubbleLab's repository ships the execution engine behind the Bubble Lab platform, not the Slack assistant. It runs locally with two pnpm commands, but the AI-assisted flow builder depends on a Google API key and the README warns weaker models degrade output.
- Who is it for?
- Adopt BubbleLab if you want a self-hosted TypeScript runtime where tools and agents are chained as Bubbles and you are prepared to supply your own GOOGLE_API_KEY for the AI-assisted builder. Do not adopt it if you want the Slack-native Pearl operator or managed integrations, since those belong to the hosted platform and are not in this repository.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 139 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The Engine Without the Slack Operator
Bubble Lab, the product, is described in the README as a Slack-native AI operator platform where teams ask an assistant named Pearl to execute workflows across their stack. This repository is not that product. It is the workflow execution engine underneath it, published under Apache-2.0 and described as the same engine used internally by Bubble Lab. The README lists the audience explicitly: teams already on the platform, developers who want control over execution, organizations that need self-hosted automation, and engineers building custom agents or integrations. That list is the honest scope. If your reason for arriving here was Pearl, you have arrived one layer too low. The repository gives you the runtime, the Bubble primitives, a local studio, tracing and logging, CLI tooling, and exportable workflows. It does not give you the Slack interface or the managed SaaS connectors, which the README places under the hosted option at app.bubblelab.ai.
How Bubbles Chain Into a Flow
The unit of work is a Bubble, which the README calls an agent and integration primitive. A flow is a TypeScript class extending BubbleFlow, parameterized by a trigger type. The reddit-scraper template shows the shape: the class declares a handle method taking a typed payload, instantiates a tool such as RedditScrapeTool with a config object, and calls .action() on it. The resolved value carries a .data property, so the flow reads scrapeResult.data.posts and feeds derived text into a second Bubble, AIAgentBubble, which takes a message string and a model object. The return value is a plain object. There is no visual graph to compile and no YAML. Control flow is TypeScript, which is why the README can describe a working scraper plus summarizer in roughly fifty lines. The trade-off is that non-programmers cannot author flows, and the execution order is whatever your await statements say. The README's own execution summary line shows the sequence as RedditScrapeTool, then AIAgentBubble, then Return, so the trace mirrors the call order rather than a separate orchestration plan.
Running the Studio Locally in Two Commands
The local path is short. Run pnpm install, then pnpm run dev, and the README says the studio is available at http://localhost:3000, where you can build, edit, and run workflows. The README attaches a caveat directly to this: creating a flow with Pearl, the AI assistant, requires API keys, specifically GOOGLE_API_KEY. It states that gemini-3.0-pro is the default for generation while code edits use fast find-and-replace, and it warns that a weaker model is not well tested and can lead to degraded or inconsistent performance. That warning is worth reading as a constraint rather than a footnote. The AI-assisted authoring experience is coupled to one provider's model tier, and the README does not describe a supported fallback. For a project scaffold, the documented entry point is npx create-bubblelab-app, which the README says produces a pre-configured TypeScript setup with core packages and runtime, selectable templates including basic and reddit-scraper, and example workflows. The stated next steps are cd into the created directory, npm install, npm run dev. Note the package manager shifts between the two paths: pnpm for this repository, npm for the scaffolded app. Detailed setup lives in CONTRIBUTING.md, which the README points to rather than reproducing.
The Gemini Coupling Is the Sharpest Edge
The most concrete limitation visible in the material is model dependence. The README does not present GOOGLE_API_KEY as optional for the assisted path; it says you will need it to create flows with Pearl, and it names gemini-3.0-pro as the default generation model. Everything downstream of that choice inherits it. A team standardized on a different provider, or running in an environment where outbound calls to Google are not permitted, is not shown a documented alternative for the builder. The runtime itself appears separable, since the reddit example constructs AIAgentBubble with a model field set to google/gemini-2.5-flash, suggesting model selection is a per-Bubble parameter for agent steps. That is a different question from which model drives flow generation in the studio. The README also carries a claim that everything in the repository is fully functional and production-ready. Treat that as a vendor statement, not a verified property. Nothing in the supplied material shows release artifacts, and the recent releases field came back empty, so there is no changelog to consult for upgrade risk before you commit to a version.
What the Execution Trace Actually Reports
Observability is built in rather than bolted on. The README's sample output for the reddit template includes an execution summary with total duration, a count of Bubbles executed with their names in sequence, token usage split into input and output, and a memory peak figure. For anyone running agents in production, that token line is the useful one, because it attributes cost to a specific run rather than to a billing period. The README also lists execution tracing, logging, and observability as repository contents, and mentions observability dashboards and execution history as part of the hosted platform. The distinction matters: the trace data appears to be produced by the engine, while the dashboard surface is described under the managed option. If you self-host, expect to consume the logs yourself. The material does not specify an export format, a retention policy, or an OpenTelemetry integration, so plan on reading whatever the engine emits rather than assuming a standard wire format.
Where a Plain Script or n8n Fits Better
The honest alternative for a two-step job is a plain TypeScript script with a scheduler. If your flow is scrape then summarize then return JSON, a BubbleFlow class adds a runtime, a studio, and a dependency tree around code you could write directly. BubbleLab earns its place when you want the same primitives reused across many flows, a local editing surface, and per-run token accounting without building those yourself. The other comparison is a visual automation tool such as n8n, which targets the opposite author: people who want to wire nodes in a browser and avoid a build step. BubbleLab inverts that. Flows are typed classes, the studio is a development surface rather than the source of truth, and the README's own framing is that workflows are exportable and can be embedded inside your own products. Choose BubbleLab when the flow is code you intend to version, review, and ship as part of an application. Choose a visual tool when the flow is an operational chore owned by someone who does not open an editor. Neither is a strict upgrade over the other.
Licence, Upgrade Surface, and What to Check First
The repository is Apache-2.0, per the badge and the LICENSE.txt link. Apache-2.0 permits commercial use, modification, and redistribution, and it includes an express patent grant, which is why it is a common choice for infrastructure that companies embed. It also carries notice and attribution obligations, so if you redistribute modified packages you need to preserve the licence and notice files. That is a description of the licence text, not legal advice; have counsel read it against your distribution model. On maintenance, the material gives one signal: the last push to main is dated 2026-04-30, and no releases were retrieved. There is no published version history to diff, so upgrade cost is unknown from this repository alone. If you adopt it, pin the commit you build against and read CONTRIBUTING.md before assuming a support path. The community channel listed is a Discord invite. The thing to verify before you invest is narrow and testable: scaffold a project with npx create-bubblelab-app, run the reddit-scraper template with your own GOOGLE_API_KEY, and confirm the execution summary prints the Bubble sequence and token counts you expect. If that run works on your infrastructure, the rest of the engine is the same code path.
Editorial conclusion
Adopt BubbleLab if you want a self-hosted TypeScript runtime where tools and agents are chained as Bubbles and you are prepared to supply your own GOOGLE_API_KEY for the AI-assisted builder. Do not adopt it if you want the Slack-native Pearl operator or managed integrations, since those belong to the hosted platform and are not in this repository. Before committing, verify two things yourself: whether the CLI scaffolded project runs end to end on your Node and pnpm versions, and whether the Apache-2.0 LICENSE.txt covers the packages you actually import.
Community notes