Skip to content

Feature Request: Custom Logo Configuration #12016

Closed

Description

@jobrk

Feature hasn't been suggested before.

  • I have verified this feature I'm about to request hasn't been suggested before.

Describe the enhancement you want to request

Summary

Add the ability to customize or disable the OpenCode logo displayed in the CLI and TUI. This is useful for enterprise deployments, custom branding, or users who prefer a minimal interface.

Motivation

  • Enterprise branding: Organizations deploying OpenCode internally may want to display their own branding
  • White-labeling: Enables custom distributions of OpenCode with different branding
  • Minimal UI: Some users may prefer to disable the logo entirely for a cleaner interface

Proposed Solution

Add a logo configuration option that accepts:

  • false - Disable the logo entirely
  • A file path (string) - Path to a custom logo text file

Example Configuration

{
  "logo": "~/.config/opencode/my-logo.txt"
}

Or to disable:

{
  "logo": false
}

Logo File Format

Plain text ASCII art. ANSI escape codes are supported in CLI output but stripped in the TUI (which uses theme-based colors).

╔══════════════════════════════════════╗
║       My Company Name                ║
║       Powered by OpenCode            ║
╚══════════════════════════════════════╝

Implementation Details

  • Custom logo appears in:
    • TUI home screen
    • opencode web command
    • opencode upgrade command
    • opencode uninstall command
  • CLI help (--help) continues to show the default OpenCode logo (set synchronously at startup)
  • Falls back to default logo if configured file is not found

Alternatives Considered

  1. Environment variable only: Less flexible than config file approach
  2. Inline logo in config: Would make config files unwieldy for multi-line ASCII art
  3. Theme-based logos: More complex, could be a future enhancement

Activity

  1. added
    discussionUsed for feature requests, proposals, ideas, etc. Open discussion
    on Feb 3, 2026
  2. github-actions commented on Apr 5, 2026

    @github-actions
    Contributor

    To stay organized issues are automatically closed after 90 days of no activity. If the issue is still relevant please open a new one.

  3. ngothiensinh commented on Nov 11, 2026

    @ngothiensinh

    For anyone who still needs this on OpenCode 2.x: there is still no logo setting (it isn't in the CLI settings or in https://opencode.ai/v2/cli.json), and the TUI plugin slots don't cover the home logo (V1's home_logo slot is gone in V2). Until there's a real option, here is a workaround that patches the logo in the binary. I tested it only with the 2.2.5 linux-arm64 release binary.

    Caveats

    • This is an unofficial hack. An update replaces the binary, so you have to re-run the script after every update. If a release changes the logo or how it is stored, the script exits with an error instead of patching.
    • Only the left word can change. "code" stays, and a word shorter than "open" leaves the logo a few cells off-centre.
    • macOS release binaries are code-signed, so a patched one probably needs re-signing. I haven't tried macOS or Windows.
    • A real logo option, or a plugin slot for the home logo, would still be much better than this.

    Result

    image

    How it works

    • The home logo is data: two arrays of four 19-cell rows of block glyphs, left ("open", muted) and right ("code", bright).
    • Release binaries are built with Bun --bytecode and the TUI runs the bytecode, so editing the JS source embedded in the binary has no effect.
    • In the bytecode, rows 1–3 of "open" are UTF-16LE strings, each present exactly once. Overwriting them in place with rows of the same length (19 characters) is enough. Nothing else in the file moves.
    • Row 0 is stored as an 8-bit string (spaces only) and can't hold block glyphs, so new letters must fit in rows 1–3. The lower half of row 3 is the descender line.
    • In the rows, _ draws a shaded space, ^ an upper half block over shade, and ~ a shaded upper half block.

    This script turns "opencode" into "mycode". Edit M, Y and NEW for your own letters, keeping every row at 19 characters:

    """Patch OpenCode 2.x's TUI home logo: "opencode" -> "mycode".
    Usage: python3 patch-logo.py SRC DST
    """
    import sys
    
    # Rows 1-3 of "open" as stored in OpenCode 2.2.5.
    # "_" = shaded space, "^" = upper half block over shade, "~" = shaded upper half block.
    OPEN = [
        "█▀▀█ █▀▀█ █▀▀█ █▀▀▄",
        "█__█ █__█ █^^^ █__█",
        "▀▀▀▀ █▀▀▀ ▀▀▀▀ ▀~~▀",
    ]
    
    # Your letters, rows 1-3 only (row 0 can't be changed). Row 3's lower half is the descender line.
    M = ["█▀▀█▀▀▄", "█__█__█", "▀~~▀~~▀"]
    Y = ["█  █", "█▄▄█", "▄▄▄█"]
    # Every row must stay 19 characters; right-align so the word touches "code".
    NEW = [(M[r] + " " + Y[r]).rjust(19) for r in range(3)]
    
    src, dst = sys.argv[1], sys.argv[2]
    data = bytearray(open(src, "rb").read())
    for old, new in zip(OPEN, NEW):
        assert len(old) == len(new) == 19, (old, new)
        o, n = old.encode("utf-16-le"), new.encode("utf-16-le")
        if data.count(o) != 1:
            sys.exit("logo row %r found %d times, expected 1: different OpenCode build?" % (old, data.count(o)))
        i = data.find(o)
        data[i:i + len(o)] = n
    open(dst, "wb").write(bytes(data))
    print("patched", dst)
    python3 patch-logo.py /path/to/opencode ./opencode-mycode
    chmod +x ./opencode-mycode
    ./opencode-mycode
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

discussionUsed for feature requests, proposals, ideas, etc. Open discussion

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions