Index: src/wp-admin/css/install.css
===================================================================
--- src/wp-admin/css/install.css	(revision 37936)
+++ src/wp-admin/css/install.css	(working copy)
@@ -448,6 +448,11 @@
 	display: none;
 }
 
+#toggle-password {
+	display: inline-block;
+	padding-top: 10px;
+}
+
 /**
  * HiDPI Displays
  */
Index: src/wp-admin/js/setup-config.js
===================================================================
--- src/wp-admin/js/setup-config.js	(revision 0)
+++ src/wp-admin/js/setup-config.js	(working copy)
@@ -0,0 +1,35 @@
+/**
+ * Adds show/hide toggle for the setup config password
+ */
+
+(function() {
+	var toggle, status, input, icon, label;
+	toggle = document.getElementById('toggle-password');
+	toggle.classList.remove('hide-if-no-js');
+
+	toggle.addEventListener( 'click', togglePassword );
+
+	function togglePassword() {
+		status = toggle.getAttribute( 'data-toggle' );
+		console.log(status);
+		input = document.getElementById( 'pwd' );
+		icon = toggle.getElementsByClassName('dashicons')[0];
+		label = toggle.getElementsByClassName('text')[0];
+
+		if( status == 0 ) {
+			toggle.setAttribute( 'data-toggle', 1 );
+			input.setAttribute( 'type', 'text' );
+			icon.classList.remove('dashicons-visibility');
+			icon.classList.add('dashicons-hidden');
+			label.innerHTML = setupConfigL10n.hide;
+			toggle.setAttribute( 'aria-label', setupConfigL10n.ariaShow );
+		} else {
+			toggle.setAttribute( 'data-toggle', 0 );
+			input.setAttribute( 'type', 'password' );
+			icon.classList.remove('dashicons-hidden');
+			icon.classList.add('dashicons-visibility');
+			label.innerHTML = setupConfigL10n.show;
+			toggle.setAttribute( 'aria-label', setupConfigL10n.ariaHide );
+		}
+	}
+})();
\ No newline at end of file
Index: src/wp-admin/setup-config.php
===================================================================
--- src/wp-admin/setup-config.php	(revision 37936)
+++ src/wp-admin/setup-config.php	(working copy)
@@ -199,8 +199,14 @@
 		</tr>
 		<tr>
 			<th scope="row"><label for="pwd"><?php _e( 'Password' ); ?></label></th>
-			<td><input name="pwd" id="pwd" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'password', 'example password' ), ENT_QUOTES ); ?>" autocomplete="off" /></td>
-			<td><?php _e( 'Your database password.' ); ?></td>
+			<td>
+				<input name="pwd" id="pwd" type="password" size="25" placeholder="<?php echo htmlspecialchars( _x( 'password', 'example password' ), ENT_QUOTES ); ?>" autocomplete="off" />
+				<button id="toggle-password" type="button" class="button button-secondary wp-toggle-pw hide-if-no-js" data-toggle="0" aria-label="Show password">
+						<span class="dashicons dashicons-visibility"></span>
+						<span class="text"><?php _e( 'Show' ); ?></span>
+				</button>
+			</td>
+			<td><?php _e( '&hellip;and your MySQL password.' ); ?></td>
 		</tr>
 		<tr>
 			<th scope="row"><label for="dbhost"><?php _e( 'Database Host' ); ?></label></th>
Index: src/wp-includes/class.wp-scripts.php
===================================================================
--- src/wp-includes/class.wp-scripts.php	(revision 37936)
+++ src/wp-includes/class.wp-scripts.php	(working copy)
@@ -276,6 +276,10 @@
 		$before_handle = $this->print_inline_script( $handle, 'before', false );
 		$after_handle = $this->print_inline_script( $handle, 'after', false );
 
+		echo '<pre>';
+		print_r( $obj );
+		echo '</pre>';
+
 		if ( $before_handle ) {
 			$before_handle = sprintf( "<script type='text/javascript'>\n%s\n</script>\n", $before_handle );
 		}
@@ -336,6 +340,9 @@
 		if ( ! empty( $ver ) )
 			$src = add_query_arg( 'ver', $ver, $src );
 
+		$async = isset( $obj->extra['async'] ) ? 'async' : '';
+		$defer = isset( $obj->extra['defer'] ) ? 'defer' : '';
+
 		/** This filter is documented in wp-includes/class.wp-scripts.php */
 		$src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );
 
@@ -342,7 +349,7 @@
 		if ( ! $src )
 			return true;
 
-		$tag = "{$cond_before}{$before_handle}<script type='text/javascript' src='$src'></script>\n{$after_handle}{$cond_after}";
+		$tag = "{$cond_before}{$before_handle}<script type='text/javascript' src='$src'{$async} {$defer}></script>\n{$after_handle}{$cond_after}";
 
 		/**
 		 * Filters the HTML script tag of an enqueued script.
Index: src/wp-includes/functions.wp-scripts.php
===================================================================
--- src/wp-includes/functions.wp-scripts.php	(revision 37936)
+++ src/wp-includes/functions.wp-scripts.php	(working copy)
@@ -254,8 +254,10 @@
  *                                    If set to null, no version is added.
  * @param bool             $in_footer Optional. Whether to enqueue the script before </body> instead of in the <head>.
  *                                    Default 'false'.
+ * @param  bool            $async     Optional. Adds the async tag to the script.
+ * @param  bool            $defer     Optional. Adds the defer tag to the script.
  */
-function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
+function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false, $async = false, $defer = false ) {
 	$wp_scripts = wp_scripts();
 
 	_wp_scripts_maybe_doing_it_wrong( __FUNCTION__ );
@@ -271,6 +273,14 @@
 		if ( $in_footer ) {
 			$wp_scripts->add_data( $_handle[0], 'group', 1 );
 		}
+
+		if ( $async ) {
+			$wp_scripts->add_data( $_handle[0], 'async', 1 );
+		}
+
+		if ( $defer ) {
+			$wp_scripts->add_data( $_handle[0], 'defer', 1 );
+		}
 	}
 
 	$wp_scripts->enqueue( $handle );
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php	(revision 37936)
+++ src/wp-includes/script-loader.php	(working copy)
@@ -397,6 +397,14 @@
 		'ariaHide' => esc_attr__( 'Hide password' ),
 	) );
 
+	$scripts->add( 'setup-config', "/wp-admin/js/setup-config$suffix.js", array(), false, 1 );
+	did_action( 'init' ) && $scripts->localize( 'setup-config', 'setupConfigL10n', array(
+		'show'     => __( 'Show' ),
+		'hide'     => __( 'Hide' ),
+		'ariaShow' => esc_attr__( 'Show password' ),
+		'ariaHide' => esc_attr__( 'Hide password' ),
+	) );
+
 	$scripts->add( 'language-chooser', "/wp-admin/js/language-chooser$suffix.js", array( 'jquery' ), false, 1 );
 
 	$scripts->add( 'user-suggest', "/wp-admin/js/user-suggest$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 );
