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 the Flow syntax.
  • 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.

enable-flow-in-the-project

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.

Make sure that you’ve checked Save all modified files automatically if you want to see errors from Flow as you type. Otherwise, Flow will check your code only when you press Save all.

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.

95 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.

  24. Tom says:

    Hello, I am using WS 2018.3.1 and it seems that the Flow code completion doesn’t work (at least for React. I didn’t try any other).

    I am using the official Flow tutorial for creating React App:
    ————————————–
    create-react-app my-app && cd my-app
    yarn add –dev flow-bin
    yarn run flow init
    ————————————–

    Flow checker is working in my WebStorm but no code hinting.
    In my WS settings, I have checked both “Type checking” and “Navigation, code completion, and type hinting”.

    For example when I code:
    ————————————–
    type Props = {
    children?: React.Node;
    }
    ————————————–
    WebStorm is not offering ‘React.Node’ but ‘React.ReactNode’ from react.d.ts which is totally wrong! (Flow: Cannot get React.ReactNode because property ReactNode is missing in module react [1].) I switched off all TS and d.ts support but WS is not offering any Flow type but incompatible d.ts only.

    • Ekaterina Prigara says:

      Hello Tom,
      In the current implementation of the WebStorm’s integration with Flow, the IDE adds its own code completion suggestions powered by its JavaScript support in case when there are not suggestions from Flow.
      And this is exactly what happened in this case: Flow didn’t provide any suggestions after React.
      We will fix this particular case by tuning our suggestion.
      But would you prefer to see no suggestions at all in case when there are no options from Flow?

      • Tom says:

        Hello Ekaterina, thank you for your prompt response.

        I think that would be maybe better to do not show other suggestion than the Flow one, because it can be really confusing.

        I have spent several hours of discovering what should be the correct type and type settings according to the actual best practices and autocompleting tool (I am switching from TS to Flow at the moment).

        For example, I know that WS is displaying in the autocompleting pop-up that the React.ReacNode is coming from ad.ts …but I was asking my self: can I use it for Flow or not and can Flow use d.ts if there is no flow-typed definition file?

        I can imagine that some libraries got same type names in TS as in Flow, but some don’t. Maybe you can make to see non-Flow suggestions as optional in WS/Flow settings.

        Thank you to JB for great products!

  25. Ferrero says:

    Hello, I was trying to use all=true in the options in the file .flowconfig and it doesn’t work. Some Idea?

    • Ekaterina Prigara says:

      Hi, unfortunately, in WebStorm 2018.3 some options in .flowconfig are ignored. In WebStorm 2019.1 (which is now in Beta) we have started using the new Flow LSP APIs on macOS and Linux and thanks to that, the problem should be fixed.

  26. belomi says:

    Hey, thank you for this article. Changing the language version is apparently removing the Emmet support. Anybody here that could figure out how to use Flow and Emmet for React (js)?

  27. 42nato says:

    Hi, I am using Flow with NodeJS (v10.14.2) and am attempting to debug in WebStorm. I am generating sourcemaps with flow-remove-types --sourcemaps --pretty. The breakpoint I set is being hit but the line numbers reported are incorrect and the debugger opens the compiled file instead of the source file. Can you perhaps add a guide for this use case and/or tell me if I am missing something obvious?

    • Ekaterina Prigara says:

      Hi, it seems that there’s some problem with the source maps generated by flow-remove-types – they don’t properly work neither in WebStorm nor in Chrome’s DevTools.
      I would recommend you to file an issue in their GitHub repo, however, I’m not sure if the project is still maintained.

  28. Laurenz Glück says:

    Hi Ekaterina,

    I have a short question about autocompletion with React and Flow in WebStorm 2019.1.3.

    If I have a React class without using Flow i can just start typing component and WebStorm is offering my all the default react component functions like componentDidMount for autocompletion. For classes using Flow this is not the case and there is no autocompletion… Is there any way to fix this?

    Thanks for your help!
    Laurenz

    • Ekaterina Prigara says:

      Hi Laurenz,
      I’ve filed a bug report: https://youtrack.jetbrains.com/issue/WEB-39437 Please follow it for the updates.
      As a workaround, you can add a TypeScript definition file in Preferences | Languages & Frameworks | JavaScript | Libraries – Download – react.
      Hope it helps!

      • Laurenz Glück says:

        Hi Ekaterina,

        thanks for your response and for creating the bug report!

        I actually already tried your proposed workaround before – unfortunately without success… I added the @types/react and @types/react-dom packages and also restarted WebStorm. Still no autocomplete…

        I’m not sure how this TypeScript definition files work, but you to be sure – I’m not using TypeScript ;)

        Thanks for your help!
        Laurenz

        • Ekaterina Prigara says:

          TypeScript type definition files are used by WebStorm to power-up JavaScript code completion, so it’s weird that it hasn’t helped… The issue has already been fixed and the fix will land in the next week’s WebStorm 2019.2 Early Preview build that you can download here: https://www.jetbrains.com/webstorm/eap/

  29. Alec says:

    Having issues with relative pathing.
    import MyConfig from ‘../models/my-config.js’;
    gives: Error:(10, 34) Cannot resolve module ../models/carrier-configuration.js.

    CTRL + Click brings me to the file (and i have the resolve references set to flow) and it finds the reference. Note if i run the flow command in the terminal these relative path issues don’t show up, just in the webstorm version

  30. Lyubo says:

    I don’t get any type hinting. I have flow installed both local and global. Tried setting either in the path, without success. The server runs and provides errors, both in the tab on the bottom and inline, but I don’t get any type hinting. My settings panel looks different. I have:

    – Type checking
    – Navigation, code completion, and type hinting
    – Save all modified files automatically

    All three are selected.

    The way everything is set works in VS Code. I get type hinting, coverage (both total for the file and inline), all of it …

    Is coverage supported in WebStorm?

    WebStorm 2019.2.4
    Build #WS-192.7142.35, built on October 29, 2019
    Licensed to WebStorm Evaluator
    Expiration date: December 13, 2019
    Runtime version: 11.0.4+10-b304.77 x86_64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
    macOS 10.15.1
    GC: ParNew, ConcurrentMarkSweep
    Memory: 1979M
    Cores: 12
    Registry: ide.mac.allowDarkWindowDecorations=true, ide.tree.ui.experimental=false, ide.balloon.shadow.size=0
    Non-Bundled Plugins: IdeaVIM, com.chrisrm.idea.MaterialThemeUI, com.jetbrains.plugins.ini4idea

    • Ekaterina Prigara says:

      Hello,
      Type hints in WebStorm are shown on Cmd-hover over a symbol in the editor and look like this:

      Can you please try to hold Cmd, hover over a symbol and wait a bit longer – does the hint appear? If not, we would appreciate it if you report an issue on our tracker and attach IDE logs (menu Help – Show logs) and some sample code to help us reproduce the problem.

      No, sorry, Flow coverage reports are not supported. Please vote for this feature request: https://youtrack.jetbrains.com/issue/WEB-24582

Leave a Reply to Alec Cancel reply

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