---
title: "Theme"
description: "Select a Deckup theme, compare built-in themes, and resolve installed or registry packages."
---

> Documentation Index
> Fetch the complete documentation index at: https://deckup.yuku.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Theme

Themes provide Astro layout components for Deckup pages.
Select a fallback in `deckup.config.*`:

```ts
import { defineConfig } from "deckup";

export default defineConfig({
  theme: "google-basic",
});
```

Deck-level static metadata overrides the configured fallback.
If neither is present, Deckup uses `default`.

## Built-in themes

- **Default** — <a href="/slides/default" aria-label="Open the Default theme deck" style="display: block; text-decoration: none;">
<img src="/images/themes/default.png" alt="Default theme cover with a serif heading and circular ornament" width="1600" height="900" decoding="async" style="display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border: 1px solid var(--nb-border); border-radius: 0.5rem;" />
<span style="display: inline-block; margin-top: 0.75rem;">Open interactive deck →</span>
</a>
<p>Serif headings, cool blue accents, and geometric details.</p>

- **Minimal** — <a
href="/slides/minimal"
aria-label="Open the Minimal theme deck"
style="display: block; text-decoration: none;"
>
<img
src="/images/themes/minimal.png"
alt="Minimal theme cover with a monochrome centered heading"
width="1600"
height="900"
loading="lazy"
decoding="async"
style="display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border: 1px solid var(--nb-border); border-radius: 0.5rem;"
/>
<span style="display: inline-block; margin-top: 0.75rem;">Open interactive deck →</span>
</a>
<p>Monochrome styling with a clear, document-like hierarchy.</p>

- **Google Basic** — <a
href="/slides/google-basic"
aria-label="Open the Google Basic theme deck"
style="display: block; text-decoration: none;"
>
<img
src="/images/themes/google-basic.png"
alt="Google Basic theme cover with white type on a blue background"
width="1600"
height="900"
loading="lazy"
decoding="async"
style="display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border: 1px solid var(--nb-border); border-radius: 0.5rem;"
/>
<span style="display: inline-block; margin-top: 0.75rem;">Open interactive deck →</span>
</a>
<p>Bright blue surfaces with a clear structural hierarchy.</p>

- **Apple Basic** — <a href="/slides/apple-basic" aria-label="Open the Apple Basic theme deck" style="display: block; text-decoration: none;">
<img src="/images/themes/apple-basic.png" alt="Apple Basic theme cover with large black type on white" width="1600" height="900" loading="lazy" decoding="async" style="display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border: 1px solid var(--nb-border); border-radius: 0.5rem;" />
<span style="display: inline-block; margin-top: 0.75rem;">Open interactive deck →</span>
</a>
<p>High-contrast composition led by large, confident typography.</p>

Each interactive deck demonstrates the seven layouts shared by the built-in themes.

## Installed package themes

Install a third-party package in the deck project and use its package specifier:

```ts
export default defineConfig({
  theme: "@acme/deckup-theme",
});
```

## Registry themes

Use `npm:` to let Deckup resolve a package before Astro starts:

```ts
export default defineConfig({
  theme: "npm:@acme/deckup-theme@1.2.3",
});
```

Both `npm:package` and exact `npm:package@version` specs are supported.
Deckup caches downloaded packages; set `DECKUP_THEME_CACHE_DIR` to choose another cache directory.
An uncached download requires confirmation, and non-interactive runs stop with guidance instead of downloading automatically.

Deckup does not automatically replace an invalid cache entry. If a cached
theme fails validation (for example, edited or corrupted metadata or package
files), Deckup reports the error instead of deleting and re-downloading it.
To recover, verify no Deckup process is using that cache entry, remove only
the named entry under the cache directory's `packages/` folder, then rerun
Deckup interactively to re-download it. Avoid deleting the whole cache
directory; that removes every other theme you already have cached.

Deckup serializes concurrent downloads of the same theme with a per-package
cache lock. Acquiring that lock waits up to 60 seconds; if the wait times
out, Deckup reports a timeout error naming the theme, the wait duration, and
the lock directory instead of waiting indefinitely. A lock only remains past
that window if a Deckup process abandoned it (for example, a crash or a
killed process). To recover, confirm no Deckup process is using that theme,
then remove the named `.lock` directory under the cache directory's `locks/`
folder before retrying. Do not remove a lock while a Deckup process still
holds it.

To create a reusable package, read [Authoring Themes](/guides/authoring-themes/).

Source: https://deckup.yuku.dev/references/theme/index.mdx
