---
title: "Reference"
description: "Helpers, configuration and errors."
url: "https://www.andromedacms.dev/docs/reference"
updated_at: 2026-09-24
---

# Reference

## View helpers

| Helper | Returns |
|--------|---------|
| `andromeda_content(entry)` | the rendered body, ready to output |
| `andromeda_toc(entry, min: 2, max: 3)` | a nested table of contents from the headings |
| `andromeda_meta_tags(entry, url: nil)` | `<title>`, description and canonical tags |
| `andromeda_image_url(image)` | the URL of an `:image` attribute |

Outside a view, `entry.html` and `entry.headings` give the same data.

## Configuration

```ruby
Andromeda.configure do |config|
  config.content_path = "app/content"
  config.entry_namespace = "Content"
  config.components_path = "app/views/content_components"
  config.build_path = ".andromeda"
  config.highlight_theme = "github.dark"
end
```

Anything that would change how content is interpreted — the parser, GFM, smart
punctuation — is deliberately not configurable: those follow Astro's defaults
so that copied content behaves the same.

## Errors

| Error | When |
|-------|------|
| `Andromeda::SyntaxError` | Markdown or MDX could not be parsed; carries file, line and column |
| `Andromeda::ValidationError` | frontmatter does not match the schema; lists every problem at once |
| `Andromeda::EntryNotFound` | `find` missed; suggests near-miss ids |
| `Andromeda::BuildMissing` | production, and this entry was never built |
| `Andromeda::BuildError` | a build failed; lists every failing file |

## Astro compatibility

Andromeda targets Astro 7 and later, and parses with
[Sätteri](https://github.com/bruits/satteri), the engine Astro 7 uses by
default. The goal is that copied content loads and displays, not that the HTML
matches byte for byte: syntax highlighting uses Rouge rather than Shiki, and
images are served by the asset pipeline.

Not supported: Astro pages and routing, islands and `client:*`, remark/rehype
plugins, and arbitrary JavaScript in MDX.
