FrontMatter CMS Usage
FrontMatter CMS Usage
Overview
The FrontMatter CMS extension provides a powerful content management interface directly within VS Code for your Jekyll site. It offers a WordPress-like editing experience with visual content management, media handling, and taxonomy organization.
Table of Contents
- FrontMatter CMS Usage
Getting Started
1. Installation
The FrontMatter extension should already be installed as part of the workspace recommendations. If not:
- Open VS Code Extensions panel (
Ctrl+Shift+X) - Search for “FrontMatter”
- Install the “FrontMatter” extension by Elio Struyf
2. Opening the CMS
You can access the FrontMatter CMS in several ways:
- Command Palette:
Ctrl+Shift+P→ “FrontMatter: Open dashboard” - Task Runner:
Ctrl+Shift+P→ “Tasks: Run Task” → “FrontMatter: Start CMS”
3. Content Management Interface
The CMS provides several panels:
- Content Overview: Browse all your posts and pages
- Media Library: Manage images and other assets
- Taxonomies: Organize tags and categories
- Snippets: Insert predefined content blocks
Content Types
The workspace is configured with three content types:
Default Pages
- Simple pages with basic metadata
- Used for: About pages, landing pages, etc.
- Location:
docs/directory
Blog Posts
- Full-featured blog posts with advanced metadata
- Used for: News, tutorials, announcements
- Location:
docs/_posts/directory - Filename format:
YYYY-MM-DD-title.md
Documentation
- Technical documentation with navigation order
- Used for: User guides, API docs, tutorials
- Location:
docs/_docs/directory
Creating Content
Using the Visual Editor
- Open FrontMatter dashboard
- Click “Create Content”
- Select content type (Post, Documentation, or Default)
- Fill in the metadata fields:
- Title: Content title
- Description: SEO description
- Categories: Organize content (limit varies by type)
- Tags: Keyword tags for discoverability
- Featured Image: Visual representation
- Draft Status: Control publication
Field Types Available
- Text Fields: Title, description, author
- Date/Time: Publication and modification dates
- Choice Fields: Layout selection, callout types
- Image Fields: Featured images with alt text
- Boolean Fields: Draft status, TOC enable/disable
- Number Fields: Navigation order for docs
- Tags/Categories: Taxonomy management
Content Snippets
Pre-configured snippets for common content patterns. Access snippets through:
- FrontMatter Dashboard: In the content editor panel
- VS Code Command Palette:
Ctrl+Shift+P→ “FrontMatter: Insert snippet” - Editor Context Menu: Right-click in markdown files → “Insert FrontMatter snippet”
Standard Snippets
Image with Caption
Usage: Insert images with automatic caption formatting
- Prompts for:
- Image source (with file picker integration)
- Alt text for accessibility
- Caption text
- Example output:

_Caption text_
Code Block
Usage: Insert syntax-highlighted code blocks with language selection
- Prompts for:
- Programming language (dropdown menu)
- Code content
- Available languages:
- TypeScript, JavaScript, Bash, YAML, JSON
- Markdown, Ruby, Liquid, HTML, CSS, XML, SQL
- Example output:
// Your code here
Callout/Alert Box
Usage: Insert callout boxes with interactive type selection
- Prompts for:
- Callout type (dropdown menu)
- Message content
- Available types:
- 💡 Pro Tip
- ⚠️ Warning
- ✅ Success
- ❌ Error
- ℹ️ Info
- Example output:
> **💡 Pro Tip**: Your helpful message here
Liquid Tag Snippets
The workspace includes specialized interactive snippets for Jekyll Liquid tags. These snippets prompt you for input when inserted:
Liquid Variable
Usage: Insert `` syntax with custom variable name
- Prompts for: Variable name
- Example output:
{{ variable_name }}(wherevariable_nameis replaced with your input) - Common examples:
{{ page.title }},{{ site.description }}
Liquid Tag
Usage: Insert single Liquid tag with custom content
- Prompts for: Tag content
- Example output:
{% assign var = value %},{% include file.html %}
Liquid For Loop
Usage: Insert complete for loop structure with interactive options
- Prompts for:
- Loop item variable name
- Collection to iterate over (dropdown with common options)
- Loop content template
- Available collections:
site.posts- All blog postssite.pages- All pagessite.docs- All documentationsite.data.categories- Category datasite.data.tags- Tag datapage.tags- Current page tagspage.categories- Current page categories
- Example output:
{% for post in site.posts %}
{{ post.title }}
{% endfor %}
Liquid If Statement
Usage: Insert conditional block with custom condition and content
- Prompts for:
- Condition to check
- Content when condition is true
- Example output:
{% if page.title %}
Content goes here
{% endif %}
Interactive Snippet Benefits
These interactive snippets provide:
- Guided Input: Prompts ensure correct syntax
- Pre-configured Options: Dropdown menus with common Jekyll objects
- Template Completion: Full code blocks with proper structure
- Error Prevention: Reduces syntax mistakes in Liquid code
Common Liquid Patterns (for reference)
Site Information:
{{ site.title }}
{{ site.description }}
{{ site.time | date: "%B %d, %Y" }}
{{ site.url }}{{ site.baseurl }}
Page Information:
{{ page.title }}
{{ page.date | date: "%Y-%m-%d" }}
{{ page.url | relative_url }}
{{ page.layout }}
Content Loops:
{% for post in site.posts limit:5 %}
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
{% endfor %}
Conditional Content:
{% if page.categories %}
{% for category in page.categories %}
{{ category }}
{% endfor %}
{% endif %}
Data File Access:
{% for category in site.data.categories %}
{{ category[1].name }}: {{ category[1].description }}
{% endfor %}
Media Management
Asset Organization
- Public Folder:
docs/assets/ - Image Storage:
docs/assets/images/ - Automatic Processing: Images are automatically linked and optimized
Taxonomy Management
Categories
Predefined categories available:
- tutorial
- getting-started
- development
- typescript
- jekyll
- testing
- deployment
- configuration
- best-practices
Tags
Common tags for content organization:
- typescript, jekyll, development
- vscode, wsl, testing
- playwright, jest, markdown
- documentation, ci-cd
- github-actions, eslint, prettier
- ruby, bundler, liquid, frontmatter
Data File Integration
Taxonomies are managed through YAML data files:
docs/_data/categories.ymldocs/_data/tags.yml
Workflow Integration
Jekyll Preview
FrontMatter integrates with Jekyll’s live preview:
- Start Jekyll server:
npm run dev:jekyll - Preview changes at
http://localhost:4000
Version Control
FrontMatter automatically:
- Tracks content changes
- Integrates with Git workflows
- Updates modification dates
- Maintains frontmatter formatting
Advanced Features
Custom Fields
Add custom fields to content types by editing frontmatter.json:
{
"title": "Custom Field",
"name": "custom_field",
"type": "string",
"single": true
}
Content Templates
Templates are automatically applied based on content type:
- Posts:
docs/_posts/YYYY-MM-DD-title.md - Documentation:
docs/_docs/title.md
Bulk Operations
Use the dashboard for:
- Bulk tagging and categorization
- Mass content updates
- Publication scheduling
- Draft management
Troubleshooting
Common Issues
- CMS not loading: Ensure the FrontMatter extension is enabled
- Content not appearing: Check file locations match configuration
- Images not displaying: Verify asset paths and public folder settings
- Metadata errors: Validate YAML frontmatter syntax
Configuration Files
Key configuration files:
frontmatter.json: Main CMS configuration (primary configuration)docs/_config.yml: Jekyll site configurationworkspace.code-workspace: VS Code integration (minimal FrontMatter settings)
💡 Pro Tip: All FrontMatter CMS configuration is now centralized in
frontmatter.jsonto avoid conflicts and maintain consistency. The workspace file only contains basic VS Code integration settings.
Tips and Best Practices
- Use consistent naming: Follow Jekyll naming conventions
- Optimize images: Use the built-in optimization tools
- Organize taxonomies: Keep categories broad, tags specific
- Preview regularly: Test content with Jekyll’s live reload
- Version control: Commit content changes regularly
My Info Just Under Glass