# Admin panel

> How editors, administrators, and developers use the EmDash admin panel.

Source: https://emdashcmseverything.com/official-docs/concepts/admin-panel/

The admin panel is the editing interface included with an EmDash site. It is served by the Astro
application at `/_emdash/admin/` and uses the same database, media storage, content model, and
plugins as the public pages.

The first visit to a new site's admin route opens the setup wizard. After setup, a signed-in user's
permissions determine which content and administration tools are available.

## Work areas

The navigation adapts to the site's collections and installed plugins. These are the main areas an
editor or administrator may see:

| Area | What it is for |
| --- | --- |
| Dashboard | A starting view with site and plugin widgets |
| Collection names, such as **Posts** | List, create, edit, publish, and move entries to the trash |
| Collection groups | Collapsible folders that hold collections sharing a group, plus taxonomies assigned only to collections in that folder |
| Media | Upload, search, inspect, replace, and delete files |
| Taxonomies and Bylines | Organize content and manage credited authors |
| Menus and Widget Areas | Manage navigation and editor-controlled regions rendered by the site |
| Comments | Review and moderate comments when a collection enables them |
| Content Types | Create collections and fields and change their settings |
| Plugins | Install, configure, and open plugin-provided pages |
| Settings | Configure the site, authentication, backups, [site transfer](https://emdashcmseverything.com/official-docs/guides/site-transfer/), email, search, and other services |

This interface manages data and configuration. Astro pages and components still define the public
layout. Adding a menu item or widget in the admin only changes the public site when an Astro
component queries and renders that menu or widget area.

## Content editor

The content editor builds its form from the selected collection. A short-text field becomes a text
input, a `portableText` field becomes the rich-text editor, a media field opens the media picker,
and a reference field lets the editor select another entry. Collection settings add publishing,
preview, revision, comment, and search controls where applicable.

The rich-text editor supports headings, lists, quotations, code, links, images, and registered
custom blocks. If imported content contains a block that the editor cannot display, EmDash preserves
the stored block rather than removing it during the next save.

Saving and publishing are separate states for collections with drafts. **Save** stores the current
work as a draft. **Publish** or **Publish changes** makes that saved version available to public
queries. Scheduling records when a draft or pending change should become public.

When edit locking is enabled for a collection, opening an entry holds a lock for that editor. Other
writers are refused while the lock is active instead of silently overwriting the entry. If an entry
changes after an editor loads it, EmDash also refuses the stale save so the editor can reload the
newer version instead of overwriting it.

> **Note**
>
> Moving an entry to the trash is a reversible content action. Permanently deleting it from the
> trash is not. Deleting a field or collection under **Content Types** is also destructive because
> it removes stored columns or tables. See [Collections and fields](https://emdashcmseverything.com/official-docs/concepts/collections/#changing-fields-later)
> before changing a live model.

## Roles and permissions

EmDash includes five roles: Subscriber, Contributor, Author, Editor, and Admin. Permissions build as
the role level increases, but ownership still matters for content and media actions. For example,
Authors can edit and publish their own entries, while Editors can do so for any entry.

Administrative areas have separate permission checks:

- Editors can manage taxonomies, menus, bylines, widgets, sections, and content from other authors.
- Admins can change the content model, users, plugins, redirects, backups, and settings, can
  export or import the whole site, and can permanently delete trashed content.
- The server checks permissions for each action. Hiding a navigation item is not the security
  boundary.

Read [Authentication and user roles](https://emdashcmseverything.com/official-docs/guides/authentication/#user-roles) for account setup and the
complete role descriptions.

## Media

The media library can show files in a grid or list, search and filter them, display metadata, and
perform multi-item actions. Upload behavior depends on the configured storage adapter. When the
adapter supports signed uploads, the browser sends the file to storage using a short-lived signed
URL and then confirms the completed upload with EmDash.

Deleting a media item can affect entries that refer to it. Use the media usage information and
replacement tools before removing an asset used on public pages. See [Media library](https://emdashcmseverything.com/official-docs/guides/media-library/)
for the upload, replacement, and deletion workflows.

## Plugin interfaces

Plugins can add dashboard widgets, settings sections, editor controls, or complete admin pages. A
plugin page is mounted under that plugin's own admin route; it cannot replace a core admin screen.
The plugin still needs server-side permission checks for any protected action, even when the admin
link is shown only to a particular role.

Read [Installing plugins](https://emdashcmseverything.com/official-docs/plugins/installing/) to add an extension. Site developers building an
interface should use the [native plugin admin APIs](https://emdashcmseverything.com/official-docs/plugins/creating-native-plugins/react-admin/)
rather than modifying the core admin application.

## Configuration requirements

The admin is a React application, so the Astro project must install `@astrojs/react`, `react`, and
`react-dom` and register `react()` in `astro.config.mjs`. The site also needs server output, a
database, and media storage. [Add EmDash to an existing Astro project](https://emdashcmseverything.com/official-docs/existing-project/) shows the
complete local configuration.
