Radicle IDE Plugins (VS Code + Jetbrains IDE): October - December 2023

Overview :telescope:

Following on from the grant that funded:

  1. the user experience improvements for Patch Proposals and Issues in the Jetbrains IDE plugin - as they came up from our own migration of development work onto Radicle itself (repo on Radicle :rocket:) and
  2. the first support for Radicle Patches and some other Heartwood identity related issues, 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 October - 31 December

Highlights

In this quarter, we expect the Jetbrains IDE plugin to reach its 1.0 major milestone, which will also signal that it is ready for General Availability and that development can start slowing down - focusing on maintenance, heartwood breaking changes and quality of life improvements. The goal for the 1.0 release is to allow code reviewing (with inline commenting) on Radicle Patches inside the IDE, attachments to Issue and Patch comments and usability improvements around the general Development eXperience (DX).

In addition, we expect the VS Code extension to sufficiently mature, so it can support migration of the development work to Radicle itself. Focus on the v0.4 release will be full support of Radicle Patches, with a goal to bring the VS Code feature-set more or less on par with the Jetbrains IDE plugin - as far as Patches are concerned - making decentralized collaboration possible on both IDEs! :rocket:

Description :page_facing_up:

Here is a more detailed 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.3 of the VS Code extension is in the final phases of development - targeted to be shipped at the end of September. v0.3 brings initial support for viewing Radicle Patches, inside VS Code. v0.4 will focus on the additional functionality necessary to allow working with Patches without the need to switch to the Web UI or Command Line Interface (CLI).

More specifically, here is a list of the desired functionality for v0.4:

Feature Comment
Add rad track/untrack commands No need to manually run rad track on the CLI.
Show currently opened Radicle Project’s information in the UI Better overview of checked out project.
Radicle Patch Overview: Activity The main view that facilitates working on a Patch.
Radicle Patch Overview: Add general comments Adds commenting functionality to Patch Overview.
Radicle Patch Overview: Add inline comments Adds inline commenting functionality to diff view.
Allow editing comments Adds comment editing, so you can fix your copy-pasta errosr :wink:
Emoji reactions to comments Adds emoji reaction capabilities :tada:
Allow attachments on comments Adds necessary support for attachments (e.g. screenshots) to patch comments.
Merge Patch action Allows merging patches directly from the IDE.
Create Patch action Allows creating new patches.
Archive Patch action Allows archiving unneeded Patches.
End-to-end testing pipeline Implement e2e testing pipeline - ideally outside GitHub Actions.
Patch Reviews Adds support for patch proposal reviews (accept/reject), along with comments.

In addition, we are planning to migrate development work of the VS Code extension to Radicle itself and at the same time use the extension itself to work with Radicle Patches. (Issues might still stay on GitHub)

For the time being, the roadmap for the VS Code Extension lives here.

NOTE: the above list is not meant as the fixed scope for this release - it is simply the current list of prioritized features. Both priority and scope may change.

Jetbrains IDE plugin

The Jetbrains IDE plugin has had a range of smaller releases shipped, incrementally fixing the UX and functionality issues we identified were missing, as we were migrating development to Radicle and to the plugin itself.

The final 0.7.3 release to be shipped at the end of September concludes a bunch of improvements and we are now in a position to work with Patches partly through the IDE and can already do most of our work on Issues that way too. The focus for the 1.0 release will be primarily to complete the missing features for collaboration through Radicle Patches.

In more detail, the desired list of features for the 1.0 milestone includes:

Feature Comment
Merge patch proposal Allows merging patches directly from the IDE.
Create patch proposal Allows creating new patches.
Patch proposal review Adds support for patch proposal reviews (accept/reject), along with comments.
Inline comments / discussions for patches Adds inline commenting functionality to diff view.
Editing comments in Patches / Issues Adds comment editing, so you can fix your copy-pasta errosr :wink:
Adding / removing reactions shouldn’t refresh/re-render the whole page UX fix.
Jetbrains “Task” integration Explore specific UX improvements around working with “Tasks”
Memory Leaked Nobody likes leakages. Especially memory ones.
Enable deleting Patches / Issues Adds ability to send issues (and patches) into oblivion!
Support replies to specific comments inside Radicle Patches / Issues Makes it possible to reply to specific comments.
Support attachments in issue/patch comments Adds necessary support for attachments (e.g. screenshots) to patch comments.

The detailed roadmap for the Jetbrains IDE plugin also lives under this GitHub milestone for the time being.

NOTE: the above list is not meant as the fixed scope for this release - it is simply the current list of prioritized features. Both priority and scope may change.

Budget :briefcase:

  • Total Duration: 154.6 FTE days
  • Software Engineer Full-time equivalent (FTE): 31 FTE days
  • Senior Software Engineer Full-time equivalent (FTE): 87 FTE days
  • Team Lead / Product Owner Full-time equivalent (FTE): 36.6 FTE days
  • Total Costs: 122 901 USDC
  • Recipient Wallet: 0x445717316388f1d1fb1730D3f6f9Bf59e0b03f4f

Drips-Powered Payments

We would like to continue “drinking our own champagne” with Radworks product stack and would propose to use Drips (which has worked great so far!).

Team :busts_in_silhouette:

Team members

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

The same team :busts_in_silhouette: that’s worked on the previous IDE plugin grants. See previous grants for more info.

Contact

1 Like

UPDATE: Early 2024 brings Integrated Development Environment (IDE) users some long-awaited Radicle presents, in preparation for the Radicle 1.0 launch!

Please read on to find out what functionality is already available in your IDE of choice, so you don’t have to sacrifice productivity when you leave centralized forges behind to start taking back control of your open source projects, with Radicle !

Jetbrains IDEs

Highlights:

  • The Radicle plugin on JetBrains IDEs got a huge update in its v0.8.0 release, with full integration of the Radicle Patches workflow !
  • In preparation for Radicle’s 1.0 release, we invested some time into some end-to-end tests that help verify that the IDE plugin will continue to work with newer versions of Radicle and ensure more stability ahead of the Radicle 1.0 launch :rocket: !

v0.8.0 Release

The major additions are:

:tada:It’s now possible to create and merge patches straight from the IDE!

  • You can create and update patches and issues

  • You can add comments to patches and issues, with full Markdown support, as well as… file attachments, with drag-and-drop.

  • You can add inline code comments when reviewing a patch!

  • It also contains quite a few bug fixes, most notably for Goland and RustRover users, for whom the plugin previously worked… not quite as well… by crashing their IDE… :confused:

This release marks an important milestone: Jetbrains IDE users can use Radicle entirely from within the IDE, without ever needing to “fill-in the blanks” from the terminal and run rad Command Line Interface (CLI) commands manually!

Full release notes: Release v0.8.0 · cytechmobile/radicle-jetbrains-plugin · GitHub

Demo

Demo video: https://youtu.be/B1X4BDD3mOA

End-to-end tests

The tests run nightly and verify:

  • installing Radicle
  • creating a new Radicle identity
  • creating a new Radicle project
  • starting radicle-node and radicle-httpd
  • firing up the IDE
  • configuring the IDE to use the version of Radicle we just installed
  • opening the Radicle project we just created above in the IDE
  • creating a new Radicle issue through the IDE
  • opening the issue we just created in the IDE

This is just the start, but we want to extend these tests a little more to cover the main user scenarios:

  • creating a patch
  • reviewing a patch
  • merging a patch

This pipeline has currently been implemented on GitHub actions (and is planned to be migrated , and can be seen in action here.

Visual Studio Code (VS Code)

On the VS Code front, more and more functionality is slowly and steadily making its way into the IDE. There is a stronger UX focus and fewer rough edges compared to IntelliJ, but at the cost of fewer overall features we are able to announce at this point.

Highlights of this particular grant:

  • v0.4.0 release (WIP)
  • v0.3.2 release

v0.4.0 Release [Work In Progress]

This particular release was planned to focus on Radicle Patches integration in VS Code, but this uncovered the need for some important groundwork for future development, due to emphasis on necessary infra (webviews, reactive global store) that is necessary for future development and a richer user experience for users who choose to interact with Radicle directly from VS Code. Due to this, this release is still WIP.

In more detail, the release is planned to include:

:rocket: Enhancements

:fire: Performance / Infrastructure

  • Introduce reactive global store(s): As our UI depends more on state and different components depend on the same state, there’s an increasingly higher need for a global store handling all of those concerns reactively.
  • Setup infrastructure for webviews: allows us to implement micro-web-apps (e.g. in the Patch Detail view) that can communicate with the rest of the extension.

Demos

Here are some video recordings of this WIP release:

  • Patch Detail View sneak peak !
  • responsiveness/theming/integration work (that also translates into better accessibility)

v0.3.2 Release

:rocket: Enhancements

  • patches: show a button to check out a Radicle Patch’s associated git branch (#75)
    • show an indicator on the Patch’s title and tooltip if its associated branch is the currently checked-out git branch
    • keep indicator’s state in sync even if the git branch change doesn’t happen from within our UI (e.g. rad patch checkout or git checkout in the terminal)
    • notify user of uncommitted changes when trying to check out a Patch
    • don’t show check-out-button for the currently checked-out Patch on the list
  • patches: auto-refresh Patches list when pathToNodeHome is updated in the extension settings
  • patches: show a hint-text that radicle-httpd may not be running as the placeholder in Patches list, if that seems to be the case
  • patches: fall back to showing their DID if the revision author’s alias isn’t defined (#75)
  • patches: use new better-fitting icon for merged Patches (#75)
  • patches: improve the contrast of the colors used by Patch status icons for light themes (#75)

:fire: Performance

  • app: heavily speed up most procedures by memoizing the resolution of the reference to the rad CLI (#75)
  • patches: heavily speed up (re-)loading of Patches list (#75)
    • measured ~50x faster against a real-world Project with >50 Patches, with the benefit increasing proportionally with the count of Patches on a project

:open_book: Documentation

  • contributing: document how to package locally from source and import into VS Code
  • fix some screenshots that were getting stretched to incorrect ratios

See more info and demos

Conclusion

These updates conclude the work undertaken in this particular grant. We will seek additional funding to continue work in this area (primarily on VS Code) through subsequent Grants applications and/or a new Org proposal in the more distant future.