What’s New in PyCharm 2019.3

Interactive widgets for Jupyter notebooks, MongoDB support, and code assistance for all Python 3.8 features are here.

Please note that features marked pro only are supported only in PyCharm Professional Edition.

Jupyter pro only

Interactive widgets

Interactive widgets

To provide more interactivity, Jupyter notebooks support interactive controls known as interactive widgets. These controls let you turn static notebooks into interactive dashboards, allowing those who view your notebooks to customize their view. With this update, PyCharm adds support for interactive widgets. This means the widgets are rendered with the output and can be used to manipulate the notebooks just like it works with native Jupyter notebooks.

The IDE now supports the most popular libraries of widgets. If you find your library is not working, please make sure to file an issue.

Runtime completion

Runtime completion

One of the advantages PyCharm offers is intelligent coding assistance, made possible with our advanced static code analysis algorithms. However, for dynamic languages such as Python static code analysis is not always enough. This is why with this update, we extend it by leveraging the runtime information provided by Jupyter itself. This results in smarter code completion in some cases such as dictionary indices or deeply-nested expressions for which the IDE couldn’t figure out the type using the static analysis.

Zoom in and out on the output panel

Zoom in and out on the output panel

The preview’s font size can now either be set to be consistent with the editor or be customized in the settings. Also, the preview now respects the editor option `Change font size (Zoom) with Ctrl+Mouse Wheel `. When it’s enabled, you can zoom in or out in the preview using the mouse wheel while holding Ctrl.

Further improvements

  • If a Jupyter notebook is changed outside of the IDE (e.g. via the native Jupyter interface), the IDE now automatically syncs its state to make sure the IDE user sees the latest version of the notebook and no changes are lost.


Completion for file paths

Completion for file paths

Afraid of making a typo when writing a file name? Especially with longer file names like `open(‘data/survey_data_28112019_exported.csv’)`? Now you can get file path suggestions within the Python code editor or console. We’ve extended our context-aware code completion functionality, so string literals in file related contexts now show suggestions for possible file paths.

Relative import support

Relative import support

Do you prefer relative imports over absolute imports? PyCharm is now able to automatically convert between these styles. If you’re already importing from a certain package with a relative import, any new imports from that package will also automatically be created as relative imports.

Python 3.8: TypedDicts

Python 3.8: TypedDicts

Avoid incorrect value assignment for dictionaries by using PyCharm’s support for TypedDict. Get a precise representation for your key-value pair structures and let our code editor assist you with their proper usage.

Python 3.8: Literal type annotation

Python 3.8: Literal type annotation

Do you have a method that takes a specific literal string, like the file mode for `open`? You can use Python 3.8’s `Literal` type annotation to check for not only a type, but also a specific value. PyCharm will now warn you when you call a function with an unsupported value.

Automatically create pytest tests

Automatically create pytest tests

Our tool to create tests automatically got an upgrade and it now supports pytest as well. With this, PyCharm allows you to automatically create pytest tests by just clicking on the Go To | Test option from the context menu of a method declaration.

Debugger: Size information for collections

Debugger: Size information for collections

Tracking information while debugging should be as clear and detailed as possible. This is why we’ve tweaked the variables view so it now shows better-organized and comprehensive data. With this, expect new ordering, improved visual representation for scientific arrays, display of length for collections, and removal of duplicated details.

Further improvements

  • Are you working with network scripts or interfacing with hardware and using hex or binary values? Good news! PyCharm now has integrated conversion of format for decimal values to hexadecimal or binary format straight from the console or the debugger through the variables view.
  • Developing for Linux on Windows? We’ve added support for Windows Subsystem for Linux 2. Configure your Python interpreter in PyCharm to use the one available from WSL 2. pro only

Performance improvements

Faster Indexing

Faster Indexing

PyCharm can help you get your work done faster with its advanced code insight. For this to work, we need to index both your code and all the packages you import. When you use a package with compiled extensions, like many data science packages, before we can index it we need to generate Python skeletons (stub files) that describe the Python interface. We’ve made improvements to this process, and you can expect the entire indexing process to be at least 25% faster. Of course, if you use the same package in multiple virtualenvs, we reuse the index we’ve already created.

Fewer freezes, and improved reporting of freezes

Fewer freezes, and improved reporting of freezes

Unfortunately, there are times when PyCharm’s UI freezes for some time before letting you get back to working on your code. We realize this is something that is highly unpleasant, and that’s why we’re working hard on eliminating these. We’ve fixed many issues that could cause UI freezes, and have now added the ability for you to immediately report a UI freeze directly from the IDE, which will make it possible for us to investigate why it froze, and ensure it doesn’t happen again. Thank you in advance for helping us get rid of UI freezes in PyCharm!

Further improvements

  • This year, we’ve been working a lot on the startup performance of all JetBrains IDEs. The startup time of our core platform has been improved further in the 2019.3 versions, and we’ll keep working on getting the IDEs to start faster.
  • It is now possible to change your theme without restarting the IDE. This is possible both when you choose a pre-installed theme, or right after downloading a new theme.
  • Various improvements in the processing of events and handling of ignored files have made version control status updates faster in PyCharm 2019.3.
  • We’ve made some changes to how the editor is rendered, and now scrolling through a long file became a lot smoother.

Database Support pro only

MongoDB support

MongoDB support

Are you building an application on MongoDB? Then you’ll be happy to learn that you can now explore your MongoDB collections in PyCharm. Connect your database by adding a data source from the database tool window (View | Tool Windows | Database). PyCharm Professional Edition comes with all database features from JetBrains DataGrip, the professional SQL IDE made by JetBrains.

IDE features

Parameterize run configurations

Parameterize run configurations

When you’re making a command-line application, it’s usually convenient to be able to change the arguments quickly. Although you could always just go into `Edit Configuration` to change them, there’s a better way now: with the new run configuration macros (variables) you can have PyCharm prompt you for the value every time you start your application.

Find in selection

Find in selection

Want to know how frequently some text occurs in a section of your file? The find action is now scoped to your selection at first. Want to search everywhere? Press Ctrl-F (Cmd-F on macOS) again to expand your search to the rest of the file.

Further improvements

  • If a part of your application is written in JavaScript, there’s a good chance you’re using Handlebars templates somewhere. If you have the Handlebars plugin installed, you can now enable Handlebars code intelligence in any Python string. Just press Alt-Enter in your string, choose ‘Inject language or reference’, and type ‘Handlebars’.

Version control

Improved comparison with current branch

Improved comparison with current branch

The more branches you have, the harder it gets to keep track of the difference between them. In the new version of PyCharm, the branch comparison functionality looks better and gives you a quick overview of what commits make the difference between the two branches.

Improved UI for cloning a repository

Improved UI for cloning a repository

No matter what type of repository you use, we now have a single place to start when you want to check out a new project.

Further improvements

  • When checking out a remote branch, you usually want to create a local branch that tracks the remote branch. In PyCharm 2019.3, there’s just one ‘checkout’ action which will make sure you’ll see the current state of the remote branch, but there’s no risk of losing any of your local commits.
  • PyCharm has always been able to push the branch you’ve currently got checked out. Sometimes, you may want to push another branch, and from now on there is no more need to check it out first.

Web development pro only

CSS classes from a CDN

CSS classes from a CDN

Do you use a stylesheet from a CDN? We can now download a version of that stylesheet specifically to use for code completion.

See Values Returned by Methods while Debugging JavaScript

See Values Returned by Methods while Debugging JavaScript

Just like in the Python debugger, the JavaScript debugger can now show you the return values of methods you’re calling. To see the return values, click the gear icon on the debugger and enable ‘Show Return Values’.

Further improvements

  • Set CSS style settings to enforce single or double quotes.
  • Whether you use single or double quotes in your CSS, PyCharm can now help you keep your quotes consistent. Configure them in Settings | Editor | Code Style | Style Sheets | CSS, on the ‘Other’ tab.
  • Do you use React components that don’t have propTypes defined for them? PyCharm is now able to infer props and will give you code completion for components that don’t have propTypes defined.
Learn about PyCharm 2019.2

Jupyter Notebook

Run All, Run All Above, Run All Below

One of the most requested features in our Jupyter support has been to run all cells with a single button click. This turned out not to be as easy as it sounds, because we had to reimplement some of Jupyter’s execution logic on the PyCharm side. We’re happy to announce that this feature is now available in PyCharm.

Improved server configuration

With multiple projects open, PyCharm would implicitly use the first project you’ve opened to start a managed Jupyter server. This is now configurable. You can also now choose a specific port for the Jupyter server to listen on.

Spacing with virtual lines

When you view a Jupyter Notebook in the browser, the layout naturally spaces out the cells a little bit. The PyCharm approach of displaying the code as a Python file therefore looks a little more dense. To make the code look better, we now insert virtual empty lines in your notebook that are not persisted to the file.

Inline display of variable values

The PyCharm debugger helps you keep track of your variables, and shows you their current state as you’re working with your notebook.

Further improvements

  • Another oft-requested feature was the ability to restart the kernel, and this is now possible.
  • You can now directly publish notebooks from PyCharm to JetBrains Datalore

IDE Improvements

Code highlighting for many popular languages

Do you work on projects where code in a different language sneaks into your project? PyCharm will now highlight the syntax of Windows .bat files, C#, C++, Groovy, Lua, Makefiles, and more.

Basic bash support

Most projects, at some stage in their life, get some bash files checked in to their repo. PyCharm will now highlight bash syntax, provide basic completion, and integrate with Shellcheck to check your bash files.

Improved look on Windows

PyCharm now looks better than ever on Windows: we’ve tweaked the look of the UI to be more modern.

cURL support for the REST client

cURL format is now supported out of the box. Just copy your cURL formatted request and paste it directly to your HTTP Request file to convert it into the proper format. To use this new functionality, just create a new .http file or a HTTP-request scratch file, and then paste a cURL string. It will be automatically converted to a full request.

Preserve cookies between requests

Imagine you made an authentication request on a service to later call endpoints that will ask for permission. In the past this authentication response was lost, forcing you to ask for it every time it was needed. Now this is not an issue! All the cookies will be kept for your future usage and will be transferred in the next requests you perform.

Improved EditorConfig support

EditorConfig files allow you to embed code style settings directly in your repo. We’ve now improved this functionality to be more flexible; for example, it’s now possible to use multiple EditorConfig files to set different settings for different parts of your project. Learn more in the documentation.


Python 3.8: Positional-only parameters

Designate positional-only parameters to your function definitions to restrict the usage of your functions. This new syntax will allow you to define strictly those arguments that are purely intended to be called according to a specific sequence.

Python 3.8: Assignment Expressions

Assign a value within an expression to enhance your code compactness and readability. You can now, for example, use one line of code to create conditional expressions and at the same time assign variable values.

More Python 3.8

Final annotation for variables

Design classes and subclasses with restricted usage of methods, classes, and variables by using the ‘Final’ qualifier to avoid unwanted inheritance or overriding.

Use equals sign in f-strings

f-Strings can now use ‘=’ to show expressions and their values at the same time. Use f'{expr=}' to generate a string that will show both your expression and its output.

Inline Python functions

One of the key features in PyCharm is its ability to automatically refactor your code. This way you know for sure that after you’ve completed the operation, the behavior of your code didn’t change. We’ve now added the ability to automatically inline a Python function. Learn more about Python refactoring.

Find duplicate code quickly

Duplicate code is smelly code, so PyCharm lets you know if there’s something you might want to refactor into a single function.


Improved variable renaming

Refactoring code is now more customizable, with an option to rename or not rename dynamic references. If selected, you can decide which occurrences you want to actually rename and which ones to leave as they are, by using a preview interface.

Updated Smart step into while debugging

The ‘Smart step into’ (Shift-F7) feature received a boost. Targets are now more visible, and you can easily switch between them with the arrow keys or Tab, and then press Enter to step into the selected target.

Improved visibility of libraries in the debugger

The filter icon on the debugger call stack allows you to hide all the calls from third-party code. Now everything that you mark as a library can be hidden with this new feature.


Full-Text Search

Did you know that PyCharm Professional Edition bundles all database features from JetBrains DataGrip, our professional database IDE? One of the new features in our database tooling is full-text search across multiple data sources: now you can find your data, no matter where it is hiding.

Learn about PyCharm 2019.1

Jupyter Notebooks pro only

Work with notebooks

We’ve made it easier to edit the code in your Notebook: as you’re editing the notebook, the source looks like a regular Python file. This makes light work out of navigating around your code. Of course, round trip editing is supported, and all changes made in either PyCharm or the browser will be reflected immediately.

Run and debug cells

Jupyter Notebooks are great at helping you explore and interact with your data. With PyCharm, Jupyter Notebooks are now even easier to use, as you can quickly run and debug cells from your notebook in the IDE. Of course, many of the hotkeys from in-browser notebooks also work in PyCharm. For example, use Shift+Enter to run the highlighted cell, and select the one below.

Server and kernel management

Get started with your notebooks quicker. With PyCharm you don’t need to start your server or kernel manually: just open a notebook and run a cell. PyCharm automatically starts the server and appropriate kernel for the notebook you’ve opened.

Variable viewer

If you’ve lost track of the current value of a variable, you can use PyCharm’s variable viewer to make sure everything looks right.

IDE Improvements

Recent Locations

You may often find yourself needing to move back and forth between different locations in the code when you are developing. PyCharm has long had the Recent Files popup (Ctrl+E, or Cmd+E on macOS) to help you navigate between these files quickly. However, you don’t just want to get to a file, you want to be taken to a specific location, so we’ve introduced the new and improved Recent Locations popup (Ctrl+Shift+E, or Cmd+Shift+E on macOS) to get you to your destination quicker.

UI theme plugins

Don’t like our default styling? We’ve improved our support for UI theme plugins. Find one in the plugins marketplace by looking for 'tag: UI', or learn how to make your own.

Sublime Text keymap

One of the hardest parts of switching to a new tool is having to learn all the new hotkeys. We've added a Sublime Text keymap to make it easier for anyone switching from Sublime Text to PyCharm.

Further improvements

  • Native SSH for Git: in previous versions, SSH for Git could be configured to use either built-in or native SSH. Built-in SSH was necessary in case interactive prompts would be required for authentication. In the new version, these prompts can be handled with native SSH. Native SSH supports more features, including better security protocols, so the built-in option has been removed.

Python improvements

Debugger performance for big collections

The PyCharm debugger can now handle infinitely large collections without slowing down while initially loading the collection.

Data class inheritance

Python 3.7 Data Classes were already supported in PyCharm, but now we’ve extended this support to make sure that subclasses of Data Classes also get accurate code completion.

Interpreter in status bar

When you’re developing an application for multiple environments, for example when migrating between Python or framework versions, it makes life easier when you are able to quickly switch between them and see at a glance which version you’re now using.

Type checking for variable assignments

Python’s optional typing helps you to document your code and prevent mistakes down the line. We’ve now furthered our support for it by checking types on variable assignment.

Remote interpreters pro only

Vagrantfile syntax

PyCharm supports Python interpreters inside Vagrant boxes, and now also makes your Vagrantfile look good.

SSH with sudo

You need root access to control the GPIO pins on your Raspberry Pi, so to make GPIO development easier we’ve made it possible to run code with root privileges over SSH in PyCharm 2019.1. Of course, you could use root privileges for other uses, but we wouldn’t want to encourage those publically, would we now?

Web Development pro only

Improved HTML and CSS quick documentation

CSS has gotten a lot more powerful over the years, which has brought more complexity. To help you find your way around this more complex modern CSS, we’ve improved the quick documentation support – just press Ctrl+Q (or Ctrl+J on macOS) to learn more. Don’t worry, we won’t tell anyone if you look up the docs for the ‘p’ tag.

All new JavaScript debug console

PyCharm Professional Edition comes with the excellent JavaScript support from JetBrains WebStorm. They’ve just created a new and improved JavaScript debug console that works for both Node.JS code and in-browser JavaScript.

Unit testing

Multiprocess test runner for pytest

Large test suites are good, but they can take a while to run. To make them complete a little faster, we’ve now upgraded our pytest integration to support multiprocess test running.

Databases pro only

New database connection flow

PyCharm Professional Edition bundles all the SQL support from JetBrains DataGrip. They’ve just improved the process for configuring a new database connection. If you haven’t tried this yet, you are in for a treat. After configuring your database, in addition to being able to explore your tables, you’ll also get schema-aware SQL completion when writing queries in your Python code.