---
title: Create and publish content
status: current
phase: 2
order: 4
---

# Create and publish content

An **entry** is a specific piece of content: the event "Open House", the post "Welcome, families". Each entry belongs to a [content type](content-model.md) and has one value per field.

## The life of an entry

```
draft ──publish──▶ published ──edit──▶ unpublished changes ──publish──▶ published

any state ──archive──▶ archived ──unarchive──▶ draft
```

| Status | What your site sees | What you see in the dashboard |
| --- | --- | --- |
| **Draft** | Nothing | The entry, never published |
| **Published** | The published version | Same as the site |
| **Unpublished changes** | The last published version | Your newest draft, on top |
| **Archived** | Nothing | The entry, grayed out |

- **Everything an agent creates starts as a draft.** Publishing is a separate step, with its own permission.
- **Saving never publishes.** Your site keeps showing the published version until you publish again.

## Status

Lists and the editor say where each entry stands in plain words:

| In the dashboard | Status | Means |
| --- | --- | --- |
| **Live** | Published | Your site shows it as you see it |
| **Not published** | Draft | Your site doesn't show it yet |
| **Unpublished changes** | Unpublished changes | Your site shows an older version; publish to update it |
| **Visible on staging** | Draft or unpublished changes | Your [staging site](staging.md) already shows it, the live one doesn't. Shown instead of the two above when the site has a staging URL or a preview deploy hook |

The API keeps the `sys.status` values: `draft`, `published`, `changed`, `archived`.

## Create an entry

**Content** opens on an overview: your **Pages**, **Collections** and **Settings**, each type with how many entries it has (see [How content is organized](content-model.md#how-content-is-organized)). Open a type and use **New**. The form builds itself from the type's fields:

| Field type | How you fill it in |
| --- | --- |
| Short text, slug | One line. The slug is suggested from the title |
| Long text, JSON | A text area. The JSON must be valid |
| Rich text | A formatting editor: bold, italic, headings, lists and links. Images, tables and code already in the text are kept, shown as locked boxes; edit those over the API or in markdown |
| Link, email | One line, checked when you save |
| Color | A color picker, or the hex code |
| One of a list, several of a list | A menu, or a checkbox per option |
| Number, yes/no, date | The matching control for each |
| Tags | Separated by commas |
| File, files | **Choose a file** opens your files, filtered by what the field accepts (images, videos or any), with search and upload in the same window |
| Reference(s) | You pick from the entries of the allowed types. Several references show as chips you drag to reorder |

- Each field's **help** shows under its label. The API IDs are under **Technical details** at the bottom of the form.
- Long types show their fields in **groups** that can collapse (see [Groups](content-model.md#groups)).
- If the type is a **singleton**, it has a single entry: Pluma won't let you create a second one. Settings open straight on their form.

## Lists of entries

Each row shows the title, a second line (a parent, a short text, or the page's path) and a thumbnail when the type has an image. With more than 20 entries there's a search box. Admins pick how the list is sorted from the **Sort** menu; that becomes the type's order.

## Order

A type's entries are listed in the type's order:

- **By hand:** drag the rows. The first drag switches the type to manual order; the API returns the same order with `order=sys.position`, or by default for that type. By API: [Order a type's entries](../api/management.md#order-a-types-entries).
- **By a field:** a number field named `order`, `position`, `sort`, `sortOrder`, `weight` or `rank` sorts the type on its own, until someone picks another order.
- **By date:** newest change first, unless the type says otherwise.

Admins change it in the list's **Sort** menu or on the Model page, under **How it shows in Content**. The order of the types in the Content menu itself is set with **Arrange menu**.

## Pages and their sections

A page type (one with a `sections` field, see [Composable pages](composable-pages.md)) opens with its sections inside it, as cards:

- Each card shows its section's type and title, and opens or closes in place to edit that section's fields.
- Drag the cards to change the order. **✕** takes a section off this page only; the section itself stays.
- **Add section** creates a new one of the types the page accepts, or reuses one that already exists.
- Saving the page saves its sections too, all or nothing. Publishing the page from the dashboard also publishes its sections that aren't live yet, so the page never points to drafts. (By API, each entry is published on its own.)

Sections are also listed under **Page sections**, each with **Used in** and the pages that show it. A section used by more than one page says so when you edit it: a change shows on all of them.

## Publish

Publishing validates the whole entry:

- **Required** fields have a value.
- Each value is the right type (a number is a number, a date is a date).
- **Slugs** are unique within the type.
- **References** point to entries that exist and are of an allowed type.

If something fails, it isn't published and you see which field to fix. Saving a draft only checks types, not required fields: you can save halfway.

**Empty text is an empty field.** Sending `""` (or only spaces) leaves the field with no value, and the API doesn't return it. If your site needs `""`, use that as the default when reading.

## Versions

Every time you save, a **new version** is created: number, who (person or agent) and when. Nothing is overwritten.

- You can **restore** any version. Restoring creates a new version with that data; it doesn't delete the ones in between.
- The published version is marked. If you restore an old one, it stays as unpublished changes until you publish.

## Possible errors

| Message | What to do |
| --- | --- |
| "Title is required to publish" | Fill it in, or save as a draft. |
| "That slug is already used by another entry of this type" | Change it. Add the date or a number. |
| "Not a number" / "Not a date" | Check the field format. |
| "This type is a singleton and already has its entry" | Edit the one that already exists. |
| "must be a full link that starts with https:// or http://" | A link field needs the whole address, like `https://example.com/menu`. For a path on your own site, use a short text. |
| "must be one of: …" | Pick one of the field's options, or ask an admin to add it. |
| "The reference points to an entry of a type this field doesn't accept" | Pick an entry of the allowed types. |
