Repository navigation
Releases: praxis-labs-io/zen-linear
Release list
v0.4.1
This release fixes the Windows installer and reworks the settings form.
Changed
The settings form is sectioned. Appearance, Startup, Agents, Network and
Logging are listed down the left of it, one shown at a time. That list holds the
keyboard with j/k or the arrows, ⏎ crosses into the fields, and Save and
Cancel sit under the sections rather than past every field in the open one. Esc
goes back to the list before it closes the form, and the panel no longer resizes
as you step between sections. A panel too narrow for the column names the open
section on one line instead.
Fixed
The Windows installer no longer closes your terminal. irm | iex runs the
script in your own session, so a failed install ended the session with it. It
throws instead, and its error preference and strict mode end with the install
rather than staying in your session. It no longer narrows the TLS protocols
that session allows either.
The PATH line the installer prints is right. It pasted the whole process
PATH into your user PATH, which wrote entries that belonged to the session into
your account and lost anything the session had not picked up. It appends to the
user PATH it reads back now.
A 32-bit PowerShell takes the right binary. A 64-bit Windows running the
32-bit host reported x86, and the install refused a platform it has a binary
for.
The download is no longer slowed by its own progress bar. PowerShell 5.1
spends more on drawing one than on the transfer. 5.1 is what ships with Windows
and what irm | iex reaches.
A failed release lookup says why. Inside the error switch $_ was the
status code rather than the error, so a lookup that could not reach GitHub
printed an empty reason.
Install
curl -fsSL https://raw.githubusercontent.com/praxis-labs-io/zen-linear/main/install.sh | shmacOS or Linux, on arm64 or amd64. Windows:
irm https://raw.githubusercontent.com/praxis-labs-io/zen-linear/main/install.ps1 | iexAlready running zen-linear: zen-linear update.
On macOS and Linux the binary lands in ~/.local/bin, which some shells do not
carry on PATH. On Windows it lands in %LOCALAPPDATA%\Programs\zen-linear.
Either installer says so when the directory is not on your PATH, and neither
edits it for you.
The tree's icons need a Nerd Font. Without one they
draw as empty boxes, and nothing else depends on it.
v0.4.0
This release adds a Windows installer, an upgrade command, and pictures in
issue descriptions.
New
Windows installs in one line. install.ps1 is install.sh for Windows,
arm64 and amd64, with the same checksum gate. The binary lands in
%LOCALAPPDATA%\Programs\zen-linear. An upgrade renames the running copy aside
first, since Windows will not overwrite a binary in use.
zen-linear update upgrades in place. It runs the same installer a fresh
install runs, pointed at the directory the binary is already in. Quit the app
first. zen-linear help lists the commands.
Pictures draw in the description. A PNG in an issue's description is drawn
where it sits, scrolls with the page, and keeps its name underneath. It needs a
terminal that speaks the Kitty graphics protocol, which Ghostty, Kitty, WezTerm
and recent Konsole all do. zen-linear asks the terminal at launch rather than
reading TERM. Everywhere else the name and the link appear, as before. Set
images to off for that everywhere.
The status bar says when a newer release is out. Checked once a day. The
request carries the running version and nothing else, and nothing is
downloaded. update_check set to false turns it off, and a binary you built
yourself is never checked.
Fixed
Saving a setting keeps your place. A save used to reload the workspace, so
you lost the list you were on, your filters, and everything already fetched.
Now it applies what changed. The token, the endpoint and the timeout still
reload, since those move the connection itself.
A rate limit waits rather than fails. Linear reports one as a 400 rather
than a 429, so it read as an error and the request died. It now waits out the
window the response names, then retries. Writes are never resent.
Changed
An unrecognized command prints usage. zen-linear nope used to launch the
app. It now prints the command list and exits 1.
Install
curl -fsSL https://raw.githubusercontent.com/praxis-labs-io/zen-linear/main/install.sh | shmacOS or Linux, on arm64 or amd64. Windows:
irm https://raw.githubusercontent.com/praxis-labs-io/zen-linear/main/install.ps1 | iexAlready running zen-linear: zen-linear update.
On macOS and Linux the binary lands in ~/.local/bin, which some shells do not
carry on PATH. The installer says so if yours does not.
The tree's icons need a Nerd Font. Without one
they draw as empty boxes, and nothing else depends on it.
v0.3.0
The navigation tree reshaped around how Linear's own sidebar reads, and the
config and logging paths made honest on machines that are not the one they were
written on.
New
The tree has sections. All Issues, then Favorites in the order you keep
them, then Teams, with a blank row between. The headings are labels rather than
rows, so the cursor steps over them, and a section with nothing in it is left
out.
A team folds. A team's row only opens and closes, so folding one costs no
fetch. It opens onto its All Issues and three headings of its own, Cycles,
Status and Projects, each folded. The folder icon on a row says which way it
goes.
Favorites move with J and K. A favorite steps through the tree as it is
drawn: onto an open folder moves it in, off the end of a folder moves it back
out, and a closed folder is stepped over. A folder moves whole. All of it
writes back to Linear, so the web app stays in step.
A favorited project lists every team's issues. The favorite is the project,
not one team's slice of it. A team can be favorited too, and opens onto its own
All Issues.
The six documented environment variables work. LINEAR_API_ENDPOINT,
LINEAR_TIMEOUT, LINEAR_PAGE_SIZE, LINEAR_CACHE_TTL, LINEAR_LOG_FILE and
LINEAR_LOG_LEVEL override the config file. They were documented and inert.
A field an environment variable holds is shown, locked in the settings modal,
and never written back to config.json.
Fixed
A shared config file no longer breaks a second machine. log_file was
saved as a resolved path, so a config.json synced through a dotfiles repo
carried one machine's home directory to another, where the directory could not
be created. It is now resolved per machine, and a path equal to the machine's
default is not written out at all.
A log that cannot be opened no longer kills the launch. It falls back to the
default path, then to no logging, and says which in the app. The setting that
caused it lives in a modal the app never used to reach.
The log stops growing. It is capped at 5 MB, past which it is moved to
app.log.1, replacing any earlier one. A relaunch counts from the size on
disk rather than from nought.
A link in a description no longer underlines the rest of the details pane.
The underline an issue's first link opened ran down every row under it, through
the rules, the comment cards and the compose box. Links are marked by color.
Changed
~/.zen-linear is 0700. It holds credentials.json, and four writers used
to race to create it, three of them at 0755. A directory an older build left
open is tightened. A config.json under $XDG_CONFIG_HOME is left alone: that
one is usually a dotfiles checkout.
Install
curl -fsSL https://raw.githubusercontent.com/praxis-labs-io/zen-linear/main/install.sh | shmacOS or Linux, on arm64 or amd64. Windows takes the archive from the releases
page. The binary lands in ~/.local/bin, which some shells do not carry on
PATH; the installer says so if yours does not.
The tree's icons need a Nerd Font. Without one
they draw as empty boxes, and nothing else depends on it.
v0.2.0
The first published build of zen-linear, a terminal client for Linear.
What it does
Three panes. Your teams and the favorites from Linear's sidebar on the left,
the issue list in the middle, the issue itself on the right. ? lists every key
that works where you are.
The issue list groups, subgroups, sorts and filters, and the columns are
yours to pick and order. Search is workspace-wide, from the navigation pane.
Issues are edited in place. A cursor walks the metadata rows and Enter opens
the field's options under it. Title, due date, estimate and the description are
typed where the value already sits, and labels toggle in the same list.
Comments read as a conversation. Replies nest under what they answer, the
issue's activity is folded in by time, and your own comments can be edited or
deleted. A reply is written inside the thread it belongs to.
It reopens where you left it. The workspace, the place in the tree, the
issue, the filters and the search are kept between runs, and the tree is painted
from disk so a launch is not blank while it loads.
More than one workspace, each reading its API key from an environment
variable you name, switched with w.
Five themes, defaulting to your terminal's own colors.
An agent can be sent at an issue, through the Claude or Cursor CLI if you
have one installed.
Install
curl -fsSL https://raw.githubusercontent.com/praxis-labs-io/zen-linear/main/install.sh | shmacOS and Linux, arm64 and amd64. The binary lands in ~/.local/bin, and the
download is checked against the release's checksums before it is installed.
Windows takes the .zip from this page, the installer being a POSIX script.
Anything else builds with go install github.com/praxis-labs-io/zen-linear/cmd/zen-linear@latest.
Then authenticate:
zen-linear auth loginInstall and auth in full,
and the guide
for what the panes do.
Known gaps
- There is no Homebrew tap.
- Windows has no installer script, and is untested beyond the build.
- Agent runs need the provider's CLI on your PATH. Nothing is bundled.