Documentation
ΒΆ
Index ΒΆ
- Constants
- type ClientStrategy
- type Config
- type ParameterMetadata
- type Store
- type TinyWasm
- type ToolExecutor
- type ToolMetadata
- type WasmClient
- func (w *WasmClient) Change(newValue string, progress chan<- string)
- func (h *WasmClient) ClearJavaScriptCache()
- func (t *WasmClient) CreateDefaultWasmFileClientIfNotExist() *WasmClient
- func (w *WasmClient) GetLastOperationID() string
- func (w *WasmClient) GetMCPToolsMetadata() []ToolMetadata
- func (t *WasmClient) GetTinyGoVersion() (string, error)
- func (w *WasmClient) GetWasmExecJsPathGo() (string, error)
- func (w *WasmClient) GetWasmExecJsPathTinyGo() (string, error)
- func (h *WasmClient) JavascriptForInitializing(customizations ...string) (js string, err error)
- func (w *WasmClient) Label() string
- func (w *WasmClient) MainInputFileRelativePath() string
- func (w *WasmClient) MainOutputFileAbsolutePath() string
- func (w *WasmClient) Name() string
- func (w *WasmClient) NewFileEvent(fileName, extension, filePath, event string) error
- func (w *WasmClient) OutputRelativePath() string
- func (w *WasmClient) RecompileMainWasm() error
- func (w *WasmClient) RegisterRoutes(mux *http.ServeMux)
- func (w *WasmClient) SetLastOperationID(id string)
- func (w *WasmClient) SetWasmExecJsOutputDir(path string)
- func (w *WasmClient) Shortcuts() []map[string]string
- func (w *WasmClient) ShouldCompileToWasm(fileName, filePath string) bool
- func (w *WasmClient) SupportedExtensions() []string
- func (w *WasmClient) TinyGoCompiler() bool
- func (w *WasmClient) UnobservedFiles() []string
- func (w *WasmClient) Value() string
- func (t *WasmClient) VerifyTinyGoInstallation() error
- func (w *WasmClient) VerifyTinyGoProjectCompatibility()
- func (w *WasmClient) VisualStudioCodeWasmEnvConfig()
- func (w *WasmClient) WasmExecJsOutputPath() string
- func (w *WasmClient) WasmProjectTinyGoJsUse(mode ...string) (isWasmProject bool, useTinyGo bool)
Constants ΒΆ
const StoreKeyMode = "tinywasm_mode"
StoreKeyMode is the key used to store the current compiler mode in the Store
Variables ΒΆ
This section is empty.
Functions ΒΆ
This section is empty.
Types ΒΆ
type ClientStrategy ΒΆ added in v0.3.13
type ClientStrategy interface {
// Compile performs the compilation.
// For InMemory: compiles to buffer.
// For External: compiles to disk.
Compile() error
// RegisterRoutes registers the WASM file handler on the mux.
RegisterRoutes(mux *http.ServeMux)
// Name returns the strategy name for logging/debugging
Name() string
}
ClientStrategy defines the behavior for compiling and serving the WASM client.
type Config ΒΆ
type Config struct {
// AppRootDir specifies the application root directory (absolute).
// e.g., "/home/user/project". If empty, defaults to "." to preserve existing behavior.
AppRootDir string
// SourceDir specifies the directory containing the Go source for the webclient (relative to AppRootDir).
// e.g., "web"
SourceDir string
// OutputDir specifies the directory for WASM and related assets (relative to AppRootDir).
// e.g., "web/public"
OutputDir string
// AssetsURLPrefix is an optional URL prefix/folder for serving the WASM file.
// e.g. "assets" -> serves at "/assets/client.wasm"
// default: "" -> serves at "/client.wasm"
AssetsURLPrefix string
MainInputFile string // main input file for WASM compilation (default: "client.go")
OutputName string // output name for WASM file (default: "client")
Logger func(message ...any)
BuildLargeSizeShortcut string // "L" (Large) compile with go
BuildMediumSizeShortcut string // "M" (Medium) compile with tinygo debug
BuildSmallSizeShortcut string // "S" (Small) compile with tinygo minimal binary size
// gobuild integration fields
Callback func(error) // Optional callback for async compilation
CompilingArguments func() []string // Build arguments for compilation (e.g., ldflags)
// DisableWasmExecJsOutput prevents automatic creation of wasm_exec.js file
// Useful when embedding wasm_exec.js content inline (e.g., Cloudflare Pages Advanced Mode)
DisableWasmExecJsOutput bool
Store Store // Key-Value store for state persistence
OnWasmExecChange func() // Callback for wasm_exec.js changes
// contains filtered or unexported fields
}
Config holds configuration for WASM compilation
type ParameterMetadata ΒΆ
type ParameterMetadata struct {
Name string
Description string
Required bool
Type string
EnumValues []string
Default any
}
ParameterMetadata describes a tool parameter
type Store ΒΆ added in v0.3.7
Store defines the interface for a key-value storage system used to persist the compiler state (e.g. current mode).
type TinyWasm ΒΆ added in v0.3.7
type TinyWasm = WasmClient
TinyWasm is an alias for WasmClient to maintain backward compatibility
type ToolExecutor ΒΆ
ToolExecutor defines how a tool should be executed Channel accepts string messages (no binary data in tinywasm)
type ToolMetadata ΒΆ
type ToolMetadata struct {
Name string
Description string
Parameters []ParameterMetadata
Execute ToolExecutor // Execution function
}
ToolMetadata provides MCP tool configuration metadata
type WasmClient ΒΆ
type WasmClient struct {
*Config
// contains filtered or unexported fields
}
WasmClient provides WebAssembly compilation capabilities with 3-mode compiler selection
func New ΒΆ
func New(c *Config) *WasmClient
New creates a new WasmClient instance with the provided configuration Timeout is set to 40 seconds maximum as TinyGo compilation can be slow Default values: MainInputFile in Config defaults to "main.wasm.go"
func (*WasmClient) Change ΒΆ
func (w *WasmClient) Change(newValue string, progress chan<- string)
Change updates the compiler mode for WasmClient and reports progress via the provided channel. Implements the HandlerEdit interface: Change(newValue string, progress chan<- string) NOTE: The caller (devtui) is responsible for closing the progress channel, NOT the handler.
func (*WasmClient) ClearJavaScriptCache ΒΆ
func (h *WasmClient) ClearJavaScriptCache()
ClearJavaScriptCache clears both cached JavaScript strings to force regeneration
func (*WasmClient) CreateDefaultWasmFileClientIfNotExist ΒΆ
func (t *WasmClient) CreateDefaultWasmFileClientIfNotExist() *WasmClient
CreateDefaultWasmFileClientIfNotExist creates a default WASM main.go file from the embedded markdown template It never overwrites an existing file and returns the WasmClient instance for method chaining.
func (*WasmClient) GetLastOperationID ΒΆ added in v0.3.11
func (w *WasmClient) GetLastOperationID() string
func (*WasmClient) GetMCPToolsMetadata ΒΆ
func (w *WasmClient) GetMCPToolsMetadata() []ToolMetadata
GetMCPToolsMetadata returns metadata for all WasmClient MCP tools
func (*WasmClient) GetTinyGoVersion ΒΆ
func (t *WasmClient) GetTinyGoVersion() (string, error)
GetTinyGoVersion returns the installed TinyGo version
func (*WasmClient) GetWasmExecJsPathGo ΒΆ
func (w *WasmClient) GetWasmExecJsPathGo() (string, error)
GetWasmExecJsPathGo returns the path to Go's wasm_exec.js file
func (*WasmClient) GetWasmExecJsPathTinyGo ΒΆ
func (w *WasmClient) GetWasmExecJsPathTinyGo() (string, error)
GetWasmExecJsPathTinyGo returns the path to TinyGo's wasm_exec.js file
func (*WasmClient) JavascriptForInitializing ΒΆ
func (h *WasmClient) JavascriptForInitializing(customizations ...string) (js string, err error)
JavascriptForInitializing returns the JavaScript code needed to initialize WASM.
Parameters (variadic):
- customizations[0]: Custom header string to prepend to wasm_exec.js content. If not provided, defaults to "// WasmClient: mode=<current_mode>\n"
- customizations[1]: Custom footer string to append after wasm_exec.js content. If not provided, defaults to WebAssembly initialization code with fetch and instantiate.
Examples:
- JavascriptForInitializing() - Uses default header and footer
- JavascriptForInitializing("// Custom Header\n") - Custom header, default footer
- JavascriptForInitializing("// Custom Header\n", "console.log('loaded');") - Both custom
func (*WasmClient) Label ΒΆ
func (w *WasmClient) Label() string
Label returns the field label for DevTUI display
func (*WasmClient) MainInputFileRelativePath ΒΆ
func (w *WasmClient) MainInputFileRelativePath() string
MainInputFileRelativePath returns the relative path to the main WASM input file (e.g. "main.wasm.go").
func (*WasmClient) MainOutputFileAbsolutePath ΒΆ
func (w *WasmClient) MainOutputFileAbsolutePath() string
MainOutputFileAbsolutePath returns the absolute path to the main WASM output file (e.g. "main.wasm").
func (*WasmClient) Name ΒΆ
func (w *WasmClient) Name() string
Name returns the name of the WASM project
func (*WasmClient) NewFileEvent ΒΆ
func (w *WasmClient) NewFileEvent(fileName, extension, filePath, event string) error
NewFileEvent handles file events for WASM compilation with automatic project detection fileName: name of the file (e.g., main.wasm.go) extension: file extension (e.g., .go) filePath: full path to the file (e.g., ./home/userName/ProjectName/web/public/main.wasm.go) event: type of file event (e.g., create, remove, write, rename)
func (*WasmClient) OutputRelativePath ΒΆ
func (w *WasmClient) OutputRelativePath() string
OutputRelativePath returns the RELATIVE path to the final output file eg: "deploy/edgeworker/app.wasm" (relative to AppRootDir) This is used by file watchers to identify output files that should be ignored. The returned path always uses forward slashes (/) for consistency across platforms.
func (*WasmClient) RecompileMainWasm ΒΆ
func (w *WasmClient) RecompileMainWasm() error
RecompileMainWasm recompiles the main WASM file if it exists
func (*WasmClient) RegisterRoutes ΒΆ
func (w *WasmClient) RegisterRoutes(mux *http.ServeMux)
RegisterRoutes registers the WASM client file route on the provided mux. It delegates to the active strategy.
func (*WasmClient) SetLastOperationID ΒΆ added in v0.3.11
func (w *WasmClient) SetLastOperationID(id string)
func (*WasmClient) SetWasmExecJsOutputDir ΒΆ
func (w *WasmClient) SetWasmExecJsOutputDir(path string)
SetWasmExecJsOutputDir sets the output directory for wasm_exec.js. This is primarily intended for tests/debug where physical file output is required. Setting a non-empty path will trigger a project detection and, if detected, write/update the wasm_exec.js file to that directory.
func (*WasmClient) Shortcuts ΒΆ
func (w *WasmClient) Shortcuts() []map[string]string
func (*WasmClient) ShouldCompileToWasm ΒΆ
func (w *WasmClient) ShouldCompileToWasm(fileName, filePath string) bool
ShouldCompileToWasm determines if a file should trigger WASM compilation
func (*WasmClient) SupportedExtensions ΒΆ
func (w *WasmClient) SupportedExtensions() []string
func (*WasmClient) TinyGoCompiler ΒΆ
func (w *WasmClient) TinyGoCompiler() bool
TinyGoCompiler returns if TinyGo compiler should be used (dynamic based on configuration)
func (*WasmClient) UnobservedFiles ΒΆ
func (w *WasmClient) UnobservedFiles() []string
UnobservedFiles returns files that should not be watched for changes e.g: main.wasm
func (*WasmClient) Value ΒΆ
func (w *WasmClient) Value() string
Value returns the current compiler mode shortcut (c, d, or p)
func (*WasmClient) VerifyTinyGoInstallation ΒΆ
func (t *WasmClient) VerifyTinyGoInstallation() error
VerifyTinyGoInstallation checks if TinyGo is properly installed
func (*WasmClient) VerifyTinyGoProjectCompatibility ΒΆ
func (w *WasmClient) VerifyTinyGoProjectCompatibility()
VerifyTinyGoProjectCompatibility checks if the project is compatible with TinyGo compilation
func (*WasmClient) VisualStudioCodeWasmEnvConfig ΒΆ
func (w *WasmClient) VisualStudioCodeWasmEnvConfig()
VisualStudioCodeWasmEnvConfig automatically creates and configures VS Code settings for WASM development. This method resolves the "could not import syscall/js" error by setting proper environment variables in .vscode/settings.json file. On Windows, the .vscode directory is made hidden for a cleaner project view. This configuration enables VS Code's Go extension to properly recognize WASM imports and provide accurate IntelliSense, error detection, and code completion for syscall/js and other WASM-specific packages.
func (*WasmClient) WasmExecJsOutputPath ΒΆ
func (w *WasmClient) WasmExecJsOutputPath() string
WasmExecJsOutputPath returns the output path for wasm_exec.js
func (*WasmClient) WasmProjectTinyGoJsUse ΒΆ
func (w *WasmClient) WasmProjectTinyGoJsUse(mode ...string) (isWasmProject bool, useTinyGo bool)
WasmProjectTinyGoJsUse returns dynamic state based on current configuration