Radicle IDE Plugins (VS Code + Jetbrains IDE): July - September 2023

Overview :telescope:

Following on from the grant that funded:

  1. the work for the addition of Patch Proposals and Issues in the Jetbrains IDE plugin and
  2. initial Heartwood support in the Visual Studio Code extension for Radicle,

we are submitting a follow-up proposal to cover:

  • all development work, on both plugins, from 1 July - 30 September

We feel this quarterly model better matches the current needs and reduces friction on both sides (Grantee - Radicle Grants Program team).

Description :page_facing_up:

Here is an overview of the progress so far and future development goals for each plugin, for the next 3 months:

VS Code Extension

At the moment of writing this, version 0.2 of the VS Code extension is in the final phases of development - targeted to be shipped towards the end of this week (end of June). v0.2 brings the first Heartwood support to VS Code:

  • adapting the extension for changes around identity and node storage introduced in Heartwood,
    • Secure storage and automatic re-use on reboot for Passphrases (per identity)
  • adding support for using the HTTP API (as opposed to just wrapping the rad command-line interface (CLI)) and
  • introducing the ability to clone radicle projects (your radicle-node knows about) by:
    • browsing the list of projects, or
    • by simply using the unique radicle project id.

For the next quarter, the main goal for the VS Code extension is pretty clear, as it will follow on pretty much the same path as the Jetbrains IDE plugin.

First, we will move to introduce support for Radicle Patches (v0.3), so we can enable developers to exchange code changes and discuss about them, on Radicle, from their IDE. Next, and as time allows, we will move to incorporate Issues (v0.4), so that Radicle experience in VS Code becomes richer and more substantial:

There’s a certain magic in not having to switch to the browser (and finding the right tab!!) just to see comments from your peers about the code you’re working on and information about the issue describing the work ahead of you.

Less context switching greatly enhances focus and helps maintain the state of “flow” that we all feel so content in.

Along the way, we’ll also need to take the time to put a better testing strategy in place and incorporate that in our CI pipeline, as well as better architect some parts of the extension related to HTTP API calls (where we will work together with the radicle-interface team, as needed).

This is all to serve the - rather more ambitious, for Q3, it has to be said - goals of:

  • moving the extension development to Radicle (from GitHub)
  • moving the extension development to use the extension itself as the necessary Radicle-related tooling, finally allowing us to “drink our own champagne” - also commonly called “dogfooding”.

For the time being, the roadmap for the VS Code Extension lives here and our plans for future development will be organized using GitHub Milestones. :confused:

Jetbrains IDE plugin

On the Jetbrains IDE plugin front (where development started much earlier and moved faster in the early stages), we’ve now already shipped v0.5 - which supports viewing and interacting with Radicle Patches from your IDE - and are planning to ship v0.6 at the end of June - bringing support the initial set of support for Radicle Issues.

In the following months, included in this Grant proposal, our main goal is to:

  • move development of the plugin away from GitHub and onto Radicle
    • stop using GitHub Pull Requests (PRs) and use Patches - trough the IDE plugin itself
    • stop using GitHub Issues and switch to Radicle Issues - trough the IDE plugin itself
      • assumes current blocker issues (planning milestones + screenshot/attachments) are resolved

We are setting this as our main and earliest goal, because now that the initial set of functionality is there (i.e. you can view patches / issues in your IDE and comment on them), we want the development of the next features to be guided by our own pains and experience as we use the plugin itself (where possible) to accomplish our day-to-day work. This is also in-line with the overall “dogfooding first” approach adopted by the Heartwood core team and we feel will also help Heartwood itself.

We have already highlighted 2 areas that we feel we will need to put specific emphasis on:

  • Patch Reviews - focus on making our own experience around reviewing patches as smooth as possible: add support for inline comments, approvals / requested changes, smooth merging of Patches, UX improvements to address “unread” content (e.g. comments that were written before the latest ones we’ve seen - but that our node only just found out about), etc.

  • Issue integration with IDE - the Jetbrains IDE already provides specific UX improvements around working with “Tasks” (handling e.g. automatic branch creation with the task id in the branch name / auto-switching branches when switching to a different “task context” / automated opening of PR for the “Task” and so on). We want to investigate this area in more detail, in order to understand the potential it creates for Radicle, in terms of a superior Development Experience, compared to existing tools.

Rather than committing on a specific order for working on these, we would like to allow our own tasting of “our own champagne” to dictate priorities. By the end of the 3rd Quarter 2023 we want this plugin to be entirely off GitHub (save for, perhaps, a mirror - for discoverability) and not only “on Radicle”, but also taking our first steps towards an improved Developer eXperience.

The detailed roadmap for the Jetbrains IDE plugin also lives in GitHub Issues for the time being.

Closing the “gap”

For this quarter, we will be ramping up the efforts on the VS Code side, spending about 45% more development hours on that, and reduce the number of hours on the Jetbrains IDE plugin (by around 25%), so we can start closing the current gap - in terms of functionality - between the two IDE plugins.

Budget :briefcase:

  • Total Duration: 137.75 FTE days
  • Software Engineer Full-time equivalent (FTE): 24 FTE days
  • Senior Software Engineer Full-time equivalent (FTE): 83.75 FTE days
  • Team Lead / Product Owner Full-time equivalent (FTE): 30 FTE days
  • Total Costs: 103 947 EUR ( 113 448 USDC)
  • Recipient Wallet: 0x445717316388f1d1fb1730D3f6f9Bf59e0b03f4f

Drips-Powered Payments

The first experience receiving a Radicle Grant payment through Drips has worked great so far (and has already created real-world usage feedback for the Drips team), so we propose to continue using Drips, in order to continue “drinking our own champagne” and reusing another product from the same stack.

Team :busts_in_silhouette:

Team members

  • Yorgos Saslis
  • Ioannis Christodoulou
  • Stelios Mavrommatakis
  • Kostis Maninakis

The same team that’s worked in the previous IDE plugin grants.

Contact

Team’s experience

  • [Yorgos] 15+ years of experience in various roles of the full Software Development Lifecycle: writing code, agreeing on specs with clients, architecting systems, establishing product priorities, designing testing and CI strategies, and co-creating department-wide processes - with an itch for driving “waste” out the door. Co-founder of developer communities (DevStaff, Heraklion Software Crafters, Web3 Greece) and co-organizer of open space unconferences (Software Crafters Crete, JCrete) on the (paradise!:desert_island:) island of Crete!
  • [Ioannis] is a Software Architect with 10 years of professional experience in Web and Mobile applications, such as Greek Passenger Locator Form (a web application that all travelers coming to Greece were required to fill-in) and Covid Free GR (the mobile application used throughout Greece to verify COVID-19 vaccination, recovery and test certificates). He is also the creator and maintainer of an IntelliJ plugin (GitExtender - github, marketplace ) for managing and updating multiple git repositories in the same IntelliJ project.
  • [Kostis] After many years of international professional experience, Kostis has grown into a frontend-oriented software crafter with a passion for web technologies, developer tools, and refined user experiences. With occasional contributions to local dev communities and open-source software, including publishing the popular TypeScript library ts-xor, Kostis has always been looking for opportunities to become increasingly active in open-source software development. Moreover, he was there during Bitcoin’s early rise in 2011, actively partaking in the cipher-punk community’s radical discussions while mining his first Bitcoin with his desktop CPU, which he subsequently day-traded for many sleepless months. :slightly_smiling_face:
  • [Stelios] is a young Full Stack Software Engineer focused on web applications development. He had participated in large software projects like the EU-DPLF (https://euplf.eu/) a paneuropean application for covid19 contact tracing for tavelers to the EU. He is a passionate software engineer and is currently working on a web3 project expanding his knowledge and experience in new and challenging sectors.

Team Code Repos

Team LinkedIn Profiles (if available)

Additional Information :heavy_plus_sign:

How did you hear about the Grants Program? Radicle Discord

1 Like

After speaking to the Drips team, it seems there is a clear recommendation from the team to wait for a few weeks for a new deployment to mainnet, so, with that in mind, it would make more sense to have the 20% fee through the gnosis safe, as usual, and then we can stream the remaining 80% through Drips - assuming the Drips team is ready to onboard us.

1 Like

Thanks a bunch for this @yorgos

I want to call out a few things I really like about this…

Less Context Switching (i.e. cohesive workflow)

One of the major drawbacks with developer workflows is that we’re constantly switching contexts and tools, left and right. One minute we’re in an IDE, the next minute we’re going onto GitHub, etc. ad nauseam. This issue is a great example of this.

If we take a step back and wonder: why do developers even put up with all this context switching?

The answer is simple, but sad: GitHub can only extract value from developers’ workflows by forcing them onto their web client. So we’re stuck with IDEs and GitHub not being as cohesive as they could be.

So I really like that this direction you’re taking is doing 2 things at once:

  • Lowering friction within the workflow by making a more cohesive workflow between the IDE and Git client (Radicle)
  • Doing all of this by taking advantage of the fact that we’re building open source tooling

Dog fooding

Really excited about seeing you guys move your entire workflow over to Radicle.

This will be a great way to both (a) prove that things are working and (b) create a feedback loop whereby you should find out what’s missing.

Final Comments

I’m in support of this one.

As discussed, we’ll go with 20% up front. And will use Drips for the remaining 80% once available.

I’ve started this at Nonce 68 below:

Note: any tax compliance is the responsibility of the grantee

3 Likes

Thanks so much for all the feedback and support @bordumb !

Just a quick comment about the transaction with nonce 68: it looks like it is the 20% of the EUR value, as opposed to the USDC one. (I should probably stop including those altogether and just focus on USDC… ) Not a problem - just making a note here so we remember to set up the Drips with that in mind. :wink:

Also, a final note, so we can be completely fair to github: they do also have some IDE plugins for their own offering, which do help with the workflow problem described above, so it’s not that we’re claiming to be the first ones to be doing this, but I do agree with you that they see their website as their main platform that developers should use and, in our case, we are certainly not forced to do that.

2 Likes

UPDATE:

No more nail-biting agony !! The progress update for the Radicle IDE plugins that was funded by this Grant is finally here! :page_with_curl:

Jetbrains IDE Plugin

The biggest milestone for the Jetbrains IDE plugin was that the project’s development has successfully taken the first steps in moving from GitHub → Radicle! :tada:

GitHub → Radicle migration

We split the migration into 3 phases:

  1. Use Radicle for git hosting and use Radicle Patches (RPs) instead of GitHub Pull Requests (PRs).
  2. Migrate Issues from GitHub → Radicle
  3. Migrate CI away from GitHub Actions (or use GitHub Actions with Radicle)

For (1), a new, multi-delegate project was created and already the team is using Radicle Patches as its main workflow!

For (2), we have already built a tool that facilitates the issue migration, however we are still missing a planning board (we are currently relying on GitHub projects) and are looking for alternatives in this space.

For (3), we are still a little blocked due to the lack of CI integrations in Radicle yet and especially due to the multi-platform CI environment we are currently using in GitHub Actions (windows, macOS, linux). For this reason, we are still having to use GitHub PRs - in parallel with Radicle Patches.

New features

Not 1, not 2, not 3… but 6(!! :tada:) releases shipped during the last 3 months, allowing us to already do some work with Patches and Issues inside the IDE:

Reviewing a Radicle Patch for the Radicle Jetbrains Plugin itself in IntelliJ - Left: list of changes, top: activity view, bottom: reviewing changed file

In more detail, here are the release highlights:

v0.6.1

A small patch release with a couple of quality of life improvements:

  • Adds a refresh button for patches and issues #294
  • Adds support for aliases in radicle identities in #271
  • Refactor issue & patch filters in #281

v0.6.2

The hightlight in this patch release was fixing latest heartwood breaking changes, as well as the Issue Overview page:

New features:

  • Issue overview panel, in 126
  • Adapt to new Radicle branding icons, in 269

Fixes:

  • Fix broken api requests in #323
  • Fix rad self parsing in #306
  • Add alias field in the settings in #312
  • Wait for data before calling the filter method on issues / patches in 299
  • Remove classes from Utils and move to separate files, in 317

v0.7.0

A small, first release in the 0.7.z stream of releases that introduces support for 2023.2 IntelliJ version and brings the first bit of additional functionality with regards to patches: changing labels and status of Patches.

  • Allows editing the status and labels of a patch proposal, in #343
  • Support IDEA 2023.2, in #329

v0.7.1

  • You can now create new Radicle Issues from within your IDE ! :tada: , in #343
  • You can also add reactions :+1:t3: :tada: :rocket: to comments (for both Patches and Issues !) :wink: , in #270
  • The “Refresh” button would reset filters in the Issue listing. @JChrist (politely) explained that it shouldn’t, in #349
  • The Radicle Tool Window Icon size was kind of… large. A short diet later, it’s now back to normal! , in #345.

v0.7.2

  • Checkout patches directly from the IDE! A new check out button, allows you to check out the patch branch, so you can work directly with the code in your working copy, in #352
  • You can now not only add reactions to patches / issues, but you can also - wait for it - remove them… :exploding_head: No more stress when you accidentally misclick the embarassing wrong icon, in #326.
  • The issue descriptions and comments were all having a bit of a bad hair day, so it was time to help them out a little by wrapping the text. We also fixed the order of the fields inside publish dialog to match the CLI order! - in #335

v0.7.3

  • Synchronizing your Radicle project with the network is something that the radicle-node automagically takes care of you behind the scenes. But not always (as the node is sometimes not running, or offline, etc.) That’s why it’s important to allow the user to manually sync their project! :on:
  • Let’s be honest, markdown is much prettier when rendered! We weren’t correctly rendering markdown, so this PR adds markdown support in Radicle Issue and Patch description and comments! :star_struck: in #335
  • Small fix when we didn’t show the radicle tool window after the user first published a project.
  • Few (successful) projects have less than 10 issues or patches. Our test projects did though(!!), so we were previously only loading the latest 10… That’s now fixed, so the plugin is ready for some real-world projects! :one: :zero:
  • It’s now possible to add arbitrary Decentralized Identifiers (DIDs) as assignees to an issue (and not just assign an issue to delegates) :white_check_mark:
  • Improved the emoji reaction button look and feel, so it should hopefully be easier to add reactions now! :ok_hand:

Upcoming work

Our next release (v1.0) will deliver the last missing features that our team is struggling with, as we are dogfooding on the plugin itself (and Radicle), in order to write the next plugin versions. With a lot of the work on issues already in place, this release will focus primarily on missing functionality around working with Patches entirely inside IntelliJ and other Jetbrains IDEs. For more details, please refer to the github milestone.

Visual Studio Code (VS Code) Extension

Starting the quarter, the VS Code extension only partially supported Heartwood. Our first and foremost target was to migrate all existing functionality to Heartwood.

This included a bunch of changes related to identity (and aliases) and the rad auth flow inside the IDE, which is now super streamlined for smooth user onboarding.

With those out of the way, we placed a lot of focus on usability and user onboarding, so that the features we build into the VS code extension are here to stay - hoping to avoid further UX improvement iterations, which have been necessary in the Jetbrains IDE plugin.

New Features

Smaller number of releases here, but, they are packed with new features!! :gift:

v0.2.2

  • commands: replace pre-heartwood, now deprecated rad pull/push commands with fetch/announce across multiple UI locations (#42)
  • update from old (seedling) to new (alien) Radicle logo and branding (#56)
  • auth: fix creation of new Radicle identity which now requires a mandatory alias (#67)

v0.3.0

This feature-packed version introduces quite a few enhancements and fixes, bringing Radicle Patches inside VS Code for the first time! :mag_right:

:sparkles: Highlights

  • New Patches view

:rocket: Enhancements

  • patches: show new view in the sidebar listing all Radicle Patches, including a tooltip with more info on hover and the ability to easily copy the Patch identifier (#43)
  • patches: each item in the list of Radicle Patches can be expanded to show a sub-list of files changed. (#46)
    • If multiple items have the same filename, their directory URL will be additionally shown as the item’s description.
    • On hover, a tooltip shows the relative URL of the file in the repo, and the kind of change it had.
    • A left click on a filechange item will open a diff between the original and patched file versions.
    • A right-click allows opening either the original or changed file versions (as applicable) without the diffing visual noise.
  • commands: new VS Code command to refresh the list of Radicle Patches (#43)
  • commands: new VS Code command to collapse all items in the list of Radicle Patches (#46)
  • ux: convert existing flows with series of user input steps into a bespoke, cohesive experience indicating total step count and completion progress, allow editing of already submitted answers of the same flow, as well reveal-toggling of typed-in passwords, among other improvements (#67)
  • auth: additionally show the alias associated with a Radicle identitifier whenever showing the latter (#67)

:shield: Security Fixes

  • auth: prevent potential leaking of RAD_PASSPHRASE into the JavaScript console (#70)

:adhesive_bandage: Fixes

  • auth: don’t allow the user to submit an empty string as an alias when creating a new radicle identity (#67)
  • auth: warn the user that an empty passphrase will result in an unencrypted Radicle key when creating a new radicle identity (#67)
  • auth: don’t ask users with empty-passphrase-identities to enter their (blank) passphrase each time an auth-guarded Radicle command is executed (#71)
  • auth: ask the user to re-enter their chosen passphrase when creating a new radicle identity to protect agains typos and align with Radicle CLI’s UX (#67)
  • auth: show “created new” instead of “unlocked” in the notification and logs when creating a new radicle identity (#67)
  • auth: cancel the whole flow, warn and notify user when pressing escape at any step of the flow (previously only applied for the passphrase question) when user is asked for his input in order to create a new radicle identity (#67)
  • httpd: show buttons opening Output or the related configuration option in Settings in the event of Fetch Error (#39)

:nail_care: Refactors

  • ux: wrap VS Code’s lackluster InputBox API resulting in procedural, verbose and brittle client code, with a new custom-built sensible wrapper (#67)
  • httpd: design and implement architecture for idiomatic code interacting with the Radicle HTTP API (#39)

:open_book: Documentation

  • readme: use up-to-date screenshots for Integrated Authentication features (#67)

Upcoming work

Our next release (v0.4) aims to complete the required functionality around Patches, so it is possible to work entirely with Radicle inside VS Code, without the need to switch back and forth between CLI, broswer and IDE. You can find more details on the GitHub milestone (for now). The next goal is to introduce support for Radicle Issues in v0.5, so we can also migrate our issues to Radicle!

Conclusion

The releases of the Radicle Jetbrains IDE Plugin and the Radicle VS Code Extension conclude the work undertaken as part of this grant. We look forward to continuing the work on the Radicle IDE plugins soon!

1 Like