# Decentralized Issue Tracking with Radicle + git-issue [Radicle](https://radicle.xyz) is a decentralized platform for code collaboration. Radicle is still in its early development stages and even though it aims to be the "decentralized GitHub", it still doesn't tackle **Issue Tracking**, so it does not *yet* offer an alternative to GitHub Issues. Because of this, I've been wondering what issue tracking looks like in a peer-to-peer setting, where `git` is the main "backend", so I took a look around to find existing solutions for issue tracking in `git`. [Git-Issue](https://github.com/dspinellis/git-issue) came up as one of the most prominent options, so I tried combining the two to see what decentralized issue tracking could look like. ## 0. Prerequisites * git version 2.34+ * [git-issue](https://github.com/dspinellis/git-issue) * If on macOS, you'll probably need the GNU date package, which comes as part of the `coreutils` package on Homebrew. `brew install coreutils` is your friend. ## 1. Create Git Repo with embedded git-issue ### a. Create a Repo with a README ```console mkdir -p fun-with-issues cd fun-with-issues echo "# Fun with Issues\n" > README.md echo "This repo showcases how to use git-issue" >> README.md git init . git add . git commit -m 'This is going to be fun' ``` ### b. Create some issues ```console $ git issue init -e Initialized empty issues repository in /Users/yorgos/dev/playground/fun-with-issues/.issues $ git issue new -s 'Take over the world' Added issue 3ff2e39 ``` > NOTE: **the `-e` parameter is important** as it tells git-issue to NOT create a new git repo under `.issues` but rather to use the existing git repo we have already created. ### c. Verify the issues have been created Check the output of the below commands looks as expected. ```console $ git issue list ecc2dd2 Take over the world $ git log ``` ## 2. Push to Radicle Next, we are ready to publish our local copy on Radicle. First, we need to initialize the repo for Radicle and then we can ```console 22-02-11 20:30 ➜ fun-with-issues git:(main) rad init Initializing local 🌱 project fun-with-issues ok Description Β· A project with an embedded issue tracker, powered by dspinellis/git-issue. ok Default branch Β· main ok Initializing... => Your project id is rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy. You can show it any time by running: rad show --project => To publish your project to the network, run: rad push 22-02-11 20:31 ➜ fun-with-issues git:(main) rad push Pushing 🌱 to remote `rad` $ git push rad Password for 'rad://radicle@hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy.git': Everything up-to-date Git version 2.34.1 Git signing key ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPn+c2TZ9TNvPXd3FHcKpo2+cAuqRQ8HUNOqdmijl3ui Syncing 🌱 project rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy to https://pine.radicle.garden/ ok Syncing delegate hnrkkfb6agf1uxmg3pnuj8kgcppk6g5ys5gyo... ok Syncing project identity... ok Syncing project refs... ok Project synced. 🌱 Your project is synced and available at: (web) https://app.radicle.network/seeds/pine.radicle.garden/rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy (web) https://app.radicle.network/seeds/pine.radicle.garden/rad:git:hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy/remotes/hydh9hh5r584ug537q75te7akw4g5hhymijno6b4o4qi8c4fd1774r (git) https://pine.radicle.garden/hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy.git ``` ## 3. Retrieve issues from Radicle In order to view the existing issues of the project, we just need to clone the repo from Radicle!! The issue tracker is embedded, remember? ;) ```console $ mkdir -p working-copy $ cd working-copy $ git clone https://pine.radicle.garden/hnrkbmjsfxy4hd97m54sywaf4gmxqfdh7sdyy.git project-with-issue-tracker Cloning into 'project-with-issue-tracker'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 914 bytes | 457.00 KiB/s, done. ``` Finally, you can view the list of issues: ```console $ git issue list ecc2dd2 Take over the world ``` πŸŽ‰ "It works"! πŸŽ‰ ## Closing Thoughts git-issue + Radicle provide a working, decentralized, issue tracking solution! *(this list is a work-in-progress)* βž• Installation/setup is really lightweight. βž• There is practically zero maintenance overhead for your issue tracker. No extra system to maintain / uptime to worry about !! πŸ₯³ βž• git-issue already supports importing issues from GitHub / GitLab, which offers a **smooth migration path** for teams that want to switch their issue tracking to a decentralized solution as well. βž• git-issue already provides a rich feature set for [working with issues](https://github.com/dspinellis/git-issue#work-with-an-issue). βž• If you want a private issue tracker, there's not much to it! You just keep your repo private - i.e. you don't publish to a community seed node. βž– Coming from a GH issues background, I am still expecting the web-based UI to visualise issues. It would be pretty neat if app.radicle.network could be taught to read the issues format by `git-issue`. βž– Some graphical user interface for `git-issue` would be needed at some point. Not everyone who interacts with issues is comfortable on the command-line. βž– Attaching screenshots/files is technically be possible, but it's not exactly as convenient as drag&drop. βž– git-issue might be missing features (e.g. per-issue permissions, @mention notifications, etc.) that mean it's not on-par with GitHub issues.