> ## Documentation Index
> Fetch the complete documentation index at: https://docs.webstorio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Content & CMS

> Create content types, write entries, and display blogs or articles on your Webstorio site.

The **Content & CMS** feature lets you manage structured content — blog posts, news, case studies, documentation — separately from page layout. You write once in the dashboard; your pages display it dynamically.

## When to use the CMS

| Use CMS when…                        | Use plain pages when…                     |
| ------------------------------------ | ----------------------------------------- |
| You publish articles regularly       | Content is mostly static (About, Contact) |
| You need categories or filters       | One-off landing pages are enough          |
| Multiple pages show the same entries | No repeating content structure            |

## Step 1 — Enable Content & CMS

1. Open your **project dashboard**.
2. Go to **Features** and enable **Content & CMS** (enabled by default on most projects).
3. Open **Content** in the sidebar.

## Step 2 — Create a content type

A **content type** is a template for entries — like "Blog Post" or "Team Member."

1. Click **Add content type**.

2. Name it (e.g. `Blog Post`).

3. Add **fields** — common ones:
   * `title` (text)
   * `slug` (text, for URLs)
   * `body` (rich text)
   * `excerpt` (text)
   * `coverImage` (image URL)
   * `publishedAt` (date)

4. Save the content type.

Each content type gets a **key** (e.g. `blog_post`) used by pages and the SDK to fetch data.

## Step 3 — Write entries

1. Open your content type → **Entries** → **New entry**.
2. Fill in fields. Use the **AI assistant** in the entry editor to draft or refine copy.
3. Set status to **published** when ready.

Entries can be organized with **categories** for filtering on listing pages.

## Step 4 — Show content on your site

### Option A — Ask the AI (easiest)

In the page editor, prompt the AI:

* *"Create a blog listing page showing published Blog Post entries with title, excerpt, and cover image"*
* *"Add a blog detail page at slug `blog/{content_entry_id}` that shows the full post"*

The AI wires up the correct SDK calls automatically.

### Option B — Dynamic page slugs

For detail pages, use a slug with a **wildcard**:

```
blog/{content_entry_id}
```

Webstorio matches the URL segment to a CMS entry. The page code reads the current ID with `window.webstorio.getPathParams()`.

## Content workflow tips

<Tip>
  **Draft first:** Keep entries in draft until you're ready. Listing pages
  typically filter by `status: "published"`.
</Tip>

<Tip>
  **One content type per purpose:** Separate "Blog Post" from "Product
  announcement" if they need different fields or URLs.
</Tip>

<Warning>
  **Free plan limit:** The Free plan allows a small number of content entries.
  Upgrade if you need a full blog archive.
</Warning>

## For developers and agents

Editing page code yourself? Published sites read CMS data with `window.webstorio` methods like `getContentEntries` and `getContentEntryById`.

→ Methods, parameters, and examples: [CMS SDK reference](/api-reference/sdk/cms)

Prefer an AI agent to manage types and entries? [Connect MCP](/developer/connect-mcp) — tool list in the [MCP reference](/api-reference/mcp/overview).
