---
title: 'Config export'
description: 'The directory contract baseline ships as a named config export: what it sets, why it matters, and how to override safely.'
slug: 'config-export'
type: 'article'
date: 2026-04-28T00:00:00.000Z
lang: 'en'
url: 'https://www.eleventy-baseline.dev/docs/core-reference/config-export/'
---

Baseline ships a directory contract as a named export. Eleventy's modules expect specific input, output, includes, and data folders; Baseline's modules expect two more (`assets`, `public`).

The export bundles all of that into a single object you re-export from your config file, so you never have to keep both halves in sync.

For the runtime side of the plugin, see [[plugin-entrypoint | Plugin entrypoint]].

---

## Why a config export

Eleventy reads its directory layout from the [config callback's return value](https://www.11ty.dev/docs/config-shapes/#callback-function). Baseline reads its own layout (asset pipeline source, public passthrough source) from the same object. Re-exporting `baselineConfig` is how you give both halves the same shape with one line.

You can also write the object yourself. The export is a convenience, not a requirement; the modules just need certain keys to exist. Starting from `baselineConfig` is the safe path.

---

## The exported object

```js
export const config = {
	dir: {
		input: 'src',
		output: 'dist',
		data: '_data',
		includes: '_includes',
		assets: 'assets',
		public: 'static'
	},
	htmlTemplateEngine: 'njk',
	markdownTemplateEngine: 'njk',
	templateFormats: ['html', 'njk', 'md']
};
```

`input`, `output`, `data`, `includes` are Eleventy's own keys. `assets` and `public` are Baseline's; together they make the asset pipeline and the passthrough mount possible.

## The `assets` / `public` asymmetry

Two virtual directories, one with a name that looks unusual on disk:

- **`assets`** - the asset pipeline's source directory. Both the virtual key and the on-disk folder are called `assets`. CSS, JS, and the like live here and pass through PostCSS/esbuild.
- **`public`** - the passthrough source directory. The virtual key is `public`, but the **on-disk folder is `static/`**. Files placed there are copied verbatim to the site root `/` at build time.

The on-disk name `static/` matches the convention used across most static-site generators (Astro, Next, Hugo, Eleventy starters). The virtual key `public` matches what 11ty's own ecosystem calls the same idea.

Baseline keeps both: the folder you create on disk reads naturally to anyone arriving from another SSG; the key you reference in `eleventyConfig.directories` reads naturally inside Eleventy.

If you override `dir.public`, the on-disk folder changes; the virtual key stays `public`. If you override `dir.assets`, both change in lockstep.

See [[internals | Internals]] for how the virtual keys are synthesised onto `eleventyConfig.directories`.

---

## Use as-is

```js
import baseline, { config as baselineConfig } from '@apleasantview/eleventy-plugin-baseline';
import settings from './src/_data/settings.js';

/** @param {import("@11ty/eleventy").UserConfig} eleventyConfig */
export default async function (eleventyConfig) {
	await eleventyConfig.addPlugin(baseline(settings));
}

export const config = baselineConfig;
```

---

## Override safely

Spread `baselineConfig` first, then override only what you need:

```js
import baseline, { config as baselineConfig } from '@apleasantview/eleventy-plugin-baseline';
import settings from './src/_data/settings.js';

/** @param {import("@11ty/eleventy").UserConfig} eleventyConfig */
export default async function (eleventyConfig) {
	await eleventyConfig.addPlugin(baseline(settings));
}

export const config = {
	...baselineConfig,
	dir: {
		...baselineConfig.dir,
		output: 'public_html',
		public: 'public'
	},
	templateFormats: [...baselineConfig.templateFormats, 'liquid']
};
```

A few things worth keeping straight when you override:

- Renaming `dir.output` does not change the passthrough mount; the public directory still copies to the site root `/`, just under your new output folder.
- Renaming `dir.assets` also renames the URL prefix the asset pipeline writes to. Update your `<link>` and `<script>` references accordingly.
- Keep `htmlTemplateEngine` and `markdownTemplateEngine` set to `'njk'` unless you have a reason to change them. Several of Baseline's virtual templates are Nunjucks; swapping engines globally turns them off.
- `templateFormats` must include `'njk'` for the same reason. Baseline's settings schema enforces this.

---

## Caveats

The defaults are the path Baseline tests against. Non-default template engines (Liquid, Handlebars) and uncommon format combinations have not been thoroughly verified. Override what you need; just expect the well-trodden path to be the trodden one.
