Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

💡 OSC 8 hyperlink support

Open
#67 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
55/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
c, typescript
Domain
cli

Research direction

Start with the failing test in test/osc8-hyperlinks.test.ts and the text operation in ops.ts. Trace text decoding through reduce at src/clayterm.c:562, then verify the renderer emits OSC 8 around the run while keeping the link bytes zero-width for rendering and measurement.

Written by the indexing model from the issue text.

Description

enhancement

Is your feature request related to a problem?

There's no built-in way to render a hyperlink inside text. Terminals support OSC 8 hyperlinks (ESC ]8;;<url> … ESC ]8;;), which render as clickable links, but text only takes a string plus styling—so a CLI can't emit a clickable URL without hand-writing the escape sequence and fighting the renderer's U+FFFD substitution.

Describe the solution you'd like

Either a new link("value", { href: "https://example.com" }) util, or extending the text options with an optional { href }.

link("docs", { href: "https://example.com" });
text("docs", { href: "https://example.com" });
// emits:  ESC ]8;;https://example.com ST   docs   ESC ]8;; ST

The link text renders and measures like normal text; the OSC 8 open/close bytes are zero-width.

Describe alternatives you've considered

Putting the OSC 8 bytes inside the content string doesn't work today—they'd be mangled to U+FFFD. A verbatim-passthrough escape hatch (#66) would let you hand-roll it, but a first-class href option keeps width accounting correct and the call site readable.

Additional context

Failing test case on nm/repro/osc8-hyperlinks (test · diff).

Needs an href field on the text op (ops.ts)—or a link() helper that sets it—carried through the text decode in reduce (src/clayterm.c:562); the renderer emits the OSC 8 open before the run's glyph cells and the close after, both zero-width.

Dominant language
TypeScript
Stars
42
Forks
2
Avg merge
2d 5h
Merged PRs (30d)
12

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from bombshell-dev/tty

All issues in bombshell-dev/tty

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.