diff --git a/site/package.json b/site/package.json
index 8976fe4659399..093047d484db0 100644
--- a/site/package.json
+++ b/site/package.json
@@ -103,7 +103,9 @@
"xterm": "5.2.1",
"xterm-addon-canvas": "0.4.0",
"xterm-addon-fit": "0.7.0",
+ "xterm-addon-unicode11": "0.5.0",
"xterm-addon-web-links": "0.8.0",
+ "xterm-addon-webgl": "0.15.0",
"yup": "1.2.0"
},
"devDependencies": {
diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml
index 00d76bb9c3efc..4cc98c7074168 100644
--- a/site/pnpm-lock.yaml
+++ b/site/pnpm-lock.yaml
@@ -225,9 +225,15 @@ dependencies:
xterm-addon-fit:
specifier: 0.7.0
version: 0.7.0(xterm@5.2.1)
+ xterm-addon-unicode11:
+ specifier: 0.5.0
+ version: 0.5.0(xterm@5.2.1)
xterm-addon-web-links:
specifier: 0.8.0
version: 0.8.0(xterm@5.2.1)
+ xterm-addon-webgl:
+ specifier: 0.15.0
+ version: 0.15.0(xterm@5.2.1)
yup:
specifier: 1.2.0
version: 1.2.0
@@ -13581,6 +13587,14 @@ packages:
xterm: 5.2.1
dev: false
+ /xterm-addon-unicode11@0.5.0(xterm@5.2.1):
+ resolution: {integrity: sha512-Jm4/g4QiTxiKiTbYICQgC791ubhIZyoIwxAIgOW8z8HWFNY+lwk+dwaKEaEeGBfM48Vk8fklsUW9u/PlenYEBg==}
+ peerDependencies:
+ xterm: ^5.0.0
+ dependencies:
+ xterm: 5.2.1
+ dev: false
+
/xterm-addon-web-links@0.8.0(xterm@5.2.1):
resolution: {integrity: sha512-J4tKngmIu20ytX9SEJjAP3UGksah7iALqBtfTwT9ZnmFHVplCumYQsUJfKuS+JwMhjsjH61YXfndenLNvjRrEw==}
peerDependencies:
@@ -13589,6 +13603,14 @@ packages:
xterm: 5.2.1
dev: false
+ /xterm-addon-webgl@0.15.0(xterm@5.2.1):
+ resolution: {integrity: sha512-ZLcqogMFHr4g/YRhcCh3xE8tTklnyut/M+O/XhVsFBRB/YCvYhPdLQ5/AQk54V0wjWAQpa8CF3W8DVR9OqyMCg==}
+ peerDependencies:
+ xterm: ^5.0.0
+ dependencies:
+ xterm: 5.2.1
+ dev: false
+
/xterm@5.2.1:
resolution: {integrity: sha512-cs5Y1fFevgcdoh2hJROMVIWwoBHD80P1fIP79gopLHJIE4kTzzblanoivxTiQ4+92YM9IxS36H1q0MxIJXQBcA==}
dev: false
diff --git a/site/src/AppRouter.tsx b/site/src/AppRouter.tsx
index c1f222d90c334..785048fe7298d 100644
--- a/site/src/AppRouter.tsx
+++ b/site/src/AppRouter.tsx
@@ -322,7 +322,7 @@ export const AppRouter: FC = () => {
{/* Terminal and CLI auth pages don't have the dashboard layout */}
}
+ element={}
/>
} />
diff --git a/site/src/pages/TerminalPage/TerminalPage.tsx b/site/src/pages/TerminalPage/TerminalPage.tsx
index a09f289da9805..61c3501976329 100644
--- a/site/src/pages/TerminalPage/TerminalPage.tsx
+++ b/site/src/pages/TerminalPage/TerminalPage.tsx
@@ -7,9 +7,10 @@ import { useNavigate, useParams, useSearchParams } from "react-router-dom"
import { colors } from "theme/colors"
import { v4 as uuidv4 } from "uuid"
import * as XTerm from "xterm"
-import { CanvasAddon } from "xterm-addon-canvas"
+import { WebglAddon } from "xterm-addon-webgl"
import { FitAddon } from "xterm-addon-fit"
import { WebLinksAddon } from "xterm-addon-web-links"
+import { Unicode11Addon } from "xterm-addon-unicode11"
import "xterm/css/xterm.css"
import { MONOSPACE_FONT_FAMILY } from "../../theme/constants"
import { pageTitle } from "../../utils/page"
@@ -57,7 +58,7 @@ const useTerminalWarning = ({ agent }: { agent?: WorkspaceAgent }) => {
}
type TerminalPageProps = React.PropsWithChildren<{
- renderer: "canvas" | "dom"
+ renderer: "webgl" | "dom"
}>
const TerminalPage: FC = ({ renderer }) => {
@@ -176,6 +177,7 @@ const TerminalPage: FC = ({ renderer }) => {
return
}
const terminal = new XTerm.Terminal({
+ allowProposedApi: true,
allowTransparency: true,
disableStdin: false,
fontFamily: MONOSPACE_FONT_FAMILY,
@@ -185,12 +187,14 @@ const TerminalPage: FC = ({ renderer }) => {
},
})
// DOM is the default renderer.
- if (renderer === "canvas") {
- terminal.loadAddon(new CanvasAddon())
+ if (renderer === "webgl") {
+ terminal.loadAddon(new WebglAddon())
}
const fitAddon = new FitAddon()
setFitAddon(fitAddon)
terminal.loadAddon(fitAddon)
+ terminal.loadAddon(new Unicode11Addon())
+ terminal.unicode.activeVersion = "11"
terminal.loadAddon(
new WebLinksAddon((_, uri) => {
handleWebLink(uri)