# Builder.io Visual CMS Devtools

Setup and integrate [Builder.io Visual CMS](https://www.builder.io/) during development using the Devtools plugin. Builder Devtools can be integrated with a project's development through either a [Next.js config](#nextjs), [Remix config](#remix), [Vite plugin](#vite), or [Webpack plugin](#webpack).

## Installing Builder Devtools

Builder's Devtools can be [installed and initialized](https://www.npmjs.com/package/@builder.io/create) using:

**npm**

```
npm init builder.io@latest
```

**pnpm**

```
pnpm create builder.io@latest
```

This command will update the config file (such as next.config.js, or vite.config.js) and install the `@builder.io/dev-tools` package. Once installed, you can start your app's dev server:

```
npm run dev
```

## Local Development

To develop and test Builder Devtools locally:

1. In the devtools directory, build and link the package:

```bash
cd dist/dev-tools
npm link
```

2. In your application directory, link to the local devtools:

```bash
npm link @builder.io/dev-tools
```

3. You can now run the Figma generate command:

```bash
npx builder.io figma generate
```

## Manual Installation

Alternatively, you can manually install Builder's Devtools, and update the config files following the steps below.

```
npm install -D @builder.io/dev-tools
```

Next step is to add the Devtools plugin to your build tool's config file. For example, if you're using Next.js, see the docs below on how to import and add Devtools to a Next.js app.

## Next.js

A config wrapper function for the [Next.js config](https://nextjs.org/docs/app/api-reference/next-config-js) is provided in order to run Devtools during development. Wrap your existing next config using the `withBuilderDevTools()` function that's created when it is required at the top of the config file.

```js
// next config file
const withBuilderDevTools = require("@builder.io/dev-tools/next")({
  // Builder Devtools Options
});

module.exports = withBuilderDevTools({
  // next config
});
```

Or configuration as a function:

```js
module.exports = (phase, defaultConfig) => {
  return withBuilderDevTools(defaultConfig);
};
```

## Remix

A config wrapper function for the [Remix config](https://remix.run/docs/en/main/file-conventions/remix-config) is provided in order to run Devtools during development. Wrap your existing remix config using the `withBuilderDevTools()` function that's created when it is required at the top of the config file.

```js
// remix config file
const withBuilderDevTools = require("@builder.io/dev-tools/remix")({
  // Builder Devtools Options
});

module.exports = withBuilderDevTools({
  // remix config
});
```

## Vite

The [Vite plugin](https://vitejs.dev/guide/using-plugins.html) for Devtools is meant for frameworks using Vite for its development. Currently, Devtools supports [Qwik](https://qwik.builder.io/) integrated with Vite. Import `builderDevTools` from `@builder.io/dev-tools/vite` and place it as the the first plugin to ensure it runs before others.

```js
// vite config file
import { defineConfig } from "vite";
import { builderDevTools } from "@builder.io/dev-tools/vite";

export default defineConfig(() => {
  return {
    plugins: [builderDevTools()],
  };
});
```

## Webpack

The Devtools webpack plugin is for React projects. If your project is using Next.js, please see the [Next.js](#nextjs) docs above on how to add the Devtools plugin to the next config. Below is a general [webpack config](https://webpack.js.org/configuration/plugins/) for a React project.

```js
// webpack config file
const { BuilderDevToolsPlugin } = require("@builder.io/dev-tools/webpack");

module.exports = {
  plugins: [new BuilderDevToolsPlugin()],
};
```

## CLI

Devtools can also be started with a CLI command, which could be useful if there is a custom setup that doesn't fit into one of the above solutions. Below is an example of running CLI from an npm script:

```json
{
  "scripts": {
    "devtools": "builder-dev-tools"
  }
}
```
