Skip to content

Support hot-reload / hot-restart using vm service protocol #2708

Closed

Description

@fuzzybinary

The Dart VM Service protocol now supports hot reload and hot restart, meaning Dart command line apps should support proper code hot reloading. It would be nice if Dart-Code utilized this method instead of relying on the flutter tool.

Activity

  1. added this to the On Deck milestone on Aug 12, 2020
  2. added
    in dartRelates to running Dart programs
    is enhancementAn enhancement or improvement that should be listed in release notes but is not a bug fix.
    on Aug 12, 2020
  3. added 2 commits that reference this issue on Sep 27, 2021
    635dbfb
    09f524e
  4. modified the milestones: On Deck, v3.27.0 on Sep 27, 2021
  5. DanTup commented on Sep 27, 2021

    @DanTup
    Member

    @bkonyi should there be something like a reloadSources service/extension registered when running a Dart script? I can see the VM Service has a reloadServices method, but in Flutter we use the presence of reloadSources and hotRestart services to know when these are available. Should there be similar for Dart, or should we assume it's always available for a recent SDK?

    (Also, the original issue here mentions Restart too - but I don't see anything in the docs about that - is it also available through the Dart VM without Flutter?)

  6. reopened this on Sep 27, 2021
  7. modified the milestones: v3.27.0, v3.28.0 on Sep 29, 2021
  8. fuzzybinary commented on Sep 29, 2021

    @fuzzybinary
    Author

    I may have been mistaken about the ability to do Hot Restart without Flutter.

  9. DanTup commented on Sep 29, 2021

    @DanTup
    Member

    Ah, got it.

    It would be good to support Hot Reload still - but it'd be nice to do it consistently with Flutter (eg. we use the presence of some VM Service to know it's available, and call it via that service) so the extension doesn't need to have logic about when it may/may not be available.

  10. bkonyi commented on Sep 29, 2021

    @bkonyi

    Correct, the service protocol doesn't actually implement Hot Restart. That's solely a Flutter extension of the protocol. The VM service protocol does support reloadSources, which is the RPC to trigger a hot reload.

  11. 2 remaining items

  12. DanTup commented on Oct 26, 2021

    @DanTup
    Member

    There's now an additional command Dart: Hot Reload which will call reloadSources for each isolate when debugging non-Flutter apps:

    Oct-26-2021 14-47-46

    Actually, Flutter: Hot Reload and Dart: Hot Reload call the same thing (so using either will have the same effect), it's the debug adapter that actually controls which code is run. For Flutter, we need to go through Flutter because otherwise I think some code to rebuild the widget tree could be skipped.

  13. fuzzybinary commented on Oct 26, 2021

    @fuzzybinary
    Author

    Does this work with reload on save or do you have to manually trigger the reload?

  14. DanTup commented on Oct 26, 2021

    @DanTup
    Member

    @fuzzybinary right now you have to run the command. I'm not sure I'd want to enable it by default, although perhaps we could add a dart.hotReloadOnSave (similar to dart.flutterHotReloadOnSave)? If that would be useful, please file an issue and I'll have a look at getting it into the next release.

    (btw there's a beta with the above command available at https://github.com/Dart-Code/Dart-Code/releases/tag/v3.28.0-beta.1 if you want to try it out before the release)

  15. DanTup commented on Oct 26, 2021

    @DanTup
    Member

    Actually, there's probably some inconsistency here.. If you run a Flutter app and a Dart app at the same time, saving a file probably will reload both, because it will unconditionally send the request to both. So if we were to support both, we should probably improve that too.

  16. DanTup commented on Oct 27, 2021

    @DanTup
    Member

    Supporting hot-reload-on-save properly turns out to be a bit trickier than I thought and will require some refactoring, so I'm going to leave that until the next release (I've filed #3637). In the meantime, I'm going to ensure the Dart reload is not fired by Flutter's reload-on-save, because it could be unreliable (for example it would not debounce if Flutter supports its own internal debounce, which would result in it triggering a lot when you do things like Save All).

  17. added a commit that references this issue on Oct 27, 2021
  18. danddinh commented on Oct 15, 2026

    @danddinh

    2026, I installed the Dart extension (by Dart-Code) in VS Code but there no Dart: Hot Reload in command palette (Ctrl+Shift+P).

    How to enable that command?

  19. FMorschel commented on Oct 15, 2026

    @FMorschel
    Contributor

    @danddinh, are you sure your Dart project was detected?

    Image
  20. DanTup commented on Oct 15, 2026

    @DanTup
    Member

    @danddinh the command only shows up while you're in a Dart debugging session - is that the case? (you should be able to see the debug toolbar when this is the case, and the status bar usually changes colour).

  21. danddinh commented on Oct 15, 2026

    @danddinh

    My app dir has just these:

    /project 
        /src
            app.dart
            pubspec.yaml
    

    Seems it's not detectable?

  22. DanTup commented on Oct 15, 2026

    @DanTup
    Member

    @danddinh are you in a debugging session started through VS Code?

    If so, please file a new issue with exact steps so we can try to reproduce what you're seeing. Thanks!

  23. danddinh commented on Oct 15, 2026

    @danddinh

    Ah yes, the Debug Start button.

    I now know how: edit .vscode/launch.json and click the Debug Start button.

    However, for those don't have the clue to start as in my case, I guess this behaviour should be there:

    • Command palette
    • Type Dart Hot reload
    • The option is shown and show alert about starting a debug session.
  24. DanTup commented on Oct 15, 2026

    @DanTup
    Member

    The option is shown and show alert about starting a debug session.

    It's not clear to me why you would want to invoke this command when you're not in a debug session. There's a lot of things in the command palette and adding entries that don't make sense in the current context are just additional things that might show up top when you're trying to invoke something else (for example "Reload Window" or "Reload Webviews")

  25. danddinh commented on Oct 15, 2026

    @danddinh

    Maybe a note in the README.md of the extension for Antie/VSCode should be nice instead. Coz new users of the extension won't know there's such 'Dart: Hot Reload' feature.

  26. FMorschel commented on Oct 15, 2026

    @FMorschel
    Contributor

    Using the debug palette, restart and lightning buttons that are really visible, you get the same result.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    in dartRelates to running Dart programsis enhancementAn enhancement or improvement that should be listed in release notes but is not a bug fix.

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions