Skip to content

tdi/tng

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tng

tng is a fast, keyboard-driven terminal client for Linear. It shows your assigned issues, the active cycle, and your team's backlog in a single grouped, filterable list, and lets you triage — change status, assignee, or priority, comment, edit descriptions, and create new issues — without leaving the terminal.

tng showing a grouped issue list

(Demo-mode data — see below.)

Features

  • Three views — My Issues, the active cycle, and the whole team backlog, grouped by workflow state with unicode glyphs ( in progress, todo, urgent, ...)
  • Issue detail in three screens — description with markdown rendering, full metadata, and the comment thread
  • Triage without leaving the list — optimistic status/assignee/priority changes with fuzzy pickers; instant local apply, revert on API failure
  • Your editor for writing — comments, descriptions, and new issues open $EDITOR
  • Branch-name yankY copies Linear's suggested git branch name

Install

From crates.io:

cargo install tng

Or from source:

cargo install --git https://github.com/tdi/tng

Requires a Rust toolchain.

Setup

tng needs a Linear personal API key. Create one at https://linear.app/settings/account/security, then provide it either way:

  • Environment variable (takes priority):

    export LINEAR_API_KEY=lin_api_...
  • Config file — add api_key to config.toml (see below).

Launching without a key found in either place prints setup instructions and exits cleanly.

Demo mode

Want to kick the tires or grab a screenshot without a real account? Run:

tng --demo        # or: TNG_DEMO=1 tng

Demo mode drives the full UI against built-in fake data for a fictional "ACME" team — no API key, no network calls, nothing from your real Linear workspace.

Keys

Key Action
j/k, g/G move down/up, jump to top/bottom
Enter open issue detail
Tab / 1 2 3 switch view; inside detail: Main / Metadata / Comments sub-screens
Shift-Tab previous view; inside detail: previous sub-screen
s change status (picking Duplicate opens a chooser for the canonical issue)
a change assignee
p change priority
T switch team (persisted to config)
c add a comment (opens $EDITOR)
C create an issue (title, then editor for description, then pickers — Esc skips a picker field)
e edit description (opens $EDITOR)
/ filter the current list (Enter keeps the filter, Esc clears it)
Ctrl-K search all issues (workspace-wide)
o open the selected issue in your browser
y yank the issue identifier to the clipboard
Y yank the issue's git branch name to the clipboard
r refresh the current view
? toggle this help overlay
Esc back: close the detail view or help overlay (never quits)
q back when in the detail view, otherwise quit

Config file

tng reads config.toml from $XDG_CONFIG_HOME/tng/config.toml, falling back to ~/.config/tng/config.toml when XDG_CONFIG_HOME is unset:

api_key = "lin_api_..."   # optional; LINEAR_API_KEY env var takes priority
default_team = "BIT"      # optional; team key, set automatically when you press T
editor = "nvim"           # optional; falls back to $EDITOR, then "vi"

The file is written automatically when you switch teams with T, so the choice survives a restart. All fields are optional and the file does not need to exist on first run.

Logs

tng writes structured logs to $XDG_STATE_HOME/tng/tng.log, falling back to ~/.local/state/tng/tng.log when XDG_STATE_HOME is unset. Set RUST_LOG to control verbosity (defaults to info).

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

About

Fast, keyboard-driven terminal client for Linear

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

3 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages