šĀ Excited to release theĀ create-guten-blockĀ toolkit today. In this post, I am going to share what isĀ create-guten-blockĀ (cgb), what is the motivation & philosophy behind building this dev-toolbox, and the story of how I am releasing it to the public after ~200 commits and ~90 version releases. Letās start with intro firstā¦
šĀ IntroducingĀ Create Guten Block!

create-guten-blockĀ (šĀ at GitHub for updates) is a zero-configurationĀ dev-toolkitĀ (#0CJS) to develop WordPress Gutenberg blocks in a matter of minutes without configuringĀ React,Ā Webpack,Ā ES6/7/8/Next,Ā ESLint,Ā Babel, etc.
Create Guten Block is not like otherĀ starter-kitsĀ orĀ boilerplates. Itās a developerās toolbox which is continuously updated. Since it has zero-configuration, you can always update it without any changes in your code. Thatās actually why I built it.
šĀ create-guten-blockĀ is:
- š„Ā Versioned ā
- š¤ Ā Updatable ā
- šĀ Set of sane-defaults ā
- šĀ ONE singleĀ
cgb-scriptsĀ dependency ā
But what is it?!
Whatās Included?
Your dev-environment will have everything you need to build a modern next-gen WordPress Gutenberg plugin:
- React, JSX, and ES6 syntax support.
- Webpack dev/production build process behind the scene.
- Language extras beyond ES6 like the object spread operator.
- Auto-prefixed CSS, so you donāt needĀ
-webkitĀ or other prefixes. - A build script to bundle JS, CSS, and images for production with source-maps.
- Hassle-free updates for the above tools with a single dependencyĀ
cgb-scripts.
Philosophy
- One Dependency:Ā There is just one build dependency. It uses Webpack, Babel, ESLint, and other amazing projects, but provides a cohesive curated experience on top of them.
- No Configuration Required:Ā You donāt need to configure anything. A reasonably good configuration of both development and production builds is handled for you so you can focus on writing code.
- No Lock-In:Ā You canĀ
ejectĀ to a custom setup at any time. Run a single command, and all the configuration and build dependencies will be moved directly into your project, so you can pick up right where you left off.
WhyĀ create-guten-block?
Well, itās really hard to configure things like Webpack, React, ES 6/7/8/Next, ESLint, Babel, etc. before you āĀ even start writingĀ ā aĀ Hello WorldGutenberg block. Then thereās the fact that you have to maintain and constantly update your configuration with all the new tools and growth in the JavaScript community ā thatās not an easy thing to do.
create-guten-blockĀ hides all this configuration away in an optimized package that we callĀ cgb-scripts. This package is the only dependency in your projects. We keepĀ cgb-scriptsĀ up to date while you go ahead and create the next best WordPress themes and plugins.
So, thatās what I dreamt about for the next couple of months.Ā How do I solve this problem for the WordPress community, eh?
After buildingĀ WPGulpĀ andĀ Gutenberg BoilerplateĀ and lot of other open source software that thousands of developers are using ā I started receiving lots of feedback on how itās limiting in its architecture which is complex ā and by the way, these boilerplates went stale quite a few times.
I knew this was not right.
create-guten-block!Ā Enough talk, letās stop it right here and actually explore the toolkit.<
div>
GETTING STARTED!
Itās really easy to get started withĀ create-guten-block. Just install it as a global module and run it to create your next-gen Gutenberg block plugin for WordPress.
š¦
Did I tell you toĀ starĀ šĀ it at GitHub for updatesĀ and to show appreciation or to report back anyĀ issuesĀ you face? Hmm⦠lemme think?!
OK! OK!Ā Letās get you started!
ā STEP #0
If you donāt haveĀ Node.jsĀ +Ā npmĀ installed then read this step, otherwise jump to the Step #1 below.
In case you are an absolute beginner to the world ofĀ Node.js, JavaScript, andĀ npmĀ packages ā all you need to do is go to the Nodeās siteĀ download + installĀ Node on your system. This will install bothĀ Node.jsĀ andĀ npm, i.e., node package manager ā the command line interface of Node.js.
You can verify the install by opening your terminal app and typingā¦
node -v
# Results into v9.4.0 ā make sure you have Node >= 8 installed.
and thenā¦
npm -v
# Results into 5.6.0 ā make sure you have npm >= 5.2 installed.
ā STEP #1
InstallĀ create-guten-blockĀ globally on your system.
Youāll need to have Node >= 8 on your local development machine (but itās not required on the server). You can useĀ nvm(macOS/Linux) orĀ nvm-windowsĀ to easily switch Node versions between different projects.
npm install create-guten-block --global
Hold on, itāll take a couple of minutes to install.
ā STEP #2
Now all you have to do is create a Gutenberg block and start building. Itās done by running theĀ create-guten-blockĀ command and providing it with a unique name for a WordPress plugin that will get created. The name can a single word or hyphenated multiple words.
Now letās run the following command.
create-guten-block my-block
It will create a directory calledĀ my-blockĀ inside the current folder. Inside that directory, it will generate the initial project structure and install the transitive dependencies:
INSIDE: /local_dev_site.tld/wp-content/plugins/my-block
āāā plugin.php
āāā package.json
āāā README.md
|
āāā dist
| āāā blocks.build.js
| āāā blocks.editor.build.css
| āāā blocks.style.build.css
|
āāā src
āāā block
| āāā block.js
| āāā editor.scss
| āāā style.scss
|
āāā blocks.js
āāā common.scss
āāā init.php
No configuration or complicated folder structures, just the files you need to build your app.
ā STEP #3
Once the installation is done, you can open your project folder and run the start script.
Letās do that.
cd my-block
npm start
You can also useĀ yarn startĀ if thatās your jam.
This runs the plugin in development mode. To produce production code runĀ npm run build. You will see the build messages, errors, and lint warnings in the console.
Workflow!
There are just three scripts that you can use in yourĀ create-guten-blockĀ workflow. With these three scripts, you can develop, build, and eject your plugin.
šĀ npm start
- Use to compile and run the block in development mode.
- Watches for any changes and reports back any errors in your code.
šĀ npm run build
- Use to build production code for your block insideĀ
distĀ folder. - Runs once and reports back the gzip file sizes of the produced code.
šĀ npm run eject
- Use to eject your plugin out ofĀ
create-guten-block. - Provides all the configurations so you can customize the project as you want.
- Itās a one-way street,Ā
ejectĀ and you have to maintain everything yourself. - You donāt normally have toĀ
ejectĀ a project because by ejecting you lose the connection withĀcreate-guten-blockĀ and from there onwards you have to update and maintain all the dependencies on your own.
Thatās about it.
TL;DR
Too long, didnāt read? Hereās a shorter version.
Open the terminal app and run the following commands.
- ā
Ā Install/Update:Ā
npm install create-guten-block --global - š°Ā Create:Ā
create-guten-block my-blockĀ ā Run inside local WP install E.g.Ā/wp.local/wp-content/plugins/Ā directory. - šĀ Browse:Ā
cd my-blockĀ ā Open the newly created plugin directory. - ā»ļøĀ Run:Ā
npm startĀ ā For development. - š¦Ā Run:Ā
npm run buildĀ ā For production build. - āĀ Run:Ā
npm run ejectĀ ā To customize, update, and maintain all by yourself.
Create-Guten-Block has been tested to work on macOS, but must also work on Windows, and Linux. If something doesnāt work, kindly fileĀ an issue ā
Updating to New Releases
Create Guten Block is divided into two packages:
create-guten-blockĀ is a global command-line utility that you use to create new WP Gutenberg plugins.cgb-scriptsĀ is a development dependency in the generated plugin projects.
npm install create-guten-block --global
You almost never need to updateĀ create-guten-blockĀ itself: it delegates all the setup toĀ cgb-scripts. But as this project matures, there might be a few changes over time and you can re-run the global install.
When you runĀ create-guten-block, it always creates the project with the latest version ofĀ cgb-scriptsĀ so youāll get all the new features and improvements in newly created plugins automatically.
ā
Ā To update an existing project to a new version ofĀ cgb-scripts, open theĀ changelog, find the version youāre currently on (check package.json in your pluginās folder if youāre not sure), and apply the migration instructions for the newer versions.
š°Ā In most cases bumping theĀ cgb-scriptsĀ version in the package.json and runningĀ npm installĀ in this folder should be enough, but itās good to consult theĀ changelogĀ for potential breaking changes.
We commit to keeping the breaking changes minimal so you can upgradeĀ cgb-scriptsĀ painlessly.
Changelog
Read whatāsĀ š¦Ā new,Ā šĀ improved,Ā šĀ fixed, and ifĀ šĀ docs got updated.
šĀ Go read the entire changelog at this link āĀ CGB Changelog ā
Nothingās ever complete, so bear with us while we keep iterating towards a better future.
'Coz every night I lie in bed
The brightest colors fill my head
A million dreams are keeping me awake
I think of what the world could be
A vision of the one I see
A million dreams is all it's gonna take
A million dreams for the world we're gonna make ...
ā¦Ā listen to āĀ A million dreams!
Hello, weāre theĀ WordPress Couple!
I (Ahmad Awais) am a Full Stack Web Developer and a regular core contributor at WordPress. My significant other (Maedah Batool) is a Technical Project Manager, and sheās also a WordPress Core Contributor. Together with ourĀ team, we run theĀ TheDevCouple.com.
If youād like to get insights into our love for open source software, professional full stack development, WordPress community, the growth of JavaScript or growing a family, building, and bootstrapping a business, then subscribe to our premium newsletter called ā£Ā The WordPress Takeaway!
Support our Open Source Projects!Ā š©
If youād like us to keep producing professional free and open source software (FOSS). ConsiderĀ paying for an hour of my dev-time. Weāll spend two hours on open source for each contribution. Yeah, thatās right, you pay for one hour and get both of us to spend an hour as a thank you.
Project Backers &Ā WPCouple PartnersĀ ā”ļø
This FOSS (free and open source software) project is built, updated and maintained with the help of awesome businesses listed below. Without the support from these amazing companies/individuals, this project would not have been possible. Make sure you check out their awesome services and products. Theyāve earned it.Ā š
āĀ What/How?Ā Read more about it ā
License & Attribution
MIT © Ahmad Awais.
This project is inspired by the work of more people than I could mention here. But thank you,Ā Dan AbramovĀ for Create React App,Ā Andrew Clark,Ā Sophie AlpertĀ from React.js team,Ā Wes BosĀ for awesome courses forĀ React,Ā ES6, andĀ NodeĀ beginners.Ā Kent C. DoddsĀ for his open source evangelism, WordPress Core Contributors,Ā GaryĀ for keeping everyone sane,Ā Gutenberg developersĀ Matias,Ā Riad,Ā Andrew,Ā Joen,Ā GregĀ and contributors, and other WordPress community members likeĀ ZacĀ for hisĀ course on Gutenberg, and also my friendĀ MortenĀ for all the #Guten-motivation,Ā Icons8Ā for the awesome icons,Ā MaedahĀ for managing this project, and to everyone I forgot.
Whatās Next?
Yes, thatās not all done, yet. I have managed to change the codebase and release many updates by now, before actually announcing a stable release.
The next step is to get this toolkit tested and mature the entire app to release versionĀ 2.0.0Ā for that not only do I need yourĀ support, I ask that you hop on board and contribute ā thatās the only way forward.
I have created a GitHub issue with the title ofĀ šĀ Creat Guten Block 2.0 Goals + Call for Contributors! In there I have listed a rough roadmap to versionĀ 2.0.0.
Goals listed below ā without any order of priority:
- šĀ At the time of writing,Ā
create-guten-blockĀ and sister scripts have received 3,000+ downloads - šÆĀ Get folks on React, Webpack, and Babel teams to review the configurations for best possible results
- ā”ļøĀ Go beyond React ā with Preact, Inferno, Marko, Angular, Vue, etc.Ā JavaScript frameworks
- šĀ More examples need to be documented. Especially a Multi-block example which is easy
- š°Ā Babel 7, Webpack 4, upgrades to follow in the next major version of create-guten-block
- š§Ā ESLint integration needs a refresher ā ESLint + Prettier setup is already WIP
- āĀ Refactor code into small modules and maybe make small npm packages
- šĀ Improve inline documentation throughout the codebase
- šĀ Build moreĀ
cgb-dev-utilsĀ ā separation of concerns - š¤Ā Possible integrations: Service Workers from Google
- š£Ā Possible integrations: Progressive Web Apps
- š»Ā
.envĀ file limited set of customizations - š¤Ā Allow custom forks ofĀ
cgb-scripts - š Ā Improve the entire Webpack defaults
- šĀ Webpack file handling done right
- š¹Ā Webpack image optimization
- š¹Ā Webpack Uglify ES6 plugin
- āĀ Webpack + BrowserSync
- š°Ā Multi Block Examples
- š Ā Automated test suit
- š¤Ā Other stuff? #Suggest
- šĀ PRās welcomed
What do you say? Comment below. And make sure youāve stargazedĀ šĀ the GitHub repo for updates!
š
BuildingĀ create-guten-blockĀ was a lot of work. Itās easily one of the best software Iāve written and I have exciting improvements coming.
š„Ā It would mean the world to me if youĀ Tweet about it, try it out, and contribute.
Peace! āļø
Feel free to reach out and sayĀ šĀ on TwitterĀ @MrAhmadAwais
UPDATES
- šĀ
create-guten-blockĀ has gone viral 100+Ā stargazers on GitHub - šĀ Woot! Woot! TheĀ project is trendingĀ on GitHubĀ JavaScript repos today
- šĀ Humbled to be listed as aĀ trending developer on GitHubĀ today ā this is crazy!
- š„Ā Holly Molly āĀ
create-guten-blockĀ is nowĀ trending in all languagesĀ overall on GitHub!
š
SUBSCRIBE TO DEVELOPERS TAKEAWAY!
A Premium Development Newsletter by TheDevCouple! What is TheDevTakeaway?




