Contributing <Contributing>

Component Plugins

Beginner

Extend the engine with custom component types by implementing the core interface.

interface ComponentCoreDefinition {
  type: string
  position: { x: number; y: number; width: number; height: number }
  content?: string
  fontSize?: number
  fontWeight?: 'normal' | 'bold'
  color?: string
  textAlign?: 'left' | 'center' | 'right'
}

Expression Functions

Beginner

Add custom expression functions that are available inside report templates.

registerFunction('avg', (items, field) => {
  const values = items.map(i => i[field])
  return values.reduce((a, b) => a + b, 0) / values.length
})

Renderers

Intermediate

Build output renderers that convert evaluated report schemas into new formats.

export function renderToCSV(
  evaluatedSchema: EvaluatedSchema
): string {
  // Transform bands → rows, components → cells
  return rows.map(r => r.join(',')).join('\n')
}

Templates

Beginner

Create ready-to-use report templates with sample data. Great first contribution — no engine internals needed, just JSON schema design.

Roadmap <Roadmap>
v0.2 Plugin System + Advanced Layout next
v0.3 PDF Optimization + Template Versioning planned
v1.0 Auth + Collaboration + Standalone Engine planned
v2.0 AI Integration + MCP Server planned