# Quick Start: Creating a .lottie File
Build your first .lottie file from scratch using DotLottieBuilder, then save it to disk.

# Quick Start: Creating a .lottie File

This walks through building a `.lottie` file from scratch with [`DotLottieBuilder`](/docs/tools/dotlottie-io/api/dotlottie-builder-class), and saving it to disk.

## 1. Create a builder

```javascript
const { DotLottieBuilder } = require("@lottiefiles/dotlottie-io");

const builder = new DotLottieBuilder();
builder.generator("my-tool");
```

## 2. Add content

Animation JSON and theme JSON are passed as a `Buffer` (or a JSON string):

```javascript
builder.addAnimation("intro", JSON.stringify(introLottieJson));
builder.addAnimation("hero", JSON.stringify(heroLottieJson));
builder.addTheme("dark", "Dark Theme", JSON.stringify({ rules: [] }));
```

## 3. Build

`build()` is synchronous — no `await` needed — and returns a ready-to-use [`DotLottie`](/docs/tools/dotlottie-io/api/dotlottie-class) instance:

```javascript
const dl = builder.build();

console.log(dl.animationIds()); // ['intro', 'hero']
console.log(dl.themeIds()); // ['dark']
```

## 4. Save to disk

```javascript
const { writeFileSync } = require("node:fs");

writeFileSync("output.lottie", dl.toBytes());
```

## Adding assets afterward

Images, fonts, and audio can be attached directly on the built `DotLottie` instance:

```javascript
const { readFileSync } = require("node:fs");

const storedName = dl.addImage("logo.png", readFileSync("logo.png"));
console.log(storedName); // 'logo.png' (or 'logo_1.png' if that name was already taken)

dl.addAudio("click.mp3", readFileSync("click.mp3"));
writeFileSync("output.lottie", dl.toBytes());
```

See [Managing Assets](/docs/tools/dotlottie-io/core-concepts/assets) for the full rules on filename deduplication and supported audio formats.

Next up: [Quick Start: Loading a .lottie file](/docs/tools/dotlottie-io/getting-started/loading)
