The editor will create a new page- and post-building experience that makes writing rich posts effortless, and has “blocks” to make it easy what today might take shortcodes, custom HTML, or “mystery meat” embed discovery. — Matt Mullenweg
One thing that sets WordPress apart from other systems is that it allows you to create as rich a post layout as you can imagine — but only if you know HTML and CSS and build your own custom theme. By thinking of the editor as a tool to let you write rich posts and create beautiful layouts, we can transform WordPress into something users love WordPress, as opposed something they pick it because it’s what everyone else uses.
Gutenberg looks at the editor as more than a content field, revisiting a layout that has been largely unchanged for almost a decade.This allows us to holistically design a modern editing experience and build a foundation for things to come.
Here’s why we’re looking at the whole editing screen, as opposed to just the content field:
The block unifies multiple interfaces. If we add that on top of the existing interface, it would add complexity, as opposed to remove it.
By revisiting the interface, we can modernize the writing, editing, and publishing experience, with usability and simplicity in mind, benefitting both new and casual users.
When singular block interface takes center stage, it demonstrates a clear path forward for developers to create premium blocks, superior to both shortcodes and widgets.
Considering the whole interface lays a solid foundation for the next focus, full site customization.
Blocks are the unifying evolution of what is now covered, in different ways, by shortcodes, embeds, widgets, post formats, custom post types, theme options, meta-boxes, and other formatting elements. They embrace the breadth of functionality WordPress is capable of, with the clarity of a consistent user experience.
Imagine a custom “employee” block that a client can drag to an About page to automatically display a picture, name, and bio. A whole universe of plugins that all extend WordPress in the same way. Simplified menus and widgets. Users who can instantly understand and use WordPress — and 90% of plugins. This will allow you to easily compose beautiful posts like this example.
Check out the FAQ for answers to the most common questions about the project.
Posts are backwards compatible, and shortcodes will still work. We are continuously exploring how highly-tailored metaboxes can be accommodated, and are looking at solutions ranging from a plugin to disable Gutenberg to automatically detecting whether to load Gutenberg or not. While we want to make sure the new editing experience from writing to publishing is user-friendly, we’re committed to finding a good solution for highly-tailored existing sites.
The stages of Gutenberg
Gutenberg has three planned stages. The first, aimed for inclusion in WordPress 5.0, focuses on the post editing experience and the implementation of blocks. This initial phase focuses on a content-first approach. The use of blocks, as detailed above, allows you to focus on how your content will look without the distraction of other configuration options. This ultimately will help all users present their content in a way that is engaging, direct, and visual.
These foundational elements will pave the way for stages two and three, planned for the next year, to go beyond the post into page templates and ultimately, full site customization.
Gutenberg is a big change, and there will be ways to ensure that existing functionality (like shortcodes and meta-boxes) continue to work while allowing developers the time and paths to transition effectively. Ultimately, it will open new opportunities for plugin and theme developers to better serve users through a more engaging and visual experience that takes advantage of a toolset supported by core.
Gutenberg is built by many contributors and volunteers. Please see the full list in CONTRIBUTORS.md.
How can I send feedback or get help with a bug?
We’d love to hear your bug reports, feature suggestions and any other feedback! Please head over to the GitHub issues page to search for existing issues or open a new one. While we’ll try to triage issues reported here on the plugin forum, you’ll get a faster response (and reduce duplication of effort) by keeping everything centralized in the GitHub repository.
How can I contribute?
We’re calling this editor project “Gutenberg” because it’s a big undertaking. We are working on it every day in GitHub, and we’d love your help building it.You’re also welcome to give feedback, the easiest is to join us in our Slack channel, #core-editor.
Gutenberg is confusing, it is a gas plant with many buttons that breaks with the basic philosophy of WordPress. Gutemberg makes you want to run away as the user experience is mediocre for a basic result. The rendering of the new blocks does not bring anything enriching in the use of WordPress as CMS, gutemberg wastes time when creating an article…
It is too complicated! WordPress is so far perfect for beginners … You can just start writing. If you can write a letter with Word, you can also write an article with WordPress. So it should stay, please! Fluid, intuitive work is also important for frequent users… Unfortunately, this does not work out with Gutenberg at all. Someone who needs more advanced layout / page building options can already work very well with ACF or other plugins … As a plugin, Gutenberg may be developed further, but please do not integrate it into the core! I am honestly appalled by these plans, sorry! Please listen to the community, look at the average rating of the plugin, and think about it!
Yes, I read that I will be able to turn it off and activate the classic editor… But that’s no good option for most developers and agencies! I will have to do this on over 200 clients projects (with custom TinyMCE configuration and ACF)? Who will pay these working hours? The clients, whom I promised a simple and maintenance-friendly CMS?
Really worried that the whole WordPress Project could go into a completely wrong direction, that could mean the end of its great success story 🙁
I downloaded and installed the Gutenberg plugin to get a preview of what’s coming in WordPress 5. I was disconcerted about the lack of a source view. Certainly there must be a way to view the source without exiting Gutenberg and choosing ‘Classic Editor’, right?
The template selector on pages also seems to be absent. I understand that this is still in development and I’m hoping these features are coming to Gutenberg soon or at the very least the classic editor option will remain available. Thanks!
Ensure backwards compatibility to matchers syntax.
Show untitled posts as (no title) in url auto-complete.
Extract fixedToolbar as a prop of BlockList.
Restore insertion point blue line.
Display outline tree even if only one heading is used.
Allow media upload button to specify a custom title (and fix grammar issue).
Fix issue with block mover showing on top of url input.
Fix case where tooltips would get stuck on buttons.
Fix transformations between quote and list blocks.
Fix issue with converting empty classic text to multiple blocks.
Fix issue with audio block not updating the toolbar area.
Fix contrast issues in button block.
Fix change detection to maintain multiple instances of state.
Fix text columns focus style.
Fix embed category example in docs.
Fix button link modal not closing.
Fix styling issue with sibling inserter.
Fix alignment of block toolbar in wide and full-width.
Fix issue when inserting image with empty caption.
Fix issue with sibling inserter not appearing in IE11.
Fix issue when inserting pullquotes.
Fix horizontal scrollbar when floating images to the left.
Fix alignment issue with embed videos.
Drop withContext optional mapSettingsToProps and fix issue when inserting new image.
Require @wordpress import path for application entry points.
Resolve errors in IE11 when using the inserter.
Added tests for Notice and UrlInput components.
Added tests for DefaultBlockAppender.
Log debugging messages for invalid blocks.
Reduce build size significantly by fixing import statements.
Update re-resizeable dependency.
Initial document page for extensibility purposes.
Added documentation for Editable component.
Move all components related to the specific post-edit page into its own folder.
Introduce snapshots for testing.
Add toggle to switch between top-level toolbar and toolbars attached to each block. We have gotten great feedback on the benefits of both approaches and want to expand testing of each.
Ability to transform multiple-selected blocks at once — multiple images into a gallery, multiple paragraphs into lists.
Add @-mention autocomplete for users in a site.
Add data layer for reusable blocks and wp_blocks post type name.
Allow pasting standalone images and uploading them (also supports pasting base64 encoded images).
Allow block nesting from a parser point of view. This is the foundation for handling nested blocks in the UI.
Full design update to focus styles around the UI.
Block Extensibility (Hooks): filters may inspect and mutate block settings before the block is registered using hooks available at wp.blocks.addFilter. Testing with internal functionality first.
Moved docs to https://wordpress.org/gutenberg/handbook/
Refactor “changed post” functionality into higher order component and fix issue with wrongly reporting unsaved changes.
Refactor meta-boxes to render inline, without iframes.
Disable auto-p for block based posts, solving various issues around conflicting paragraph structures, freeform content, and text blocks.
Placed “table of contents” button in the header area and disable when there are no blocks in the content.
Redesigned the button block with inline URL field.
Improve performance by refactoring block-multi-controls out of VisualEditorBlock.
Replace react-slot-fill with our own first-party implementation. Part one, and part two for better handling of event bubbling within portals.
Improve autocomplete behaviour by using focus outside utility. This solves an issue with selecting items on mobile.
Capture and recover from application errors, offering the option to copy the existing contents to the clipboard.
Expose editor reusable components. These will allow editor variations to be constructed with more ease.
Add polyfill for permalink_structure option to wp-json. (Corresponding trac ticket.) Several REST API compat issues are going to be addressed like this. This allows Gutenberg to implement permalink editing.
Unslash post content before parsing during save, fixing bugs with block attributes.
Keyboard navigation overhaul of the inserter with accessibility improvements (accessing tabs, etc).
Add paragraph count to table of contents element.
General Navigable family of components.
Add contrast checker message when color combinations are hard to read.
Add “no posts found” message to latest posts block.
Improve color highlight selection and browser consistency.
Update max number of columns when removing an image from a gallery.
Prevent the post schedule component from having invalid dates.
Make sure the inspector for a gallery block is shown when it has just one image.
Accessibility improvements for inline autocomplete components.
Update caption color for contrast.
Update visual display of the “remove x” button on gallery-items.
Improve classic block toolbar display and behaviour.
Dismiss tooltip when clicking a button or when wrapper node becomes disabled.
Restore block movers on floated items.
Add spacing around date and label.
Adjust raw handler “mode” option for readability.
Improve e2e testing performance.
Add fixture for undelimited freeform block.
Hold jQuery ready only when there are metaboxes and ignore advanced ones.
Make sure image size values are integers.
Fix floated gallery styles in the front-end.
Fix issue with image block not loading properly.
Fix issue with missing function in IE11.
Fix transformation of empty images into gallery and back.
Fix overflow issues on mobile.
Fix accidental block hover on iOS.
Fix toolbar state issue with slot-fill utility.
Fix case of too many undo levels building up.
Fix stylesheet load ordering issue.
Prevent input events from URLInput from being captured by Editable.
Force onChange to be updated with TinyMCE content before merge.
Polish heading toolbar buttons.
Remove image resizing on mobile.
Remove findDOMNode usage from Autocomplete component.
Rename references of rawContent as innerHTML.
Add tests and handle empty fills in slot-fill.
Add tests for block mover.
Add multi-select e2e test and fix issue with escape key.
Bump node version to active LTS.
Update TinyMCE to 4.7.2, fixing several bugs like toolbar flickering, visible placeholders when there is text, navigation breaks when encountering format boundaries, typing in FF after starting a bullet-list.
Handle pasting shortcodes and converting to blocks.
Show loading message when opening preview.
Fix inline pasting (auto-link feature).
Fix undoing multi-selection delete operation.
Remove focus state after a selection is finished during multi-select.
Remove the “command” shortcut to navigate to the editor toolbar.
Move the block toolbar to the editor’s top header. This experiment seeks to reduce the presence of UI obscuring content.
Alternate style for block boundaries and multi-selection. Also engages “edit” mode when using arrow keys (hides UI).
Complete rework of arrow keys navigation between blocks—faster, clearer, and respects caret position while traversing text blocks.
Added keyboard shortcuts to navigate regions.
Implement multi-selection mode using just arrow with shift keys and support horizontal arrows.
Suggest a post format for additional blocks (embeds, gallery, audio, video) and expand on the heuristics to include case of one format-block at the top plus a paragraph of text below as valid.
Allow converting a classic block (post) into several Gutenblocks.
Several performance improvements 🎉
Avoid re-rendering all blocks on selection changes.
Add memoization for multi-select selectors.
Rework implementation of blockRef to avoid render cascade from block list.
Use flatMap when allocating the block list for rendering.
Reorganize logic to determine when a post can be saved to be less expensive.
Refactor handling of revisions to avoid loading them up-front, significantly reducing load time on long posts with many revisions.
Further memoization on selectors based on specific state keys.
Render meta-boxes as part of the main column, not as a collapsible box.
Improve handling of undo action stack by resetting only on setup. This makes undo a lot more usable in general.
Changes to block inserter design positioning tabs at the top. (1.5.1)
Remove multi-select buffer zone and throttle delay for a faster response.
API for handling custom formats/tokens in Editable.
Improve withApiData component to be able to serve cached data (if available) during an initial render.
Show block toolbar in HTML mode for mobile.
Update Shortcode block to use a textarea instead of single line input.
Increase width of invalid block message.
Avoid redirecting to Gutenberg when saving on classic editor. (1.5.2)
Don’t show “edit as HTML” for the Code and Shortcode blocks.
Refactor notices state reducer as array optimizing performance.
Disable front-end styles for basic quote block.
Reorganize the meta-boxes components for code clarity.
New design for the inserter with tabs at the top and more space for text.
Fix problem with Firefox and the meta-boxes resize script.
Fix issue with Classic Text description showing without focus.
Set Gutenberg as the default editor (still allow creating new posts in Classic Editor).
Add metabox support—this is an initial pass at supporting existing meta-boxes without intervention.
Display inserter button between blocks.
Improve block navigation performance.
Hide core namespace in comment serialization. wp:core/gallery becomes wp:gallery.
Implement a dropdown for Publish flow.
Allow multiselect to work on shift-click.
Insert new block from title on enter.
Use a dropdown for the block menu (settings, delete, edit as HTML).
Add expandable panel for post visibility.
Add expandable panel for post scheduling.
Implement more inline formatting boundaries.
Better clearing of block selection.
Show placeholder hint for slash autocomplete on new text blocks.
Remove multi-selection header in favor of default block controls (mover and menu).
Allow blocks to disable HTML edit mode.
Adjust transition and delay of inserter between blocks.
Added text color option for button block.
Hide extended settings if sidebar is closed.
New embed icons.
Move the store initialization to a dedicated component.
Improve scroll position of scrollable elements.
Drop undefined blocks from recent blocks.
Update HTML block description.
Update embed block description.
Add description for classic block.
Add a default block icon.
Adjust line height of classic text to match paragraph blocks.
Adjust filter order in classic block so plugins that extend it can work properly.
Set textarea value as prop and not children.
Fix mobile issues with block setting menu.
Fix undefined colors warning.
Fix broken upload button on image placeholder.
Fix post edit URL when saving a post/page/CPT.
Fix conflict with new TinyMCE version and heading blocks.
Tweak block sibling element for better target surface.
Avoid loading Gutenberg assets on non-Gutenberg pages.
Adjust Jest configuration.
Document supportAnchor in block API.
Updated TinyMCE to latest.
Document block name usage in serialization and add example of serialized block.
Updated FAQ section.
Upgrade React and Enzyme dependencies.
Redesigned the header area of the editor for clarity—groups content actions in the left, and post action in the right.
Initial REST API infrastructure for reusable global blocks.
Group block settings (delete, inspector, edit HTML) on an ellipsis button.
Added new reusable Dropdown component.
Show frequently used blocks in the inserter shortcuts (at the bottom of the post).
Offer option for the button block to clear content.
Refactor block toolbar component in preparation for some iterations (docked toolbar, for example).
Allow partial URLs in link input.
Avoid using state for tracking arrow key navigation in WritingFlow to prevent re-renders.
Improve mobile header after design cleanup.
Add focusReturn for Dropdown component.
Updated Audio block markup to use figure element.
Removed transition on multi-select affecting the perception of speed of the interaction.
Show Gallery block description even if there are no images.
Persist custom class names.
Merge initialization actions into a single action.
Fix scroll position when reordering blocks.
Fix case where the responsive treatment of the header area was hiding valuable actions.
Fix focus styles on the inserter.
Fix submenu visibility issue for certain users.
Cleanup no longer used code.
Document useOnce block API feature.
Add an opacity range slider to the cover image block.
Offer the option to convert a single block to an HTML block when conflicting content is detected.
Persist recently used blocks through sessions.
Added support for pasting plain text markdown content and converting to blocks.
The block inspector groups features and settings in expandable panels.
Accessibility improvements to the color palette component.
Added a “feedback” link in the Gutenberg side menu.
Use expandable panels for advanced block features (class name and anchor).
Removed touch listeners from multi select.
Added block descriptions to blocks that didn’t have them.
Allow stored values to be updated with new defaults.
Refactor image block to use withApiData and fix issues with .tiff images.
Clean up non inline elements when pasting inline content.
Remove unused code in BlockList component.
Added “transform into” text to block switcher.
Fixed sidebar overflow causing extra scrollbars.
Fixed multi-select inside new scroll container.
Fixed image block error with .tiff image.
Fixed the content overflowing outside the verse block container.
Fixed issues with sticky quick toolbar position.
Fixed hitting enter when a block is selected creating a default block after selected block.
Fixed teaser markup in demo content.
Clean working directory before packaging plugin.
Updated Webpack dependencies.
Updated Jest and React.
Fix issue where invalid block resolution options were not clickable.
Resolve block conflicts when editing a block post in the classic editor. Gutenberg’s strict content validation has helped identify formatting incompatibilities, and continued improvements are planned for future releases.
Add word and block count to table of contents.
Add support for meta attributes (custom fields) in block attributes. This allows block authors to specify attributes to live outside of post_content entirely.
Allow Gutenberg to be the default editor for posts with blocks and add links to classic editor.
Accessibility: add landmark regions.
Add metabox placeholder shell.
Add crash recovery for blocks which error while saving.
Hide Sidebar panels if the user doesn’t have the right capabilities.
Refactor PostTaxonomies to use ‘withApiData’.
Create ‘withApiData’ higher order component for managing API data.
Make casing consistent.
Allow toolbar wrapper to be clicked through.
Support and bootstrap server-registered block attribute schemas.
Shift focus into popover when opened.
Reuse the tabbable utility to retrieve the tabbables elements in WritingFlow.
Change placeholder text on button.
Persist the sate of the sidebar across refresh.
Use a small multiselect buffer zone, improving multiple block selection.
Close popover by escape keypress.
Improve dropzone contrast ratio.
Improve search message to add context.
Improve string extraction for localized strings.
Fixed z-index issue of gallery image inline menu.
Fixed image block resizing to set the figure wrapper.
Fixed column widths in gallery block.
Fixed parsing in do_blocks() and rendering of blocks on frontend in the_content.
Fixed position of upload svg on mobile.
Add blocks “slash” autocomplete—shortcut to continue adding new block without leaving the keyboard.
Add ability to remove an image from a gallery from within the block (selecting image).
Add option to open a created link in a new window.
Support and bootstrap server-registered block attribute schemas.
Improve accessibility of add-new-category form.
Documentation gets an updated design and content improvements.
Adjust column width calculation in gallery block to properly respect column count.
Move pending review control together with sticky toggle at the bottom.
Add caption styling for video block.
Allow removing a “classic text” block with backspaces.
Allow Button block to show placeholder text.
Drop the deprecated button-secondary class name.
Fix link dialog not showing in Safari when caret is in the middle of the word.
Fix adding new categories and position newly added term at the top.
Fix the resetting of drop-zone states after dropping a file.
Fix embed saving “undefined” text when URL is not set.
Fix placeholder styling on Text when background color is set.
Update Composer + PHPCS.
Rename default block handlers.
Update code syntax tabs in docutron.
Link to plugin download and github repo from docutron.
Added block API document.
Add “Edit and Save” document.
Restored keyboard navigation with more robust implementation, addressing previous browser issues.
Added drag and drop for media with pointer to create new blocks.
Merged paragraph and cover text blocks (includes the colors and font size options).
Reworked color palette picker with a “clear” and a “custom color” option.
Further improvements to inline pasting and fixing errant empty blocks.
Added thumbnail size selector to image blocks.
Added support for url input and align and edit buttons to audio block.
Persist the state of the sidebar across page refresh.
Persist state of sidebar panels on page refresh.
Persist editor mode on page refresh.
New withAPIData higher-order component for making it easier to manage data needs.
Preserve unknown block and remove “freeform” comment delimiters (unrecognized HTML is handled without comment delimiters).
Show “add new term” in hierarchical taxonomies (including categories).
Show tooltip only after mouseover delay.
Show post formats only if the post type supports them.
Added align and edit buttons to video block.
Preload data in withApiData to improve perceived performance.
Improve accessibility of sidebar modes.
Allow changing cover-image settings before uploading an image.
Improve validation leniency around non-meaningful differences.
Take into account capabilities for publishing action.
Update author selector to show only users capable of authoring posts.
Normalize pasted blockquote contents.
Refactored featured image, page attributes to use withApiData
Added a fix to avoid cloning nodes by passing pasted HTML string.
Added a fix to avoid re-encoding on encoded posts.
Fixed resetting the focus config when block already selected.
Allowing adding of plain text after insert link at the end of a paragraph.
Update to latest TinyMCE version.
Show only users capable of authoring posts.
Add submit for review to publish for contributor.
Delete or backspace in an empty “classic text” block now removes it.
Check for type in block transformations logic.
Fixed drop-down menu issue on classic text.
Added filter to allow post types to disable “edit in gutenberg” links.
Made UrlInput and UrlInputButton available as reusable components.
Use wordpress/a11y package instead of global.
Added npm5 package-lock.
We welcome all your feedback and contributions on the project repository, or ping us in #core-editor. Follow the “gutenberg” tag for past updates.
Added ability to change font-size in cover text using slider and number input.
Added support for custom anchors (ids) on blocks, allowing to link directly to a section of the post.
Updated pull-quote design.
Created custom color palette component with “clear” option and “custom color” option. (And better markup and accessibility.)
Improve pasting: recognizing more elements, adding tests, stripping non-semantic markup, etc.
Improve gallery visual design and fix cropping in Safari.
Allow selecting a heading block from the table-of-contents panel directly.
Make toolbar slide horizontally for mobile.
Improve range-input control with a number input.
Fix pasting problems (handling of block attributes).
More stripping of unhandled elements during paste.
Show post format selector only for posts.
Display nicer URLs when editing links.
More compact save indicator.
Disabled arrow key navigation between blocks as we refine implementation.
Removed blank target from “view post” in notices.
Fix empty links still rendering ont he front-end.
Fix shadow on inline toolbars.
Fix problem with inserting pull-quotes.
Fix drag and drop on image block.
Removed warning when publishing.
Don’t provide version for vendor scripts.
Clean category code in block registration.
Added history and resources docs.
New Categories Block (based on existing widget).
New Text Columns Block (initial exploration of text-only multiple columns).
New Video Block.
New Shortcode Block.
New Audio Block.
Added resizing handlers to Image Block.
Added direct image upload button to Image Block and Gallery Block.
Give option to transform a block to Classic when it encounters problems.
Give option to Overwrite changes on a block detected as invalid.
Added “link to” option in galleries.
Added support for custom taxonomies.
Added post formats selector to post settings.
Added keywords support (aliases) to various blocks to improve search discovery.
Significant improvements to the way attributes are specified in the Block API and its clarity (handles defaults and types).
Added Tooltip component displaying aria-labels from buttons.
Removed stats tracking code.
Updated design document.
Capture and recover from block rendering runtime errors.
Handle enter when focusing on outer boundary of a block.
Reduce galleries json attributes data to a minimum.
Added caption styles to the front-end for images and embeds.
Added missing front-end alignment classes for table and cover-text blocks.
Only reset blocks on initial load to prevent state fluctuations.
Improve calculation of dirty state by making a diff against saved post.
Improve visual weight of toolbar by reducing its silhouette.