diff --git a/app/soapbox/components/showable_password.js b/app/soapbox/components/showable_password.js
new file mode 100644
index 000000000..a6dbdad24
--- /dev/null
+++ b/app/soapbox/components/showable_password.js
@@ -0,0 +1,64 @@
+import React from 'react';
+import ImmutablePureComponent from 'react-immutable-pure-component';
+import { defineMessages, injectIntl } from 'react-intl';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import IconButton from 'soapbox/components/icon_button';
+import { FormPropTypes, InputContainer, LabelInputContainer } from 'soapbox/features/forms';
+
+const messages = defineMessages({
+ showPassword: { id: 'forms.show_password', defaultMessage: 'Show password' },
+ hidePassword: { id: 'forms.hide_password', defaultMessage: 'Hide password' },
+});
+
+export default @injectIntl
+class ShowablePassword extends ImmutablePureComponent {
+
+ static propTypes = {
+ intl: PropTypes.object.isRequired,
+ label: FormPropTypes.label,
+ className: PropTypes.string,
+ hint: PropTypes.node,
+ error: PropTypes.bool,
+ }
+
+ state = {
+ revealed: false,
+ }
+
+ toggleReveal = () => {
+ if (this.props.onToggleVisibility) {
+ this.props.onToggleVisibility();
+ } else {
+ this.setState({ revealed: !this.state.revealed });
+ }
+ }
+
+ render() {
+ const { intl, hint, error, label, className, ...props } = this.props;
+ const { revealed } = this.state;
+
+ const revealButton = (
+
{hasResetPasswordAPI ? (
diff --git a/app/soapbox/features/auth_login/components/registration_form.js b/app/soapbox/features/auth_login/components/registration_form.js
index a4c52ef62..f0d27c297 100644
--- a/app/soapbox/features/auth_login/components/registration_form.js
+++ b/app/soapbox/features/auth_login/components/registration_form.js
@@ -5,6 +5,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
import { injectIntl, FormattedMessage, defineMessages } from 'react-intl';
import { Link } from 'react-router-dom';
+import ShowablePassword from 'soapbox/components/showable_password';
import {
SimpleForm,
SimpleInput,
@@ -231,10 +232,9 @@ class RegistrationForm extends ImmutablePureComponent {