<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Suraj lama</title>
    <description>The latest articles on DEV Community by Suraj lama (@suraj16thjan).</description>
    <link>https://dev.to/suraj16thjan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4102311%2Fc67f0e45-aa89-4dec-b1ef-4a22bc048a78.jpg</url>
      <title>DEV Community: Suraj lama</title>
      <link>https://dev.to/suraj16thjan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suraj16thjan"/>
    <language>en</language>
    <item>
      <title>gitsmith: A Terminal UI for Both GitLab and GitHub</title>
      <dc:creator>Suraj lama</dc:creator>
      <pubDate>Mon, 31 Aug 2026 08:30:48 +0000</pubDate>
      <link>https://dev.to/suraj16thjan/gitsmith-a-terminal-ui-for-both-gitlab-and-github-3c4h</link>
      <guid>https://dev.to/suraj16thjan/gitsmith-a-terminal-ui-for-both-gitlab-and-github-3c4h</guid>
      <description>&lt;p&gt;I keep one foot in GitLab and the other in GitHub. Both have solid CLIs — &lt;strong&gt;glab&lt;/strong&gt; and &lt;strong&gt;gh&lt;/strong&gt; — but when I need to scan a list of merge requests, check a failing pipeline, read a diff, and approve something, that's four commands, four walls of JSON, four context switches. The web UI works, but it's slow, and I lose my terminal flow every time I reach for it.&lt;/p&gt;

&lt;p&gt;I wanted one screen where I could do all of it with a keyboard. So I built &lt;strong&gt;gitsmith&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;gitsmith is a terminal UI that wraps &lt;code&gt;glab&lt;/code&gt; and &lt;code&gt;gh&lt;/code&gt;. Run it inside any git repo and it auto-detects the host from your remote. Run it outside a repo and it asks which forge to use, lists your projects, and drops you in.&lt;/p&gt;

&lt;p&gt;There are &lt;strong&gt;11 tabs&lt;/strong&gt; — Issues, MRs/PRs, Pipelines, Runners, Releases, Tags, Branches, Commits, Todos, Milestones, Members — and every state is listed. Closed issues show up below open ones, so you can reopen something without opening a browser. Protected branches sit above the rest. The tab bar is reorderable, and you can hide tabs you don't use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-side diffs
&lt;/h2&gt;

&lt;p&gt;This is where I spent the most time. gitsmith renders syntax-highlighted side-by-side diffs using &lt;a href="https://github.com/trishume/syntect" rel="noopener noreferrer"&gt;syntect&lt;/a&gt;, with line numbers, a sticky file header, and a file list that follows your scroll. Press &lt;code&gt;v&lt;/code&gt; on any MR or &lt;code&gt;Enter&lt;/code&gt; on a commit.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[&lt;/code&gt; and &lt;code&gt;]&lt;/code&gt; jump between files. The whole thing runs in the terminal — no browser, no latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pipeline drill-down
&lt;/h2&gt;

&lt;p&gt;Enter a pipeline to see its jobs. Enter a job to get its &lt;strong&gt;live-tailing ANSI log&lt;/strong&gt; with severity coloring — ERROR lines in red, WARN in yellow, timestamps dimmed, and the CI's own ANSI colors passed through untouched. It follows the latest output like GitLab's trace view.&lt;/p&gt;

&lt;p&gt;Bridge jobs drill into downstream pipelines automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actions, not just views
&lt;/h2&gt;

&lt;p&gt;gitsmith isn't read-only:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Approve, merge, and close&lt;/strong&gt; MRs/PRs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close, reopen, and comment&lt;/strong&gt; on issues (opens &lt;code&gt;$EDITOR&lt;/code&gt; for the comment body)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retry or cancel&lt;/strong&gt; pipelines and individual jobs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create&lt;/strong&gt; new MRs/PRs, issues, pipelines, and tags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add members&lt;/strong&gt; with a role picker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All destructive actions are behind a &lt;code&gt;[y/n]&lt;/code&gt; confirm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zero auth setup
&lt;/h2&gt;

&lt;p&gt;gitsmith shells out to &lt;code&gt;glab&lt;/code&gt; and &lt;code&gt;gh&lt;/code&gt;, so it uses your existing authentication. No tokens to configure, no OAuth flows. If you've already run &lt;code&gt;glab auth login&lt;/code&gt; or &lt;code&gt;gh auth login&lt;/code&gt;, you're set.&lt;/p&gt;

&lt;p&gt;It reads the config files of both CLIs directly — &lt;code&gt;glab&lt;/code&gt;'s &lt;code&gt;config.yml&lt;/code&gt; and &lt;code&gt;gh&lt;/code&gt;'s &lt;code&gt;hosts.yml&lt;/code&gt; — checking &lt;code&gt;$GLAB_CONFIG_DIR&lt;/code&gt;, &lt;code&gt;$XDG_CONFIG_HOME&lt;/code&gt;, &lt;code&gt;~/.config&lt;/code&gt;, and platform-specific paths. Only host names are read; tokens in those files are never touched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-host, multi-instance
&lt;/h2&gt;

&lt;p&gt;Press &lt;code&gt;S&lt;/code&gt; to switch between GitLab and GitHub (or between self-hosted instances) without restarting. Press &lt;code&gt;P&lt;/code&gt; to fuzzy-search your repos on the current host.&lt;/p&gt;

&lt;p&gt;Every configured instance from both CLIs is offered instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the hood
&lt;/h2&gt;

&lt;p&gt;gitsmith is written in &lt;strong&gt;Rust&lt;/strong&gt;, about 10,500 lines across a handful of focused modules. The UI is built with &lt;a href="https://github.com/ratatui/ratatui" rel="noopener noreferrer"&gt;ratatui&lt;/a&gt;, and syntax highlighting uses &lt;a href="https://github.com/trishume/syntect" rel="noopener noreferrer"&gt;syntect&lt;/a&gt; with the pure-Rust regex backend so &lt;code&gt;cargo install&lt;/code&gt; needs no C toolchain.&lt;/p&gt;

&lt;p&gt;Lists pull 100 rows per page and keep fetching in the background (up to 500) while you read, so you don't hit the API's default 20-30 row ceiling.&lt;/p&gt;

&lt;p&gt;Nine built-in themes — Neon, Tokyo Night, Gruvbox, Rose Pine, Catppuccin, Nord, Dracula, Solarized, Everforest — press &lt;code&gt;t&lt;/code&gt; to pick one with a live preview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;Quick install on macOS or Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/suraj16thjan/gitsmith/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or via Cargo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;gitsmith &lt;span class="nt"&gt;--locked&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Requirements: &lt;a href="https://gitlab.com/gitlab-org/cli" rel="noopener noreferrer"&gt;glab&lt;/a&gt; authenticated for GitLab repos, and/or &lt;a href="https://cli.github.com" rel="noopener noreferrer"&gt;gh&lt;/a&gt; authenticated for GitHub repos.&lt;/p&gt;



&lt;p&gt;gitsmith is MIT-licensed and open source. Contributions, bug reports, and feature ideas are welcome.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/suraj16thjan" rel="noopener noreferrer"&gt;
        suraj16thjan
      &lt;/a&gt; / &lt;a href="https://github.com/suraj16thjan/gitsmith" rel="noopener noreferrer"&gt;
        gitsmith
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Terminal UI for GitLab &amp;amp; GitHub: issues, MRs/PRs, pipelines, live job logs, diffs, and a fuzzy repo switcher — one keyboard-driven interface over glab &amp;amp; gh.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;gitsmith&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/suraj16thjan/gitsmith/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.rust-lang.org" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f249a7ed4b2db85ac94434de350ef411484db62e08204ac748f5665e08f72332/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d616465253230776974682d527573742d6f72616e67652e737667" alt="Made with Rust"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A fast terminal UI for &lt;strong&gt;GitLab and GitHub&lt;/strong&gt;, built with &lt;a href="https://github.com/ratatui/ratatui" rel="noopener noreferrer"&gt;&lt;code&gt;ratatui&lt;/code&gt;&lt;/a&gt;. &lt;code&gt;gitsmith&lt;/code&gt; wraps the official &lt;code&gt;glab&lt;/code&gt; and &lt;code&gt;gh&lt;/code&gt; CLIs and auto-detects which one to use from your git remote — one keyboard-driven interface for issues, merge/pull requests, pipelines, jobs, logs, diffs, and more.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Quick install (macOS / Linux)&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;curl -fsSL https://raw.githubusercontent.com/suraj16thjan/gitsmith/main/install.sh &lt;span class="pl-k"&gt;|&lt;/span&gt; bash&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Downloads the prebuilt binary for your platform from the latest GitHub release
and installs it to &lt;code&gt;~/.local/bin&lt;/code&gt; (or &lt;code&gt;/usr/local/bin&lt;/code&gt; when writable). Pin a
version with &lt;code&gt;GITSMITH_VERSION=v0.2.2&lt;/code&gt; or change the target with
&lt;code&gt;GITSMITH_BIN_DIR=~/bin&lt;/code&gt;. No Rust toolchain required.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;From crates.io&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;cargo install gitsmith --locked&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;From source&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/suraj16thjan/gitsmith
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; gitsmith
cargo install --path &lt;span class="pl-c1"&gt;.&lt;/span&gt; --locked   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; installs the `gitsmith` binary to ~/.cargo/bin&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Or just run it in place without installing:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;cargo run --release&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Rust (stable)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gitlab.com/gitlab-org/cli" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;glab&lt;/code&gt;&lt;/a&gt; authenticated for GitLab repos, and/or &lt;a href="https://cli.github.com" rel="noopener noreferrer"&gt;&lt;code&gt;gh&lt;/code&gt;&lt;/a&gt; authenticated for GitHub repos&lt;/li&gt;
&lt;li&gt;Run it anywhere — inside a…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/suraj16thjan/gitsmith" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>rust</category>
      <category>gitlab</category>
      <category>github</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
