Distributed, offline-first bug tracker integrated in git - git-bug/git-bug

363 points•alentred•6 days ago•109 comments•

109 comments

michaelmure5 days ago
Hi, author here, nice to see some interest :-)

FYI, this is my near-term roadmap:

  - have the webui accept external auth (like github oauth) so that it can be a public portal and accept external interactions
  - have the webui expose a git remote endpoint
  - slightly rework identities (and likely root them in did:plc for pubkey distribution, the identity system from bluesky, without being an ATProto thing), which would allow to share identities between repos way more naturally
  - extend to support pull-requests, possibly CI. That would make it a somewhat complete local-first forge that you can also self-host trivially
Also, while there is some attention ... I'm considering working on this full time. If you have some advice or opportunities on how I can support myself doing this, let me know!
ok_dad5 days ago
> I'm considering working on this full time. If you have some advice or opportunities on how I can support myself doing this, let me know!

Make it easy for non-technical users to also use this software. That will probably get you further along with gaining paid customers, IMO, because that's the hard part with something like this. It's easy for anyone who isn't used to `git` to use GitHub issues or something like Jira or Shortcut, but something tied to `git` or another cli tool is a hard sell for non-programmers, I think.

Make a program users can install on their MacOS/Windows desktop that interacts with a repository, without any need for the user to use `git`, or make a secure/hardened docker image that an org can run in their infra that links to repos and allows interaction via the web.

sebiw5 days ago
First of all: Huge respect for getting something out the door, looks really useful.

> I'm considering working on this full time. If you have some advice or opportunities on how I can support myself doing this, let me know!

You could consider an "enterprise" tier with a special subset of features and guaranteed support. But my experience tells me this will be really hard to substantially monetize, as the customer profile for that solution is probably not spending on software until they really need to (the saying goes: selling to developers is impossible, you need to sell to their boss). Maybe a donation model or a creator-centric thing could work out!

joshmarlow5 days ago
Yeah I agree that monetization seems hard here. But one niche that might work - tons of people are using LLMs to build out side projects and keeping tickets in the same repo as the project could be really frictionless for LLMs to reach for without an MCP server.

Don't sell to developers for their day jobs, but sell to developers for their hobbies.

derpitron5 days ago
> - have the webui accept external auth (like github oauth) so that it can be a public portal and accept external interactions

Have you looked into ForgeFed? It's a WIP plan for different Forgejo based forges to federate with each other. https://forgefed.org/

There's also this: https://indieauth.net/ though I haven't looked into it. I hope you could integrate one of these into your planned OAuth/account system!

deprave5 days ago
Thank you for working on this, I love the idea. What surprised me was the way user identities is managed, I assumed you’d use whatever git uses. Would you mind elaborating on that?
michaelmure5 days ago
Sure.

Identities in git can barely be called that. You define your name and email, maybe sign your commit. Those signature can be checked but it's really optional and often left to another system (e.g. github or your git viewer). Access right in the git remote is also a completely different thing.

In a distributed/p2p system with social interaction you need well defined identities that carries public keys. If you want to work offline, you actually need a full self-certified history of public key updates. Any changes in the entities (bug, pr, ...) need to have an author and a clear logical time so that you can backtrack to which pubkey(s) was active at the moment. Note that if you accept external contribution from a webui, you still need those identities being created in the background, possibly later to be "adopted" when using the native tooling.

Identities in git-bug is a part that nearly didn't change since the inception, and it's time for an upgrade. At the moment they are a linear series of changes (that is, NOT a CRDT) and are stuck within one repo. You can push/pull around but you are really just making a copy that you need to maintain.

My plan is to split this concept in two parts: pubkey log, and how they anchor within the repo's logical time. It turns out that if you split that way, the first part is pretty much exactly what did:plc is. Additionally, for complicated reasons like allowing recovery without opening major weakness, that's the one thing where having a centralized reference is important, so relying on the public https://plc.directory/ makes sense.

khimaros5 days ago
same question here. the other limitation i ran into immediately was only having two status types: open and closed
delf5 days ago
Git-bug looks amazing! Author of GitSocial here, would love to hear your opinion:

https://gitsocial.org/

waldir1 day ago
Were you aware of git-bug when you created gitsocial? If so, which patterns did you reuse and which ones did you decide to diverge from? Or would you say the two projects embody fundamentally different visions?
imagent5 days ago
You can also do code reviews in pure git:

https://github.com/google/git-appraise

I used git bug before but found I missed being able to edit tickets with a Markdown editor. So I built this: https://github.com/LoumTechnologies/ticketry

ftgffsdddr5 days ago
The webui supports markdown
verdverm5 days ago
its sad git-annotate was never really maintained
teddyh5 days ago
Just for those people for whom this might be a new concept: There is actually a fair number of these distributed bug trackers: <https://news.ycombinator.com/item?id=22833037>
mcepl5 days ago
And none of them actually work really well. This blog post is over ten years old, but the situation didn’t improve much https://matej.ceplovi.cz/blog/current-state-of-the-distribut...
iamnothere5 days ago
No mention of Fossil, which works great and proves that the difficulty is in gathering dev interest.

It may be that the presence of Fossil as a mature option is enough to dissuade people from choosing/working on alternatives. I’m pleased to see git-bug slowly making progress though, maybe it will get there in time.

gritzko5 days ago
Hits hard.

I looked into them. Most of them use some CRDT-ish machinery to merge concurrent ticket changes. (Fixing merge conflicts in tickets would be too disappointing.) As a CRDT person, I noticed that implementing CRDT merges in git itself mostly makes that machinery unnecessary. Then you can keep your tickets in plain Markdown, having CRDT merges for both code and metadata. I have it working here btw

https://replicated.live/blog/meta

jason_oster5 days ago
I tried git-bug a few months ago, and https://github.com/git-bug/git-bug/issues/1023 is a showstopper.

There is a workaround, but it isn't pretty. You can push/pull bugs and identities with normal, ssh-agent-less git commands: https://gist.github.com/parasyte/80ef925d4b01216f6bcb051356f...

michaelmure5 days ago
I'll fix that soon. I really wanted to avoid calling the git binary for security reason, but I have to admit that go-git is not robust enough in some cases. I'll have at least the option to use the git binary for push/pull, possibly as a default depending on how it goes.
jthoward645 days ago
You could always FFI to libgit2 rather than calling git
jason_oster5 days ago
Glad to hear it! Thanks.
jsiepkes5 days ago
Isn't "show stopper" a bit dramatic? What is the big problem with an SSH agent? If security is a problem you should probably store your SSH keys on a HSM like a Nitrokey or Yubikey. In which case you need an agent.
elehack5 days ago
The agent requirement is a symptom of a deeper potential issue: not using the system's ssh. Providing built-in as a fast-path option is fine, but ~/.ssh/config can do a lot of useful things, and providing an easy option to say "just use real ssh" lets people have their config just work.

Specifying identify files for specific hosts, using bastion hosts (ProxyJump), etc. For example, my laptop SSH config detects when I'm not on my university network or VPN and adds a ProxyJump through the department bastion host, but connects directly when I'm on the network. Configurations like that break when software makes too many assumptions about how ssh is configured.

iririririr5 days ago
you don't need an agent for hsm.

also, don't know a good security researcher who uses agents (some even use ssh config to limit which keys are even tried per domain)

ssh config hacks are also a must if you have, say, two or more identities to github.com for example.

Magicrafter135 days ago
hi - this is incorrect

I use a Yubikey for some of my keys, and I've never used an "agent", don't know how, and don't want to start, unless someone can give me a good reason to

ssh-keygen -t ed25519-sk

that's all you need to use a Yubikey with SSH

Izkata5 days ago
A few months ago there was another of these posted, called Epiq: https://news.ycombinator.com/item?id=48155570

My comment on there is about a surge in popularity of these over a decade ago, with a link to a previous comment about problems I remember them having that prevented them from being usable for most people ( https://news.ycombinator.com/item?id=47956979 ), because of their intended design rather than an implementation issue. For example bullet 3 was a problem in one, that another tried to solve with bullet 2.

I don't have time right now to look at this one to guess if these apply, but might be interesting/useful for someone else.

lelanthran5 days ago
Other than the first bullet point in your list[1], my contribution in this regard addresses everything else.

Don't have a link handy but it's on github called "rotsit" (revenge of the something issue Tracker).

‐----‐------

[1] That's the entire point of having the issue tied to a branch: if an issue is marked resolved in the branch you are looking at, then its resolved in the branch you are looking at. Storing the issues independent of branch means you need to also store extra metadat about which branch it is broken on.

drabbiticus5 days ago
I can somewhat understand your point about issues tied to branch, but have some remaining questions about how this working in practice:

- If I am on a branch where this issue exists and unaddressed, is it easy to find out if there is another branch where this issue has been addressed

- I am on a branch that does not have the issue reported, but know it's reported on another branch -- does that mean the issue doesn't exist on this branch? Is it on the reporter to correctly identify the root branch where the issue was first created? Do you have to somehow merge to make this work "right"?

Izkata5 days ago
The issue there was collaboration, one person would be on master and see no hint that a case was already being worked on (status, comments, etc all being different until the branch was merged). The other bullets, that put the information in different locations, were attempts to deal with this.

Read the full thread on Hacker News →

Related stories