Build System
Opal Editor’s build system transforms markdown and template files into static websites. It supports multiple build strategies, template engines, and runs entirely in the browser with zero server dependencies.Architecture
Build Strategies
Freeform Strategy
Location:~/workspace/source/src/services/build/strategies/FreeformBuildRunner.ts
Simple build process:
- Index source files
- Copy static assets
- Process templates and markdown
Eleventy Strategy
Location:~/workspace/source/src/services/build/EleventyBuildRunner.ts
Eleventy-inspired build with:
- Data cascade (global, directory, template, frontmatter)
- Layout inheritance
- Custom permalinks
- Configurable directories
Core Class: BuildRunner
Location:~/workspace/source/src/services/build/BuildRunner.ts
Class Definition
Build Strategy Types
Creating Builds
Using BuildRunnerFactory
Restore Existing Build
Running Builds
Basic Build Execution
With Abort Signal
Monitor Build Progress
Freeform Build Strategy
Build Graph
File Processing
Assets: Files that aren’t templates or markdown are copied as-is. Templates:.mustache, .ejs, .njk, .liquid files are rendered to HTML.
Markdown: .md files are:
- Parsed for frontmatter
- Converted to HTML with marked.js
- Wrapped in layout template
- Output as
.html
Example Usage
Eleventy Build Strategy
Configuration
Data Cascade
Data is merged in priority order (lowest to highest):- Global data - JSON files from
_data/directory - Directory data -
directory.jsonfiles - Template data -
template.jsonfiles - Front matter - YAML/JSON in file header
Layouts
Layouts are templates in the_includes/ directory.
Layout file: _includes/post.mustache
Layout Chaining
Layouts can inherit from other layouts:Permalinks
Customize output URLs with frontmatter:Example Eleventy Build
Template Rendering
TemplateManager Integration
BuildRunner uses TemplateManager for rendering:Supported Template Engines
- Mustache (
.mustache) - Default - EJS (
.ejs) - Nunjucks (
.njk,.nunchucks) - Liquid (
.liquid)
Template Helpers
TemplateManager provides built-in helpers:Build Pipeline
DataflowGraph Execution
Builds use a directed acyclic graph (DAG) for execution:Build Context
Context object tracks build state:File Processing Methods
Copy Assets
Process Markdown
Process Templates
Build Output
BuildDAO
Build results are stored asBuildDAO:
Reading Build Results
Logging
Advanced Features
Custom Build Strategy
ExtendBuildRunner to create custom strategies:
Pre-process Files
Best Practices
Use Appropriate Strategy
Handle Build Errors
Monitor Progress
Optimize Large Builds
Common Patterns
Build and Deploy
Preview Build
Related Systems
- Workspace System - Source workspace
- Storage System - Read source, write output
- Git System - Version built files