Skip to main content

Generating static HTML files with templ

templ components implement the templ.Component interface.

The interface has a Render method which outputs HTML to an io.Writer that is passed in.

type Component interface {
// Render the template.
Render(ctx context.Context, w io.Writer) error

In Go, the io.Writer interface is implemented by many built-in types in the standard library, including os.File (files), os.Stdout, and http.ResponseWriter (HTTP responses).

This makes it easy to use templ components in a variety of contexts to generate HTML.

To render static HTML files using templ component, first create a new Go project.

Setup project

Create a new directory.

mkdir static-generator

Initialize a new Go project within it.

cd static-generator
go mod init

Create a templ file

To use it, create a hello.templ file containing a component.

Components are functions that contain templ elements, markup, if, switch and for Go expressions.

package main

templ hello(name string) {
<div>Hello, { name }</div>

Generate Go code from the templ file

Run the templ generate command.

templ generate

templ will generate a hello_templ.go file containing Go code.

This file will contain a function called hello which takes name as an argument, and returns a templ.Component that renders HTML.

func hello(name string) templ.Component {
// ...

Write a program that renders to stdout

Create a main.go file. The program creates a hello.html file and uses the component to write HTML to the file.

package main

import (

func main() {
f, err := os.Create("hello.html")
if err != nil {
log.Fatalf("failed to create output file: %v", err)

err = hello("John").Render(context.Background(), f)
if err != nil {
log.Fatalf("failed to write output file: %v", err)

Run the program

Running the code will create a file called hello.html containing the component's HTML.

go run *.go
<div>Hello, John</div>