# Orchardcore Modules

> Skill for creating and structuring Orchard Core modules. Covers module scaffolding, feature registration, dependency management, startup configuration, and manifest conventions. Use this skill when requests mention Orchard Core Modules, Create a Module, Installing Third-Party Modules, Manifest Pattern, Startup Pattern, Project File Pattern, or closely related Orchard Core implementation, setup, extension, or troubleshooting work. Strong matches include work with OrchardCore.Application.Cms.Targets, OrchardCore.Modules.Manifest, OrchardCore.ContentManagement, OrchardCore.Modules, OrchardCore.Module.Targets, IServiceCollection, Manifest.cs, [RequireFeatures]. It also helps with module examples, Startup Pattern, Project File Pattern, Module Folder Structure, plus the code patterns, admin flows, recipe steps, and referenced examples captured in this skill.

- Skill: `crestapps/orchardcore-modules` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add crestapps/orchardcore-modules`
- Raw SKILL.md: https://api.skillmd.com/api/skills/crestapps/orchardcore-modules/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: CrestApps (https://skillmd.com/u/crestapps)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/crestapps/orchardcore-modules

---


# Orchard Core Modules - Prompt Templates

## Create a Module

You are an Orchard Core expert. Generate the scaffolding for a module owned by
an application that consumes Orchard Core packages. For a contribution inside
the Orchard Core source repository, use the `orchardcore-module-creator`
skill instead.

### Guidelines

- Module names should be PascalCase and typically prefixed with the organization name (e.g., `MyOrg.MyModule`).
- Every module must have a `Manifest.cs` file declaring its features.
- Each feature must have a unique ID and should declare its dependencies.
- Use `Startup` classes to register services, routes, and navigation.
- Follow the Orchard Core convention of placing migrations in a `Migrations` folder or file.
- Declare a new feature with `[assembly: Feature(...)]` only when the user should manage it; to extend or override behavior when other features are present, gate a `Startup` with `[RequireFeatures(...)]` instead of adding another feature the user must enable. See the `orchardcore-features` skill for the full decision.
- Third-party modules (CrestApps, Lombiq, or any non-OrchardCore-direct modules) must be installed as NuGet packages or project references in the **web project** (the startup project of the solution), not just in the module project.
- Always seal classes.

### Installing Third-Party Modules

Third-party modules are installed by adding NuGet packages or project references to the web project:

```xml
<Project Sdk="Microsoft.NET.Sdk.Web">
  <ItemGroup>
    <!-- Orchard Core base -->
    <PackageReference Include="OrchardCore.Application.Cms.Targets" Version="3.*" />

    <!-- Third-party modules must be in the web project -->
    <PackageReference Include="Lombiq.HelpfulExtensions.OrchardCore" Version="1.*" />
  </ItemGroup>
</Project>
```

For local module projects:

```xml
<ItemGroup>
  <ProjectReference Include="../ThirdParty.Module/ThirdParty.Module.csproj" />
</ItemGroup>
```

### Manifest Pattern

```csharp
using OrchardCore.Modules.Manifest;

[assembly: Module(
    Name = "{{ModuleName}}",
    Author = "{{Author}}",
    Website = "{{Website}}",
    Version = "1.0.0",
    Description = "{{Description}}",
    Category = "{{Category}}"
)]

[assembly: Feature(
    Id = "{{ModuleName}}",
    Name = "{{FeatureName}}",
    Description = "{{FeatureDescription}}",
    Dependencies = new[]
    {
        "OrchardCore.ContentManagement"
    },
    Category = "{{Category}}"
)]
```

### Startup Pattern

```csharp
using Microsoft.Extensions.DependencyInjection;
using OrchardCore.Modules;

namespace {{ModuleName}}
{
    public sealed class Startup : StartupBase
    {
        public override void ConfigureServices(IServiceCollection services)
        {
            // Register services here
        }
    }
}
```

### Project File Pattern

```xml
<Project Sdk="Microsoft.NET.Sdk.Razor">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="OrchardCore.Module.Targets" Version="3.*" />
  </ItemGroup>

</Project>
```

### Module Folder Structure

```
MyModule/
├── Manifest.cs
├── Startup.cs
├── MyModule.csproj
├── Controllers/
├── Drivers/
├── Handlers/
├── Migrations/
├── Models/
├── Services/
├── ViewModels/
├── Views/
└── wwwroot/
```

