d2/d2js/js/README.md

102 lines
2.6 KiB
Markdown
Raw Normal View History

2025-01-12 14:41:58 +00:00
# D2.js
[![npm version](https://badge.fury.io/js/%40terrastruct%2Fd2.svg)](https://www.npmjs.com/package/@terrastruct/d2)
[![License: MPL-2.0](https://img.shields.io/badge/License-MPL_2.0-brightgreen.svg)](https://mozilla.org/MPL/2.0/)
D2.js is a JavaScript wrapper around D2, the modern diagram scripting language. It enables running D2 directly in browsers and Node environments through WebAssembly.
## Features
- 🌐 **Universal** - Works in both browser and Node environments
- 🚀 **Modern** - Built with ESM modules, with CJS fallback
- 🔄 **Isomorphic** - Same API everywhere
-**Fast** - Powered by WebAssembly for near-native performance
- 📦 **Lightweight** - Minimal wrapper around the core D2 engine
## Installation
```bash
# npm
npm install @terrastruct/d2
# yarn
yarn add @terrastruct/d2
# pnpm
pnpm add @terrastruct/d2
# bun
bun add @terrastruct/d2
```
## Usage
2025-01-14 06:15:26 +00:00
D2.js uses webworkers to call a WASM file.
2025-01-12 14:41:58 +00:00
```javascript
2025-01-14 06:15:26 +00:00
// Same for Node or browser
2025-01-12 14:41:58 +00:00
import { D2 } from '@terrastruct/d2';
2025-01-14 06:15:26 +00:00
// Or using a CDN
// import { D2 } from 'https://esm.sh/@terrastruct/d2';
2025-01-12 14:41:58 +00:00
const d2 = new D2();
const result = await d2.compile('x -> y');
const svg = await d2.render(result.diagram);
```
## API Reference
### `new D2()`
Creates a new D2 instance.
### `compile(input: string, options?: CompileOptions): Promise<CompileResult>`
Compiles D2 markup into an intermediate representation.
Options:
- `layout`: Layout engine to use ('dagre' | 'elk') [default: 'dagre']
- `sketch`: Enable sketch mode [default: false]
2025-02-13 12:20:38 +00:00
- `themeID`: Theme ID to use [default: 0]
- `darkThemeID`: Theme ID to use when client is in dark mode
2025-02-11 04:10:27 +00:00
- `center`: Center the SVG in the containing viewbox [default: false]
- `pad`: Pixels padded around the rendered diagram [default: 100]
- `scale`: Scale the output. E.g., 0.5 to halve the default size. The default will render SVG's that will fit to screen. Setting to 1 turns off SVG fitting to screen.
2025-01-12 14:41:58 +00:00
### `render(diagram: Diagram, options?: RenderOptions): Promise<string>`
Renders a compiled diagram to SVG.
## Development
D2.js uses Bun, so install this first.
### Building from source
```bash
git clone https://github.com/terrastruct/d2.git
cd d2/d2js/js
2025-01-14 03:21:18 +00:00
./make.sh all
2025-01-12 14:41:58 +00:00
```
If you change the main D2 source code, you should regenerate the WASM file:
```bash
./make.sh build
```
2025-01-15 18:37:04 +00:00
### Running the dev server
2025-01-12 14:41:58 +00:00
2025-01-15 18:37:04 +00:00
You can browse the examples by running the dev server:
2025-01-14 03:21:18 +00:00
2025-01-12 14:41:58 +00:00
```bash
2025-01-15 18:37:04 +00:00
./make.sh dev
2025-01-12 14:41:58 +00:00
```
Visit `http://localhost:3000` to see the example page.
## Contributing
Contributions are welcome!
## License
This project is licensed under the Mozilla Public License Version 2.0.