____  _           _              ____   ___
 |  _ \| | __ _ ___| |_ ___ _ __  |___ \ / _ \
 | |_) | |/ _` / __| __/ _ \ '__|   __) | | | |
 |  __/| | (_| \__ \ ||  __/ |     / /| |_| | /
 |_|   |_|\__,_|___/\__\___|_|    |____|\___/

The Template Engine
for PowerShell

Scaffold projects, modules, and files with customizable templates. Now with JSON support, cross-platform compatibility, and modern tooling.

PowerShell
Install-Module -Name Plaster -Scope CurrentUser

Why Plaster?

Stop writing boilerplate. Start scaffolding with confidence.

Consistent Projects

Generate modules, scripts, DSC configurations, and any file structure from reusable templates. Every project starts right.

JSON & XML Manifests

Author templates in clean JSON with full VS Code IntelliSense, or use the traditional XML format. Your choice.

Cross-Platform

Full support for Windows, Linux, and macOS. Works with PowerShell 5.1 and PowerShell 7.x.

Interactive & Scriptable

Use interactively with guided prompts, or pass parameters on the command line for fully automated scaffolding in CI/CD.

Module Integration

Embed templates inside PowerShell modules and distribute them through the PowerShell Gallery. Templates travel with your tools.

Smart Conditionals

Include or exclude files based on user choices. Build dynamic templates with conditions, validation, and dependencies.

Pick Your Format

Plaster 2.0 introduces JSON manifests alongside traditional XML. Same power, cleaner syntax.

Recommended JSON Format
plasterManifest.json
{
  "schemaVersion": "2.0",
  "metadata": {
    "name": "MyModule",
    "id": "a1b2c3d4-...",
    "version": "1.0.0",
    "title": "New PowerShell Module"
  },
  "parameters": [
    {
      "name": "ModuleName",
      "type": "text",
      "prompt": "Enter module name"
    },
    {
      "name": "Features",
      "type": "multichoice",
      "default": [0, 1],
      "choices": [
        {"label": "&Tests", "value": "Tests"},
        {"label": "&Build", "value": "Build"}
      ]
    }
  ],
  "content": [
    {
      "type": "templateFile",
      "source": "Module.psm1",
      "destination": "src/${ModuleName}.psm1"
    }
  ]
}
Compatible XML Format
plasterManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<plasterManifest schemaVersion="1.2"
  xmlns="http://www.microsoft.com/
    schemas/PowerShell/Plaster/v1">
  <metadata>
    <name>MyModule</name>
    <id>a1b2c3d4-...</id>
    <version>1.0.0</version>
    <title>New PowerShell Module</title>
  </metadata>
  <parameters>
    <parameter name="ModuleName"
      type="text"
      prompt="Enter module name" />
    <parameter name="Features"
      type="multichoice" default="0,1">
      <choice label="&Tests"
        value="Tests" />
      <choice label="&Build"
        value="Build" />
    </parameter>
  </parameters>
  <content>
    <templateFile source="Module.psm1"
      destination=
      "src/${PLASTER_PARAM_ModuleName}.psm1"/>
  </content>
</plasterManifest>
FeatureJSONXML
Variable Syntax${Name}${PLASTER_PARAM_Name}
Multichoice Defaults[0, 1, 2]"0,1,2"
VS Code IntelliSenseLimited
Special Char EscapingNot needed&amp; &lt;
Schema Validation JSON Schema XSD

Quick Start

Three commands to your first scaffolded project.

1

Discover available templates

Get-PlasterTemplate
2

Scaffold a new module interactively

$template = Get-PlasterTemplate |
    Where-Object Name -eq NewPowerShellModule
Invoke-Plaster -TemplatePath $template.TemplatePath `
    -DestinationPath .\MyNewModule
3

Or create your own template

New-PlasterManifest -TemplateName MyTemplate `
    -TemplateType Project -Format JSON

Commands

Four cmdlets. Everything you need.

Invoke-Plaster

Execute a template to generate files. Handles parameters, conditions, file copying, template expansion, and module manifest creation.

New-PlasterManifest

Create a new template manifest file in JSON or XML format. Optionally auto-discover content files in the template directory.

Test-PlasterManifest

Validate a manifest file for correctness. Checks schema compliance, parameter defaults, conditions, and interpolated values.

Get-PlasterTemplate

Discover templates on disk, recursively, or embedded inside installed PowerShell modules. Filter by name or tag.

Platform Support

Plaster 2.0 runs everywhere PowerShell runs.

PowerShell Windows Linux macOS
7.0+
5.1 (Desktop)

Ready to scaffold?

Install Plaster from the PowerShell Gallery and create your first template in minutes.