#18497 · @amosbird · opened Mar 21, 2026 at 7:19 AM UTC · last updated Mar 21, 2026 at 7:30 AM UTC
feat(tui): add sidebar_position config option
Score breakdown
Impact
Clarity
Urgency
Ease Of Review
Guidelines
Readiness
Size
Trust
Traction
Summary
This PR introduces a sidebar_position configuration option for the TUI, allowing users to move the sidebar to the left. It implements this new feature using CSS flex-direction and includes schema updates and unit tests.
Description
Issue for this PR
Closes #16349 (TUI portion)
Type of change
- [ ] Bug fix
- [x] New feature
- [ ] Refactor / code improvement
- [x] Documentation
What does this PR do?
Adds a sidebar_position option to tui.json config so users can move the TUI sidebar to the left side of the screen.
The implementation uses row-reverse flex direction on the main layout container when sidebar_position is set to "left". This cleanly swaps the sidebar without restructuring the component tree. The narrow-screen overlay mode also flips its alignment accordingly (flex-start vs flex-end).
Schema: Added sidebar_position: z.enum(["right", "left"]).optional() to TuiOptions in tui-schema.ts. No extra wiring needed — it flows through useTuiConfig() automatically.
Usage in tui.json:
{
"sidebar_position": "left"
}
Omitting the option or setting "right" preserves the current default behavior.
How did you verify your code works?
bun typecheckpasses inpackages/opencode(only pre-existing error indialog-provider.tsxremains)bun test test/config/tui.test.ts— 22 tests pass, including 2 new tests forsidebar_positionconfig loading- Manually tested both
"left"and"right"(and omitted) values in the TUI
Screenshots / recordings
N/A — terminal UI change, verified manually.
Checklist
- [x] I have tested my changes locally
- [x] I have not included unrelated changes in this PR
Linked Issues
#16349 [FEATURE]: Add option to swap left/right panel layout
View issueComments
No comments.
Changed Files
packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
+3−2packages/opencode/src/config/tui-schema.ts
+4−0packages/opencode/test/config/tui.test.ts
+32−0packages/web/src/content/docs/ar/config.mdx
+2−1packages/web/src/content/docs/ar/tui.mdx
+18−9packages/web/src/content/docs/bs/config.mdx
+2−1packages/web/src/content/docs/bs/tui.mdx
+3−1packages/web/src/content/docs/config.mdx
+2−1packages/web/src/content/docs/da/config.mdx
+2−1packages/web/src/content/docs/da/tui.mdx
+3−1packages/web/src/content/docs/de/config.mdx
+2−1packages/web/src/content/docs/de/tui.mdx
+3−1packages/web/src/content/docs/es/config.mdx
+2−1packages/web/src/content/docs/es/tui.mdx
+3−1packages/web/src/content/docs/fr/config.mdx
+2−1packages/web/src/content/docs/fr/tui.mdx
+3−1packages/web/src/content/docs/it/config.mdx
+2−1packages/web/src/content/docs/it/tui.mdx
+3−1packages/web/src/content/docs/ja/config.mdx
+2−1packages/web/src/content/docs/ja/tui.mdx
+3−1packages/web/src/content/docs/ko/config.mdx
+2−1packages/web/src/content/docs/ko/tui.mdx
+3−1packages/web/src/content/docs/nb/config.mdx
+2−1packages/web/src/content/docs/nb/tui.mdx
+3−1packages/web/src/content/docs/pl/config.mdx
+2−1packages/web/src/content/docs/pl/tui.mdx
+3−1packages/web/src/content/docs/pt-br/config.mdx
+2−1packages/web/src/content/docs/pt-br/tui.mdx
+3−1packages/web/src/content/docs/ru/config.mdx
+2−1packages/web/src/content/docs/ru/tui.mdx
+3−1packages/web/src/content/docs/th/config.mdx
+2−1packages/web/src/content/docs/th/tui.mdx
+3−1packages/web/src/content/docs/tr/config.mdx
+2−1packages/web/src/content/docs/tr/tui.mdx
+3−1packages/web/src/content/docs/tui.mdx
+3−1packages/web/src/content/docs/zh-cn/config.mdx
+2−1packages/web/src/content/docs/zh-cn/tui.mdx
+19−9packages/web/src/content/docs/zh-tw/config.mdx
+2−1packages/web/src/content/docs/zh-tw/tui.mdx
+3−1