Index: src/wp-admin/admin-ajax.php
===================================================================
--- src/wp-admin/admin-ajax.php	(revision 41999)
+++ src/wp-admin/admin-ajax.php	(working copy)
@@ -64,7 +64,7 @@
 	'parse-media-shortcode', 'destroy-sessions', 'install-plugin', 'update-plugin', 'crop-image',
 	'generate-password', 'save-wporg-username', 'delete-plugin', 'search-plugins',
 	'search-install-plugins', 'activate-plugin', 'update-theme', 'delete-theme', 'install-theme',
-	'get-post-thumbnail-html', 'get-community-events', 'edit-theme-plugin-file',
+	'get-post-thumbnail-html', 'get-community-events', 'edit-theme-plugin-file', 'update-try-gutenberg-panel',
 );
 
 // Deprecated
Index: src/wp-admin/css/common.css
===================================================================
--- src/wp-admin/css/common.css	(revision 41999)
+++ src/wp-admin/css/common.css	(working copy)
@@ -764,6 +764,7 @@
 
 /* @todo can we combine these into a class or use an existing dashicon one? */
 .welcome-panel .welcome-panel-close:before,
+.try-gutenberg-panel .try-gutenberg-panel-close:before,
 .tagchecklist .ntdelbutton .remove-tag-icon:before,
 #bulk-titles div a:before,
 .notice-dismiss:before {
Index: src/wp-admin/css/dashboard.css
===================================================================
--- src/wp-admin/css/dashboard.css	(revision 41999)
+++ src/wp-admin/css/dashboard.css	(working copy)
@@ -98,7 +98,8 @@
 }
 
 /* Welcome Panel */
-.welcome-panel {
+.welcome-panel,
+.try-gutenberg-panel {
 	position: relative;
 	overflow: auto;
 	margin: 16px 0;
@@ -110,27 +111,33 @@
 	line-height: 2.1em;
 }
 
-.welcome-panel h2 {
+.welcome-panel h2,
+.try-gutenberg-panel h2 {
 	margin: 0;
 	font-size: 21px;
 	font-weight: 400;
 	line-height: 1.2;
 }
 
-.welcome-panel h3 {
+.welcome-panel h3,
+.try-gutenberg-panel h3 {
 	margin: 1.33em 0 0;
 	font-size: 16px;
 }
 
-.welcome-panel li {
+.welcome-panel li,
+.try-gutenberg-panel li {
 	font-size: 14px;
 }
 
-.welcome-panel p {
+.welcome-panel p,
+.try-gutenberg-panel p,
+.try-gutenberg-panel-column p.about-description {
 	color: #72777c;
 }
 
-.welcome-panel a {
+.welcome-panel a,
+.try-gutenberg-panel a {
 	text-decoration: none;
 }
 
@@ -139,8 +146,15 @@
 	margin: 0;
 }
 
-.welcome-panel .welcome-panel-close {
+.try-gutenberg-panel .about-description {
+	font-size: 16px;
+	margin-top: 1.33em;
+}
+
+.welcome-panel .welcome-panel-close,
+.try-gutenberg-panel .try-gutenberg-panel-close {
 	position: absolute;
+	z-index: 10;
 	top: 10px;
 	right: 10px;
 	padding: 10px 15px 10px 21px;
@@ -149,7 +163,8 @@
 	text-decoration: none;
 }
 
-.welcome-panel .welcome-panel-close:before {
+.welcome-panel .welcome-panel-close:before,
+.try-gutenberg-panel .try-gutenberg-panel-close:before {
 	position: absolute;
 	top: 8px;
 	left: 0;
@@ -164,27 +179,48 @@
 	white-space: normal;
 }
 
-.welcome-panel-content {
-	margin-left: 13px;
+.welcome-panel-content,
+.try-gutenberg-panel-content {
+	margin: 0 13px;
 	max-width: 1500px;
 }
 
-.welcome-panel .welcome-panel-column-container {
+.try-gutenberg-panel img {
+	max-width: 360px;
+	width: 100%;
+	border: 1px solid #f3f4f5;
+}
+
+.try-gutenberg-panel .install-now.updating-message:before,
+.try-gutenberg-panel .install-now.updated-message:before {
+	margin-top: 11px;
+}
+
+.welcome-panel .welcome-panel-column-container,
+.try-gutenberg-panel .try-gutenberg-panel-column-container {
 	clear: both;
 	position: relative;
 }
 
-.welcome-panel .welcome-panel-column {
+.welcome-panel .welcome-panel-column,
+.try-gutenberg-panel .try-gutenberg-panel-column {
 	width: 32%;
 	min-width: 200px;
 	float: left;
 }
 
-.ie8 .welcome-panel .welcome-panel-column {
+.try-gutenberg-panel .try-gutenberg-panel-column {
+	width: calc( 32% - 20px );
+	padding: 0 20px 20px 0;
+}
+
+.ie8 .welcome-panel .welcome-panel-column,
+.ie8 .try-gutenberg-panel .try-gutenberg-panel-column {
 	min-width: 230px;
 }
 
-.welcome-panel .welcome-panel-column:first-child {
+.welcome-panel .welcome-panel-column:first-child
+.try-gutenberg-panel .try-gutenberg-panel-column:first-child {
 	width: 36%;
 }
 
@@ -192,7 +228,8 @@
 	margin-top: 10px;
 }
 
-.welcome-panel-column p {
+.welcome-panel-column p,
+.try-gutenberg-panel-column p {
 	margin-top: 7px;
 	color: #444;
 }
@@ -201,11 +238,13 @@
 	line-height: 16px;
 }
 
-.welcome-panel .welcome-panel-column ul {
-	margin: 0.8em 1em 1em 0;
+.welcome-panel .welcome-panel-column ul,
+.try-gutenberg-panel .try-gutenberg-panel-column ul {
+		margin: 0.8em 1em 1em 0;
 }
 
-.welcome-panel .welcome-panel-column li {
+.welcome-panel .welcome-panel-column li,
+.try-gutenberg-panel .try-gutenberg-panel-column li {
 	line-height: 16px;
 	list-style-type: none;
 	padding: 0 0 8px;
@@ -1207,14 +1246,29 @@
 	}
 }
 
+@media screen and (max-width: 1024px) {
+	.try-gutenberg-panel .try-gutenberg-panel-image-column {
+		display: none;
+	}
+
+	.try-gutenberg-panel .try-gutenberg-panel-column {
+		width: calc( 49% - 20px );
+	}
+}
+
 @media screen and (max-width: 870px) {
 	.welcome-panel .welcome-panel-column,
+	.try-gutenberg-panel .try-gutenberg-panel-column,
 	.welcome-panel .welcome-panel-column:first-child {
 		display: block;
 		float: none;
 		width: 100%;
 	}
 
+	.try-gutenberg-panel .try-gutenberg-panel-image-column {
+		display: none;
+	}
+
 	.welcome-panel .welcome-panel-column li {
 		display: inline-block;
 		margin-right: 13px;
@@ -1223,7 +1277,6 @@
 	.welcome-panel .welcome-panel-column ul {
 		margin: 0.4em 0 0;
 	}
-
 }
 
 @media screen and ( max-width: 782px ) {
@@ -1266,7 +1319,8 @@
 /* Smartphone */
 @media screen and (max-width: 600px) {
 	/* Keep the close icon from overlapping the Welcome text. */
-	.welcome-panel .welcome-panel-close {
+	.welcome-panel .welcome-panel-close,
+	.try-gutenberg-panel .try-gutenberg-panel-close {
 		overflow: hidden;
 		text-indent: 40px;
 		white-space: nowrap;
@@ -1278,7 +1332,8 @@
 	}
 
 	/* Make the close icon larger for tappability. */
-	.welcome-panel .welcome-panel-close:before {
+	.welcome-panel .welcome-panel-close:before,
+	.try-gutenberg-panel .try-gutenberg-panel-close:before {
 		font-size: 20px;
 		top: 5px;
 		left: -35px;
Index: src/wp-admin/includes/ajax-actions.php
===================================================================
--- src/wp-admin/includes/ajax-actions.php	(revision 41999)
+++ src/wp-admin/includes/ajax-actions.php	(working copy)
@@ -1485,6 +1485,19 @@
 }
 
 /**
+ * Ajax handler for updating whether to display the Try Gutenberg panel.
+ *
+ * @since 4.9.0
+ */
+function wp_ajax_update_try_gutenberg_panel() {
+	check_ajax_referer( 'try-gutenberg-panel-nonce', 'trygutenbergpanelnonce' );
+
+	update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', empty( $_POST['visible'] ) ? 0 : 1 );
+
+	wp_die( 1 );
+}
+
+/**
  * Ajax handler for retrieving menu meta boxes.
  *
  * @since 3.1.0
Index: src/wp-admin/includes/class-wp-screen.php
===================================================================
--- src/wp-admin/includes/class-wp-screen.php	(revision 41999)
+++ src/wp-admin/includes/class-wp-screen.php	(working copy)
@@ -1020,7 +1020,10 @@
 					update_user_meta( get_current_user_id(), 'show_welcome_panel', $welcome_checked );
 				} else {
 					$welcome_checked = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
-					if ( 2 == $welcome_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
+					if ( '' === $welcome_checked ) {
+						$welcome_checked = '1';
+					}
+					if ( '2' === $welcome_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
 						$welcome_checked = false;
 					}
 				}
@@ -1028,6 +1031,24 @@
 				echo '<input type="checkbox" id="wp_welcome_panel-hide"' . checked( (bool) $welcome_checked, true, false ) . ' />';
 				echo _x( 'Welcome', 'Welcome panel' ) . "</label>\n";
 			}
+
+			if ( 'dashboard' === $this->id && has_action( 'try_gutenberg_panel' ) ) {
+				if ( isset( $_GET['try_gutenberg'] ) ) {
+					$try_gutenberg_checked = empty( $_GET['try_gutenberg'] ) ? 0 : 1;
+					update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', $try_gutenberg_checked );
+				} else {
+					$try_gutenberg_checked = get_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', true );
+					if ( '' === $try_gutenberg_checked ) {
+						$try_gutenberg_checked = '1';
+					}
+					if ( '2' === $try_gutenberg_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
+						$try_gutenberg_checked = false;
+					}
+				}
+				echo '<label for="wp_try_gutenberg_panel-hide">';
+				echo '<input type="checkbox" id="wp_try_gutenberg_panel-hide"' . checked( (bool) $try_gutenberg_checked, true, false ) . ' />';
+				echo __( 'New Editor' ) . "</label>\n";
+			}
 		?>
 		</fieldset>
 		<?php
Index: src/wp-admin/includes/dashboard.php
===================================================================
--- src/wp-admin/includes/dashboard.php	(revision 41999)
+++ src/wp-admin/includes/dashboard.php	(working copy)
@@ -1619,3 +1619,59 @@
 	</div>
 	<?php
 }
+
+/**
+ * Displays a Try Gutenberg Panel, to introduce people to Gutenberg
+ *
+ * @since 4.9.0
+ */
+function wp_try_gutenberg_panel() {
+	$plugins = get_plugins();
+	$action = $url = $classes = '';
+
+	if ( current_user_can( 'install_plugins' ) && empty( $plugins['gutenberg/gutenberg.php'] ) ) {
+		$action = __( 'Install Today' );
+		$url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=gutenberg' ), 'install-plugin_gutenberg' );
+		$classes = ' install-now';
+	} else if ( current_user_can( 'install_plugins' ) && is_plugin_inactive( 'gutenberg/gutenberg.php' ) ) {
+		$action = __( 'Activate Today' );
+		$url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=gutenberg/gutenberg.php&from=try-gutenberg' ), 'activate-plugin_gutenberg/gutenberg.php' );
+		$classes = ' activate-now';
+	} else if ( current_user_can( 'edit_posts' ) && is_plugin_active( 'gutenberg/gutenberg.php' ) ) {
+		$action = __( 'Try Today' );
+		$url = admin_url( 'admin.php?page=gutenberg-demo' );
+	}
+
+	?>
+	<div class="try-gutenberg-panel-content plugin-card-gutenberg">
+		<div class="try-gutenberg-panel-column-container">
+			<div class="try-gutenberg-panel-column try-gutenberg-panel-image-column">
+				<img src="https://s.w.org/images/core/gutenberg-screenshot.gif?<?php echo date( 'Ymd' ); ?>" alt="<?php esc_attr_e( 'Gutenberg animated preview' ); ?>" />
+			</div>
+			<h2><?php _e( 'Try the new editing experience' ); ?></h2>
+			<div class="try-gutenberg-panel-column">
+				<p class="about-description"><?php _e( 'WordPress is working on a better way to control your content. How about giving it a try early?' ); ?></p>
+				<?php if ( $action ) { ?>
+					<p><a class="button button-primary button-hero<?php echo $classes; ?>" href="<?php echo esc_url( $url ); ?>"><?php echo $action; ?></a></p>
+				<?php } ?>
+			</div>
+			<div class="try-gutenberg-panel-column try-gutenberg-panel-last">
+				<h3><?php _e( 'Want to get involved?' ); ?></h3>
+				<ul>
+					<li><?php
+						printf( __( 'Learn more about the project <a href="%s">codenamed Gutenberg</a>.' ),
+							'https://wordpress.org/gutenberg/'
+						);
+					?></li>
+					<li><?php
+						printf( __( 'Help <a href="%1$s">with testing</a>, or contribute on the <a href="%2$s">GitHub repository</a>.' ),
+							__( 'https://make.wordpress.org/test/handbook/call-for-testing/gutenberg-testing/' ),
+							'https://github.com/WordPress/gutenberg/'
+						);
+					?></li>
+				</ul>
+			</div>
+		</div>
+	</div>
+	<?php
+}
Index: src/wp-admin/index.php
===================================================================
--- src/wp-admin/index.php	(revision 41999)
+++ src/wp-admin/index.php	(working copy)
@@ -103,12 +103,38 @@
 <div class="wrap">
 	<h1><?php echo esc_html( $title ); ?></h1>
 
+<?php if ( has_action( 'try_gutenberg_panel' ) ) :
+	$classes = 'try-gutenberg-panel';
+
+	$option = get_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', true );
+	// 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner
+	$hide = '0' === $option || ( '2' === $option && wp_get_current_user()->user_email !== get_option( 'admin_email' ) );
+	if ( $hide )
+		$classes .= ' hidden'; ?>
+
+	<div id="try-gutenberg-panel" class="<?php echo esc_attr( $classes ); ?>">
+		<?php wp_nonce_field( 'try-gutenberg-panel-nonce', 'trygutenbergpanelnonce', false ); ?>
+		<a class="try-gutenberg-panel-close" href="<?php echo esc_url( admin_url( '?try_gutenberg=0' ) ); ?>" aria-label="<?php esc_attr_e( 'Dismiss the Try Gutenberg panel' ); ?>"><?php _e( 'Dismiss' ); ?></a>
+		<?php
+		/**
+		 * Add content to the Try Gutenberg panel on the admin dashboard.
+		 *
+		 * To remove the Try Gutenberg panel, use remove_action():
+		 *
+		 *     remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
+		 *
+		 * @since 4.9.0
+		 */
+		do_action( 'try_gutenberg_panel' );
+		?>
+	</div>
+<?php endif; ?>
 <?php if ( has_action( 'welcome_panel' ) && current_user_can( 'edit_theme_options' ) ) :
 	$classes = 'welcome-panel';
 
 	$option = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
 	// 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner
-	$hide = 0 == $option || ( 2 == $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) );
+	$hide = '0' === $option || ( '2' === $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) );
 	if ( $hide )
 		$classes .= ' hidden'; ?>
 
Index: src/wp-admin/js/dashboard.js
===================================================================
--- src/wp-admin/js/dashboard.js	(revision 41999)
+++ src/wp-admin/js/dashboard.js	(working copy)
@@ -31,6 +31,48 @@
 		updateWelcomePanel( this.checked ? 1 : 0 );
 	});
 
+	var tryGutenbergPanel = $( '#try-gutenberg-panel' ),
+		tryGutenbergPanelHide = $('#wp_try_gutenberg_panel-hide'),
+		updateTryGutenbergPanel, installGutenbergSuccess;
+
+	updateTryGutenbergPanel = function( visible ) {
+		$.post( ajaxurl, {
+			action: 'update-try-gutenberg-panel',
+			visible: visible,
+			trygutenbergpanelnonce: $( '#trygutenbergpanelnonce' ).val()
+		});
+	};
+
+	installGutenbergSuccess = function( response ) {
+		response.activateUrl += '&from=try-gutenberg';
+		wp.updates.installPluginSuccess( response );
+	};
+
+	if ( tryGutenbergPanel.hasClass('hidden') && tryGutenbergPanelHide.prop('checked') ) {
+		tryGutenbergPanel.removeClass('hidden');
+	}
+
+	$('.try-gutenberg-panel-close, .try-gutenberg-panel-dismiss a', tryGutenbergPanel).click( function(e) {
+		e.preventDefault();
+		tryGutenbergPanel.addClass('hidden');
+		updateTryGutenbergPanel( 0 );
+		$('#wp_try_gutenberg_panel-hide').prop('checked', false);
+	});
+
+	tryGutenbergPanelHide.click( function() {
+		tryGutenbergPanel.toggleClass('hidden', ! this.checked );
+		updateTryGutenbergPanel( this.checked ? 1 : 0 );
+	});
+
+	tryGutenbergPanel.on( 'click', '.install-now', function( e ) {
+		e.preventDefault();
+		var args = {
+			slug: 'gutenberg',
+			success: installGutenbergSuccess
+		};
+		wp.updates.installPlugin( args );
+	} );
+
 	// These widgets are sometimes populated via ajax
 	ajaxWidgets = ['dashboard_primary'];
 
Index: src/wp-admin/js/updates.js
===================================================================
--- src/wp-admin/js/updates.js	(revision 41999)
+++ src/wp-admin/js/updates.js	(working copy)
@@ -585,10 +585,18 @@
 
 		$message
 			.removeClass( 'updating-message' )
-			.addClass( 'updated-message installed button-disabled' )
+			.addClass( 'updated-message installed' )
 			.attr( 'aria-label', wp.updates.l10n.pluginInstalledLabel.replace( '%s', response.pluginName ) )
 			.text( wp.updates.l10n.pluginInstalled );
 
+		if ( $message.hasClass( 'button-primary' ) ) {
+			$message.addClass( 'button-primary-disabled' );
+		} else if ( $message.hasClass( 'button-secondary' ) ) {
+			$message.addClass( 'button-secondary-disabled' );
+		} else {
+			$message.addClass( 'button-disabled' );
+		}
+
 		wp.a11y.speak( wp.updates.l10n.installedMsg, 'polite' );
 
 		$document.trigger( 'wp-plugin-install-success', response );
@@ -597,7 +605,8 @@
 			setTimeout( function() {
 
 				// Transform the 'Install' button into an 'Activate' button.
-				$message.removeClass( 'install-now installed button-disabled updated-message' ).addClass( 'activate-now button-primary' )
+				$message.removeClass( 'install-now installed button-primary-disabled button-secondary-disabled button-disabled updated-message' )
+					.addClass( 'activate-now button-primary' )
 					.attr( 'href', response.activateUrl )
 					.attr( 'aria-label', wp.updates.l10n.activatePluginLabel.replace( '%s', response.pluginName ) )
 					.text( wp.updates.l10n.activatePlugin );
Index: src/wp-admin/plugins.php
===================================================================
--- src/wp-admin/plugins.php	(revision 41999)
+++ src/wp-admin/plugins.php	(working copy)
@@ -65,6 +65,8 @@
 				wp_redirect( self_admin_url("import.php?import=" . str_replace('-importer', '', dirname($plugin))) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix
 			} else if ( isset($_GET['from']) && 'press-this' == $_GET['from'] ) {
 				wp_redirect( self_admin_url( "press-this.php") );
+			} else if ( isset($_GET['from']) && 'try-gutenberg' == $_GET['from'] ) {
+				wp_redirect( self_admin_url( "admin.php?page=gutenberg-demo") );
 			} else {
 				wp_redirect( self_admin_url("plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s") ); // overrides the ?error=true one above
 			}
Index: src/wp-includes/default-filters.php
===================================================================
--- src/wp-includes/default-filters.php	(revision 41999)
+++ src/wp-includes/default-filters.php	(working copy)
@@ -318,6 +318,7 @@
 add_action( 'transition_post_status',     '_update_term_count_on_transition_post_status', 10, 3 );
 add_action( 'comment_form',               'wp_comment_form_unfiltered_html_nonce'          );
 add_action( 'admin_init',                 'send_frame_options_header',               10, 0 );
+add_action( 'try_gutenberg_panel',        'wp_try_gutenberg_panel'                         );
 add_action( 'welcome_panel',              'wp_welcome_panel'                               );
 
 // Cron tasks
