Skip to content

How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

Description

@chriddyp

👋 Hello Dash Community --

It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


Prioritizing Backwards Compatibility

We will always try to keep breaking changes to a minimum by making new features backwards compatible.

Communications

Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

  1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
  2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
  3. We'll mention this in the Dash Club newsletter as well.

If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

  1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
  2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

Also, you should be aware that a breaking change was made via our versioning scheme (see below).

Versioning, Semver, and Changelogs

  1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

    This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
    Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

  2. Semver is only effective if users are aware of:

    • Their version number
    • The latest package's version number
    • The concept of semver (semver is by no means the standard way to version packages)
    • A link to upgrade guides

    We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

    • Displaying the latest our version numbers of the main packages
    • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
    • Notifying our users that we use semver
    • Providing links to each package's CHANGELOG
    • Telling users how to check the version of the package that they have installed

    image

    For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

  3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

    • These files are linked to from the installation instructions

Compatibility Between Packages
In the Dash ecosystem, certain packages depend on each other:

So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

To make this easier, we'll keep the major versions of the major package in sync with each other:

  • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
  • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
  • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
  • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
  • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
  • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

Upgrade Guides and Prelease Versions

  • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
  • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
  • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
  • This GitHub issue will be linked to from the notification channels above

Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

Documentation

  • Our user guide will always contain the most up-to-date versions in the installation instructions
  • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
  • We may not keep documentation pertaining to the old versions available on our website.
  • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

Community Forum Examples
The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
At the top of the thread:
image

At the bottom of the thread:
image

Incorporating Feedback on the Release

Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

This will allow the community to provide us feedback on the proposed set of breaking changes.

We will communicate this issue by:

  • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
  • Creating a post in the Dash Community Forum
  • Mentioning this in the Dash Club newsletter.

We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      How we deal with *Breaking Changes* - Proposal and Community Feedback Thread · Issue #458 · plotly/dash · GitHub
      Skip to content

      How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

      Description

      @chriddyp

      👋 Hello Dash Community --

      It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

      At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

      When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


      Prioritizing Backwards Compatibility

      We will always try to keep breaking changes to a minimum by making new features backwards compatible.

      Communications

      Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
      Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

      Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

      1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
      2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
      3. We'll mention this in the Dash Club newsletter as well.

      If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

      1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
      2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

      Also, you should be aware that a breaking change was made via our versioning scheme (see below).

      Versioning, Semver, and Changelogs

      1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

        This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
        Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

      2. Semver is only effective if users are aware of:

        • Their version number
        • The latest package's version number
        • The concept of semver (semver is by no means the standard way to version packages)
        • A link to upgrade guides

        We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

        • Displaying the latest our version numbers of the main packages
        • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
        • Notifying our users that we use semver
        • Providing links to each package's CHANGELOG
        • Telling users how to check the version of the package that they have installed

        image

        For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

      3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

        • These files are linked to from the installation instructions

      Compatibility Between Packages
      In the Dash ecosystem, certain packages depend on each other:

      So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

      To make this easier, we'll keep the major versions of the major package in sync with each other:

      • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
      • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
      • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
      • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
      • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
      • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

      Upgrade Guides and Prelease Versions

      • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
      • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
      • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
      • This GitHub issue will be linked to from the notification channels above

      Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

      Documentation

      • Our user guide will always contain the most up-to-date versions in the installation instructions
      • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
      • We may not keep documentation pertaining to the old versions available on our website.
      • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

      Community Forum Examples
      The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

      So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

      For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
      At the top of the thread:
      image

      At the bottom of the thread:
      image

      Incorporating Feedback on the Release

      Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

      This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

      This will allow the community to provide us feedback on the proposed set of breaking changes.

      We will communicate this issue by:

      • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
      • Creating a post in the Dash Community Forum
      • Mentioning this in the Dash Club newsletter.

      We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

      Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

      To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


      Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        No labels
        No labels

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' How we deal with *Breaking Changes* - Proposal and Community Feedback Thread · Issue #458 · plotly/dash · GitHub
          Skip to content

          How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

          Description

          @chriddyp

          👋 Hello Dash Community --

          It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

          At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

          When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


          Prioritizing Backwards Compatibility

          We will always try to keep breaking changes to a minimum by making new features backwards compatible.

          Communications

          Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
          Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

          Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

          1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
          2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
          3. We'll mention this in the Dash Club newsletter as well.

          If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

          1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
          2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

          Also, you should be aware that a breaking change was made via our versioning scheme (see below).

          Versioning, Semver, and Changelogs

          1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

            This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
            Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

          2. Semver is only effective if users are aware of:

            • Their version number
            • The latest package's version number
            • The concept of semver (semver is by no means the standard way to version packages)
            • A link to upgrade guides

            We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

            • Displaying the latest our version numbers of the main packages
            • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
            • Notifying our users that we use semver
            • Providing links to each package's CHANGELOG
            • Telling users how to check the version of the package that they have installed

            image

            For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

          3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

            • These files are linked to from the installation instructions

          Compatibility Between Packages
          In the Dash ecosystem, certain packages depend on each other:

          So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

          To make this easier, we'll keep the major versions of the major package in sync with each other:

          • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
          • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
          • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
          • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
          • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
          • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

          Upgrade Guides and Prelease Versions

          • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
          • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
          • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
          • This GitHub issue will be linked to from the notification channels above

          Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

          Documentation

          • Our user guide will always contain the most up-to-date versions in the installation instructions
          • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
          • We may not keep documentation pertaining to the old versions available on our website.
          • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

          Community Forum Examples
          The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

          So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

          For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
          At the top of the thread:
          image

          At the bottom of the thread:
          image

          Incorporating Feedback on the Release

          Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

          This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

          This will allow the community to provide us feedback on the proposed set of breaking changes.

          We will communicate this issue by:

          • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
          • Creating a post in the Dash Community Forum
          • Mentioning this in the Dash Club newsletter.

          We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

          Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

          To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


          Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            No labels
            No labels

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' How we deal with *Breaking Changes* - Proposal and Community Feedback Thread · Issue #458 · plotly/dash · GitHub
              Skip to content

              How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

              Description

              @chriddyp

              👋 Hello Dash Community --

              It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

              At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

              When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


              Prioritizing Backwards Compatibility

              We will always try to keep breaking changes to a minimum by making new features backwards compatible.

              Communications

              Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
              Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

              Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

              1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
              2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
              3. We'll mention this in the Dash Club newsletter as well.

              If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

              1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
              2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

              Also, you should be aware that a breaking change was made via our versioning scheme (see below).

              Versioning, Semver, and Changelogs

              1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

                This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
                Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

              2. Semver is only effective if users are aware of:

                • Their version number
                • The latest package's version number
                • The concept of semver (semver is by no means the standard way to version packages)
                • A link to upgrade guides

                We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

                • Displaying the latest our version numbers of the main packages
                • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
                • Notifying our users that we use semver
                • Providing links to each package's CHANGELOG
                • Telling users how to check the version of the package that they have installed

                image

                For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

              3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

                • These files are linked to from the installation instructions

              Compatibility Between Packages
              In the Dash ecosystem, certain packages depend on each other:

              So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

              To make this easier, we'll keep the major versions of the major package in sync with each other:

              • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
              • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
              • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
              • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
              • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
              • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

              Upgrade Guides and Prelease Versions

              • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
              • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
              • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
              • This GitHub issue will be linked to from the notification channels above

              Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

              Documentation

              • Our user guide will always contain the most up-to-date versions in the installation instructions
              • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
              • We may not keep documentation pertaining to the old versions available on our website.
              • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

              Community Forum Examples
              The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

              So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

              For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
              At the top of the thread:
              image

              At the bottom of the thread:
              image

              Incorporating Feedback on the Release

              Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

              This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

              This will allow the community to provide us feedback on the proposed set of breaking changes.

              We will communicate this issue by:

              • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
              • Creating a post in the Dash Community Forum
              • Mentioning this in the Dash Club newsletter.

              We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

              Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

              To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


              Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                No labels
                No labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' How we deal with *Breaking Changes* - Proposal and Community Feedback Thread · Issue #458 · plotly/dash · GitHub
                  Skip to content

                  How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

                  Description

                  @chriddyp

                  👋 Hello Dash Community --

                  It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

                  At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

                  When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


                  Prioritizing Backwards Compatibility

                  We will always try to keep breaking changes to a minimum by making new features backwards compatible.

                  Communications

                  Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
                  Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

                  Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

                  1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
                  2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
                  3. We'll mention this in the Dash Club newsletter as well.

                  If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

                  1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
                  2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

                  Also, you should be aware that a breaking change was made via our versioning scheme (see below).

                  Versioning, Semver, and Changelogs

                  1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

                    This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
                    Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

                  2. Semver is only effective if users are aware of:

                    • Their version number
                    • The latest package's version number
                    • The concept of semver (semver is by no means the standard way to version packages)
                    • A link to upgrade guides

                    We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

                    • Displaying the latest our version numbers of the main packages
                    • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
                    • Notifying our users that we use semver
                    • Providing links to each package's CHANGELOG
                    • Telling users how to check the version of the package that they have installed

                    image

                    For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

                  3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

                    • These files are linked to from the installation instructions

                  Compatibility Between Packages
                  In the Dash ecosystem, certain packages depend on each other:

                  So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

                  To make this easier, we'll keep the major versions of the major package in sync with each other:

                  • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
                  • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
                  • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
                  • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
                  • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
                  • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

                  Upgrade Guides and Prelease Versions

                  • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
                  • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
                  • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
                  • This GitHub issue will be linked to from the notification channels above

                  Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

                  Documentation

                  • Our user guide will always contain the most up-to-date versions in the installation instructions
                  • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
                  • We may not keep documentation pertaining to the old versions available on our website.
                  • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

                  Community Forum Examples
                  The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

                  So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

                  For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
                  At the top of the thread:
                  image

                  At the bottom of the thread:
                  image

                  Incorporating Feedback on the Release

                  Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

                  This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

                  This will allow the community to provide us feedback on the proposed set of breaking changes.

                  We will communicate this issue by:

                  • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
                  • Creating a post in the Dash Community Forum
                  • Mentioning this in the Dash Club newsletter.

                  We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

                  Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

                  To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


                  Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    No labels
                    No labels

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' How we deal with *Breaking Changes* - Proposal and Community Feedback Thread · Issue #458 · plotly/dash · GitHub
                      Skip to content

                      How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

                      Description

                      @chriddyp

                      👋 Hello Dash Community --

                      It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

                      At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

                      When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


                      Prioritizing Backwards Compatibility

                      We will always try to keep breaking changes to a minimum by making new features backwards compatible.

                      Communications

                      Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
                      Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

                      Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

                      1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
                      2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
                      3. We'll mention this in the Dash Club newsletter as well.

                      If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

                      1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
                      2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

                      Also, you should be aware that a breaking change was made via our versioning scheme (see below).

                      Versioning, Semver, and Changelogs

                      1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

                        This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
                        Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

                      2. Semver is only effective if users are aware of:

                        • Their version number
                        • The latest package's version number
                        • The concept of semver (semver is by no means the standard way to version packages)
                        • A link to upgrade guides

                        We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

                        • Displaying the latest our version numbers of the main packages
                        • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
                        • Notifying our users that we use semver
                        • Providing links to each package's CHANGELOG
                        • Telling users how to check the version of the package that they have installed

                        image

                        For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

                      3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

                        • These files are linked to from the installation instructions

                      Compatibility Between Packages
                      In the Dash ecosystem, certain packages depend on each other:

                      So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

                      To make this easier, we'll keep the major versions of the major package in sync with each other:

                      • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
                      • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
                      • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
                      • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
                      • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
                      • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

                      Upgrade Guides and Prelease Versions

                      • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
                      • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
                      • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
                      • This GitHub issue will be linked to from the notification channels above

                      Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

                      Documentation

                      • Our user guide will always contain the most up-to-date versions in the installation instructions
                      • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
                      • We may not keep documentation pertaining to the old versions available on our website.
                      • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

                      Community Forum Examples
                      The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

                      So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

                      For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
                      At the top of the thread:
                      image

                      At the bottom of the thread:
                      image

                      Incorporating Feedback on the Release

                      Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

                      This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

                      This will allow the community to provide us feedback on the proposed set of breaking changes.

                      We will communicate this issue by:

                      • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
                      • Creating a post in the Dash Community Forum
                      • Mentioning this in the Dash Club newsletter.

                      We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

                      Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

                      To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


                      Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        No labels
                        No labels

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' How we deal with *Breaking Changes* - Proposal and Community Feedback Thread · Issue #458 · plotly/dash · GitHub
                          Skip to content

                          How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

                          Description

                          @chriddyp

                          👋 Hello Dash Community --

                          It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

                          At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

                          When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


                          Prioritizing Backwards Compatibility

                          We will always try to keep breaking changes to a minimum by making new features backwards compatible.

                          Communications

                          Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
                          Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

                          Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

                          1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
                          2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
                          3. We'll mention this in the Dash Club newsletter as well.

                          If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

                          1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
                          2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

                          Also, you should be aware that a breaking change was made via our versioning scheme (see below).

                          Versioning, Semver, and Changelogs

                          1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

                            This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
                            Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

                          2. Semver is only effective if users are aware of:

                            • Their version number
                            • The latest package's version number
                            • The concept of semver (semver is by no means the standard way to version packages)
                            • A link to upgrade guides

                            We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

                            • Displaying the latest our version numbers of the main packages
                            • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
                            • Notifying our users that we use semver
                            • Providing links to each package's CHANGELOG
                            • Telling users how to check the version of the package that they have installed

                            image

                            For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

                          3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

                            • These files are linked to from the installation instructions

                          Compatibility Between Packages
                          In the Dash ecosystem, certain packages depend on each other:

                          So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

                          To make this easier, we'll keep the major versions of the major package in sync with each other:

                          • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
                          • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
                          • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
                          • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
                          • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
                          • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

                          Upgrade Guides and Prelease Versions

                          • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
                          • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
                          • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
                          • This GitHub issue will be linked to from the notification channels above

                          Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

                          Documentation

                          • Our user guide will always contain the most up-to-date versions in the installation instructions
                          • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
                          • We may not keep documentation pertaining to the old versions available on our website.
                          • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

                          Community Forum Examples
                          The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

                          So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

                          For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
                          At the top of the thread:
                          image

                          At the bottom of the thread:
                          image

                          Incorporating Feedback on the Release

                          Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

                          This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

                          This will allow the community to provide us feedback on the proposed set of breaking changes.

                          We will communicate this issue by:

                          • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
                          • Creating a post in the Dash Community Forum
                          • Mentioning this in the Dash Club newsletter.

                          We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

                          Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

                          To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


                          Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            No labels
                            No labels

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); How we deal with *Breaking Changes* - Proposal and Community Feedback Thread · Issue #458 · plotly/dash · GitHub
                              Skip to content

                              How we deal with *Breaking Changes* - Proposal and Community Feedback Thread #458

                              Description

                              @chriddyp

                              👋 Hello Dash Community --

                              It's been almost a year and a half since we launched Dash and we're getting to a point where we feel like we need to make some breaking changes to move the product forward.

                              At Plotly, we take backwards compatibility pretty seriously. Over the last 5 years of developing plotly.js (the graphing library behind dcc.Graph), we've published over 100 releases, all without introducing a single breaking change.

                              When we make a breaking change in Dash, we're asking everyone our community to take time out of their day to read a migration guide and upgrade their code. In this issue, I'd like to share with you how we plan on easing this burden as much as possible. As always, your feedback is welcome and appreciated.


                              Prioritizing Backwards Compatibility

                              We will always try to keep breaking changes to a minimum by making new features backwards compatible.

                              Communications

                              Breaking changes should not take you by surprise. You should have time to prepare for them and you should be notified when they are in the immediate horizon.
                              Everyone has different methods for notifications (email, github, rss, etc). We also don't want these notifications to get lost in the sea of Dash updates.

                              Here's a proposal for how we'll try to notify you when we're going to make a breaking change.

                              1. A "Breaking Changes Notification Issue" in this repository. We will lock down this issue and we'll only comment in the issue when we see a breaking change in the horizon. You can subscribe to this issue (See the GitHub documentation on subscribing) to receive an email notification when there is a new comment.
                              2. A "Breaking Changes" email list for Dash developers and Dash component authors. This will be separate from the Dash Club email list. Dash Club will continue to contain general Dash news, this email list will only email you if a breaking change is on the horizon.
                              3. We'll mention this in the Dash Club newsletter as well.

                              If you weren't aware of these notification channels, then we'll try to notify you as you browse the documentation and forum:

                              1. A banner in the Dash User Guide (https://dash.plot.ly) notifying you that the next version is coming. This will be up for at least 2 weeks before the change is published.
                              2. A pinned post in the Dash Community Forum (https://community.plot.ly/c/dash). Also pinned for at least 2 weeks.

                              Also, you should be aware that a breaking change was made via our versioning scheme (see below).

                              Versioning, Semver, and Changelogs

                              1. We will communicate breaking changes in our version numbers by incrementing the Major version number (Versions are MAJOR.MINOR.PATCH. In the version 5.14.8, 5 is the "major" number). This is the semver way.

                                This means that if we go from version 0.5.12 to version 1.0.0, we've made some change that could cause your code to break.
                                Unlike other software, our versioning scheme does not indicate if we've "made a big feature": switching from 1.2.5 to 2.0.0 only means that we've made a breaking change, it doesn't necessarily mean that we've introduced new functionality.

                              2. Semver is only effective if users are aware of:

                                • Their version number
                                • The latest package's version number
                                • The concept of semver (semver is by no means the standard way to version packages)
                                • A link to upgrade guides

                                We will work raise version awareness through our official Dash installation instructions (https://dash.plot.ly/installation) by:

                                • Displaying the latest our version numbers of the main packages
                                • Encouraging version awareness by specifying specific versions (i.e. rather than pip install dash, we will always say pip install dash==0.29.0)
                                • Notifying our users that we use semver
                                • Providing links to each package's CHANGELOG
                                • Telling users how to check the version of the package that they have installed

                                image

                                For our Dash Deployment Server customers, we'll always lock down the versions in the sample applications.

                              3. Each GitHub project contains a CHANGELOG.md file, formatted in the [keep a changelog](https://keepachangelog.com/en/1.0.0/) style.

                                • These files are linked to from the installation instructions

                              Compatibility Between Packages
                              In the Dash ecosystem, certain packages depend on each other:

                              So, if we make a breaking change in one library, it could require compatibility fixes in other libraries. We could imagine that this would be difficult to keep track of.

                              To make this easier, we'll keep the major versions of the major package in sync with each other:

                              • Major packages include: dash, dash-renderer, dash-core-components, dash-html-components and the dash-component-boilerplate project.
                              • So, all packages in a certain series will be guaranteed to be compatible with each other. So, if you upgrade to dash==1.0.0, you will need to upgrade the rest of your packages to something in the "1.x.x" series, ideally the latest version within that series.
                              • This will be automatically enforced when you install or upgrade the component libraries. For example, in the "1.x.x" series, dash-core-components and dash-html-components will have install_requires=['dash >= 1.0.0, < 2.0.0', 'dash-renderer > 1.0.0, < 2.0.0']. If you upgrade dash-core-components or dash-html-components, dash and dash-renderer will automatically get upgraded.
                              • We will continue to test old series and we will incorporate bug and security fixes into old series. We will not incorporate new features into old series as this could slow down our development too much.
                              • Note that a major version bump does not mean that each particular package has a breaking change, it only means that at least one of the packages has a breaking change. We increment all of the version numbers purely to guarantee that the packages will be compatible with each other.
                              • Not all dash packages will adhere to this versioning scheme. Only the packages that we listed above. For example, dash-table will have a version number that is independent of the other packages as we intend to make several breaking changes while we work through its alpha status.

                              Upgrade Guides and Prelease Versions

                              • We will author a GitHub issue with a full list of the breaking changes and instructions to upgrade
                              • This issue and a prerelease will be published at least 2 weeks before we publish the breaking change to allow you to prepare and/or provide feedback
                              • Our CHANGELOG.md file will be updated with these same instructions and prerelease instructions
                              • This GitHub issue will be linked to from the notification channels above

                              Two weeks may seem like a short amount of time to prepare. However, note that we aren't removing old versions of the packages from the package repositories. If you have your versions pinned (as you should) and installing the packages on a per-project basis (e.g. with virtualenv), then you will not be impacted immediately by the release of the new versions.

                              Documentation

                              • Our user guide will always contain the most up-to-date versions in the installation instructions
                              • The user guide and the examples contained within will always be compatible and up-to-date with the latest versions
                              • We may not keep documentation pertaining to the old versions available on our website.
                              • We will keep our documentation open source (https://github.com/plotly/dash-docs) so that you can run the docs locally and check out old versions if necessary

                              Community Forum Examples
                              The community forum may contain many examples that are no longer compatible with the latest versions of the package. These threads come up when users search for particular examples in Google and many users learn dash through examples in the community forum rather than reading through the user guide.

                              So, we will attempt to update old community threads with either an updated example or a note that this thread is no longer relevant.

                              For example, here are two notes we made in the popular "Display tables in Dash" topic when our release of the new data-table made many comments in the thread obsolete:
                              At the top of the thread:
                              image

                              At the bottom of the thread:
                              image

                              Incorporating Feedback on the Release

                              Before we release our official "Upgrade Guide", we will publish an issue in this repository with a "Proposed Breaking Changes".

                              This will happen at least 2 weeks before we commit to the breaking changes via the official "Upgrade Guide".

                              This will allow the community to provide us feedback on the proposed set of breaking changes.

                              We will communicate this issue by:

                              • Creating the issue in GitHub. If you are watching the repo, you will receive a notification for it.
                              • Creating a post in the Dash Community Forum
                              • Mentioning this in the Dash Club newsletter.

                              We will not communicate this via our other "breaking changes" notification channels as we want to keep those notifications to an absolute minimum.

                              Grouping Together Breaking Changes to Reduce the Frequency of Breaking Changes

                              To reduce the frequency at which we publish breaking changes, we will make a best effort to combine several breaking changes into a single release. That way, you only need to go through the maintenance process a single time. This will also ease the communication burden as these changes will be widely shared.


                              Thanks for reading and for your understanding. As always, your feedback is welcome and appreciated ❤️

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                No labels
                                No labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions