Skip to content

Commit 02b0593

Browse files
committed
fix(tauri): eliminate WebKitGTK scroll and white-flash issues
Two root causes fixed: 1. White flash on startup: add backgroundColor #0a0a0a to tauri.conf.json window config so the webview starts dark before Next.js hydrates. 2. Scroll broken on Linux: WebKitGTK enforces min-height:auto on flex items, so flex-1 overflow-y-auto containers never scroll — they grow to content height instead. Add min-h-0 to every affected scroll container and skeleton <main> element across 15 files: settings, settings/tokens, my-issues, projects/issues, inbox, archived, usage, teams/issues, teams, loading, home skeleton, board skeleton, execution-drawer, brainstorm-panel, project-list.
1 parent 51b9952 commit 02b0593

17 files changed

Lines changed: 66 additions & 16 deletions

File tree

ISSUES.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,55 @@ See `.sisyphus/plans/openlinear-issues.md` for full root-cause analysis and file
783783

784784
---
785785

786+
## [2026-05-26] — Fix all Tauri/WebKitGTK rendering issues
787+
788+
**Status:** Done
789+
**Agent:** Sisyphus (OpenCode)
790+
791+
### What was done
792+
793+
Searched session history and codebase to identify every Tauri/WebKitGTK problem. Found and fixed two root causes:
794+
795+
**1. White flash on startup (`tauri.conf.json`)**
796+
- Added `"backgroundColor": "#0a0a0a"` to the window config so the Tauri webview starts dark, eliminating the white flash before Next.js hydrates.
797+
798+
**2. Scroll broken throughout the app (WebKitGTK `min-height: auto` enforcement)**
799+
- WebKitGTK strictly enforces the CSS spec: a flex item's default `min-height` is `auto`, so `flex-1 overflow-y-auto` alone cannot produce a scrollable area — the item grows to content height instead of scrolling.
800+
- Added `min-h-0` to every `flex-1 overflow-*` scroll container and every `flex flex-1 flex-col` skeleton `<main>` that was missing it.
801+
- Affected: settings, settings/tokens, my-issues, projects/issues, inbox, archived, usage, teams/issues, teams, loading skeleton, home page skeleton, board skeleton, execution-drawer, brainstorm-panel, project-list.
802+
803+
**Already in place (no change needed):**
804+
- `globals.css` fast render profile: strips all `backdrop-filter`, transitions, shadows, and animations on Linux/Tauri to prevent compositor stalls on WebKitGTK.
805+
- Static font masters (4 woff2 files) instead of variable fonts — eliminates WebKitGTK variable-font rendering bugs.
806+
- `height: 100%` on `html`/`body` — already present.
807+
- `overscroll-behavior: none` — already present.
808+
809+
### Files changed
810+
- `apps/desktop/src-tauri/tauri.conf.json` — added `backgroundColor: "#0a0a0a"`
811+
- `apps/desktop-ui/app/(app)/settings/page.tsx``min-h-0` on main scroll container
812+
- `apps/desktop-ui/app/(app)/settings/tokens/page.tsx``min-h-0` on main
813+
- `apps/desktop-ui/app/(app)/my-issues/page.tsx``min-h-0` on scroll div
814+
- `apps/desktop-ui/app/(app)/projects/issues/page.tsx``min-h-0` on scroll div
815+
- `apps/desktop-ui/app/(app)/inbox/page.tsx``min-h-0` on scroll div
816+
- `apps/desktop-ui/app/(app)/archived/page.tsx``min-h-0` on scroll div
817+
- `apps/desktop-ui/app/(app)/usage/page.tsx``min-h-0` on scroll div
818+
- `apps/desktop-ui/app/(app)/teams/issues/page.tsx``min-h-0` on scroll div
819+
- `apps/desktop-ui/app/(app)/teams/page.tsx``min-h-0` on scroll div
820+
- `apps/desktop-ui/app/(app)/loading.tsx``min-h-0` on skeleton main
821+
- `apps/desktop-ui/app/(app)/page.tsx``min-h-0` on skeleton main
822+
- `apps/desktop-ui/app/(app)/projects/board/page.tsx``min-h-0` on skeleton main
823+
- `apps/desktop-ui/components/projects/project-list.tsx``min-h-0` on scroll div
824+
- `apps/desktop-ui/components/execution-drawer.tsx``min-h-0` on scroll div
825+
- `apps/desktop-ui/components/quick-capture/brainstorm-panel.tsx``min-h-0` on scroll div
826+
827+
### Issues encountered
828+
- None. Typecheck clean after all edits.
829+
830+
### Next steps / blockers
831+
- Rebuild the Tauri app (`pnpm --filter @openlinear/desktop tauri build` or `pnpm dev-live`) and verify scrolling works on all pages on Linux.
832+
833+
---
834+
786835
<!--
787836
AGENTS: Add new entries above this comment. Format:
788837

apps/desktop-ui/app/(app)/archived/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ export default function ArchivedPage() {
231231
</div>
232232
</div>
233233

234-
<div className="flex-1 overflow-auto">
234+
<div className="flex-1 min-h-0 overflow-auto">
235235
{loading ? (
236236
<div className="divide-y divide-linear-border/50">
237237
{Array.from({ length: 6 }).map((_, i) => (

apps/desktop-ui/app/(app)/inbox/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ export default function InboxPage() {
371371
})}
372372
</div>
373373

374-
<div className="flex-1 overflow-y-auto bg-linear-bg">
374+
<div className="flex-1 min-h-0 overflow-y-auto bg-linear-bg">
375375
{loading ? (
376376
<div className="divide-y divide-linear-border">
377377
{Array.from({ length: 6 }).map((_, i) => (

apps/desktop-ui/app/(app)/loading.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Skeleton } from "@/components/ui/skeleton"
22

33
export default function Loading() {
44
return (
5-
<main className="flex flex-1 flex-col">
5+
<main className="flex flex-1 flex-col min-h-0">
66
<header className="flex h-12 items-center gap-3 border-b border-border/40 px-4">
77
<Skeleton className="h-5 w-40" />
88
<div className="ml-auto flex gap-2">

apps/desktop-ui/app/(app)/my-issues/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export default function MyIssuesPage() {
163163
<div className="flex-1 h-full" data-tauri-drag-region />
164164
</header>
165165

166-
<div className="flex-1 overflow-y-auto bg-linear-bg">
166+
<div className="flex-1 min-h-0 overflow-y-auto bg-linear-bg">
167167
{loading ? (
168168
<div>
169169
{Array.from({ length: 2 }).map((_, gi) => (

apps/desktop-ui/app/(app)/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { Skeleton } from "@/components/ui/skeleton"
1212

1313
function HomePageSkeleton() {
1414
return (
15-
<main className="flex flex-1 flex-col bg-linear-bg">
15+
<main className="flex flex-1 flex-col min-h-0 bg-linear-bg">
1616
<div className="flex-1 flex items-center justify-center p-6">
1717
<Skeleton className="h-12 w-full max-w-3xl rounded-sm" />
1818
</div>

apps/desktop-ui/app/(app)/projects/board/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Skeleton } from "@/components/ui/skeleton"
1010

1111
function BoardSkeleton() {
1212
return (
13-
<main className="flex flex-1 flex-col bg-linear-bg">
13+
<main className="flex flex-1 flex-col min-h-0 bg-linear-bg">
1414
<header className="min-h-14 border-b border-linear-border flex items-center px-4 sm:px-6 py-2 sm:py-0 bg-linear-bg gap-2 sm:gap-4">
1515
<Skeleton className="h-5 w-36" />
1616
<div className="ml-auto flex items-center gap-2">

apps/desktop-ui/app/(app)/projects/issues/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ function ProjectIssuesContent() {
170170
<div className="flex-1 h-full" data-tauri-drag-region />
171171
</header>
172172

173-
<div className="flex-1 overflow-y-auto bg-linear-bg">
173+
<div className="flex-1 min-h-0 overflow-y-auto bg-linear-bg">
174174
{loading ? (
175175
<div>
176176
{Array.from({ length: 2 }).map((_, gi) => (

apps/desktop-ui/app/(app)/settings/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ function SettingsContent() {
190190
</div>
191191
</nav>
192192

193-
<main className="flex-1 overflow-y-auto p-6 sm:p-8">
193+
<main className="flex-1 min-h-0 overflow-y-auto p-6 sm:p-8">
194194
<div className="pb-8">{renderContent()}</div>
195195
</main>
196196
</div>

apps/desktop-ui/app/(app)/settings/tokens/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default function SettingsTokensPage() {
1111
<h1 className="text-lg font-semibold truncate">Personal Access Tokens</h1>
1212
<div className="flex-1 h-full" data-tauri-drag-region />
1313
</header>
14-
<main className="flex-1 overflow-y-auto p-6 sm:p-8">
14+
<main className="flex-1 min-h-0 overflow-y-auto p-6 sm:p-8">
1515
<div className="max-w-2xl pb-8">
1616
<PersonalAccessTokensSection />
1717
</div>

0 commit comments

Comments
 (0)