PHPackages                             hillholliday/craft-user-manual - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. hillholliday/craft-user-manual

ActiveCraft-plugin[Utility &amp; Helpers](/categories/utility)

hillholliday/craft-user-manual
==============================

Craft User Manual allows developers (or even content editors) to provide CMS documentation using Craft's built-in sections (singles, channels, or structures) to create a `User Manual` or `Help` section directly in the control panel.

5.1.0(1mo ago)8572.5k↓81.3%161MITPHPPHP ^8.0.2CI passing

Since Sep 4Pushed 1mo ago3 watchersCompare

[ Source](https://github.com/RobErskine/Craft-User-Manual)[ Packagist](https://packagist.org/packages/hillholliday/craft-user-manual)[ GitHub Sponsors](https://github.com/roberskine)[ RSS](/packages/hillholliday-craft-user-manual/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (10)Dependencies (6)Versions (22)Used By (1)

Craft User Manual plugin for Craft CMS 4.x and Craft CMS 5.x
============================================================

[](#craft-user-manual-plugin-for-craft-cms-4x-and-craft-cms-5x)

[![CI](https://github.com/RobErskine/Craft-User-Manual/actions/workflows/ci.yml/badge.svg)](https://github.com/RobErskine/Craft-User-Manual/actions/workflows/ci.yml)

Craft User Manual allows developers (or even content editors) to provide CMS documentation using Craft's built-in sections (singles, channels, or structures) to create a "User Manual" or "Help" section directly in the control panel.

[![Screenshot](resources/img/screenshot.jpg)](resources/img/screenshot.jpg)

Requirements
------------

[](#requirements)

This plugin requires Craft CMS 4.0.0 or later; or Craft CMS 5.0.0 or later.

Installation
------------

[](#installation)

### Craft 4 and Craft 5

[](#craft-4-and-craft-5)

To install the plugin in your Craft 4 or Craft 5 project, follow these instructions.

1. Open your terminal and go to your Craft project:

    ```
     cd /path/to/project

    ```
2. Then tell Composer to load the plugin:

    ```
     composer require hillholliday/craft-user-manual

    ```

> Wondering why it says `hillholliday` and not `roberskine` as the org? This package was originally submitted as hillholliday, and to [preserve the artifacts on Packagist](https://packagist.org/packages/hillholliday/craft-user-manual) we have kept it as hillholliday.

3. In the Control Panel, go to Settings → Plugins and click the “Install” button for usermanual.
4. Select the section the plugin should use as the **User Manual** page in the CP.

    - (Optional) - Replace the plugin's name to something your user's will understand.
    - (Optional) - Use more than the default `body` fieldhandle by setting up custom template overrides.
5. Click the **User Manual** link in the CP nav.

### Craft 3

[](#craft-3)

To install the plugin in your Craft 3 project, follow these instructions.

1. Open your terminal and go to your Craft project:

    ```
     cd /path/to/project

    ```
2. Then tell Composer to load the plugin:

    ```
     composer require hillholliday/craft-user-manual:2.1.2

    ```
3. In the Control Panel, go to Settings → Plugins and click the “Install” button for usermanual.
4. Select the section the plugin should use as the **User Manual** page in the CP.

    - (Optional) - Replace the plugin's name to something your user's will understand.
    - (Optional) - Use more than the default `body` fieldhandle by setting up custom template overrides.
5. Click the **User Manual** link in the CP nav.

Configuration
-------------

[](#configuration)

- All settings may be optionally configured using a [config file](https://craftcms.com/docs/5.x/extend/plugin-settings.html#overriding-setting-values). The values, contained in [`config.php`](https://github.com/roberskine/Craft-User-Manual/blob/master/src/config.php), are described below:

### pluginNameOverride

[](#pluginnameoverride)

Intuitive, human-readable plugin name for the end user.

### templateOverride

[](#templateoverride)

For more control over the output, you may optionally override the default template.

Path is relative to ../craft/templates/.

### section

[](#section)

Entries in this section must have associated urls. When this value is set from the `usermanua.php` file, it much use the section ID as the value, not the section handle.

### enabledSideBar

[](#enabledsidebar)

Enables the sidebar on the manual page

Defaults to true.

### managedFolder

[](#managedfolder)

*(since 5.1.0)* Filesystem path to a folder of `.md` files that the `usermanual/sync` command imports into the section. Alias-aware (e.g. `'@root/help-manual'`). Leave `null` to disable the sync. See [Markdown sync](#markdown-sync-git--cp) below.

### readOnlyManaged

[](#readonlymanaged)

*(since 5.1.0)* When `true`, section entries that are backed by a markdown file in `managedFolder` become **read-only in the CP** — the markdown is the source of truth. Entries with no backing file stay editable. The sync command bypasses this guard while it runs. Defaults to `false`.

### bodyField

[](#bodyfield)

*(since 5.1.0)* Handle of the field that stores the markdown body on the section's entries. Defaults to `body`. Set this when you use a `templateOverride` that reads a different field (e.g. `helpContent`).

Markdown sync (git → CP)
------------------------

[](#markdown-sync-git--cp)

*(since 5.1.0)* Instead of (or in addition to) editing manual pages in the control panel, you can keep them as version-controlled markdown and push them into the CP with a console command. This keeps documentation diffable, reviewable, and easy to maintain across multiple sites.

1. Point `managedFolder` at a folder of `.md` files (in `config/usermanual.php`):

    ```
    return [
        'section'         => 'secHelp',        // your manual section
        'managedFolder'   => '@root/help-manual',
        'bodyField'       => 'helpContent',    // if not the default `body`
        'readOnlyManaged' => true,             // optional: lock CP editing of synced pages
    ];
    ```
2. Author each page as a `.md` file with optional YAML frontmatter:

    ```
    ---
    title: Getting Started
    slug: getting-started      # optional; defaults to the filename (minus an "NN-" order prefix)
    parent: craft-cms          # optional; slug of the parent page (structure sections)
    order: 10                  # optional; sort hint, used only when first creating the page
    enabled: true              # optional; default true
    delete: false              # optional; true soft-deletes the page with this slug
    ---
    # Getting Started

    Markdown body…
    ```
3. Run the sync (e.g. on deploy, on cron, or by hand):

    ```
    craft usermanual/sync            # import managedFolder/*.md
    craft usermanual/sync --dry-run  # report what would change, write nothing
    ```

The sync is **one-way** (git → DB) and **idempotent** — it only saves a page when its title, body, or enabled state actually changed, and it never touches section entries that have no backing file (so a CP-maintained page can live alongside the managed ones). Removals are declarative: ship a file with `delete: true` to retire an obsolete page.

### Rendering the markdown as HTML

[](#rendering-the-markdown-as-html)

The sync stores each file's body **verbatim** in the configured `bodyField`, and the default template prints it raw with `{{ entry.body }}`. That means markdown syntax (headings, bold, lists) and blank-line paragraph breaks are **not** converted — the browser shows them as literal text / a single run-on line.

To render the markdown as HTML, point the [`templateOverride`](#config-settings-templateOverride) setting at a site template that runs the body through Craft's [`|md` filter](https://craftcms.com/docs/5.x/reference/twig/filters.html#md). Create `templates/usermanual-markdown.twig` in your project:

```
{% if entry.fieldValues.body ?? false %}
    {{ entry.body | md }}
{% else %}
    This page has no body content yet.
{% endif %}
```

…then set it in `config/usermanual.php`:

```
'templateOverride' => 'usermanual-markdown',
```

> The default template is intentionally left as raw output so existing installs whose `body` field already contains rich text / HTML aren't double-processed. Opt into markdown rendering per the override above.

> **Note:** the sync writes through Craft's element API, so the target section's entry type needs an editable **Title** field — entry types that auto-generate their title (via a Title Format) won't have their titles updated by the sync.

Some notes
----------

[](#some-notes)

- The plugin currently only pulls in the `body` field from each entry in the selected section, unless you're using a template override.
- While the **User Manual** section works best with `Structures`, you can certainly get away with using a one-off `Single`.
- If you're running *Craft Client* or *Craft Pro* make sure your content editors don't have permission to edit whatever section you've selected to use as your **User Manual**
- Only sections with entry URLs may be used as your **User Manual** section.

Thanks
------

[](#thanks)

This plugin was inspired by the team over at [70kft](http://70kft.com/) for their work on [Craft-Help](https://github.com/70kft/craft-help). While their plugin is definitely more flexible in terms of writing custom markdown in separate files, we wanted to create something that would make it easier for anyone to edit documentation without making any changes to the server. This works particularly well for larger projects where more than one person (especially non-devs) are writing documentation for how to use the CMS.

Releases
--------

[](#releases)

See [CHANGELOG.md](CHANGELOG.md) for full release history.

We hope this plugin is useful, and we'd love to hear any suggestions or issues you may have. [@erskinerob](https://twitter.com/erskinerob).

Brought to you by [Rob Erskine](https://twitter.com/erskinerob).

###  Health Score

62

—

FairBetter than 99% of packages

Maintenance90

Actively maintained with recent releases

Popularity43

Moderate usage in the ecosystem

Community23

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor1

Top contributor holds 62.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~190 days

Recently: every ~127 days

Total

16

Last Release

51d ago

Major Versions

2.1.2 → 4.0.02022-06-20

4.0.0 → 5.0.02024-04-15

5.1.0 → 6.x-dev2026-06-29

PHP version history (2 changes)4.0.0PHP ^8.0.2

6.0.0-beta.1PHP ^8.5

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1895120?v=4)[Rob Erskine](/maintainers/RobErskine)[@RobErskine](https://github.com/RobErskine)

---

Top Contributors

[![RobErskine](https://avatars.githubusercontent.com/u/1895120?v=4)](https://github.com/RobErskine "RobErskine (74 commits)")[![johnfmorton](https://avatars.githubusercontent.com/u/119723?v=4)](https://github.com/johnfmorton "johnfmorton (32 commits)")[![sameerast](https://avatars.githubusercontent.com/u/2019441?v=4)](https://github.com/sameerast "sameerast (3 commits)")[![JorgeAnzola](https://avatars.githubusercontent.com/u/15676614?v=4)](https://github.com/JorgeAnzola "JorgeAnzola (3 commits)")[![mgburns](https://avatars.githubusercontent.com/u/1508604?v=4)](https://github.com/mgburns "mgburns (3 commits)")[![mcclaskiem](https://avatars.githubusercontent.com/u/6970287?v=4)](https://github.com/mcclaskiem "mcclaskiem (1 commits)")[![aaronbushnell](https://avatars.githubusercontent.com/u/315202?v=4)](https://github.com/aaronbushnell "aaronbushnell (1 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")[![brandonkelly](https://avatars.githubusercontent.com/u/47792?v=4)](https://github.com/brandonkelly "brandonkelly (1 commits)")

---

Tags

craft-plugincraftcmscraftcms-pluginusefulcmsCraftcraftcmscraft-pluginusermanual

### Embed Badge

![Health badge](/badges/hillholliday-craft-user-manual/health.svg)

```
[![Health](https://phpackages.com/badges/hillholliday-craft-user-manual/health.svg)](https://phpackages.com/packages/hillholliday-craft-user-manual)
```

###  Alternatives

[verbb/formie

The most user-friendly forms plugin for Craft.

101400.6k78](/packages/verbb-formie)[nystudio107/craft-seomatic

SEOmatic facilitates modern SEO best practices &amp; implementation for Craft CMS 5. It is a turnkey SEO system that is comprehensive, powerful, and flexible.

1741.5M73](/packages/nystudio107-craft-seomatic)[verbb/hyper

A user-friendly links field for Craft.

24153.5k14](/packages/verbb-hyper)[verbb/vizy

A flexible visual editor field for Craft.

4251.5k1](/packages/verbb-vizy)[verbb/comments

Add comments to your site.

13754.0k1](/packages/verbb-comments)[verbb/navigation

Create navigation menus for your site.

90711.5k20](/packages/verbb-navigation)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
