Auto Added by WPeMatico

JetBrains Toolbox 사례 연구: 100만 사용자를 Kotlin 및 Compose Multiplatform으로 이동

JetBrains의 Toolbox 팀 리더인 Victor Kropp이 데스크톱에서 Kotlin과 Compose Multiplatform을 사용하게 된 사연을 전해 드립니다.

JetBrains Toolbox App은 JetBrains IDE를 사용하여 개발 작업을 수행하기 위한 단일 진입점으로, 도구 및 프로젝트를 위한 제어판 역할을 하며 JetBrains IDE를 빠르고 쉽게 설치 및 업데이트할 수 있게 해줍니다. 2015년 해커톤 프로젝트에서 시작된 이 애플리케이션은 현재 월 100만 명의 실 사용자에게 서비스를 제공하여 JetBrains 제품과 함께 작업 생산성을 높이는 데 도움을 주고 있습니다.

Toolbox 팀이 이 애플리케이션을 C++ 및 JavaScript에서 Kotlin 및 Compose Multiplatform으로 완벽하게 마이그레이션한 후, 코드 작업과 관리를 더 간편하게 수행하고 아티팩트 크기를 줄여 런타임 성능을 개선할 수 있었다는 이야기를 읽어보세요.

JetBrains의 Toolbox 팀을 이끄는 Victor Kropp로부터 직접 들으려면 Talking Kotlin #107을 확인하세요.

Victor씨, JetBrains Toolbox에서 사용하는 아키텍처와 기술 스택을 소개해줄 수 있나요?

Toolbox App은 일반적인 클라이언트-서버 애플리케이션입니다. 이 데스크톱 앱은 서버에서 사용 가능한 도구 목록을 요청하여 사용자에게 보여주고 필요할 경우 JetBrains 제품 업데이트를 다운로드합니다. 애플리케이션의 서버 측 부분은 처음부터 Kotlin으로 구현했습니다. 그러나 데스크톱 애플리케이션은 달랐습니다.

2015년에 JetBrains Toolbox용 데스크톱 앱을 빌드하기 시작했을 때 C++를 사용하여 비즈니스 로직을 구현하고 React 및 HTML/CSS/JS와 함께 Chromium Embedded Framework를 사용하여 사용자 인터페이스를 빌드했습니다. 이러한 선택을 할 당시에는 Kotlin 1.0이 아직 출시되지 않았고 Java 9와 함께 제공된 모듈식 JDK도 없었습니다. 고작 작은 도우미 애플리케이션을 위해 수백 메가바이트의 JRE(Java Runtime Environment)를 번들로 제공할 여유도 없었고 사용자들에게 환경을 수동으로 설정해야 하는 번거로움을 안겨주고 싶지도 않았습니다. 그래서 완전히 다른 접근방식을 선택해야 했죠.

2021년에 이르러 사용자 인터페이스를 React에서 Compose Multiplatform, 더 구체적으로는 Compose for Desktop으로 마이그레이션하여 이 데스크톱 애플리케이션을 100% Kotlin으로 만드는 마지막 단계를 완료했습니다.

Compose for Desktop 웹사이트 방문하기

해당 제품에서 Kotlin과 라이브러리를 어떻게 사용하시나요?

Kotlin으로 마이그레이션을 완료하면서 모든 곳에서 사용하고 있습니다. 사용자 인터페이스를 지원하는 Compose for Desktop 외에도 모든 비동기 작업에 kotlinx.coroutines를 정말 많이 사용합니다. Toolbox App은 수많은 JSON 객체를 처리하므로 이에 따라 저희도 kotlinx.serialization을 (역)직렬화에 사용합니다.

서버 측은 최대한 단순하게 유지됩니다. 사실 여러분이 생각하시는 것과는 달리 이것은 HTTP 서버가 아닙니다. 설치 가능한 도구에 대한 모든 정보와 설명(Toolbox에서는 ‘피드’라고 함)은 정적으로 생성되며 CDN에서 JSON 파일로 제공됩니다. 피드가 자주 변경되지는 않으므로 저희는 TeamCity에서 지속적 배포 파이프라인의 일부로 새 버전의 도구가 출시될 때만 이를 업데이트합니다. 제너레이터는 지원되는 각 제품이 빌드될 때마다 자동으로 트리거되는 ‘빌드 구성'(작업을 나타내는 TeamCity 명칭)으로 호출되는 간단한 명령줄 Kotlin 프로그램입니다. 두 번째 작업에서는 새로 생성된 모든 피드를 주기적으로 병합하고 오래된 피드를 폐기하고 유효성 검사를 수행합니다.

Toolbox 팀이 데스크톱용 애플리케이션 개발에 Kotlin을 사용하기로 결정한 이유는 무엇인가요?

Compose for Desktop으로 이전하기 전에는 Chromium Embedded Framework를 사용하여 Toolbox App용 사용자 인터페이스를 빌드했고 비즈니스 로직에 기본 C++를 사용하여 모든 주요 데스크톱 운영 체제를 쉽게 지원할 수 있었습니다. (그 후로 많은 것이 바뀌었고 2020년에는 모든 C++ 비즈니스 로직을 JVM에서 실행되는 Kotlin으로 옮기기로 결정했습니다.)

2015년 당시에는 프로젝트를 시작하는 데 좋은 선택이었습니다. JetBrains에서 빌드한 웹 UI 구성 요소 라이브러리인 Ring UI의 구성 요소를 재사용할 수 있었습니다. 또한 저희는 웹 개발과 React 작업에 이미 많은 경험을 가지고 있었습니다.

그러나 단점도 없지 않았습니다.

  • Chromium Embedded Framework는 리소스 소비가 많은 것으로 잘 알려져 있습니다. 유휴 상태일 때도 JetBrains Toolbox는 최소 200MiB의 RAM을 사용하곤 했습니다. 또한 창이 보이지 않을 때 전체 프레임워크를 언로드할 수 없었습니다. 사용자가 앱과 상호 작용하려고 할 때 몇 초 정도 지연이 발생하기 때문입니다.
  • 저희에게는 단일 데스크톱 애플리케이션 내부에 완전한 클라이언트-서버 아키텍처가 필요했습니다. 임베디드 웹 UI와 비즈니스 로직은 서로 다른 언어로 서로 다른 사람에 의해 작성되었습니다. 이로 인해 개발 프로세스가 복잡해졌고 애플리케이션 내에서 수 메가바이트의 JSON을 주고 받기 위한 리소스가 필요했으며 이미 가지고 있던 데이터의 (역)직렬화에 CPU 리소스가 소진되었습니다.

이러한 상황은 애플리케이션을 100% Kotlin으로 이전한 후 크게 개선되었습니다.

  • Compose for Desktop은 리소스를 훨씬 적게 사용합니다. Compose 프레임워크는 JavaScript 구현에 비해 더 나은 런타임 성능을 제공하며 백그라운드에서 유휴 상태로 실행될 때 앱에서 사용하는 RAM을 크게 줄일 수 있었습니다.
  • 단일 언어를 사용한다는 것은 모든 개발자가 컨텍스트를 전환하지 않고 처음부터 끝까지 기능을 개발할 수 있음을 의미합니다. 더 빠르고 실수도 적게 발생하며 개발자 간에 원활한 지식 공유가 가능합니다. 또한 전체 애플리케이션이 메모리의 데이터에 대해 동일한 표현을 사용하므로 추가 (역)직렬화 단계가 필요하지 않습니다.

Toolbox에 Kotlin을 도입한 경험에 대해 말씀해 주시겠어요?

저희 앞에는 해결해야 할 많은 과제가 있었습니다. 우선, 만들어진 지 5년이 된 코드베이스를 모든 기능과 문제점을 포함한 상태로 다른 스택으로 마이그레이션해야 했습니다. 애플리케이션의 핵심 요소가 의도대로 작동하도록 모든 유닛 테스트를 마이그레이션했습니다. 그러나 저희 애플리케이션에는 에코시스템마다 확연히 다른 외부 종속 요소가 많이 필요합니다. 어떤 부분은 이전 구현에서 작동하지 않다가 새 구현에서는 작동하기 시작했습니다. 저희가 아무 조치도 취하지 않았는데도 말이죠. 이유는 단순히 새로운 종속 요소가 이를 지원했기 때문입니다. 그러나 당연히 작동하리라 여겼던 다른 것들은 더 이상 작동하지 않았습니다. 공개 릴리스가 출시된 후에도 이러한 차이점을 파악하지 못한 경우도 있었습니다. 두 범주의 사례는 시스템 트레이(메뉴 모음) 아이콘 또는 프록시 서버 및 SSL 인증서와 같은 운영 체제 통합의 다양한 측면들입니다. 다른 한편으로, Toolbox의 ‘Projects‘(프로젝트) 탭에서 IntelliJ IDEA의 프로젝트 검색을 지원하는 코드를 재사용하거나 특정 엔터프라이즈 설정을 탐지하는 것과 같이 JetBrains의 다른 팀이 작성한 Kotlin 코드를 재사용할 수도 있습니다.

저희는 Compose for Desktop를 공식 발표 전부터 사용하기 시작했기 때문에 프레임워크에서 발생하는 문제를 가장 먼저 접하는 경우가 많았습니다. Compose for Desktop의 최초 사용자로서, 저희는 사용 시작과 동시에 모든 종류의 문제를 확인하고 Compose Multiplatform 팀의 동료에게 모든 문제를 보고했습니다. 그들은 많은 도움을 주었고 빠르게 대응했으며 모든 문제를 매우 신속하게 수정했습니다. 심지어 같은 날 수정 사항이 포함된 새 릴리스를 받는 경우도 있었습니다. 매우 인상적이었죠! 또한 Compose를 채택할 때, 그리고 프레임워크에서 어려움을 겪고 있을 때도 많은 도움을 주었습니다.

저희는 이전 설계를 완벽하게 복제할 수 있었습니다. Compose는 언뜻 보기에 HTML/CSS에 비해 더 적은 기본 레이아웃 프리미티브를 제공하는 것 같지만 간단한 수평 및 수직 스택(Compose의 행 및 열)만으로 이미 모든 요구사항의 99%가 충족된다는 사실을 금세 알게 되었습니다. 처음 시작할 때 Compose for Desktop에는 SVG 그래픽 지원과 같은 일부 기능이 여전히 누락되어 있었으나 Compose 팀의 동료들이 고맙게도 이러한 부족한 부분을 매우 신속하게 해결해주었습니다.

처음에는 애플리케이션 전체에서 Compose의 Material 구성 요소를 사용했습니다. 이 구성 요소는 매우 다각적으로 고려하여 만들어졌지만 터치 인터페이스에 중점을 두고 있습니다. 이 때문에 모든 요소에 많은 여백이 있고(손가락으로 쉽게 누를 수 있도록), 마우스오버 상태가 없으며(터치 디스플레이에는 이러한 동작이 없으므로), 매우 눈에 띄는 시각적 터치 피드백이 제공됩니다. 데스크톱에서는 마우스를 가져가면 구성 요소가 반응하고 클릭에 대한 시각적 피드백이 현재 요소에만 영향을 미치는(손가락으로 가려지지 않으므로) 등 상황이 많이 다릅니다. 이 때문에 저희는 Material 구성 요소를 데스크톱에서 더 잘 작동하는 자체 구성 요소로 교체하고 있습니다. 또한 향후에는 구성 요소 라이브러리를 오픈 소스로 공개할 계획이 있으므로 계속 지켜봐 주시기 바랍니다.

Compose for Desktop을 선택하기 전에 다른 UI 프레임워크를 고려하셨나요?

한 가지 대안은 애플리케이션을 완전한 기본 인터페이스로 변환하는 것이었지만, 이렇게 했다면 기능마다 3배는 더 많은 노력이 필요했을 겁니다. 저희는 크로스 플랫폼인 동시에 보기에도 좋으며 Kotlin과 잘 작동하는 프레임워크를 원했습니다.

Swing은 너무 오래되었고 JavaFX는 사용 저변이 아직 부족하다고 느꼈습니다. 이것이 당시에 발표된 지 얼마 되지 않았음에도 불구하고 Compose for Desktop을 선택한 이유입니다. 해당 팀에게 직접적 지원을 받고 피드백이 순환적으로 긴밀하게 이루어진다는 점도 큰 이유를 차지했죠.

Kotlin이 해당 제품에 가져온 가장 큰 이점은 무엇인가요?

일상 작업이 훨씬 간편해졌습니다. 이제 전체 애플리케이션에서 동일한 언어를 사용하므로, 팀의 개발자들이 이전보다 코드와 지식을 더 잘 공유할 수 있게 되었습니다. 또한 C++ 및 JavaScript 대신 Kotlin으로 작성하면서 일하는 재미가 훨씬 커졌습니다!

저희 독자들에게 하고 싶은 조언이나 권장 사항이 있나요?

기존 애플리케이션을 새 프레임워크로 전환하려고 한다면 마이그레이션의 복잡성을 얕잡아보면 안 됩니다. 거의 처음부터 새로운 애플리케이션을 작성하는 것과 다르지 않습니다! 기능뿐만 아니라 의도적이든 아니든 앱 동작의 사소한 뉘앙스까지도 놓치지 않고 다시 구현해야 하거든요.

저는 Compose for Desktop이 2021년에 크로스 플랫폼 데스크톱 애플리케이션을 만드는 주된 방법이 될 것이라고 굳게 믿습니다. 유사한 기술과 비교할 때 Kotlin은 JVM에서 검증된 에코시스템에 대한 액세스를 제공하고 Dart 및 Flutter보다 채택률이 훨씬 높으며 React/JS를 사용하는 Electron보다 훨씬 효율적입니다.

Compose for Desktop으로 첫 데스크톱 앱 빌드하기

Victor Kropp은 JetBrains Toolbox App의 팀장입니다.

게시물 원문 작성자

Sebastian Aigner

Continue ReadingJetBrains Toolbox 사례 연구: 100만 사용자를 Kotlin 및 Compose Multiplatform으로 이동

JetBrains Toolbox Case Study: Moving 1M users to Kotlin & Compose Multiplatform

Victor Kropp, the Team Lead for the Toolbox team at JetBrains, shares the story of adopting Kotlin and Compose Multiplatform on desktop.

The JetBrains Toolbox App is the single entry point for developing using JetBrains IDEs. It serves as a control panel for tools and projects, and makes installing and updating JetBrains IDEs quick and easy. Originally started in 2015 as a hackathon project, the application now serves one million monthly active users, and helps them be more productive with their JetBrains products.

Read on to understand how the Toolbox team moved their application from C++ and JavaScript to 100% Kotlin and Compose Multiplatform, and ended up making their code easier to maintain and work with while shipping smaller artifacts with better runtime performance.

To hear the story directly from Victor Kropp, who leads the Toolbox team at JetBrains, check out Talking Kotlin #107:

Victor, can you introduce the architecture and tech stack used by JetBrains Toolbox?

The Toolbox App is a typical client-server application. The desktop app requests a list of available tools from the server, shows it to the user, and downloads updates for JetBrains products when required. We implemented the server-side part of our application in Kotlin from the very beginning. The desktop application, however, was a different story.

When we started building the desktop app for JetBrains Toolbox back in 2015, we used C++ to implement its business logic and used the Chromium Embedded Framework together with React and HTML/CSS/JS to build the user interface. We made this choice at a time when Kotlin 1.0 hadn’t been released yet – and neither was the modular JDK, which came with Java 9. We couldn’t afford bundling a Java Runtime Environment (JRE) weighing hundreds of megabytes for our small helper application, and we didn’t want to trouble our users with having to manually set up their environment. So, we chose a completely different approach.

In 2021, we completed the final step of making the desktop application 100% Kotlin by migrating the user interface from React to Compose Multiplatform, more specifically Compose for Desktop.

Visit the Compose for Desktop website

How do you use Kotlin and its libraries in your product?

With the migration to Kotlin completed, we use it everywhere. Besides Compose for Desktop powering the user interface, we make heavy use of kotlinx.coroutines for all asynchronous jobs. The Toolbox App manipulates a lot of JSON objects, so we naturally use kotlinx.serialization for (de)serialization.

The server side is kept as simple as possible. In fact, it isn’t an HTTP Server as you might imagine it. All of the information and descriptions for installable tools (called “feeds” in Toolbox) are generated statically and served as JSON files from the CDN. They don’t change often, so we update them only when a new version of any tool is released as part of the continuous delivery pipeline on TeamCity. The generator is a simple command line Kotlin program that is invoked as a “build configuration” (TeamCity’s name for a job), which is automatically triggered on each build of every supported product. A second job then periodically merges all newly generated feeds, discards the outdated ones, and performs validation.

Why did the Toolbox team decide to use Kotlin for Desktop application development?

Before moving to Compose for Desktop, we used the Chromium Embedded Framework to build the user interface for the Toolbox App, and using native C++ for our business logic helped us support all major desktop operating systems easily. (Since then, many things have changed, and we made the decision to move all C++ business logic to Kotlin running on the JVM in 2020.)

Back in 2015, those were great choices to kickstart the project! We were able to reuse components from Ring UI, a library of web UI components built by JetBrains. We also already had a lot of previous experience in web development and working with React.

However, it had its disadvantages:

  • The Chromium Embedded Framework is known for its resource consumption. Even when idle, JetBrains Toolbox would use at least 200 MiB of RAM. We also couldn’t unload the whole framework when the window was invisible, because it would result in a multi-second delay for our users when trying to interact with the app.
  • We needed a full-blown client-server architecture inside a single desktop application. The embedded web UI and the business logic were written in different languages and by different people. This complicated the development process and required the resources to send megabytes of JSON back and forth inside the application, using up CPU resources on the (de)serialization of data that was already there.

After moving our application to 100% Kotlin, that situation has improved significantly:

  • Compose for Desktop is now much less resource intensive. The Compose framework provides better runtime performance compared to our JavaScript implementation, and when running idly in the background, we managed to greatly reduce the RAM used by the app.
  • Using a single language means that every developer can make a feature from start to finish without switching contexts. It is faster, less error prone, and improves knowledge sharing among developers. The entire application also uses the same representation for data in memory, skipping the need for extra (de)serialization steps.

Can you share your experience of introducing Kotlin to your Toolbox?

We faced many challenges. First of all, we needed to migrate a five year-old codebase, with all its features and quirks, to a different stack. To ensure that the core of our application works as intended, we migrated all of our unit tests. However, our application requires a lot of external dependencies, which obviously vary in different ecosystems. Some things didn’t work in the previous implementation and started working in the new one without any action from our side, simply because the new dependency supported them. However, other things we took for granted stopped working. In some cases, we didn’t know about those differences until after a public release. Examples for both categories are the different aspects of operating system integration, like the system tray (menubar) icon, or proxy servers and SSL certificates. On the other hand, it also allowed us to reuse Kotlin code written by other teams at JetBrains, like reusing the code powering IntelliJ IDEA’s project search in the Toolbox’s “Projects” tab or detecting specific enterprise setups.

We started using Compose for Desktop before it was even publicly announced, so we were often the first to encounter any issues that arose with the framework. As pioneers of Compose for Desktop, we noted all sorts of problems when we started, and reported all of them to our colleagues in the Compose Multiplatform team. They were very helpful and responsive and fixed all of them very quickly. At times, we were able to get a new release with a fix on the same day – very impressive! They also greatly helped us with the adoption of Compose and in cases where we were struggling with the framework.

We were able to make a full clone of our previous design. At first glance, Compose offers fewer layout primitives compared to what we had in HTML/CSS, but it quickly became apparent that simple horizontal and vertical stacks (Row and Column in Compose) already covered 99% of all our needs. When we first started, Compose for Desktop was still missing some pieces, like support for SVG graphics, but our colleagues from the Compose team helped us cover these needs very quickly.

Initially, we used Compose’s Material components throughout the application. These are very well-thought-out components, but they focus on touch interfaces. This means that all elements have large paddings (so they can be easily pressed with a finger), don’t have hover states (given there is no such thing on touch displays), and have very prominent visual touch feedback. On desktop, the story is usually quite different, as components react when hovered over, and the visual feedback for clicks only affects the current element (because it is not covered by a finger). Because of that, we are replacing Material components with our own which work better on desktop. We also have plans to open-source our components library in the future, so stay tuned for that.

Did you consider any other UI frameworks before choosing Compose for Desktop?

One alternative would have been to convert the application to a fully native interface, but it would have required three times more effort per feature. We wanted something that would be cross-platform, look nice, and work well with Kotlin.

We felt that Swing was too old and the usage of JavaFX isn’t sufficiently widespread. That’s how we landed on Compose for Desktop, despite it just being announced at the time. Getting direct support from the team and a tight feedback loop also turned out to be a huge plus.

What are the biggest benefits that Kotlin has brought to your product?

Everyday work is just much simpler now. We use the same language across the entire application, meaning the developers on our team share code and knowledge better than before. We’re also having much more fun writing Kotlin instead of C++ and JavaScript!

Do you have any advice or recommendations for our readers?

If you are converting an existing application to a new framework, don’t underestimate the complexity of migration. It is almost like writing a new application from scratch and then some! You’ll inevitably need to re-implement not only the features, but also all of the little nuances in your app’s behavior, whether those are intentional or not.

I strongly believe that Compose for Desktop is the way to create cross-platform desktop applications in 2021. Compared to similar technologies, Kotlin provides access to a tried and tested ecosystem on the JVM, has much greater adoption than Dart and Flutter, and it is far more efficient than Electron with React/JS.

Build your first desktop app with Compose for Desktop

Victor Kropp is the Team Lead for the JetBrains Toolbox App.

Continue ReadingJetBrains Toolbox Case Study: Moving 1M users to Kotlin & Compose Multiplatform

Dark Theme Is Now Available in Toolbox App 1.18.

It’s been a while since you made this wish, and now we’ve finally made it come true! We are happy to introduce the frequently requested feature – the Dark Theme. :tada:

Don’t have the Toolbox App yet? Click the link below to download the free Toolbox App and start working with the theme you like the most.

Download now

You shouldn’t wait any longer to see it in action. Just update your Toolbox App to version 1.18, if you haven’t set the Toolbox App to update automatically and select the Dark Theme in the “Appearance & Behavior” section of the Toolbox App Settings.

Dark Theme

Currently, the app offers two options – Light or Dark Theme – which you can change manually. Go to the Toolbox App Settings and choose the theme you like under the “Appearance & Behavior”.
Theme Settings

Bug Fixes 🛠

In the same release, we’ve fixed the following issues:

TBX-4898 – Generation of shell scripts on macOS for Android Studio 4.0 and 4.1 now works correctly.
TBX-4985 – Toolbox now correctly updates taskbar shortcuts on Windows.
TBX-5031, TBX-5066 – The uninstall process on Windows now works correctly.
TBX-5199 – Toolbox now updates Linux .desktop files if there is a broken symlink.
TBX-5233 – We’ve fixed a bug that caused Android Studio 4.1 not to start from the Toolbox App on macOS.

See the full list of fixed issues here.

As always, the Toolbox App team is happy to get your feedback! Leave us a message in our issue tracker or on Twitter by mentioning @JBToolbox.

Stay safe, and stay productive!
The Toolbox App team

Continue ReadingDark Theme Is Now Available in Toolbox App 1.18.

JetBrains Toolbox 2020.2. Summary

All tools in the JetBrains Toolbox and included in the All Products Pack subscription have been updated to their new 2020.2 versions. Below you can read about what the updates bring to particular tools you use from the toolset, and you can update to the newest version via the Toolbox App or from the tool itself.

IntelliJ IDEA

IntelliJ IDEA 2020.2 lets you review and merge GitHub pull requests right from inside the IDE, quickly navigate between warnings and errors in a file through the new Inspections Widget, view the full list of issues in a current file with the Problems tool window, and get notified if your changes break other files. You can use Jakarta EE, and get better support for Quarkus, Micronaut, and OpenAPI.
WebStorm

WebStorm 2020.2 comes with a long-awaited option for using Prettier as the default formatter, best-in-class (now we can finally say so!) support for Vue, new intentions for JavaScript, full support for GitHub pull requests, and much more!
PyCharm

PyCharm 2020.2 comes out with a lot of improvements to increase your productivity and code quality. Now you can perform the full Pull Request workflow without leaving your IDE, using PyCharm’s newly designed UI. You can also easily catch exceptions in your code with the new preview window that will stop the code execution and point out the line of code that is generating the problem. Finally, changing method signatures and renaming classes have been made easier with the new in-place refactoring feature. Just type your changes in the editor, review it, and apply it to all its usages.
RubyMine

RubyMine 2020.2 introduces a new way to review problems in code, a whole host of new intention actions, support for the Liquid template language, full support for GitHub pull requests, and many more new features for Ruby, Rails, JS, and database tools.
ReSharper

ReSharper 2020.2 brings new inspections and quick-fixes for C#8 and nullable reference types, the much-awaited Code Cleanup on Save, and a revamped Unit Test Runner. Also, ReSharper C++ brings you to the next level of Unreal Engine development and comes with a lot of improvements for C++/CLI support, navigation, and code analysis.
Please note the new licensing for ReSharper covered in this blog post.
icon_AppCode

AppCode 2020.2 is here with initial Swift Package Manager support, speed improvements for code completion, navigation, and highlighting, the Change Signature refactoring for Swift, a brand new Problems view and inspection widget, full support for GitHub pull requests, and more!
PhpStorm

PhpStorm 2020.2 is a major update for the IDE. It brings support for PHP 8 Union Types, a new control flow engine for PHP, full GitHub pull requests workflow support inside the IDE, a brand-new Inspection Widget, OpenAPI support via a plugin, and more.
GoLand

GoLand 2020.2 includes new features for Go Modules, better presentation of possible problems and weak places in your code, new code inspections, new code editing features, such as the long-awaited Add Caret Per Selected Line, updates for version control including WSL2 support for Git on Windows, and more!
Rider

Rider 2020.2 delivers several highly requested features such as the Localization Manager to help you work with resources in your app or website, and Shader support in our Unity integration. We’ve completely reworked the Unit Test Runner and the debugger API to make them faster, more powerful, and more stable.
CLion

CLion 2020.2 covers a wider variety of C++ projects by adding Makefile projects and polishing CMake support. Thanks to better compliance with the C++20 standard, many reworked code analysis checks, and new unit testing abilities, writing high-quality modern C++ code has never been easier.
DataGrip

DataGrip 2020.2 brings a separate editor for cell values, DML preview in the data editor, Google BigQuery dialect, and more!

With these releases out, we’ve already started working on further improvements. This means that early access programs for 2020.3 should open very soon. Stay tuned!

Your JetBrains team

Continue ReadingJetBrains Toolbox 2020.2. Summary

Toolbox App 1.17 is Out: Quality Improvements Arrive with a New Build Completely Rewritten in Kotlin

TL;DR Focusing on the quality of the Toolbox App, we have completely rewritten it in Kotlin. We’ve introduced a new Settings page, updated system requirements, and fixed dozens of bugs.

Toolbox App 1.17 Released

In this update, we’ve focused on bug fixes and on the overall quality of the Toolbox App.

The story

The Toolbox App began as a Hackathon project, though it had a different name. The state of the technology was very different at the time, however. Java was still in version 8, and Kotlin had not been released yet. We decided to try something new, so we implemented the core of the application in C++, and for the UI we used React with our own Ring UI library. This latter part has stayed with us through all these years and has proved itself to be successful. The elegant and polished interface is not only pleasing for the eyes, but it is also easy to develop and allows us to effortlessly present rich content in the “What’s new” notes for our products.

On the other hand, the core written in C++ is different. C++ is a powerful language (sometimes too powerful for our use case), and it often requires a “gloves-on” approach. Every time we switched to it from other projects that used Kotlin, we weren’t as productive as we had been before. It was also impossible to share code between the IntelliJ Platform and the Toolbox App, which would have benefitted both parties. The tool landscape has also changed. With the arrival of modular JDK, it is now possible to bundle a very small runtime with the app or even compile it to native code with Kotlin/Native.

With all this in mind, we made a decision last year to rewrite the core of the Toolbox App in Kotlin, and we are now happy to present the result. In this first iteration, we deliberately made as few changes as possible and stayed close to the original codebase, except, of course, for some third-party dependencies that we needed to replace with their JVM counterparts. Luckily there is no lack of high-quality Java libraries out there. You can easily find one for every purpose.

We didn’t want to repeat the same mistakes though, so when we needed to rewrite something from scratch, we fixed some bugs in the relevant components, as well. Below is a brief overview of the changes we’ve made.

Download the Toolbox App

Bug fixes

Depending on your preferred operating system, we’ve reimplemented the system tray icon (on Windows), menu bar icon (on macOS), and appindicator (on Linux). It now correctly appears in most cases and is no longer blurred on HiDPI screens. Improved screen detection also fixes a number of issues with incorrect application scaling. Many performance issues have been resolved, as well.

On Linux, JetBrains Account credentials are now stored correctly and the app handles SSL certificates better.

You can find the full list of resolved issues here.

Proxy servers

Previously, the Toolbox App always used the system proxy if it was set. It wasn’t possible to change the proxy address or to turn it off. There is now a dedicated page in Settings for setting up a custom proxy server and enabling and disabling it when necessary.

Proxy Settings

Settings

Speaking of settings, we’re happy to introduce the revamped Settings page. We’ve regrouped all options and made the most important categories available at a glance.

Toolbox App 1.17 Settings

System requirements

As we’ve previously announced, we are dropping support for 32-bit Windows. We are also updating the minimum supported OS versions to Windows 8 or newer and macOS 10.13 or newer. This change brings our system requirements into alignment with those of all the JetBrains IDEs which will not run on older OS versions. For Linux, we generally support only the latest regular and LTS releases.

Even though there might be not so many visible changes in the application, this update builds a solid foundation for future improvements. We are already working on some of the suggestions you shared with us on New Year’s Eve.

Thank you for your collaboration and your helpful feedback! We are listening!

Download the Toolbox App

Stay home, stay healthy, and stay tuned!
The Toolbox App team

Continue ReadingToolbox App 1.17 is Out: Quality Improvements Arrive with a New Build Completely Rewritten in Kotlin

JetBrains Toolbox 2020.1 is Available: Update Your Tools

The time has come to update your tools and start using their new features. All the JetBrains IDEs are now polished and new, ready for you to create something great.

Take a look at this short summary of what you can find in the new versions of the JetBrains IDEs.
We would also like to remind you that the easiest way to update your tools is via the Toolbox App.

Download the Toolbox App

IntelliJ IDEA

IntelliJ IDEA 2020.1 adds support for Java 14 and new features for a number of frameworks, upgrades the debugger with dataflow analysis assistance, adds a new LightEdit mode, and downloads and configures the JDK for you. You will also discover new in-place Rename and Change Signature refactorings, in-editor rendering of Javadocs, lots of VCS improvements, and so much more.
WebStorm

WebStorm 2020.1 comes with a more polished look and feel, out-of-the-box support for Vuex and Vue Composition API, an option for running Prettier on save, and some improvements for JavaScript and TypeScript.

Rider

Rider 2020.1 features the new .NET Core edition and Xamarin Hot Reload. Profiling is now easier with a brand new feature called Dynamic Program Analysis. The editor’s severity can now be configured with one click, and Unity developers benefit from lots of major updates and fixes.
PhpStorm

PhpStorm 2020.1 provides out-of-the-box support for composer.json, PHP type inference improvements, support for code coverage with PCOV and PHPDBG, PHPUnit toolbox, the Grazie grammar checker, and many other improvements.
GoLand

GoLand 2020.1 includes a variety of upgrades for Go Modules support, code-editing features that require little to no interaction from the user, an expanded code completion family, and more!
PyCharm

PyCharm 2020.1brings a lot of things that make development easier, like interactive rebasing, smart debugging, and more. It is now possible to turn the commit dialog into a tool window that’s open next to your code. In the debugger, what used to be Smart Step Into has become even smarter yet and is now the default Step Into.
CLion

CLion 2020.1 brings dozens of improvements across many IDE features. This includes CUDA support, formatter and refactoring enhancements, deeper integration with Clang-based tools, and new options in Run/Debug configurations. For Windows developers the new version comes with support for the Clang-cl compiler, while for Embedded projects CLion adds IAR compiler support and an experimental PlatformIO plugin.
RubyMine

RubyMine 2020.1 improves navigation between Rails entities and adds smarter code assistance. Setting up run configurations, SSH, and Docker are now more convenient. The new LightEdit mode allows you to quickly edit files without loading a project. This update also includes improvements for version control, the terminal, JS, and database tools.
icon_AppCode

AppCode 2020.1 brings completion during indexing, faster code assistance in pure Swift and mixed projects, the generation of documentation comments, new inspections and intentions, the Type Hierarchy view for Swift, and new sorting modes for the Swift Structure view.
ReSharper

ReSharper Ultimate 2020.1 offers support for more C# 8.0 and C++20 features, Dataflow Analysis for integer values, and some performance modifications under ReSharper’s hood. Also, ReSharper C++ includes better code completion, new inspections with quick-fixes, and initial HLSL support.
ReSharperC++

ReSharper C++ 2020.1 includes more support for C++20 features, better code completion, and new inspections with quick-fixes. For game developers, this release better aligns with Unreal Engine 4 guidelines and introduces initial HLSL support.
DataGrip

DataGrip 2020.1 makes it possible to run configurations and export to Excel. It also includes results in the editor, geo viewer, and more!

In the meantime, all the product teams have started working on the newest features and upcoming EAPs for the 2020.2 release. Stay tuned to the dedicated product blogs for news about their progress. And don’t forget to follow us on Twitter.

Stay home, stay healthy, have fun!
The JetBrains team

Continue ReadingJetBrains Toolbox 2020.1 is Available: Update Your Tools

The JetBrains Toolbox browser extension now works on self-hosted GitHub, GitLab, and Bitbucket instances

We’ve updated the JetBrains Toolbox browser extension for Chrome and Firefox. It can now clone and open files from private instances in JetBrains IDEs, whether you use corporate repositories at GitHub Enterprise or self-hosted GitLab or Bitbucket instances.

Install the extension

Please keep in mind that to start using this extension with private instances, you first need to enable it on your custom domain. Follow the steps below:

  1. Install the extension if you haven’t yet done so.
  2. Right-click the Toolbox extension icon on the browser toolbar to open its preferences.
  3. Tick “Enable on this domain” to enable the extension on the current webpage.

Toolbox extension at GitHub Enterprise

Now the Toolbox extension should work on your self-hosted instances, giving you access to the functionality that was previously available for open-source repository hosting services:

  • Clone projects from the main GitHub, GitLab, and Bitbucket repositories, and open them in available JetBrains IDEs.
  • Navigate from a highlighted line of code in a previously cloned GitHub project to that line in your IDE.

Read more about the main features of the Toolbox extension in this blogpost.

Stay home, stay healthy, stay productive!
The JetBrains Toolbox team

Continue ReadingThe JetBrains Toolbox browser extension now works on self-hosted GitHub, GitLab, and Bitbucket instances

End of content

No more pages to load