# Headless Web SDK

- Human documentation: [https://docs.univer.ai/guides/sheets/getting-started/node](https://docs.univer.ai/guides/sheets/getting-started/node)

- Agent Markdown: [https://docs.univer.ai/guides/sheets/getting-started/node.md](https://docs.univer.ai/guides/sheets/getting-started/node.md)

- Requested language: `en-US`

- Content language: `en-US`

- Documentation version: `1.0.2`

- Source: [sheets/getting-started/node.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/getting-started/node.mdx)

---

Univer has a isomorphic feature, which means it can run not only in the browser but also in a Node.js environment. You can develop data processing services based on Headless Univer to generate or modify documents on the server side and interact with Univer Sheets through the Facade API.

Headless Univer is used similarly to the browser version. In preset mode, we provide an out-of-the-box preset package; in plugin mode, you only need to exclude plugins that involve UI.

### Plugin Mode

#### Installation

#### npm

```bash
npm install @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/docs @univerjs/sheets @univerjs/sheets-formula @univerjs/sheets-numfmt
```

#### pnpm

```bash
pnpm add @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/docs @univerjs/sheets @univerjs/sheets-formula @univerjs/sheets-numfmt
```

#### yarn

```bash
yarn add @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/docs @univerjs/sheets @univerjs/sheets-formula @univerjs/sheets-numfmt
```

#### bun

```bash
bun add @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/docs @univerjs/sheets @univerjs/sheets-formula @univerjs/sheets-numfmt
```

#### Usage

```typescript
import { LocaleType, mergeLocales, Univer, UniverInstanceType } from '@univerjs/core'
import { FUniver } from '@univerjs/core/facade'
import { UniverDocsPlugin } from '@univerjs/docs'
import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula'
import { UniverRenderEnginePlugin } from '@univerjs/engine-render'
import { UniverSheetsPlugin } from '@univerjs/sheets'
import { UniverSheetsFormulaPlugin } from '@univerjs/sheets-formula'
import { UniverSheetsNumfmtPlugin } from '@univerjs/sheets-numfmt'
import SheetsEnUS from '@univerjs/sheets/locale/en-US'

import '@univerjs/engine-formula/facade'
import '@univerjs/sheets/facade'
import '@univerjs/sheets-formula/facade'
import '@univerjs/sheets-numfmt/facade'

const univer = new Univer({
  locale: LocaleType.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      SheetsEnUS,
    ),
  },
})

univer.registerPlugin(UniverRenderEnginePlugin)
univer.registerPlugin(UniverFormulaEnginePlugin)
univer.registerPlugin(UniverDocsPlugin)
univer.registerPlugin(UniverSheetsPlugin)
univer.registerPlugin(UniverSheetsFormulaPlugin)
univer.registerPlugin(UniverSheetsNumfmtPlugin)

univer.createUnit(UniverInstanceType.UNIVER_SHEET, {})
```

### Preset Mode

#### Installation

#### npm

```bash
npm install @univerjs/preset-sheets-node-core
```

#### pnpm

```bash
pnpm add @univerjs/preset-sheets-node-core
```

#### yarn

```bash
yarn add @univerjs/preset-sheets-node-core
```

#### bun

```bash
bun add @univerjs/preset-sheets-node-core
```

#### Usage

```typescript
import { UniverSheetsNodeCorePreset } from '@univerjs/preset-sheets-node-core' // [!code ++]
import sheetsNodeCoreEnUS from '@univerjs/preset-sheets-node-core/locales/en-US' // [!code ++]
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'

async function run(): Promise<void> {
  const { univerAPI } = createUniver({
    locale: LocaleType.EN_US,
    locales: {
      [LocaleType.EN_US]: mergeLocales(
        sheetsNodeCoreEnUS, // [!code ++]
      ),
    },
    presets: [
      UniverSheetsNodeCorePreset(), // [!code ++]
    ],
  })

  // You can call any Facade API here for document processing
}

run()
```
