frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

Open in hackernews

Jjui – A Nice TUI for Jujutsu

https://github.com/idursun/jjui
219•Curiositry•1d ago

Comments

skeptrune•1d ago
Hardcore embodies building tools that make you happy. I'm personally fine with git, but it's inspiring to see so many people willing to experiment and build an ecosystem around a new VCS.
anticodon•1d ago
My only and biggest pain point with Git is that it requires a lot of manual merging even in a small project. You have several branches that are several weeks/months old and they touch the same set of files. Eventually, when they'll be approved for merging, you'll have to manually resolve lots of conflicts in all of them, and do that repeatedly. rerere is supposed to at least save you from repeating repeating same merges in every branch you rebase, but in my experience it never helps.

Unfortunately, as far as I understand, jj won't help with issue of unnecessary manual merges either.

cube2222•1d ago
Merges / conflict resolution in jj generally work much better than in git.

When rebasing a big branch in git with conflicts, you usually end up having to manually resolve conflicts in multiple commits in a row - in jj you just have to resolve the conflict in the first conflicted change, and it usually adapts subsequent changes automatically.

Overall, rebasing branches with conflicts used to be a chore for me with git, and is now mostly a nothing-burger. Of course, I don't know the exact details of your scenario, so I'm not sure if it'd help, but I'd say it's worth trying, esp. if it's a common pain-point for you.

cowsandmilk•1d ago
Is this the case even with rerere in git?
mtndew4brkfst•1d ago
My anecdotal experience is that I indirectly need/benefit from rerere much less often because I'm not usually resolving the same specific conflict more than once. I fix it the one time and then jj is rebasing a whole lineage for me, starting from the early commits, not from the single-branch leaves. That way I don't get "I rebased one branch and fixed this one already, but now I have to do it again for a second branch that shared the same conflicted commit as the first."

By contrast, git rebase --update-refs does not handle sibling branches but detaches them instead, and git replay hasn't had much TLC for UX yet. Plus, the last time I tried replay it was still obliterating commit signatures.

https://git.github.io/htmldocs/git-replay.html

viraptor•1d ago
This doesn't seem related to git or jj. If you have a conflict, you have a conflict. It's a social issue, not a software one. No software can resolve all code conflicts without people making final decisions. You can help the situation by automatically pinging people to refresh their old branches though.
silvanocerza•1d ago
Ah, this is nice!

I've been testing out Jujutsu this weekend and this will come in handy. I still need to wrap my head around the different overflow and this might make it easier.

endtime•1d ago
Looks like a nice project! Will try it out next week. In the meantime, I'll share my thoughts on jj in general, since I assume most readers here won't have tried jj.

I started using jj a few months ago. I had used Fig previously when I was at Google, but then spent over 2.5 years just using git, and using jj was like riding a bike. It's more or less exactly what I want it to be and I use it as much as I can.

That said, here are some of my pain points (despite all of which I do still prefer jj to git):

* No GitHub PR sync for stacks. Managing stacked diffs locally is great, but (a better version of) Sapling's PR syncing would be a huge value add. This is somewhat of a pain point for me directly, but even more so a weakness when I've tried to evangelize jj internally as a viable "stacked diff" solution (e.g. to be blessed by our eng tools team). Someone familiar and comfortable with Sapling (or just skeptical of jj) can easily point to this feature gap in a way that pretty much ends the conversation.

* I wish the native backend supported pushing/pulling changes. I want to be able to switch between working from my laptop and my workstation, and doing that through pushing to and pulling from GitHub is obviously lossy of jj history. Manually copying the .jj directory seems to work if I'm careful and do everything correctly (i.e. make sure both clones have equivalent working copy state when I copy .jj), but this feels brittle and it's easy to mess up.

* If you forget to start a new rev before you (or your LLM) touch the repo, it's a little bit of a pain to go back and split the changes into a new rev.

* Some of the more mature repos I've worked with have tooling/scripts/tests/etc. that seem to look for or rely on the presence of .git (perhaps indirectly). Perhaps I could have gotten around this with colocated repos (i.e. `git clone` and then `jj git init --colocate`), but in at least one case I just gave up on using jj for a given repo and just made a separate git clone. I'm not sure this is really jj's fault so much as a practical compatibility gap with git (again, possibly entirely solved by using `--colocate`).

bjackman•1d ago
> No GitHub PR sync for stacks

FWIW, I think the fact that you need client support for this is a bizarre shortcoming of GitHub.

If GitHub just let you review individual commits like Gerrit does, the concept of "PR stacking" would be unnecessary (as it is with Gerrit).

The model of "a PR is just a blob of changes" is a weird baby's toy version of a code review tool IMO!

mkingston•1d ago
You can review a PR commit by commit. But it's not obvious how in the UI. Navigate to the commits tab on the PR page and you can navigate through the commits in the PR and review them one by one. Although it's possible this isn't what you mean.
baq•1d ago
Github doesn’t understand that all commits can change for review purposes. This is what makes it a ‘toy’ (though I prefer stronger wording here.)
rfoo•1d ago
Right, the problem is when I amended one of my patches there's no way for the reviewer to look at a diff between current and previous versions.
nhaehnle•1d ago
Indeed. I wrote a tool for myself to help with that in my reviews: https://github.com/nhaehnle/vctools/tree/main/diff-modulo-ba...

It admittedly doesn't have a lot of polish, but I do use it regularly and I'd be happy to help anybody who is interested in using it.

w0m•1h ago
ADO handles this by showing a dropdown of 'comment left on update X, currently update Y' with a toggle to show the difference.

I ~hate how ADO handles individual commits (comment left on a single commit is hidden), but I do like the update tracking on a PR as it allows cleaning up the commit tree seamlessly without losing history or comment traceability (less you remove/move files).

IshKebab•1d ago
GitHub does let you review individual commits, at least you can leave comments on them.

All we need is GitHub to support a `Depends on: #123` annotation which would hide commits already in #123 and not let you merge until #123 is merged.

SkiFire13•1d ago
> All we need is GitHub to support a `Depends on: #123` annotation which would hide commits already in #123 and not let you merge until #123 is merged.

You can get an approximation by having the PR target the branch used by #123.

dietr1ch•1d ago
This means multiple stacked branches that you need to maintain on your own, doesn't it? That's the annoying part IMO, even when a short script would do or the rebases take a few characters in some efficient git UI.
atq2119•1d ago
This doesn't work across forks, though, and therefore doesn't compose with GitHub's model where you push your changes to your private fork and then open a PR from there.

There's also no native UI support for it in GitHub -- I'd expect to have a navigation element for stacked PRs like in Gerrit.

bjackman•9h ago
You can review them but you can't look at the diff between them after they've been amended in response, so it's not actually a usable workflow.

IIUC the typical model is that people just upload new commits like "respond to review comments" and then eventually squash the whole PR into one commit when it's ready.

So basically you are just giving up on the idea that the commit history is part of the artifact you're working on.

endtime•21h ago
Yes, I agree, much of the blame lies with GitHub -- but realistically, GitHub isn't going to change to accommodate tools like jj.
bjackman•9h ago
Yeah but I just wanted to highlight that a better world exists! People should know that GitHub's toy model isn't the only one available.

Still, you're right that it makes sense to build tools to work around GitHub since there's always gonna be cases where you can't avoid using it.

endtime•5h ago
Yeah, effectively all my programming is at my job, where we use GH Enterprise, so I don't really have a choice. I prefer Gerrit but not up to me.
HALtheWise•15h ago
I highly recommend revup, it allows managing and uploading stacked (or arbitrary trees of) PRs to Github, including adding a comment that shows approximate revision-to-revision diffs if you want it to. I don't actually think that per-commit reviewing obviates the desire for stacked PRs, for example I often have some PRs in my stack that are not yet ready for review or merging.

https://github.com/Skydio/revup

pyr0hu•1d ago
> No GitHub PR sync for stacks. Managing stacked diffs locally is great, but (a better version of) Sapling's PR syncing would be a huge value add. This is somewhat of a pain point for me directly, but even more so a weakness when I've tried to evangelize jj internally as a viable "stacked diff" solution (e.g. to be blessed by our eng tools team). Someone familiar and comfortable with Sapling (or just skeptical of jj) can easily point to this feature gap in a way that pretty much ends the conversation.

Can you explain this point in detail? I've been using jj and doing stacked PRs on GitLab using `jj git push --all`. I haven't used Sapling so I'm not familiar with it's way of doing stacked PR and I'm really just curious what do you miss from it.

endtime•6h ago
Sapling has a way to manage multiple PRs, setting the target branch of each to its parent and adding information about the stack of PRs to each PR description.
nasso_dev•1d ago
You might be interested in tangled.sh, a Git forge that recently added support for stacked PRs with jj[1] (or anything that supports the Change-Id header i suppose)!

[1]: https://bsky.app/profile/tangled.sh/post/3lptwcb47kc2u

icy•1d ago
thanks for the mention! I was just composing a reply haha.
endtime•5h ago
Nice - I have no choice but to use GitHub at work, but I'm always glad to see competitors.
lars_francke•1d ago
> I wish the native backend supported pushing/pulling changes.

0.29.0 is working towards support here. It's only the first step as far as I understand (not following too closely): https://github.com/jj-vcs/jj/releases/tag/v0.29.0 git.write-change-id-header

> If you forget to start a new rev before you (or your LLM) touch the repo, it's a little bit of a pain to go back and split the changes into a new rev.

This is my biggest pain point at the moment, yes. I think it could be partially solved by better documentation already. I contributed a bit in the past but haven't had the time to look at this bit yet.

endtime•5h ago
Thanks for the pointers to the progress in 0.29.0, and for your contributions. :)
sksrbWgbfK•1d ago
`--colocate` is indeed working fine for me. The backend is then stored in a real `.git` directory instead of being hidden deep inside the `.jj` directory as a bare git repository. Python scripts that use pygit or tools like Conan can safely use that `.git` directory while you enjoy your jj workflow.

There might be some issues with jj workspaces though if you have the habit of using git worktrees as the colocated repo is not there anymore.

cobyte8•15h ago
> using jj was like riding a bike

This has been my experience as well! I haven't had success conveying that to my peers at work (or outside), but your comment resonates with me deeply.

> If you forget to start a new rev before you (or your LLM) touch the repo, it's a little bit of a pain to go back and split the changes into a new rev.

This is one area where I broke my Fig habits and just switched to a the [Squash workflow](https://steveklabnik.github.io/jujutsu-tutorial/real-world-w...): I basically forbid myself from use `jj edit` and have been pretty successful in getting that to stick in my brain. Instead, I use `jj new` to switch contexts (and then `jj commit`, `jj squash`, or `jj absorb` depending on what I'm trying to achieve).

> Some of the more mature repos I've worked with have tooling/scripts/tests/etc. that seem to look for or rely on the presence of .git (perhaps indirectly).

Yeah, I've noticed this too. I find that the most common root cause is usually something that wants to run a lint tool only against the files that you've changed so it does something to the effect of `git diff --name-only $(git merge-base HEAD origin/main)`. I've also noticed that some precommit hooks have been working better since I enabled the `git.subprocess` option (which is on by default as of recently, I believe).

endtime•5h ago
I have more or less been using the squash workflow, but nevertheless, remembering to do `jj new` before doing anything else is a challenge. Might just get used to it with more time.
cube2222•1d ago
This looks like a very decent TUI! I'm pretty happy with the CLI (especially since in fish it has extensive auto-complete), but if one is not content with that, this seems very nice.

I've written about JJ[0] when I was starting to use it, and now, a couple months in, it's become an indispensable part of my workflow. Git really does feel clunky now (even though I never had major problems back when using it), whenever I see it used - with jj being compatible with it, fortunately I don't have to ever use it myself anymore.

Historically I never cared much about my git history (and always squashed PRs) - now I find myself occasionally using empty changes with good descriptions to just write out a sort of todo-list on my branch (kinda CDD, as in Change-Driven Development :) ), and it's overall much cleaner.

I've always used a ton of stashes with git for various experiments and in-progress work, now that's just normal local-only jj changes. Also solves the very unpleasant problem of rebasing stashes.

If you're reading this comment section thinking about whether it's worth trying jj out, I would strongly suggest you give it a go!

[0]: https://kubamartin.com/posts/introduction-to-the-jujutsu-vcs...

ttoinou•21h ago
First time I ever hear about CDD but I’m already loving it
sam_goody•1d ago
No really related, but I'm surprised that jj has no good GUI.

With so much VC money chasing so many established niches (eg bun -> node), and so much potential growth for jj - especially considering it has so much dev interest, and has the advantage of not requiring lock-in [a jj repo can be converted to a regular git repo].

arccy•1d ago
well it's probably a good thing jj isn't vc funded.
KerrAvon•1d ago
yeah, it would have to be jammed to the gills with AI, sensibly or not, to be vc-funded
dmit•1d ago
There's https://github.com/keanemind/jjk for VSCode users. There are also tickets to add jj support in Helix and Zed, so that's promising.
Macha•1d ago
jj as effectively used is a git UI. There's an experimental self-hosted backend that nobody uses (and is disabled in release builds), and there's a piper backend in Google, which is enough that people call it a VCS of its own rather than a git UI, but there's nothing stopping some other tool building the same primitives on top of git directly without jj as an intermediate layer. As I understand it, to some extent, that is GitButler.
ejpir•1d ago
got a link to it?:)
steveklabnik•1d ago
https://gitbutler.com/
ilyagr•22h ago
See https://github.com/jj-vcs/jj/wiki/GUI-and-TUI for a standalone GUI and two VS Code plugins. None of the GUIs there are fully-featured, so sometimes you have to imagine what it could become, but each one is usable. The two VS Code plugins can be used at the same time and complement each other somewhat.
account-5•1d ago
I've still not found anything as easy and complete, feature-wise, as fossil. What is jj trying to solve over git, assuming it's more a replacement for git.
andrewaylett•1d ago
It's not so much a git replacement, as a whole new porcelain on top of the same plumbing.

JJ uses the git binary and maintains a git repository. In co-located mode, the jj working copy is a git working copy. If you use regular git tooling it might be a bit uncertain why you're in detached head mode, but all read-only tooling will work without any problems and if you write to the repo jj will do its best to absorb your manual changes cleanly.

dmit•1d ago
A small note here: even though the public version of jj only supports the Git backend right now (I believe there's also support for whatever Google's using internally?), it's designed to be backend-agnostic. So potentially, in the future it could grow its own native backend that could solve some of Git's pain points -- support for huge repositories, native large file storage, etc.
steveklabnik•1d ago
Yes, Google has a backend that some people there are using.
aseipp•1d ago
To be clear, Jujutsu is not "porcelain" in the (somewhat archaic) Git sense of "high level tools built on low level tools". We do not share any code with the git project. Jujutsu uses Git as a storage layer, i.e. the direct on disk representation. The algorithms and user interface are all completely written from scratch, on top of this.

You could also write e.g. a Mercurial backend to Jujutsu and it would operate similarly, but using revlog storage vs Git's content addressed store.

> JJ uses the git binary

That's a relatively recent phenomenon. The git binary is used only to fetch and push objects. Previously we used libgit2. Why do this? Because replicating all of git and OpenSSH's feature support for every little random auth flow/crypto algorithm/hardware token/whatever is a battle that can't be won. It's ultimately smarter to just have an uglier interface between the two parts (invoking a command line vs using an API) to make the end-user experience significantly better.

When working with Git objects, jj uses the Gitoxide rust library to natively manage the Git store and upstream Git is not used at all.

nialv7•21h ago
all DVCSs are ultimately the same thing, they are all just providing a human interface to the same data structure. i am not saying this dismissively - human interfacing is an extremely difficult problem where a lot of breakthroughs can be made (and some of these breakthroughs will involve interesting algorithms, see pijul).

so to answer your question, jj allows you to do the same set of things you can do with git, but with (arguably) much better UI/UX.

mtndew4brkfst•1d ago
I was a Magit user for most of a decade and I deeply missed it when I first switched to jj. I still think something like it would be a huge boon for the community and I hope one comes to fruition eventually, but in an editor-agnostic form like matklad suggests here:

https://matklad.github.io/2024/12/13/majjit-lsp.html

With that yearning in mind, jjui is the jj TUI I like best so far having tried them all. It's snappy, has useful and intuitive keybinds and presents them well, and good stability so far. Doesn't quite seem to like it if I resize the surrounding zellij/terminal pane while it's open though.

Lazyjj was a little laggy and crash-prone for me on all of the same repos, and jj-fzf is a tragic pile of bash so I can't recommend ever using that.

dcre•1d ago
Beautiful work. I tried other jj TUIs and found them clunky and counterintuitive. This one feels like they took the output of jj log and simply made it interactive.

That said, I switched to jj after using GitUp https://gitup.co/ for many years, and I was pretty surprised not to really miss it when using the jj CLI. The things I liked most about GitUp are all covered by the jj CLI pretty well:

- Undo

- Interactive staging (well, in jj the analogue is interactive split with jj split -i)

- Feeling like you’re manipulating the DAG directly, picking this up and plopping it down over here (jj rebase)

Notably, jj already builds in a TUI for the spots where interactivity is most beneficial.

Ask HN: Would you use an OSS dating app giving 2 swipes per decent GH commit?

1•kuberwastaken•38s ago•0 comments

A Starter Guide to Protecting Your Data from Hackers and Corporations

https://www.wired.com/story/guide-protect-data-from-hackers-corporations/
1•01-_-•2m ago•0 comments

Finding startup opportunities is luck, but evaluating opportunities is skill

https://pranshum.com/blog/evaluating-opportunities/
1•pranshum•3m ago•0 comments

Aleph Alpha and STACKIT have partnered to deliver PhariaAI-as-a-Service

https://aleph-alpha.com/press/aleph-alpha-partners-with-stackit-to-deliver-sovereign-enterprise-ai-at-scale-with-pharia-ai-as-a-service/
1•cheptsov•3m ago•0 comments

WhatsApp launches official iPad app, now available on App Store

https://9to5mac.com/2025/05/27/whatsapp-launches-official-ipad-app-now-available-on-app-store/
1•01-_-•3m ago•0 comments

Desperate Times, Desperate Measures

https://www.wheresyoured.at/measures/
1•NotInOurNames•5m ago•0 comments

Do not rush software development

https://www.humancode.us/2025/05/23/do-not-rush.html
2•speckx•5m ago•0 comments

They Were Every Student's Worst Nightmare. Now Blue Books Are Back

https://www.wsj.com/business/chatgpt-ai-cheating-college-blue-books-5e3014a6
2•tinbucket•5m ago•0 comments

How to Do Developer Marketing That Doesn't Suck

https://calyx.substack.com/p/how-to-do-developer-marketing-that
1•skadamat•6m ago•0 comments

The atmospheric memory that feeds billions of people: Monsoon rainfall mechanism

https://phys.org/news/2025-05-atmospheric-memory-billions-people-monsoon.html
1•PaulHoule•6m ago•0 comments

Ransomware attack on Matlab dev MathWorks – licensing center still locked down

https://www.theregister.com/2025/05/27/mathworks_ransomware_attack_leaves_ondeadline/
1•howisthatposs•7m ago•0 comments

Inappropriate Conduct or Falling in Love at Work – What Happened at Black Hops

https://dannorris.me/inappropriate-conduct-or-falling-in-love-at-work-what-happened-at-black-hops/
1•mmarian•8m ago•0 comments

DeepGit

https://github.com/zamalali/DeepGit
1•zamal•8m ago•1 comments

Wang Computers

https://en.wikipedia.org/wiki/Wang_Laboratories
1•superfunny•9m ago•0 comments

Awesome Emacs on macOS

https://xenodium.com/awesome-emacs-on-macos
1•xenodium•9m ago•0 comments

Toward a Geometric Theory of Information Processing

https://www.novaspivack.com/science/the-geometric-theory-of-consciousness
1•airesearcher•10m ago•1 comments

Texas Adopts Online Child-Safety Bill Opposed by Apple's CEO

https://www.bloomberg.com/news/articles/2025-05-27/texas-adopts-online-child-safety-bill-opposed-by-apple-s-ceo
1•mfiguiere•10m ago•0 comments

Reverse engineering Bandcamp downloads for love and piece

https://torunar.github.io/en/2024/06/24/bandcamp-downloads/
1•torunar•10m ago•0 comments

Show HN: Idiot-proof restaurant deals on demand

https://apps.apple.com/us/app/less-eat/id1483478069
1•Superjock•10m ago•0 comments

Google CEO Sundar Pichai on the next AI platform shift

https://www.theverge.com/decoder-podcast-with-nilay-patel/673638/google-ceo-sundar-pichai-interview-ai-search-web-future
1•thm•11m ago•0 comments

The Illusion of No-Code: Builder.ai's Fall and What It Means for Founders

https://medium.com/@oceanbcreative/the-illusion-of-no-code-builder-ais-fall-and-what-it-means-for-founders-b8fe7a90634a
3•nadis•14m ago•0 comments

Empire of office workers strikes back against RTO mandates

https://www.theregister.com/2025/05/27/office_workers_ignore_rto_mandate/
2•rntn•16m ago•1 comments

Extracting memorized pieces of books from open-weight language models

https://arxiv.org/abs/2505.12546
2•Tomte•17m ago•0 comments

I Built Cursor/ChatGPT for Video Editing

https://www.renlo.ai/
1•levin_green•17m ago•1 comments

Speculative Idea: What If We Removed the Limits on Human Biological Adaptation?

https://pastebin.com/KBXhkZX3
1•valdevar•19m ago•1 comments

AI 2027

https://brajeshwar.com/2025/ai-2027/
3•speckx•19m ago•0 comments

White House stunned as Hegseth inquiry brings up illegal wiretap claims

https://www.theguardian.com/us-news/2025/may/27/hegseth-pentagon-leak-investigation-wiretap
4•dralley•20m ago•1 comments

We built Kamili – an AI tool that gives actionable UX feedback for your website

https://www.kamili.ai/
1•dh2013•21m ago•1 comments

Lost Ancient Cities That No One Has Ever Found

https://talesoftimesforgotten.com/2025/04/22/lost-ancient-cities-that-no-one-has-ever-found/
1•bookofjoe•22m ago•0 comments

Postman's MCP Catalog

https://www.postman.com/getmcp
6•someproduct•23m ago•2 comments