Every developer who manages more than one GitHub account knows this moment.
You push code. GitHub accepts it. Then you check the commit history and see it was pushed under your personal account — not your work one. Or worse, a client's repository now has your personal email baked into the commit forever.
You run git config user.email and realize you forgot to set it for this repo. Again.
This happens because Git doesn't know which "you" is working right now. It just uses whatever global config you last set. If you're switching between a personal project, a day job, and a freelance client in the same day — you're one distracted moment away from a messy commit history.
I've been that developer. Many times.
The Workarounds Are Painful
The common solutions exist, but none of them feel right:
Per-repo config — You have to remember to run git config user.email every single time you start working in a new repo. One forgotten step and you've already made a dirty commit.
Manually managing ~/.ssh/config — If you want SSH keys per account (which you should), you have to hand-edit config files, remember host aliases like github.com-work, and mentally track which key maps to which account. It works, but it's fragile and invisible.
Shell aliases or scripts — Some developers write bash functions to switch contexts. These are clever but opaque to anyone else on the machine, and they still require discipline to actually use.
None of these solutions make the right thing the easy thing.
So I Built DevSwitch
DevSwitch is a cross-platform desktop app (Electron + React) that gives each of your Git identities a proper home — with its own SSH key, its own profile, and one-click switching.
Here's what it does:
Profile management — Create named profiles like "Work", "Personal", or "Freelance Client A". Each profile stores a Git username, email, and its own SSH key. No more mental bookkeeping.
SSH key generation built in — You don't need to touch the terminal. DevSwitch generates ED25519 or RSA keys, adds them to your SSH agent, and writes the right entries to ~/.ssh/config — all automatically.
GitHub OAuth integration — Connect a profile to your GitHub account and DevSwitch can upload the SSH public key directly to GitHub for you. No copying and pasting into Settings.
Auto-sync existing keys — Already have a bunch of SSH keys floating around in ~/.ssh? DevSwitch scans them, reads your existing config, and creates profiles for the ones it finds.
Dark and light theme, custom title bar, works on Windows, macOS, and Linux.
The goal was simple: make switching Git identities as fast and obvious as switching a browser profile.
Where the Project Is Right Now
I'll be honest — DevSwitch is early. The core features work. You can create profiles, generate and manage SSH keys, connect to GitHub, and switch between identities. The UI is clean and the architecture is solid (TypeScript throughout, Zustand for state, electron-store for encrypted persistence).
But there's a lot left to build:
- GitHub Actions for automated release builds (
.exe,.dmg,.AppImage) — working on this now - Profile templates and groups
- CLI companion tool
- Git hook integration to auto-switch based on the repo you enter
- Export/import for backup and device sync
- More OAuth providers (GitLab, Bitbucket) The repo has a CONTRIBUTING.md, a CODE_OF_CONDUCT, and a handful of open issues. The stack is approachable — if you've worked with React and TypeScript, you can find your way around quickly. Electron has its quirks but the architecture keeps the main process and renderer clearly separated.
I'm Looking for Contributors
This is the real reason I'm writing this post.
DevSwitch is open source under the MIT license and I want to build it with people who have felt the same pain. Whether you want to:
- Pick up a specific feature from the roadmap
- Improve the Windows or Linux experience (I develop on macOS)
- Write tests
- Improve the docs or README
- Give feedback on the UX ...I'd love to hear from you.
The repo is at github.com/umesh-saini/DevSwitch. There are open issues with good first issue labels if you want a low-friction starting point. You can also open a Discussion if you have ideas or questions before diving in.
If you've ever lost a commit to the wrong account — you already understand why this exists. Come help make it better.
Built with Electron, React, TypeScript, Tailwind CSS, and Radix UI.
Top comments (0)