Repository  -  API  -  Source


Breaking changes New API which supports React Suspense and Concurrent rendering. See the README for the new render prop based API. Please not that you now have to manually pass refs to your components.

This change also comes with a deprecation of older versions of React. If you want to use 2+ you must be on React 16.3+. For older versions please stick to version 1 of react-tether or see the 1.x branch.

A big thanks to @CorinChappy for all their work on this!


  • Fixed passing of event arguments to onUpdate and onRepositioned. Thanks @minznerjosh
  • Improved TypeScript definition. Thanks @minznerjosh


  • Added some missing props in the TypeScript definition. Thanks to @flacerdk


  • Some rendering optimisations (#189). Thanks to @eaglus


  • Add className to the TypeScript definition for the TetherComponent. Thanks @ryprice


  • Use React.createPortal :tada: Big thanks to @doronbrikman for their work on this. In versions where createPortal isn't available we still fall back to the old method.
  • Default export has changed: You can now use the default export in ES Modules and TypeScript, but in CommonJS environments you'll have to use require('react-tether').default. See the examples.
  • TypeScript definition file built in
  • Upgrade to Webpack 4 for the UMD distribution. Smaller bundle sizes!
  • Internal: New unit and E2E tests with code coverage, a new demo page, linting and prettier applied to the source, publishing less files to npm.
  • :crying_cat_face: Dropped bower support. Recommended upgrade path is either npm or unpkg


  • Upgrade tether to 1.4.3 #63


  • Update compatibility for React 16 #57
  • Update repo to point at danreeves/react-tether


Update the target node when updating the component PR #48

Compatibility React 15.5.0 PR #49


Properly call onUpdate and onRepositioned PR #40

Only render subtree if destroy method was not called yet PR #41

Use babel-plugin-add-module-exports for dist files


Add .npmignore PR #39


Expose Tether event system as imperative and props API PR #30

Update tether version to 1.3.7 PR #32

Attachment positions PR #33


Better renderElementTo PR #19

Use Children.toArray instead of Children.forEach to get individual children


Fixed Tether element props not being re-rendered on change


Added the ability to apply an id, className, or style to the wrapper Tether element.


Fixes: renderElementTo now uses document.querySelector

Add dependency warning for people using old school script tags


Fix ASI issue with document.body PR #12



  • Unmount node only if it was mounted #8
  • Lazily evaluate document.body #6
  • Server-side rendering #4


Fix tethered element not being positioned correctly


All Tether options are now props

renderElementTag prop to specify which DOM tag to use to render the second child to

renderElementTo prop to specify where in the DOM the element should be appended to

Added position public method from Tether

removed shallowCompare


Bower exposed lib name renamed to TetherComponent from TetherElement

New API accepts a max of two children. First child is used as the target and second child is used as the element that is being tethered.