# 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.