Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Commit 9872c85

Browse files
committed
feat: add font size setting for webview UI
- Add fontSize config option (range: 10-24, default: 13) - Add slider in Settings > Display tab - Apply font size via CSS variables - Persist setting in global config Closes #441
1 parent 48c8c7e commit 9872c85

6 files changed

Lines changed: 44 additions & 3 deletions

File tree

packages/kilo-vscode/src/services/cli-backend/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,5 +318,6 @@ export interface Config {
318318
compaction?: CompactionConfig
319319
tools?: Record<string, boolean>
320320
layout?: "auto" | "stretch"
321+
fontSize?: number
321322
experimental?: ExperimentalConfig
322323
}

packages/kilo-vscode/webview-ui/src/App.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, createSignal, createMemo, Switch, Match, onMount, onCleanup } from "solid-js"
1+
import { Component, createSignal, createMemo, Switch, Match, onMount, onCleanup, createEffect } from "solid-js"
22
import { ThemeProvider } from "@kilocode/kilo-ui/theme"
33
import { DialogProvider } from "@kilocode/kilo-ui/context/dialog"
44
import { MarkedProvider } from "@kilocode/kilo-ui/context/marked"
@@ -13,7 +13,7 @@ import ProfileView from "./components/ProfileView"
1313
import { VSCodeProvider } from "./context/vscode"
1414
import { ServerProvider, useServer } from "./context/server"
1515
import { ProviderProvider } from "./context/provider"
16-
import { ConfigProvider } from "./context/config"
16+
import { ConfigProvider, useConfig } from "./context/config"
1717
import { SessionProvider, useSession } from "./context/session"
1818
import { LanguageProvider } from "./context/language"
1919
import { ChatView } from "./components/chat"
@@ -95,6 +95,19 @@ const AppContent: Component = () => {
9595
const [currentView, setCurrentView] = createSignal<ViewType>("newTask")
9696
const session = useSession()
9797
const server = useServer()
98+
const { config } = useConfig()
99+
100+
const fontSize = createMemo(() => config().fontSize ?? 13)
101+
102+
// Apply font size on load and when it changes
103+
createEffect(() => {
104+
const size = fontSize()
105+
const root = document.documentElement
106+
root.style.setProperty("--font-size-small", `${size}px`)
107+
root.style.setProperty("--font-size-base", `${size + 1}px`)
108+
root.style.setProperty("--font-size-large", `${size + 3}px`)
109+
root.style.setProperty("--font-size-x-large", `${size + 7}px`)
110+
})
98111

99112
const handleViewAction = (action: string) => {
100113
switch (action) {

packages/kilo-vscode/webview-ui/src/components/settings/DisplayTab.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ const DisplayTab: Component = () => {
3939
<SettingsRow
4040
title={language.t("settings.display.layout.title")}
4141
description={language.t("settings.display.layout.description")}
42-
last
4342
>
4443
<Select
4544
options={LAYOUT_OPTIONS}
@@ -52,6 +51,30 @@ const DisplayTab: Component = () => {
5251
triggerVariant="settings"
5352
/>
5453
</SettingsRow>
54+
55+
<SettingsRow
56+
title={language.t("settings.display.fontSize.title")}
57+
description={language.t("settings.display.fontSize.description")}
58+
last
59+
>
60+
<div style={{ display: "flex", "align-items": "center", gap: "8px", width: "160px" }}>
61+
<input
62+
type="range"
63+
min="10"
64+
max="24"
65+
step="1"
66+
value={config().fontSize ?? 13}
67+
onInput={(e) => {
68+
const value = parseInt(e.currentTarget.value, 10)
69+
if (!isNaN(value) && value >= 10 && value <= 24) {
70+
updateConfig({ fontSize: value })
71+
}
72+
}}
73+
style={{ flex: 1 }}
74+
/>
75+
<span style={{ "min-width": "40px", "text-align": "right" }}>{config().fontSize ?? 13}px</span>
76+
</div>
77+
</SettingsRow>
5578
</Card>
5679
</div>
5780
)

packages/kilo-vscode/webview-ui/src/i18n/en.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,8 @@ export const dict = {
972972
"settings.display.layout.description": "Layout mode for the chat interface",
973973
"settings.display.layout.auto": "Auto",
974974
"settings.display.layout.stretch": "Stretch",
975+
"settings.display.fontSize.title": "Font size",
976+
"settings.display.fontSize.description": "Adjust the font size for the webview UI (default: 13px)",
975977

976978
"settings.providers.defaultModel.title": "Default Model",
977979
"settings.providers.defaultModel.description": "Primary model for conversations",

packages/kilo-vscode/webview-ui/src/types/messages.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ export interface Config {
295295
compaction?: CompactionConfig
296296
tools?: Record<string, boolean>
297297
layout?: "auto" | "stretch"
298+
fontSize?: number
298299
experimental?: ExperimentalConfig
299300
}
300301

packages/opencode/src/config/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,7 @@ export namespace Config {
12481248
),
12491249
instructions: z.array(z.string()).optional().describe("Additional instruction files or patterns to include"),
12501250
layout: Layout.optional().describe("@deprecated Always uses stretch layout."),
1251+
fontSize: z.number().min(10).max(24).optional().describe("Custom font size for the webview UI (default: 13)"), // kilocode_change
12511252
permission: Permission.optional(),
12521253
tools: z.record(z.string(), z.boolean()).optional(),
12531254
enterprise: z

0 commit comments

Comments
 (0)