Serve HTML with Capsule HTTP, step by step
Create an HTML file: index.html
| <html>
<head>
<meta charset="utf-8">
<title>Capsule π Wasm & Wazero</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.container { min-height: 100vh; display: flex; justify-content: center; align-items: center; text-align: center; }
.title { font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif; display: block; font-weight: 300; font-size: 80px; color: #35495e; letter-spacing: 1px; }
.subtitle { font-family: "Source Sans Pro", "Helvetica Neue", Arial, sans-serif; font-weight: 300; font-size: 32px; color: #526488; word-spacing: 5px; padding-bottom: 15px; }
.links { padding-top: 15px; }
</style>
</head>
<body>
<section class="container">
<div>
<h1 class="title">π Hello World π</h1>
<h2 class="subtitle">Served with π by Capsule [HTTP] v0.4.1 π« [pepper] π</h2>
<h2 class="subtitle">π Happily built thanks to Wazero</h2>
</div>
</section>
</body>
</html>
|
Create a new WASM module
| go mod init index
touch main.go
|
main.go
| package main
import (
_ "embed"
capsule "github.com/bots-garden/capsule-module-sdk"
)
var (
//go:embed index.html
html []byte
)
func main() {
capsule.SetHandleHTTP(func (param capsule.HTTPRequest) (capsule.HTTPResponse, error) {
return capsule.HTTPResponse{
TextBody: string(html),
Headers: `{
"Content-Type": "text/html; charset=utf-8",
"Cache-Control": "no-cache",
"X-Powered-By": "capsule-module-sdk"
}`,
StatusCode: 200,
}, nil
})
}
|
Build the module
| tinygo build -o index.wasm \
-scheduler=none \
--no-debug \
-target wasi ./main.go
|
Serve the module
| capsule-http --wasm=./index.wasm --httpPort=7070
|
Go to http://localhost:7070 with your favorite browser.