Skip to main content
RapidDev - Software Development Agency
bubble-integrationsBubble API Connector

Visual Studio Code

VS Code does not have a direct API integration with Bubble — Bubble's editor is entirely browser-based and proprietary. The practical VS Code + Bubble workflow covers three patterns: writing and linting JavaScript for Bubble's 'Run JavaScript' action before pasting into Bubble, developing custom Bubble plugins locally using the Bubble Plugin CLI, and building companion microservices that Bubble calls via API Connector. The Plugin CLI pattern is the highest-value differentiator.

What you'll learn

  • The three practical VS Code + Bubble workflow patterns and when to use each
  • How to install the Bubble Plugin CLI and scaffold a new plugin project in VS Code
  • How to write and deploy plugin JavaScript and CSS to Bubble's Plugin Editor from VS Code
  • How to use VS Code to write, lint, and test JavaScript before pasting into Bubble's Run JavaScript action
  • How VS Code's Git integration works alongside Bubble's own version history
  • How to develop companion microservices in VS Code that Bubble calls via API Connector
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate21 min read45–90 minutesDevOps & ToolsLast updated July 2026RapidDev Engineering Team
TL;DR

VS Code does not have a direct API integration with Bubble — Bubble's editor is entirely browser-based and proprietary. The practical VS Code + Bubble workflow covers three patterns: writing and linting JavaScript for Bubble's 'Run JavaScript' action before pasting into Bubble, developing custom Bubble plugins locally using the Bubble Plugin CLI, and building companion microservices that Bubble calls via API Connector. The Plugin CLI pattern is the highest-value differentiator.

Quick facts about this guide
FactValue
ToolVisual Studio Code
CategoryDevOps & Tools
MethodBubble API Connector
DifficultyIntermediate
Time required45–90 minutes
Last updatedJuly 2026

Three ways VS Code improves your Bubble development

Most Bubble developers work entirely in Bubble's browser-based editor — and for most things, that is fine. But there are three scenarios where VS Code dramatically improves the experience, and understanding which scenario matches your situation determines how you use it.

Scenario 1: Writing JavaScript for Bubble Workflows. Bubble's editor has a JavaScript code input field used in the 'Run JavaScript' action (Toolbox plugin) and in Bubble's 'Evaluate JavaScript' expression. This field has no syntax highlighting, no autocompletion, and no error checking. If you are writing more than ten lines of JavaScript, you want to write it in VS Code first — where you get IntelliSense, ESLint, and instant feedback on syntax errors — then paste the working code into Bubble's field.

Scenario 2: Building custom Bubble plugins. This is the highest-value differentiated pattern. Bubble has a plugin system that lets developers create reusable elements, actions, and data connections. The official Bubble Plugin CLI (`bubble-plugin-cli`) lets you write plugin JavaScript and CSS locally in VS Code, with full autocompletion and Git version control, and deploy the plugin directly to Bubble's Plugin Editor with a single command. If you are building reusable Bubble components for your own apps or to share in the marketplace, VS Code is the right tool.

Scenario 3: Building microservices that Bubble calls. If you are building a companion API (Node.js, Python, Go) that your Bubble app calls via API Connector, you write and test that API in VS Code, containerize it with Docker if needed, deploy it to a cloud platform, and connect Bubble to the live URL. VS Code is your development environment; Bubble is the consumer.

Note: VS Code's Git integration (Source Control panel) works for the plugin code or microservice code you write locally — it does NOT sync with Bubble's own version history (Settings → Versions). These are entirely separate systems.

Integration method

Bubble API Connector

No direct runtime connection between VS Code and Bubble. The integration is a developer workflow: VS Code is used to write JavaScript for Bubble, develop Bubble plugins via the Plugin CLI, and build companion microservices that Bubble's API Connector calls at runtime.

Prerequisites

  • A Bubble account on any plan (plugin development works on all plans)
  • VS Code downloaded and installed from code.visualstudio.com (free and open-source)
  • Node.js installed on your computer (download from nodejs.org) — required for the Bubble Plugin CLI
  • The Bubble Plugin CLI installed: 'npm install -g bubble-plugin-cli' in your computer's terminal
  • A Bubble account with plugin development enabled — you will need to authenticate the CLI with your Bubble email and password

Step-by-step guide

1

Install Node.js, VS Code, and the Bubble Plugin CLI

VS Code is a local development tool — unlike Bubble's browser-based editor, VS Code installs on your computer. You also need Node.js, which the Bubble Plugin CLI runs on. Step A: Install VS Code. Go to code.visualstudio.com in your browser. Click the Download button for your operating system (macOS, Windows, or Linux). Run the installer. VS Code is free and open-source. Step B: Install Node.js. Go to nodejs.org. Download the LTS version (recommended for most users — currently Node.js 20.x or 22.x). Run the installer. Node.js includes npm (Node Package Manager), which you will use to install the Bubble Plugin CLI. To verify Node.js installed correctly, open VS Code → Terminal menu → New Terminal. Type `node --version` and press Enter. You should see a version number like 'v20.11.0' or similar. If you see 'command not found', Node.js did not install correctly — try reinstalling from nodejs.org. Step C: Install the Bubble Plugin CLI. In the VS Code terminal, run: ``` npm install -g bubble-plugin-cli ``` The `-g` flag installs the CLI globally, making the `bubble-plugin` command available anywhere on your computer. After installation, run `bubble-plugin --version` to confirm it installed. Note: The `bubble-plugin-cli` package is maintained by the Bubble community — check the npm page (npmjs.com/package/bubble-plugin-cli) for the current version and any compatibility notes with Bubble's platform. If the package shows it has not been updated recently, verify it still works with current Bubble before building a production plugin on top of it.

install-bubble-plugin-cli.sh
1# Install Node.js LTS from nodejs.org, then run these in your terminal:
2
3# Verify Node.js is installed
4node --version # Should show v20.x.x or similar
5npm --version # Should show 10.x.x or similar
6
7# Install Bubble Plugin CLI globally
8npm install -g bubble-plugin-cli
9
10# Verify installation
11bubble-plugin --version

Pro tip: If 'npm install -g bubble-plugin-cli' fails with a permission error on macOS, you may need to fix npm's permissions or use a Node version manager like 'nvm' (github.com/nvm-sh/nvm). Do not use sudo with npm — it can cause permission issues.

Expected result: VS Code is installed and open. Running 'bubble-plugin --version' in VS Code's terminal shows a version number without errors.

2

Create a Bubble plugin project and authenticate the CLI

With the Bubble Plugin CLI installed, create a new plugin project. Open VS Code and use the integrated terminal (Terminal → New Terminal) to run the init command. First, create a folder for your plugin project and navigate to it: ``` mkdir my-bubble-plugin cd my-bubble-plugin ``` Then initialize the plugin: ``` bubble-plugin init ``` The CLI will prompt you for: - Your Bubble account email address - Your Bubble account password - The plugin name (used in the Bubble Plugin Editor) - Whether you want to create a new plugin or connect to an existing plugin Choose 'Create a new plugin' on first run. The CLI authenticates with Bubble's servers using your credentials and creates the plugin in your Bubble account's Plugin Editor automatically. After authentication, the CLI scaffolds the plugin project in your current directory with a structure like: ``` my-bubble-plugin/ plugin.json # Plugin metadata elements/ # Custom element definitions actions/ # Custom action definitions shared/ code.js # Shared JavaScript css.css # Shared CSS ``` Open the folder in VS Code (File → Open Folder → select my-bubble-plugin). You will see the project structure in VS Code's Explorer panel. All the JavaScript and CSS files here are what you will edit in VS Code and deploy to Bubble's Plugin Editor.

init-bubble-plugin.sh
1# In your computer's terminal or VS Code terminal:
2mkdir my-bubble-plugin
3cd my-bubble-plugin
4bubble-plugin init
5
6# Follow prompts:
7# Enter your Bubble email: you@example.com
8# Enter your Bubble password: **********
9# Plugin name: My Custom Plugin
10# Create new or connect existing? Create new
11
12# Open in VS Code:
13code .

Pro tip: Give your plugin a descriptive name during init — this name appears in the Bubble Plugin Editor and in the Bubble Plugin Marketplace if you choose to publish. You can rename it in the Plugin Editor later, but a clear name saves confusion when you have multiple plugins.

Expected result: The 'bubble-plugin init' command completes without errors. The plugin project folder opens in VS Code showing the scaffolded file structure. Your Bubble account now has a new plugin visible in the Plugin Editor (go to the Plugin Editor in Bubble to confirm).

3

Write plugin JavaScript and CSS in VS Code

With the project scaffolded, write your plugin logic in VS Code. The plugin files you edit depend on what type of plugin element you are building. For a custom element: open the 'elements/' directory. The scaffolded element file defines how your element initializes, updates, and resets. Here is a simple example element that renders a custom styled badge based on a 'label' and 'color' property: ```javascript function(instance, properties, context) { // properties.label - the text passed from Bubble // properties.color - the background color passed from Bubble var container = instance.canvas.get(0); container.innerHTML = ''; var badge = document.createElement('span'); badge.textContent = properties.label || 'Badge'; badge.style.cssText = [ 'display: inline-block', 'padding: 4px 12px', 'border-radius: 9999px', 'font-size: 12px', 'font-weight: 600', 'color: white', 'background-color: ' + (properties.color || '#3b82f6') ].join(';'); container.appendChild(badge); } ``` VS Code advantages here: - Install ESLint extension (search 'ESLint' in Extensions panel, install the Microsoft ESLint extension) to get real-time error highlighting - Use Git (Source Control panel in VS Code sidebar) to commit each version of your plugin with a descriptive message - Use VS Code's Find & Replace (Cmd+H / Ctrl+H) across all plugin files when you need to rename a property The key Bubble plugin API objects available in element code: - `instance.canvas` — jQuery-wrapped DOM element where you render your plugin's HTML - `instance.data` — persistent data storage for the element instance - `instance.triggerEvent(eventName)` — fire a Bubble event from your element - `properties.field_name` — read Bubble-exposed property values passed by the Bubble editor user - `context.currentUser` — access the current logged-in Bubble user Note: Bubble plugin JavaScript runs in a sandboxed browser context — some modern browser APIs may be restricted. Do not rely on fetch() directly (use Bubble's built-in API calls for data) and test all code in Bubble's plugin preview, not just in VS Code.

badge-element-update.js
1// elements/badge-element/update.js
2function(instance, properties, context) {
3 var container = instance.canvas.get(0);
4 container.innerHTML = '';
5
6 var badge = document.createElement('span');
7 badge.textContent = properties.label || 'Label';
8 badge.style.backgroundColor = properties.color || '#6366f1';
9 badge.style.color = 'white';
10 badge.style.padding = '3px 10px';
11 badge.style.borderRadius = '9999px';
12 badge.style.fontSize = '12px';
13 badge.style.fontWeight = '600';
14 badge.style.display = 'inline-block';
15
16 container.appendChild(badge);
17
18 // Trigger a Bubble event when badge is clicked
19 badge.addEventListener('click', function() {
20 instance.triggerEvent('badge_clicked');
21 });
22}

Pro tip: The Bubble plugin properties object (properties.field_name) does not have TypeScript definitions in VS Code by default — type values may appear as 'any'. Community-maintained @types packages exist for the Bubble plugin API but may be incomplete. Always test property access in Bubble's plugin preview environment, not just locally.

Expected result: Plugin JavaScript files in VS Code show ESLint highlighting for syntax errors. You can write and edit element code with full VS Code tooling — autocompletion for DOM APIs, error highlighting, and Git version control.

4

Deploy the plugin to Bubble's Plugin Editor from VS Code

Once your plugin code is ready, deploy it to Bubble with a single CLI command. In VS Code's terminal, from your plugin project directory: ``` bubble-plugin deploy ``` The CLI uploads your local JavaScript and CSS files to your plugin in Bubble's Plugin Editor. This is a one-way push — the CLI sends your local files to Bubble, overwriting the Plugin Editor's current content for those files. After deploying, Bubble does NOT automatically reload the plugin in any open Bubble app. You must: 1. Open your Bubble app in a new browser tab (or refresh the editor) 2. If the plugin is already installed in the app, go to Plugins tab → find your plugin and click 'Update to latest version' if a version update is shown 3. Open Preview mode to test the deployed plugin in a live context For active development, you will iterate rapidly: 1. Edit code in VS Code 2. Run `bubble-plugin deploy` in VS Code terminal 3. Refresh Bubble editor or preview to see the change 4. Repeat Note: VS Code has no 'watch mode' equivalent for Bubble plugin development — there is no hot reload. Each change requires a manual deploy followed by a manual Bubble refresh. This is a known limitation of the current Plugin CLI tooling. Bubble's Plugin Editor (accessible from the main Bubble editor via the Plugins tab → Edit this plugin) shows the deployed code. You can verify the deploy succeeded by opening the Plugin Editor and checking that your code is there. RapidDev's team has built custom Bubble plugins for clients ranging from simple UI components to complex API integrations — for enterprise-level plugin development or private plugins for your Bubble apps, book a free scoping call at rapidevelopers.com/contact.

deploy-bubble-plugin.sh
1# From your plugin project directory in VS Code terminal:
2bubble-plugin deploy
3
4# Expected output:
5# Authenticating...
6# Uploading elements/...
7# Uploading actions/...
8# Uploading shared/...
9# Done! Plugin deployed to Bubble Plugin Editor.

Pro tip: Use Git commits in VS Code before each 'bubble-plugin deploy' so you can roll back to a previous version if a deploy breaks something. VS Code's Source Control panel (Ctrl+Shift+G / Cmd+Shift+G) makes this easy — stage changes, write a commit message, and commit before deploying.

Expected result: 'bubble-plugin deploy' completes without errors. The Bubble Plugin Editor shows your updated JavaScript and CSS code. Refreshing Bubble's preview shows the updated plugin element behavior.

5

Use VS Code for JavaScript in Bubble's 'Run JavaScript' workflow action

Even if you are not building a full Bubble plugin, VS Code is valuable for a simpler use case: writing JavaScript for Bubble's 'Run JavaScript' action (provided by the Toolbox plugin) before pasting it into Bubble's code editor. Bubble's in-editor JavaScript field has no syntax highlighting, no error checking, and no formatting. If you write a typo, you will not know until you run the Workflow and see a JavaScript error at runtime. VS Code eliminates this by giving you a proper development environment. Workflow: 1. In VS Code, create a new file — for example, 'bubble-workflow-scripts.js' 2. Write your JavaScript function with full VS Code tooling 3. Test the logic in VS Code's built-in terminal with Node.js: `node -e "your test here"` 4. When the code is working, copy the function body 5. In Bubble's Workflow editor, add a 'Run JavaScript' action (Toolbox plugin required) and paste the code Bubble-specific considerations for 'Run JavaScript' actions: - Your JavaScript runs in the user's browser (client-side), not on Bubble's servers - You can access Bubble data passed as parameters via the `properties` object if using the Toolbox plugin's JavaScript element, or via dynamic data inserted into a text template if using the simple 'Run JavaScript' action - The `bubble_fn_` prefix functions (e.g., `bubble_fn_output(value)`) are Bubble's way of returning values from JavaScript to the Bubble Workflow — these are Bubble-specific and not standard JavaScript - Use `console.log()` for debugging — check the browser Console tab (F12) while in Bubble Preview to see output Example: sorting a list of objects by a field: ```javascript // Write and test this in VS Code first: var users = JSON.parse(properties.users_json); var sorted = users.sort(function(a, b) { return b.score - a.score; }); bubble_fn_sorted_users(JSON.stringify(sorted)); ``` This JavaScript is written in VS Code, tested in Node.js (replace `bubble_fn_sorted_users` with `console.log` for local testing), and then pasted into Bubble's Run JavaScript field.

bubble-workflow-sort.js
1// bubble-workflow-scripts.js
2// Write in VS Code, test with Node.js, then paste into Bubble's Run JavaScript action
3
4// Sorts an array of user objects by score (highest first)
5// properties.users_json is a Bubble-passed dynamic value serialized as JSON
6var users = JSON.parse(properties.users_json);
7
8var sorted = users
9 .filter(function(u) { return u.score != null; })
10 .sort(function(a, b) { return b.score - a.score; });
11
12// bubble_fn_output sends the result back to Bubble's Workflow
13bubble_fn_output(JSON.stringify(sorted));

Pro tip: For local testing in VS Code's terminal, replace bubble_fn_output with console.log and provide a mock properties object. Run with 'node bubble-workflow-sort-test.js' to verify the logic before pasting into Bubble.

Expected result: JavaScript functions are written and tested in VS Code before pasting into Bubble's Run JavaScript action. Runtime JavaScript errors in Bubble are reduced because code is linted and tested locally first.

6

Build and connect a companion microservice from VS Code to Bubble

The third VS Code + Bubble pattern: build a REST API in VS Code that Bubble calls at runtime via API Connector. This is the pattern to use when you need server-side logic that Bubble cannot perform natively — PDF generation, complex calculations, HMAC signing for secure API calls, or processing requiring system libraries. In VS Code, create a new Node.js project: ``` mkdir bubble-companion-api cd bubble-companion-api npm init -y npm install express cors ``` Create a basic server.js: ```javascript const express = require('express'); const cors = require('cors'); const app = express(); app.use(express.json()); app.use(cors({ origin: 'https://bubble.io' })); // or your Bubble app domain const API_KEY = process.env.API_KEY || 'dev-key'; app.use((req, res, next) => { const key = req.headers['x-api-key']; if (key !== API_KEY) { return res.status(401).json({ error: 'Unauthorized' }); } next(); }); app.get('/health', (req, res) => { res.json({ status: 'ok' }); }); app.post('/process', (req, res) => { const { input } = req.body; // Add your business logic here res.json({ result: input.toUpperCase(), processed_at: new Date().toISOString() }); }); app.listen(3000, '0.0.0.0', () => console.log('Running on port 3000')); ``` Test locally in VS Code's terminal: `node server.js`. Then in a second terminal: `curl -H "x-api-key: dev-key" http://localhost:3000/health` — should return `{"status": "ok"}`. Once the API is working, deploy to Railway, Render, or another cloud platform. Then add the deployed HTTPS URL to Bubble's API Connector with the X-API-Key header marked as Private. Set Privacy Rules in Bubble's Data tab on any data types that store results from this companion API.

server.js
1const express = require('express');
2const cors = require('cors');
3const app = express();
4
5app.use(express.json());
6
7const API_KEY = process.env.API_KEY;
8
9app.use((req, res, next) => {
10 if (req.path === '/health') return next();
11 const key = req.headers['x-api-key'];
12 if (!API_KEY || key !== API_KEY) {
13 return res.status(401).json({ error: 'Unauthorized' });
14 }
15 next();
16});
17
18app.get('/health', (req, res) => {
19 res.json({ status: 'ok', service: 'bubble-companion-api' });
20});
21
22app.post('/process', (req, res) => {
23 const { input, user_id } = req.body;
24 if (!input) {
25 return res.status(400).json({ error: 'input is required' });
26 }
27 res.json({
28 result: input.trim().toUpperCase(),
29 length: input.length,
30 user_id,
31 processed_at: new Date().toISOString()
32 });
33});
34
35app.listen(process.env.PORT || 3000, '0.0.0.0', () => {
36 console.log('Server running on port', process.env.PORT || 3000);
37});

Pro tip: Use VS Code's built-in debugger (Run → Start Debugging or F5) to step through your companion API code with breakpoints. This makes debugging complex request-handling logic much faster than adding console.log statements everywhere.

Expected result: The companion API runs locally in VS Code and responds correctly to test requests. After deploying to a cloud platform, the HTTPS URL is added to Bubble's API Connector and a successful Initialize call confirms connectivity.

Common use cases

Develop a custom Bubble plugin locally in VS Code with full IntelliSense

Use the Bubble Plugin CLI to scaffold a new Bubble plugin project in VS Code. Write plugin JavaScript (element rendering, action logic, data call processing) with full VS Code tooling — syntax highlighting, ESLint, Git commits. Deploy to the Bubble Plugin Editor with 'bubble-plugin deploy' and install the plugin in your Bubble app for testing.

Bubble Prompt

Initialize a new Bubble plugin project in VS Code, create a custom element that accepts a color palette parameter and renders a styled color swatch grid using the Bubble element rendering API. Write the element's update function in VS Code with ESLint checking, then deploy the plugin to Bubble's Plugin Editor and test it in the Bubble preview.

Copy this prompt to try it in Bubble

Write and lint complex JavaScript in VS Code before using it in Bubble's Run JavaScript action

Write a complex string manipulation, array sorting, or data transformation function in VS Code with ESLint and TypeScript type hints. Once it is working and linted, paste the final function into a Bubble 'Run JavaScript' action (Toolbox plugin). This prevents silent JavaScript errors inside Bubble's workflow editor, which has no error checking.

Bubble Prompt

Write a JavaScript function in VS Code that takes a Bubble-passed array of user objects, sorts them by a 'score' property, deduplicates by email address, and formats dates as 'MMM D, YYYY'. Lint with ESLint and test in Node.js, then paste the working function body into a Bubble Run JavaScript workflow action.

Copy this prompt to try it in Bubble

Build a Node.js REST API in VS Code that Bubble calls via API Connector

Develop an Express.js or Fastify API in VS Code to handle business logic that Bubble's workflow engine cannot perform natively — PDF generation, complex calculations, external service integrations requiring HMAC signing. Test the API locally in VS Code's integrated terminal, then deploy to a cloud platform for Bubble to call at runtime.

Bubble Prompt

Create a Node.js Express server in VS Code with a POST /generate-invoice endpoint that accepts line items and customer data from Bubble, generates a PDF invoice using pdfkit, uploads it to S3, and returns the signed S3 URL. Test locally with Postman, then deploy to Railway and add the URL to Bubble's API Connector.

Copy this prompt to try it in Bubble

Troubleshooting

'bubble-plugin' command not found after running 'npm install -g bubble-plugin-cli'

Cause: The global npm bin directory is not in your system PATH, or the installation completed with permission errors that prevented the CLI from being placed in the expected location.

Solution: Run 'npm config get prefix' in your terminal to see where global npm packages are installed. Add that directory's /bin folder to your PATH. On macOS/Linux, add 'export PATH="$PATH:$(npm config get prefix)/bin"' to your ~/.zshrc or ~/.bashrc. Alternatively, use 'npx bubble-plugin-cli' instead of 'bubble-plugin' to run without a global install.

typescript
1# macOS/Linux: add to ~/.zshrc or ~/.bashrc
2export PATH="$PATH:$(npm config get prefix)/bin"
3
4# Then reload your shell config:
5source ~/.zshrc

'bubble-plugin deploy' fails with authentication error or 'Invalid credentials'

Cause: Your Bubble email or password has changed since you last ran 'bubble-plugin init', or the CLI's stored authentication token has expired.

Solution: Delete the CLI's stored credentials (look for a .bubble-plugin directory in your home folder or the plugin project directory) and run 'bubble-plugin init' again to re-authenticate with your current Bubble credentials. If you use two-factor authentication on your Bubble account, check whether the CLI supports 2FA (check the npm package documentation).

JavaScript written in VS Code works in Node.js testing but throws errors in Bubble's plugin sandbox

Cause: Bubble's plugin sandbox runs in a restricted browser context. Some modern Web APIs available in Node.js (like fetch(), crypto, Buffer, process) are either unavailable or behave differently in Bubble's plugin environment. ES6+ syntax (arrow functions, template literals, const/let) works in most modern browsers but check Bubble's supported browser targets.

Solution: Test all plugin code in Bubble's Plugin Editor preview environment, not just in VS Code's Node.js runtime. Use Bubble's dedicated API mechanism for HTTP calls within plugins rather than native fetch(). Avoid Node.js-specific globals (process.env, Buffer, require) in plugin code. Check the Bubble Plugin documentation for the list of restricted APIs in the plugin sandbox.

typescript
1// Instead of fetch() in plugin code, use Bubble's recommended approach
2// or the API Connector which handles calls outside the sandbox
3// Avoid:
4fetch('https://api.example.com').then(r => r.json());
5
6// Better: handle API calls in Bubble's API Connector
7// and pass results to the plugin via properties

Changes deployed with 'bubble-plugin deploy' are not visible in the Bubble editor or preview

Cause: Bubble's editor caches plugin code. Deploying with the CLI uploads the code to Bubble's servers but the browser-based editor does not auto-refresh to pick up the changes.

Solution: After every 'bubble-plugin deploy', do a hard refresh in the Bubble editor browser tab (Cmd+Shift+R on macOS, Ctrl+Shift+R on Windows/Linux). If the changes still do not appear, close the Bubble editor tab entirely, reopen it, and navigate back to your app. For preview testing, always close and reopen the Preview tab after deploying.

The Bubble Plugin CLI package has not been updated in a long time and may be incompatible with the current Bubble platform

Cause: The bubble-plugin-cli is a community-maintained package and may lag behind Bubble's internal API or tooling changes. Bubble has made platform updates that occasionally break CLI compatibility.

Solution: Before building a production plugin workflow on the CLI, check the npm page (npmjs.com/package/bubble-plugin-cli) for the last publish date and any open issues. If the package appears abandoned, consider developing plugins entirely in Bubble's Plugin Editor browser interface — VS Code can still be used for writing logic in a separate file before pasting into the Plugin Editor's code fields.

Best practices

  • Always develop plugin JavaScript in VS Code with ESLint enabled before deploying to Bubble — Bubble's Plugin Editor code field has no error highlighting, so catching syntax errors locally saves significant debugging time.
  • Use Git in VS Code to version-control your plugin source code and companion microservice code — this is entirely separate from Bubble's own version history (Settings → Versions) and gives you proper diff views, rollback capability, and team collaboration.
  • After every 'bubble-plugin deploy', test the plugin in Bubble's Plugin Editor's test app environment before installing in your production Bubble app — plugin updates that break an existing element can affect all users of your Bubble app.
  • Write JavaScript for Bubble's 'Run JavaScript' Workflow action in VS Code first and test it locally in Node.js (replacing Bubble-specific functions like bubble_fn_output with console.log) before pasting into Bubble's code field.
  • Keep Bubble plugin code focused on UI rendering and event handling — move complex business logic (API calls, data transformation, calculations) into Bubble Workflows or a companion microservice rather than embedding it all in plugin JavaScript.
  • Do not use TypeScript directly in Bubble plugin code — Bubble's Plugin Editor does not support TypeScript transpilation. Write TypeScript in VS Code for development and transpile to JavaScript (with tsc) before deploying with the Plugin CLI.
  • Understand that VS Code's Git integration tracks your plugin source code while Bubble tracks the no-code app state — these are independent systems. Committing your VS Code plugin code does not create a Bubble version, and creating a Bubble version does not commit your VS Code code.
  • For companion microservices built in VS Code that Bubble calls via API Connector, always add API key authentication and mark the key as Private in the Bubble API Connector shared header — set Privacy Rules on any Bubble data types that store the microservice's responses.

Alternatives

Frequently asked questions

Is there a VS Code extension specifically for Bubble development?

There is no official VS Code extension published by Bubble.io. Some community members have created snippets or syntax highlight files for Bubble's expression language, but they are not officially supported. For plugin development, the Bubble Plugin CLI is the official local development tool — it integrates with VS Code as a generic code editor rather than through a dedicated extension.

Can VS Code sync with Bubble's version control system?

No. Bubble's version history (Settings → Versions) is a proprietary snapshot system that stores app state in Bubble's database. VS Code tracks code files with Git. There is no sync between the two — they are entirely independent systems. Your VS Code Git history tracks plugin code or microservice code; Bubble's version history tracks the no-code app configuration.

How do I debug JavaScript running inside a Bubble plugin?

Use your browser's built-in developer tools. When your Bubble app is open in Preview mode, press F12 to open DevTools. The Console tab shows console.log() output from your plugin JavaScript. The Sources tab lets you set breakpoints in the plugin JavaScript (find it under the page's scripts). The Bubble Plugin Editor also has a 'Test' tab that provides a sandboxed environment for basic plugin testing.

Can I use TypeScript in Bubble plugin development with VS Code?

Not natively. Bubble's Plugin Editor accepts plain JavaScript only — TypeScript must be transpiled to JavaScript before deploying. You can write plugin logic in TypeScript in VS Code (for type checking and IntelliSense), compile it with 'tsc' in VS Code's terminal, and then deploy the compiled JavaScript output with the Plugin CLI. Set up a tsconfig.json that targets ES5 or ES6 to ensure browser compatibility.

What is the Bubble Plugin CLI and where do I find the documentation?

The Bubble Plugin CLI (bubble-plugin-cli) is a Node.js package that scaffolds, develops, and deploys Bubble plugins from your local file system. Find it on npm at npmjs.com/package/bubble-plugin-cli. Bubble's official plugin development documentation is at manual.bubble.io in the Building Plugins section — it covers the Plugin Editor's interface, the JavaScript API for elements and actions, and the property types available to plugin developers.

Does the Bubble Plugin CLI support hot reload or watch mode for development?

No. The current bubble-plugin-cli does not support watch mode or hot reload. Each code change requires a manual 'bubble-plugin deploy' command followed by a manual refresh of Bubble's editor or preview. This is a known limitation of the community-maintained CLI. To speed up development, use VS Code's integrated terminal to quickly run deploy without leaving the editor, and keep the Bubble preview open in a separate browser tab.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Bubble integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.