---
title: open-slide.config.ts
description: Workspace-level configuration.
---

The config lives at the workspace root and is fully optional — every field
has a sensible default.

```ts title="open-slide.config.ts"
import type { OpenSlideConfig } from '@open-slide/core';

const config: OpenSlideConfig = {};

export default config;
```

## Schema

```ts
type OpenSlideBuildConfig = {
  /** Show the deck index (the slide browser) in the static build. */
  showSlideBrowser?: boolean;
  /** Show on-canvas UI (toolbar, hints) in the static build. */
  showSlideUi?: boolean;
  /** Show the "download as HTML" button in the static build. */
  allowHtmlDownload?: boolean;
};

type OpenSlideConfig = {
  /** Base public path for subpath hosting (leading + trailing slash). Default: '/'. */
  base?: string;
  /** Folder that contains your decks. Default: 'slides'. */
  slidesDir?: string;
  /** Folder that holds theme markdown + demo files. Default: 'themes'. */
  themesDir?: string;
  /** Folder for global assets shared across decks. Default: 'assets'. */
  assetsDir?: string;
  /** Dev server port. Default: first free port from 5173 upward. */
  port?: number;
  /** UI language for the runtime (home, inspector, presenter, etc.). */
  locale?: Locale;
  /** Build-time UI toggles. */
  build?: OpenSlideBuildConfig;
};
```

## Common recipes

### Public share

```ts
const config: OpenSlideConfig = {
  build: {
    showSlideBrowser: false,
    showSlideUi: false,
    allowHtmlDownload: false,
  },
};
```

### Host under a subpath

Set `base` to deploy the build under a sub-directory instead of the domain
root — GitHub Pages project sites, a reverse-proxy folder, an intranet path.
Use a leading and trailing slash:

```ts
const config: OpenSlideConfig = {
  base: '/my-slides/',
};
```

The value is passed straight to Vite's `base` and to React Router's
`basename`, so client-side navigation matches the deployed path.

### Multiple deck folders

`slidesDir` is a single path today. If you want multiple roots, group them
under one folder and use subfolder ids.

### Switch the UI language

```ts
import { zhTW } from '@open-slide/core/locale';

const config: OpenSlideConfig = {
  locale: zhTW,
};
```

See [Locale](/docs/reference/locale) for the full list of presets and how to
ship your own dictionary.
