<?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: Karthik K</title>
    <description>The latest articles on DEV Community by Karthik K (@karthikk9828).</description>
    <link>https://dev.to/karthikk9828</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%2F514803%2F1ce97323-2128-4056-983f-0b110d2adf75.png</url>
      <title>DEV Community: Karthik K</title>
      <link>https://dev.to/karthikk9828</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karthikk9828"/>
    <language>en</language>
    <item>
      <title>Gitwyn - a native Git client that lives right beside Xcode</title>
      <dc:creator>Karthik K</dc:creator>
      <pubDate>Sat, 01 Aug 2026 14:22:22 +0000</pubDate>
      <link>https://dev.to/karthikk9828/gitwyn-a-native-git-client-that-lives-right-beside-xcode-4b1k</link>
      <guid>https://dev.to/karthikk9828/gitwyn-a-native-git-client-that-lives-right-beside-xcode-4b1k</guid>
      <description>&lt;p&gt;If you write Swift, you already know Xcode's Source Control menu is... fine. Fine for a commit here and there. Not fine for staging individual hunks, untangling a merge conflict, or actually reading your commit history.&lt;/p&gt;

&lt;p&gt;I got tired of alt-tabbing to a separate Git GUI (or the terminal) every time I needed to do anything beyond "commit and push," so I built &lt;strong&gt;Gitwyn&lt;/strong&gt; — a native macOS Git client that opens directly on top of your active Xcode project with one keyboard shortcut.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fck51tr4vnltm351x5ri5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fck51tr4vnltm351x5ri5.png" alt=" " width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The pitch
&lt;/h2&gt;

&lt;p&gt;Press ⌘⇧E in any Xcode window. Gitwyn detects the repo behind whatever project you have open in Xcode and pops up right there — no picking a folder, no separate app to manage, no context switch.&lt;/p&gt;

&lt;p&gt;It's a 100% native SwiftUI app. No Electron, no bundled runtime — just a small, fast window that gets out of your way when you're done.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Granular staging.&lt;/strong&gt; Unstaged and staged changes side by side. Stage or discard a single hunk (not just a whole file), watch the counts update live, and commit exactly what you meant to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7sbboibmcd7fequb9g6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7sbboibmcd7fequb9g6p.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A commit graph that scrolls.&lt;/strong&gt; Full history, infinite scroll, authors/branches/messages, a diff for every commit. Search by message, author, or hash. Branch, reset, cherry-pick, or revert straight from the graph — no memorizing flags.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcuaufzbvbuw4dz1hqisy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcuaufzbvbuw4dz1hqisy.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Merge conflicts without leaving Xcode.&lt;/strong&gt; Every conflicted file in one list, current vs. incoming shown side by side per hunk, Accept on either side. For the ones that need real thought, jump straight into Xcode — then commit the merge from the same panel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyxb9cet4e99382d3mbph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyxb9cet4e99382d3mbph.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Branch/tag switching that doesn't fight you.&lt;/strong&gt; One command palette, start typing, jump. No hunting through Xcode's branch dropdown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jm9o9awpv5eil98fg39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jm9o9awpv5eil98fg39.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stashes with actual names.&lt;/strong&gt; Shelve work-in-progress, see exactly what's inside (files, hunks, add/delete counts) before you apply, pop, or drop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Funsyvwuthwm6xetjnlxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Funsyvwuthwm6xetjnlxs.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use &lt;code&gt;git&lt;/code&gt; in the terminal / SourceTree / Tower / GitButler / etc?
&lt;/h2&gt;

&lt;p&gt;Nothing wrong with any of those — I still drop to the terminal plenty. Gitwyn's whole reason to exist is proximity: it's bound to the Xcode window you're already in, so the loop of "look at diff → stage a hunk → switch branch → resolve a conflict → back to writing code" never leaves the editor you're staring at. If you don't work in Xcode day-to-day, this project probably isn't for you — and that's fine, it's not trying to be a general-purpose Git GUI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy / how it's built
&lt;/h2&gt;

&lt;p&gt;Everything runs locally against your existing &lt;code&gt;git&lt;/code&gt; install — Gitwyn doesn't upload, cache, or phone home with anything about your source code. It shells out to git the same way you would, just with a UI on top.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's free, requires macOS 26+.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://gitwyn.com" rel="noopener noreferrer"&gt;https://gitwyn.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/GitwynApp/Gitwyn" rel="noopener noreferrer"&gt;https://github.com/GitwynApp/Gitwyn&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would genuinely love feedback, bug reports, or "why doesn't it do X" — I read everything that comes in.&lt;/p&gt;

</description>
      <category>xcode</category>
      <category>git</category>
      <category>macos</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
