Using Flow in WebStorm

Flow is a static type system developed by Facebook. It introduces a syntax of type annotations for JavaScript and provides a type checking tool.

Using types in your code allows Flow to catch more errors before you run the code, but is not mandatory – Flow’s static analysis can detect some errors even without type annotations.

WebStorm 2016.3 adds integration with Flow. So if you’re using Flow in your project, you will now see errors reported by Flow in the editor, as well as in a new Flow tool window. Errors are displayed right as you make changes in your code, without having to save them. Flow can also power WebStorm’s code completion, type hints, and navigation to the definition.

Let’s have a closer look at how this all works in WebStorm.

Installing Flow

If you’re new to Flow, we recommend that you check some examples on the Flow website first and follow their installation steps:

  • Make sure that Flow is added to your project. If not, run npm install --save-dev flow-bin
  • Add a .flowconfig file to your project with flow init command.
  • For all files you’d like to check with Flow, add // @flow comment on top.

Tip: Type flow and press Tab – WebStorm will expand it into // @flow.

In WebStorm:

  • Go to Preferences | Languages & Frameworks | JavaScript in WebStorm and set language version to Flow. WebStorm will then understand Flow type annotations in your code.
  • Check that the path to Flow is specified. If it’s correct, click OK to apply settings. You’re ready to go!

As you may have already noticed, there are three checkboxes for configuring how the Flow service is going to be used by WebStorm. Later we’ll discuss the features each checkbox adds.

flow-preferences

Code analysis and type checking

Once you’re done with the steps above and have enabled Type checking, WebStorm will run a Flow server that will analyze the code you’re working on.

Don’t forget that Flow analyzes only those files that have // @flow at the top.

Any errors Flow finds will be highlighted in the editor. Hover on the error to see its description.

flow-error

All errors reported by Flow are also listed in the Flow tool window. In its Errors tab you will see only the errors for the file you’re now working on.

Click the Show all errors icon on the left-hand side of the tool window and switch to the Project Errors tab to see all errors in the project. Double-click on the error to jump to the file.

flow-project-errors

Note that disabling the checkbox Type checking in the Flow preferences will stop Flow from running.

Navigation, code completion, and type hinting

As Flow has the information about the types used in your code from the annotations and type inference, it can also provide code completion suggestions based on that. WebStorm would show them in the autocompletion popup as well as in type hints.

flow-completion

To use this, go to Preferences and select the Navigation, code completion, and type hinting checkbox in addition to Type checking.

WebStorm can also use the information from Flow for navigation actions like Go to definition.

Code highlighting and built-in inspections

With this checkbox enabled, WebStorm will use the information provided by Flow to power code highlighting and its built-in inspections. Please note that enabling this option may cause performance problems.

Your WebStorm Team

About Ekaterina Prigara

Ekaterina Prigara is WebStorm product marketing manager at JetBrains. She's passionate about new technologies, UX and coffee.
This entry was posted in Cool Feature, Tutorials and tagged , . Bookmark the permalink.

72 Responses to Using Flow in WebStorm

  1. James Spence says:

    I’m having issues with this integration since the update. Whenever I enable flow, nothing appears in my project. Despite me type hinting variables, for example, no errors are displayed by the IDE. This is despite me installing flow bin into my node modules, specifying the path to the flow executable, and having type hinting on.

    • Ekaterina Prigara says:

      Do you have // @flow comment on top of your file and .flowconfig in you project?

      • James Spence says:

        I do, yes. I ended up opening a support ticket so hopefully it’ll be solved there. I will update if we resolve it.

        • Ville says:

          I have exactly the same experience. No matter if flow is enabled or not, the editor show nothing, although i can get the errors from flow CLI.

          • Ekaterina Prigara says:

            Sorry to hear that. Can you please provide us with a bit more information on you project configuration, Flow version and changes you make either via our issue tracker or our tech support.
            That also might be the same issue as this one https://youtrack.jetbrains.com/issue/WEB-23706 Unfortunately, there’s no much with can do with that :(

          • James Spence says:

            Ville, the thing that fixed it for me was ensuring I was testing Flow with the LOCAL version of flow, not the global version. Ensure you’re calling flow with something like: “./node_modules/flow-bin/flow server”. For me, the reason for my error was because of a mismatch in local flow version and my .flowconfig file. The IDE was failing silently and not telling me.

            Hope it helps!

          • Ekaterina Prigara says:

            We’ve added a notification in the Flow tool window about the version mismatch in the latest bug-fix update, so it should be easier to spot issues like that in the future. Good that it works for you now!

  2. Anthoni Gardner says:

    Unfortunately this causes horrendous problems with Windows.
    I followed these instructions and installed flow and then used the flow-bin folder.

    All works as should. When editing a JSX file I can see types etc just like in Typescript.
    However when I click to move to say the console (still in the editor) flow.exe instantly crashes. To make it worse I’ve had several Blue Screens of Death since using this.

    I would really love to get this working properly, but I am not sure if flow is working properly for Windows and I do not believe it’s your fault :|

  3. David says:

    Hey there,

    thanks for integration flow in Webstorm.
    Unfortunately I have to say the performance is really bad when switching on
    “Navigation, code completion and type hinting”. I don’t see any sense in using flow in my IDE if this feature is switched off.
    I also got the problem, that paths completely break. CMD + Click doesn’t work anymore, paths are not resolved when using import or require.

    • Ekaterina Prigara says:

      When you have this option enabled, as its name suggests, all navigation is powered by Flow. It may happen that Flow doesn’t support resolve in these cases: please ensure that with low find-module moduleref filename command, where moduleref is the path, e.g. flow find-module "./foo" bar.js. We’ll also try to make WebStorm resolve paths itself as a fallback if Flow can’t.
      For investigating performance issues, can you please send us the content of your IDE log folder via https://youtrack.jetbrains.com/issues/WEB. Thank you!

  4. Jon Kenoyer says:

    I am also getting the Flow Windows crash using 2016.3.2 and flow 0.38.0. Note that Flow works fine from the command line.

    We are evaluating using Flow with React and WebStorm with 40 plus developers and this is a stopping issue :/

  5. Arno.Nyhm says:

    why is the path to the flow binary not relative?
    i see it always in the directory node_modules of the current project

    • Ekaterina Prigara says:

      By default a locally installed Flow is selected for all projects. You can alternatively select and use a globally installed Flow – select the path from the drop-down list or click on the … icon to the right from the input and select the path.

      • Arno.Nyhm says:

        but in the most cases you use the via npm/yarn installed flow (like with youtrack-mobile – please look at your own screenshot in your blogpost)

        • Ekaterina Prigara says:

          Sorry, I’m not sure I understand your question then.
          In youtrack-mobile Flow is a local dependency, flow-bin is listed in project’s package.json and WebStorm by default uses this Flow version from the project’s node_modules.
          What Flow version do you want to use?

          • Arno.Nyhm says:

            no – by default it not uses the version from the projects node_modules – if you are the same person check in and checkout then it looks like it uses it.

            steps to reproduce:
            – other account then maintainer
            – checkout project
            – open in WebStorm
            – get error that flow is not found (as i remember the last used path suggest was the path from previous maintainer)

            that means:

            – the path is stored in IDE settings absolute
            – the path is not stored relative to project root

          • Arno.Nyhm says:

            the path should be stored as:

            node_modules/flow-bin/vendor/flow
            or
            ./node_modules/flow-bin/vendor/flow

            and not as

            /Users/ekaterinaprigara/WebstormProjects/youtrack-mobile/node_modules/flow-bin/vendor/flow

  6. Hi,
    Is there any way I can change folder for flow server running by PhpStorm?
    Currently I have my .flowconfig in /src, but PhpStorm starts Flow server in the folder, so it can’t find that config (output of Flow/Console tab):

    /usr/local/bin/flow server
    Could not find a .flowconfig in or any of its parent directories.

  7. Lianghua Sun says:

    Hi, I’m having issues when using “covariant” properties.

    the example code is below

    type State = {
    + uuid: number,
    nickname: string
    }

    const mineState = {
    uuid: 12345,
    nickname: 'Kitty'
    }

    console.log(mineState.uuid);

    The + sign means “covariant” properties indicate the uuid is read-only.
    (Ref: https://flowtype.org/en/docs/frameworks/redux/)

    But WebStorm keep warning me type member expected, see the screenshot here:
    http://wx4.sinaimg.cn/mw690/5eeb2608gy1fe3ka19gq2j206t073wer.jpg

    Am I doing something wrong ?

  8. Oleg says:

    1) In settings IDE automatically suggest path to flow executable: “home/me/someproject/node_modules/.bin/flow”;
    2) I check “Type checking” (or another checkboxes) and press Apply button;
    3) IDE show error “Cannot Save Settings: Error during checking Flow path: /usr/bin: node: No such file or directory…”;
    4) Solving: specify path like “/home/me/someproject/node_modules/flow-bin/flow-linux64-v0.48.0/flow” and it works.

    I think it’s a bug.

    WebStorm 2017.1.4
    Build #WS-171.4694.29, built on June 7, 2017
    Linux 4.4.0-81-generic
    flow-bin 0.48.0
    node 6.9.4 via NVM

    • Ekaterina Prigara says:

      How do you start WebStorm? Can you please try to start it from the terminal? It seems that WebStorm can’t find Node.js. Thanks!

      • Ice says:

        I got the same error message.

        Flow Executable: “/Users/ice/src/calypso/node_modules/.bin/flow”
        Error: “Cannot Save Settings: Error during checking Flow path: env: node: No such file or directory, please provide a valid path to the executable.”

        Solution: /Users/ice/src/calypso/node_modules/flow-bin/flow-osx-v0.53.1/flow

        I start webstorm via app launcher.
        Node 8.1.4 via nvm
        Flow-bin: 0.53.1

        Node and NPM settings set in Webstorm.
        Other debugging and tools work fine inside Webstorm.

  9. Denis says:

    How to turn off Flow Service?

    • Ekaterina Prigara says:

      Flow service configuration is available in Preferences | Languages & Frameworks | JavaScript. If you uncheck all the checkboxes, Flow service will be disabled.

  10. Jonny says:

    When I switch to the Flow option in Javascript settings, my editor starts highlighting any ES6 stuff (like import, async, & const) as errors. Anyone have any ideas how to fix this? The project has Flow installed.

  11. Martin says:

    It’s really a great feature that flow has been integrated into WebStorm etc. but “Resolving Reference” takes often several secs (rarely less than one second) which is a bit annoying.

    Whenever I CMD+Click a reference a little popup with a progress bar comes up and it says “Resolving Reference”. The popup hangs there for a few seconds and finally the IDE navigates to reference.

  12. Anatoly says:

    does Flow provide some advantages over the use of embedded WebStorm’s code analysis in conjunction with using TypeScript? in other words, if I already use WebStorm (with its embedded code analysis) and TS, why should I consider using WebStorm+Flow in my future projects?

  13. Dmitriy Tupalov says:

    Hi!
    I have options in my constructor. Options is described by some flow type (e.g. TBaseApiOptions). When I write code and create an instanse of my class, WebStorm suggest that my options is type of name TBaseApiOptions. But I want to see the content of this type, not name of that type. Is there variants to do this?

    Example of my code and WebStorm’s suggest
    https://www.dropbox.com/s/n6bppy6bpnl8hsp/type_name.png?dl=0

  14. Pascal Pflaum says:

    I had the same issue as Oleg in IDEA Ultimate 2017.2
    And want to give a solution if you end up here like I did.

    When setting the flow executable I got an error:
    Error: “Cannot Save Settings: Error during checking Flow path: env: node: No such file or directory, please provide a valid path to the executable.”

    My System
    * Ubuntu 17.10
    * NVM (https://github.com/creationix/nvm)

    I got the Error for global and local flow-bin package.

    I solved this by starting the idea.sh from a Terminal instead from a LauncherIcon. I think that NVM and the way how it changes node versions in combination with IDEA not started from terminal caused the problem.

  15. Lukasz says:

    I’m struggling with setting up flow on my Windows machine.
    In Languages&Frameworks>JavaScript I set JavaScript version to Flow then I set Flow executable to C:\Users\myUserName\AppData\Roaming\npm\flow.cmd and checked type checking and navigation. However, now when I run Webstorm (2017.2) I just see spinner and information “starting flow service” after some time in flow console I see error that service timed out.

  16. Seb says:

    Can’t get Flow to start. All is set but the message Starting Flow Service keeps on spinning.

  17. Александр Староверов says:

    Hi! Its real highlight flow in comments style?

  18. Viktor Molokostov says:

    Hi guys, thank you for the Flowtype integration. It works ok, but lacks one important feature which Atom Nuclei has – inferred types hinting. Flow has very powerful type inferring abilities, so one can make a lot less type annotations, but still get full type coverage. Nuclei can show interred types which is very handy during development, IDEA does it only when the type is declared in the same file which is much less useful. Is there a possibly of you guys adding such feature in IDEA?

    • Ekaterina Prigara says:

      Hello Viktor,
      You can use the Expression Type action (Ctrl-Shift-P) to see the inferred types. We plan to show the inferred types in Flow on cmd-hover, similar to TypeScript.

  19. Aleksandr says:

    Hello,
    Flow support is good feature, but i have some troubles.

    1. In IDEA 2017.3.1 code completion not work for all types from https://flow.org/en/docs/react/types.
    2. I try to cmd+click on “SyntheticInputEvent” but i see “Cannot find declaration to go to”. In Flow docs (https://flow.org/en/docs/react/events) says: “…use the SyntheticEvent…”.

    In error message for React.Component without Props i see link and can navigate to type definitions file in “/private/tmp/flow/flowlib_/react.js”, original source on git – https://github.com/facebook/flow/blob/master/lib/react.js.
    Also in this directory /private/tmp/flow/flowlib_/ there is a file react-dom.js with react events type definitions, but no links in Flow error message for navigate.

    Screenshots:
    https://www.dropbox.com/s/80p7i4qiri9nray/SyntheticInputEventError.png?dl=0
    https://www.dropbox.com/s/7ozt06zau20gmzx/ReactComponentError.png?dl=0

    Why Navigation to global types of react events not working and React.Node, Key, ElementType and rest too?

    • lena_spb says:

      IDEA code completion/navigation is based on file index – all project .js files are added to it, including files from locally installed npm dependencies (see https://blog.jetbrains.com/webstorm/2014/07/how-webstorm-works-completion-for-javascript-libraries/). React types are built in Flow, but the corresponding libdefs are not a part of Flow package installed with npm install. So, no completion/navigation is possible, unless you choose to use Flow for it (Navigation, Completion and type hinting should be enabled in File | Settings | Languages & Frameworks | JavaScript): in this case Flow uses the definition files it creates in your system TEMP dir while running

  20. Poyan Nabati says:

    Is there any way to enable flows lazy mode to speed up the checks? Right now it takes about 2-3 seconds for an update.

    Thanks.

  21. Zakhar says:

    Hello,

    I’ve got an issue with Flow in PhpStorm. If Flow version is higher then 0.59 it doesn’t work (no highlighting, just show the message “Starting Flow Service”). I’ve tried the global and local installation of Flow.

    PhpStorm 2017.2.5
    Flow 0.60 – 0.71.0
    .flowconfig:
    [ignore]
    /test/*
    /node_modules/*
    /assets-server/*
    /build/*
    /scripts/*
    /coverage/*
    [include]
    [libs]
    /flow-typed/*
    [lints]
    [options]
    [strict]

  22. Oleg says:

    So far I see no “Code Highlights and in-build inspections” in my Flow preferences setup. So as result this feature doesnt work for me. I have latest WebStorm.

    WebStorm 2018.1.4
    Build #WS-181.5087.27, built on May 21, 2018
    JRE: 1.8.0_152-release-1136-b39 x86_64
    JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
    macOS 10.13.4

  23. Martin Kristof says:

    Hello, I am using PHPStorm EAP 2018 with flow. I turned autocompleting on, but IDE doesn’t autocomplete props when I’m calling component in JSX. It only checks whether any prop is missing but not perform autocompleting.

Leave a Reply

Your email address will not be published. Required fields are marked *