Files
1jehuang--jcode/docs/DESKTOP_SINGLE_SESSION_DESIGN.md
wehub-resource-sync a789495a98
FreeBSD Smoke / FreeBSD Smoke (x86_64) (push) Has been cancelled
CI / Quality Guardrails (push) Has been cancelled
CI / Build & Test (macos-latest) (push) Has been cancelled
CI / Build & Test (ubuntu-latest) (push) Has been cancelled
CI / Build & Test (windows-latest) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / PowerShell Syntax (push) Has been cancelled
CI / Windows Cross-Target Check (Linux) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:34 +08:00

2.6 KiB

Desktop Single Session Design

This document describes the visual target for the default jcode-desktop single-session mode.

Layering

The single-session view is the primitive desktop surface. The Niri/workspace mode should later compose multiple single-session views rather than redefining what a session looks like.

flowchart TD
    SingleSession[SingleSessionView\nspawn/connect/render one Jcode session]
    Workspace[Niri Workspace Wrapper\narrange many sessions]
    SessionA[SingleSessionView]
    SessionB[SingleSessionView]
    SessionC[SingleSessionView]

    Workspace --> SessionA
    Workspace --> SessionB
    Workspace --> SessionC

Typography

Primary font target:

  • Family: JetBrainsMono Nerd Font
  • Weight: Light
  • Preferred fontconfig match: JetBrainsMonoNerdFont-Light.ttf
  • Fallback family: JetBrainsMono Nerd Font Mono, then JetBrains Mono, then monospace

Rationale:

  • Mono fits code, transcripts, tool output, and terminals.
  • Light weight makes a dense agent session feel less heavy than the current blocky bitmap prototype.
  • Nerd Font coverage gives us room for subtle icons/status glyphs later without switching fonts.

Type scale

Initial target scale for a single session window:

Role Size Weight Notes
Session title 18 px Light Top left, preserves original case
Message body 15 px Light Main transcript and assistant text
Metadata/status 12 px Light Muted status, model, cwd, token/debug hints
Inline code/tool output 14 px Light Same family, tighter line-height

Line-height targets:

  • Body: 1.45
  • Code/tool output: 1.35
  • Metadata: 1.25

Rendering note

The current prototype uses a custom 5x7 bitmap text path in render_helpers.rs. That path is acceptable for layout exploration only. The next rendering pass should replace single-session text with a real font renderer that can:

  1. Load JetBrainsMonoNerdFont-Light.ttf from fontconfig/system font paths.
  2. Preserve casing and punctuation.
  3. Shape/rasterize UTF-8 text, including Nerd Font glyphs.
  4. Support alpha text over the existing WGPU surface.
  5. Allow the workspace wrapper to reuse the same text renderer for each composed session.

First visual goal

The default single-session window should read as one calm, focused coding conversation:

  • No workspace lane/status strip.
  • One content column.
  • Large breathing room around the transcript.
  • JetBrains Mono Light Nerd for every text element.
  • Muted graphite text over the existing soft pastel background until a more final theme is chosen.