- #133
- #132
Running Go TUI Programs in the Browser via WASM
Maybe due to the AI trend, TUI (Terminal User Interface) has become very popular, and I was thinking about what fun Go projects I could try. I happened to come across Bubble Tea, and I made a simple little game and easily had the AI adapt it to run in a browser using WASM.
The biggest problem is that Go programs rely on the operating system’s terminal syscalls (such as window scaling and native mode switching), which browser environments do not support.
Solution:
- xterm.js: Use xterm.js to emulate a terminal interface in the browser.
- Std I/O redirection: In
cmd/wasm/main.go, I intercepted Bubble Tea’s I/O and had xterm.js write to and read from it. - WASM Build Patch CD:
- Wrote a
build-wasm.shscript - Run
go mod vendorbefore compiling to create a temporary copy of dependencies - Inject a
tea_js.gopatch into the vendored code to provide dummy implementations that skip unsupported syscalls - Delete the
vendorfolder immediately after compilation - Publish to GitHub Pages
- Wrote a
The game is called Push Pull, and the implementation is on GitHub. It even works on mobile! The only caveat is that audio may be blocked by the browser.
- #131
- #130
- #129
- #128
- #127
- #126
- #125
- #124
- #123
- #122
- #121
- #120
- #119
- #118
- #117
- #116
- #115
- #114
- #113
- #112
- #111
- #110
- #109
- #108
- #107
- #106
- #105
- #104
- #103
- #102
- #101
- #100
- #99
- #98
- #97
- #96
- #95
- #94
- #93
- #92
- #91
- #90
- #89
- #88
- #87
- #86
- #85
- #84
- #83
- #82
- #81
- #80
- #79
- #78
- #77
- #76
- #75
- #74
- #73
- #72
- #71
- #70
- #69
- #68
- #67
- #66
- #65
- #64
- #63
- #62
- #61
- #60
- #59
- #58
- #57
- #56
- #55
- #54
- #53
- #52
- #51
- #50
- #49
- #48
- #47
- #46
- #45
- #44
- #43
- #42
- #41
- #40
- #39
- #38
- #37
- #36
- #35
- #34
- #33
- #32
- #31
- #30
- #29
- #28
- #27
- #26
- #25
- #24
- #23
- #22
- #21
- #20
- #19
- #18
- #17
- #16
- #15
- #14
- #13
- #12
- #11
- #10
- #9
- #8
- #7
- #6
- #5
- #4
- #3
- #2
- #1