SALE! Join devs. Biggest sale ever, FLAT 80% OFF.
In this video, we are going to create a name CLI. For that, you are going to create an account on github.com and npmjs.com, if you don't have one. And then I'm going to call the CLI awais.
For example, this could be your name something unique that is isn't already, you know, published on npmjs.com. And then we are going to publish the CLI on npm. So everyone in the world or maybe an astronaut sitting in the outer space could probably use the CLI to know who you are.
You would be using the CLI by typing in npx awais in your terminal. So that, uh, and the CLI is basically going to return my name and my biography, you know, a little bit, a couple of lines about who I am. Okay.
Let's get started. If you don't have a github.com account, go ahead and sign up, and then you'll be able to click here and create a new repository. Or you can just type in repo.new and press enter.
Here you can create a new repository. I'm going to call this repository awais. Get to know Awais via npm.
Just run npx awais, right? I can backtick here. There you go!
So now that I have created this repository, I'm going into my terminal and I'm going to git clone it. cd to awais. Nice! The next thing is we are going to create an account on npmjs.com.
You can definitely go-ahead and sign up from their website. But since this is a course about creating CLIs, how about we use npm CLI to create a new user? If you go to npm help, you can see there are a bunch of commands that you can run.
One of these commands is adduser. So go ahead and type in npm adduser. This is if you don't have an npmjs account.
Type in a username that is quite peculiar to use and probably quite unique. So it is not already existing on npmjs. For example, you could have a username mynameisawais or whatnot.
And then type in a password and finally an email ID, which is going to be public. This is the email ID which is going to be used to publish npm packages on npmjs.com. So add your email ID here.
And then you just go ahead and press return or press enter. And it will go ahead and create this username for you. And if it doesn't create this username, it'll probably give you an error or something that this particular username already exists, and you need to create a new user or use different username or whatnot.
And when this happens, npmjs is going to send you an email on the email ID you used here. Go ahead and open that email and verify your npmjs account. This is quite important because without this particular step, you're not going to be able to, uh, you know, publish packages to npmjs.com.
Okay I'm just going to cancel this one because I already have an account. Now, if you are logged in, if you have an account, you should be able to check it npm whoami. And as you can see, I'm already logged in.
My username is ahmadawais. npmjs.com/~ahmadawais is how you can probably go to my profile. Okay. Now let's start writing code.
I'm going to use VSCode for this. So code . would open this particular folder in VSCode. So whenever you start a project for nodejs CLIs, you create a folder and then you create an index.js file inside of it.
And here's where we code for this particular CLI. We've want to run the CLI and it should console log my name. This should be pretty simple, right?
How about I start with just console logging my name. So that would be Ahmad Awais. Now how do you think I can run this particular script?
Uh, I'm not sure. I'm going to open up terminal inside of VSCode. And then I'm going to type in index.js.
And I see command not found: index.js. Basically. my shell does not understand what I'm trying to do. It has no command registered against index.js.
Maybe if I tell it that I'm going to run a script inside this particular directory and an index.js file is what I'm going to run then we will see better results. Well, let's hold for it and press enter. Okay.
So now it says permission denied. What is happening? If I type in ls hyphen al to see and list all the files in this particular directory called awais, there is an index.js file.
And if you take a look at the permissions of this file, I can only read this file. This r basically says that I can only read this file. This file can not be executed as a shell script.
So how about I give it an executable right. A permission to be executed. For example, the let's give this index.js file the permission so that it can be executed.
That permission would be x. For that, I'm going to type in chmod +x, and then the name of the file. Now, if I list all of the files, you can see that this particular index.js file is now executable.
So I'm going to type in clear to clear the terminal. And let's try it again. ./index.js. Okay.
Syntax error. It hasn't still run the CLI and it is sort of a shouting at us what is this? What is this syntax?
It has an unexpected token or whatnot. What is happening here? What's happening here is basically we are trying to run this particular JavaScript file in our command line which is a shell and it can only understand shell script.
It is trying to understand this as a shell script language not as JavaScript. We need some kind of way to tell our terminal that please run this script with nodejs. For example, if I try to run it with nodejs.
Let's see what happens. Oh! I get that console log that I had written here.
Ahmad Awais. So we know that node can run this file but our terminal, the shell cannot. How do we fix this?
Let's clear this up. To fix this thing, what I'm going to do is I'm going to add Shabang here. So Shabang with a funny name is actually a hashtag with a pound sign where you basically tell your terminal that this particular file is going to be run with nodejs.
For that, we write this Shabang hashtag with bang sign and then usr without an e. This is a directory in your computer. bin env and then node. This Shabang is basically telling our terminal to run this particular script with nodejs.
If this would have been a bash file, we would have written bash here or Python if this would have been a CLI built with Python. But for the course, I'm going to type in node. So this hashtag in bang sign, call Shebang or Shabang or hash bang or hash pound sign, and this basically tells our terminal that this particular index.js file should always be executed with nodejs.
So I'm going to save this. Open up the terminal. And let's run this particular file again.
Now I'm not going to use node and let's see if this executes and there you go. Now we are able to execute this script in a command line. But the funny thing is I don't want to, you know, use ./index.js to kind of run the CLI.
I want to kind of say, let's say awais and it should run this particular CLI. How do I make that happen? There should be a way to define what command should I run or what command to the CLI register, which I could run to print this particular, you know, uh, run this particular CLI that prints Ahmad Awais.
What I want to do is I want to run, just say awais, and I want this awais command to run the CLI. But my terminal basically say is that there's no command registered against this, you know, these words of awais. So let's clear this up and think about what we can do here.
In the JavaScript ecosystem for npmjs, we actually register and define all of these commands in a file called package.json. So let's go ahead and create package.json file. The package.json file lives in the root directory of our, you know, project it's a JSON file.
And the first thing I'm going to give it is the name of our particular CLI here, which is awais. Make sure that you only use the kebab case here and everything you write in the name should be lowercased. And then I'm going to give it a version.
And I'm going to call that 1.0.0. This is going to be a major version. This is called major, minor and then the patch version.
I'm going to explain these semantic versions later. Now I'm going to define the command that when run should run this particular CLI. For that we are going to define the bin keyword here and here it is where we define the command.
This command is going to run index.js file in our project here. So this command should be called awais, right? So now when you install this package and run awais, you will be able to run index.js file, which console logs my name.
Make sense. Let's try it out. Right now, if I write awais, my terminal shout at me and says that awais is not a registered command.
But before I publish this package to the world out there, I want to test it locally. And for that, I'm going to basically create a local link for this file. For that, I'm going to write in npm link.
When I ran npm link, a couple of things happened. First of all, I got all of these warnings about that there is no description or a policy or license field in my package.json file that we can always add later. But what really happened was that this package.json file.
This package that we have just created, got installed globally in our machine. So basically. npm links installs your package in your computer. It is equivalent to installing a package with npm install, hyphen hyphen global, and then your package name here, right?
This is the directory where my node modules are going to be installed. As you can see, there's an awais directory here in these node modules, global node modules. And then there's an index.js file, which is what we can run by writing this particular command awais.
I know this is extra information, but just so that, you know, now you can start running that particular command. Now, if I type in awais and hit enter, it basically runs this particular file. And you can see Ahmad Awais written here.
And the fun thing about this is that now this particular package is globally installed. And it's already linked to your local code. What I mean by that is if you go ahead and change something here, for example, software engineer and run the command again, you'll see that the output has changed.
So now I can basically do anything with the CLI and test it locally because I have npm link, this particular package globally inside this computer I'm using right now. And if I want to ever uninstalling this global package, all I have to do is npm uninstall hyphen G for the global tag, and then the package name awais. Now if I run awais, it is again going to shout at me saying command not found.
So a little bit of a recap here. If you've want to locally test your node CLI, you can go to the root of that directory, where you have that package. For us, this is the awais directory.
For you, this is going to be a directory against your name and just type in npm link. npm link basically links your local package and installs it as a global node module. Now you can run this global module whenever you like. Since I'm using string literals here, the string with backticks, I can basically use a multiline string here.
So I'm going to just go ahead and do that. And then I'm going to type in my bio. And finally, how about we add some social media links here.
Twitter and then open book for GitHub. And then my blog, I'm just going to add this dude with glasses. Let's call it blog.
So there you go. And finally, I'm going to leave an empty line here. Now, if I run the CLI, you know, the CLI basically is defining who I am, a little bit about my bio and a couple of links that I can basically click by pressing command or option/alt in my computer.
Okay. Our CLI looks great. I'm going to go ahead and commit our CLIs as the first version to GitHub.
Just for the keepsake so I don't lose this code. Now let's go ahead and publish this CLI on npm. For that, make sure that you are logged in with npm whoami.
So as you can see, it prints out my username for npmjs.com, which means I'm logged in. And then I just need to write in npm publish. And there you go.
I have published a CLI called awais with a major version 1.0. All of this information basically tells me that all of these files were uploaded and now have awais CLI basically lives on npm. Let's go ahead and check if that is actually true.
A shortcut to do that is by typing npm.im/name of your package. And this will take you to npmjs.com/package/awais, which is actually the link where your package gets published. And as you can see, the last publish was about a minute ago and here's the CLI with no readme found, no keywords whatsoever, which we are going to fix in the next couple of videos.
Now I'm going to uninstall the local version we just install using npm link. I can verify that by typing in awais. And as you can see, there is no command called awais right now.
So now that our CLI is published on npmjs.com, what we can do is we can basically use the package name, which is awais, which is also denoted here in the URL and run the CLI using npx. Let's try it out. npx awais. npx is going to go ahead and install this particular CLI and then execute it. So there you go.
It's saying Ahmad Awais, my bio and the links we had written. And that's pretty much about it. This is how you create your first CLI and publish it on npmjs.com.
Anyone could use npx to run your CLI right away.
TEAM ACCOUNTS I have great discounts available if you're buying for 5+ team members — 50% to 70% off. Apply for the team-discount by letting me know how many team members you have.
Apply for Team discount— GET IN TOUCH WITH AWAIS!
I bought this course because I'm extremely interesting in building CLIs and want to deepen my knowledge even more. This course is by far the best value for the amount of content I've seen maybe ever. If you're interested in modern development, this is a solid investment!
Nader DabitSr. Developer Advocate · Amazon
Suuuuper stoked for this I just picked up my copy of NodeCLI course! I can't wait to take my CLI skills to the next level. Keep up the great work Awais.
Alexander RomanoFull Stack Associate App Developer · SKF · Virtually(Creative)
I've been walking through the VSCode.pro power user course by Ahmad Awais and I'm learning a lot! Bought the Node CLI course too, just to brush up. Good stuff.
Kassian Rosner WrenDeveloper Advocate · Cloudflare
Ex Auth0, Bocoup
I had the chance to go over the course I can say it's brilliant! The amount of work and details @MrAhmadAwais has put into the course is astonishing. Also, it's a subject you don't see that often. Give it a go.
Catalin PitSoftware Engineer at TypingDNA
I am learning a lot from the course. And it's approachable even if you're not experienced with Node.js.
Tommy WilliamsSr. Director/Developer · Tempest Tech
Ex Group PM · Microsoft (14yrs)
Awais thanks for Node CLI course! This looks like a great set of resources! I love the intro video, top notch!!
Scott SpenceWeb Developer · Karmarama UK
In this module, you'll understand why I created this course? Why I make Node.js CLI Apps and JavaScript-based Command-Line DevTools. And this will be a gentle introduction to Node.js fundamental concepts. How come Node.js is so fast? We'll push a dummy Node.js server to its limits. You'll learn how Node.js gets released; the Node.js release-cycle to help you make the best decisions. And a fun video on the difference between npm vs npx.
INTRODUCTION:What, why, who? Node.js CLI ToolsWATCH
NODE.JS:Understand what is Node.js?WATCH
NODE.JS:Node.js: Server Load TestWATCH
NODE.JS:Release Cycle - Current + Long-term supportWATCH
NODE.JS:Difference between npx and npmWATCH
You can install Node.js pretty easily. But maintaining different versions of Node.js for each project, changing between Active LTS, Maintenance LTS, Current version, and keeping up with node modules for each can be quite a task. Let me teach you exactly how I do it. We'll compare different options like nvm
, asdf
, nodenv
, and n
.
NODE.JS:How to download and install Node.jsWATCH
NODE + nvm:Node.js Version Management with nvmWATCH
NODE + nodenv:Node.js Version Management with nodenvWATCH
NODE + asdf:Node.js Version Management with asdfWATCH
NODE + n:Node.js Version Management with nWATCH
SUMMARY:Node.js Installation & ManagementWATCH
Here I'll take a step by step approach to building and publishing your first Command-Line Interface (CLI) project. You'll create a GitHub repo, an account on npmjs.com (inside your terminal), learn about semantic versioning, and will publish your project. The whole shebang. I'll talk about the readme, keywords, author info, and licensing. Finally, we'll polish the User Experience (UX) of your CLI app by adding colors, welcome-header, & custom alerts.
NODE.JS CLI:Building & publishing your first CLIWATCH
NODE.JS CLI:Creating GitHub and npmjs.com accounts02:21
NODE.JS CLI:Difference between Bash vs Node04:34
NODE.JS CLI:What is #! or shebang or hashbang?03:18
NODE.JS CLI:npm link with package.json bin command03:21
NODE.JS CLI:npm adduser, npm whoami, npm publish02:41
NODE.JS CLI:npx yourname to run the CLI5:03
NODE.JS CLI:Semantic Versions major.minor.patch06:48
NODE.JS CLI UX:How to clear-any-console?12:43
NODE.JS CLI UX:Welcome Header CLI introduction07:12
NODE.JS CLI UX:Author info, readme, keywords, & license06:31
NODE.JS CLI UX:Everything about CLI colors with chalk17:23
NODE.JS CLI UX:Custom styled CLI alerts08:21
Have you ever wondered how to build an actual Node module or npm package? In this chapter, I'll teach you how to build a Node module from scratch. We'll publish a real-life, production-ready npm package. This will help you create more FOSS (Free & Open Source Software) while building Node.js CLI applications.
NODE-MODULE PKG:Building & publishing your first node-module16:11
NODE-MODULE PKG:Introduction: npm module pkg?01:38
NODE-MODULE PKG:Architecture, files, & configuration09:54
NODE-MODULE PKG:npm module dependencies01:52
NODE-MODULE PKG:Coding a Node.js module10:51
NODE-MODULE PKG:Custom options & Default options04:42
NODE-MODULE PKG:JavaScript destructuring03:68
NODE-MODULE PKG:JavaScript spread operator01:24
NODE-MODULE PKG:JavaScript template literals05:12
NODE-MODULE PKG:Testing npm node modules03:35
NODE-MODULE PKG:Refactoring a Node module06:43
NODE-MODULE PKG:Publishing node-modules06:34
Learn everything I know about handling errors in Node.js Command-Line Applications. You can build CLIs that run on specific versions of Node.js. Gracefully notify your users to update their node version. Even handling errors that are unexpected and unhandled. I'll also share my custom error handling module that you can use right away.
ERROR HANDLING:Check the Node.js version05:41
ERROR HANDLING:CLI handle the unhandled errors03:50
ERROR HANDLING:Refactor your CLI with an IIFE09:57
ERROR HANDLING:Node process custom error handler11:53
ERROR HANDLING:(IIFE) Immediately Invoked Function Expression03:12
The theory is boring. I know. Yet without knowing all of the concepts in this chapter, you'll find yourself struggling with complex automation projects. We don't want that. That's why I'm teaching just enough so that you can understand Node.js with minimum effective-effort.
THEORY:Node.js Event loop (the right way)09:12
THEORY:Node.js process & paths01:16
THEORY:Node.js process.cwd() paths22.93
THEORY:Node.js process.exit() strategy01:16
THEORY:Node.js process.env info00:33
THEORY:Node.js process.argv arguments01:12
THEORY:Node.js process stdin stdout stderr04:09
THEORY:Node.js parsing CLI arguments06:57
You can code a Command-Line Interface all by yourself. To quickly prototype a production-ready CLI with minimum effective-effort, you can use one of the many available CLI frameworks. I'll review a couple of excellent CLI frameworks. And we'll start building out the Command-Line Interface based on top of meow
a minimal CLI Apps helper.
FRAMEWORKS:Node.js CLI frameworks08:14
FRAMEWORKS:Node.js CLI flags, inputs, help05:04
CLI HELPER:meow: Introduction, what & why?07:06
CLI HELPER:meow: Creating help command03:38
CLI HELPER:meow: CLI Refactor (production-ready)07:46
CLI HELPER:meow: Help command refactor04:42
CLI HELPER:meow: Help command UX with colors03:06
CLI HELPER:meow: CLI version printing01:29
CLI HELPER:meow: CLI flags & Flag aliases02:01
CLI HELPER:meow: CLI flag detailed schema05:12
CLI HELPER:meow: CLI flag minimal output03:28
CLI HELPER:meow: CLI flag controlled clear screen01:58
CLI HELPER:meow: handle missing command01:17
CLI HELPER:meow: an overview of the new CLI01:19
Mostly when building Node.js CLI Command-line Apps, you have to fetch data from an API; a remote resource. In this module, I teach how you can fetch data with node-fetch and axios. That's not all, when data is being fetched there's nothing on the CLI screen. We fix that weird user experience by introducing loading spinners that can succeed, fail, warn, or stop. Together we will improve our first CLI to fetch blog posts from our blogs.
DATA FETCHING:Fetching data in a Node.js CLI09:19
DATA FETCHING:Fetching data with node-fetch04:45
DATA FETCHING:Fetching data with axios04:14
DATA FETCHING:CLI data fetching errors handling05:39
DATA FETCHING:CLI fetching latest blog posts14:16
DATA FETCHING:User experience loading animation03:46
DATA FETCHING:User experience controlled spinners07:04
Take input in your CLI from a user, process it, validate it, and provide a beautiful prompts interface. Remember the previous value in an input field (CLI temporary storage). Hide the display of a secret input like a password. Do it all with minimal effort. Some example input prompts include: AutoComplete
, BasicAuth
, Form
, List
, MultiSelect
, Numeral
, Password
, Select
, Sort
, Snippet
, Toggle
, & custom prompts.
CLI I/O:How to take user input in a CLI02:43
CLI I/O:Taking user input with enquirer09:33
CLI I/O:Tens of different enquirer prompts07:00
CLI I/O:Ask questions, MultiSelect, fill forms07:00
CLI I/O:BasicAuth, Sort, AutoComplete, Toggle07:00
In this module, you'll learn to build 20+ different Node.js CLI Command-line projects. From simple things like a todo CLI to complex applications like pre-configurable and persistent memory with temporary storage for hints. We'll create progress bars, CLIs to execute commands, CLI Graphs, CLI Charts, and even Hollywood movie-like Hacker Dashboards all in your Command-Line. I'll also teach how to build project scaffolding or template generating CLIs like create-react-app. Caution: This is extremely fun for developers!
CLI PROJECT:Hello & Scopped Package04:22
CLI PROJECT:Automatically Generate CLI Help11:21
CLI PROJECT:CLI To do - manage project todos 23:12
CLI PROJECT:CLI to resize & optimize images14:03
CLI PROJECT:CLI Quiz - Take a quiz02:38
CLI PROJECT:CLI Survey - Fill a survey04:05
CLI PROJECT:CLI to get WiFi Password04:21
CLI PROJECT:CLI Remember-Me - persist config07:04
CLI PROJECT:CLI Persistent data & temp storage07:04
CLI PROJECT:CLI Pre-configurable like Babel & prettier05:30
CLI PROJECT:CLI Progress Estimation & Progress bars07:27
CLI PROJECT:CLI Display Fun Figlet printing03:41
CLI PROJECT:CLI Project Update Notification04:05
CLI PROJECT:CLI Graphs & Charts, Hacker dashboards06:32
CLI TO EXECUTE COMMANDS
EXECUTE:CLI commands with child_process spawn03:50
EXECUTE:CLI commands with child_process exec02:23
EXECUTE:CLI commands with child_process exec p02:39
EXECUTE:CLI commands with execa01:55
EXECUTE:CLI commands with shelljs01:43
CLI BOILERPLATE & TEMPLATE GENERATION
SCAFFOLDING:CLI Generate Boilerplate02:27
SCAFFOLDING:Scaffolding like create-react-app02:27
SCAFFOLDING:CLI Project Scaffolding 04:27
SCAFFOLDING:CLI Dynamic Template generation11:27
INCEPTION:CLI that generates CLIs05:42
You learned how to build CLI Command-line tools. You went through 21+ projects. But what does an actual production-grade quality CLI project look like? You're in luck because I decided to create a CLI that can create CLIs. Sort of like CLI Inception. This module teaches exactly that. Learn how to build a production-ready CLI scaffolding project.
PROD-READY:Create Node CLIs05:42
PROD-READY:ncli: taking user input05:17
PROD-READY:ncli: input refactor to ask.js module02:59
PROD-READY:ncli: input refactor ask.js with questions01:48
PROD-READY:ncli: output UX refactor with colors03:39
PROD-READY:ncli: improve template with dynamic data09:49
PROD-READY:ncli: template generation UX refactor06:04
PROD-READY:ncli: validate user input cancellation02:05
PROD-READY:ncli: graceful forced CLI cancellation02:51
PROD-READY:ncli: optional command validation FTW08:17
PROD-READY:ncli: fix potentially dangerous dir exists routine03:39
PROD-READY:ncli: improve user experience, loading spinners06:04
PROD-READY:ncli: persist in history to remember the last input12:49
Writing CLIs is a lot of fun. Sadly, though, it's not as much fun to test and debug a CLI if something goes wrong. In this module, I'll equip you with my go-to debugging strategies. We'll study the latest techniques like log points in VSCode. You'll write unit tests for all the new released versions of your CLI tools are tested automatically. Super helpful.
UPDATES:Check and update npm dependencies05:35
DEBUGGING:How to debug a Command-line tool05:42
DEBUGGING:VSCode breakpoints & logpoints for debugging04:25
UNIT TESTING:What is unit testing?03:41
UNIT TESTING:Creating a dummy CLI for unit testing02:34
UNIT TESTING:Write excellent unit tests for CLI Apps10:44
I've used modern JavaScript in this course. But I have kept it all beginners-friendly by recording extra videos on what these new JavaScript concepts look like. I'll also keep adding more CLI projects, live-streams, and relevant videos to this ever-green Node CLI course.
EXTRA:Basics of Node.js03:42
EXTRA:How does Node.js release-cycle work?03:11
EXTRA:(IIFE) Immediately Invoked Function Expression09:57
EXTRA:Reviewing popular Node.js CLI frameworks08:14
EXTRA:Difference between npm vs npx commands?04:47
EXTRA:Publishing @name scoped npm packages04:22
EXTRA:What are JavaScript template literals04:31
EXTRA:FOSS (Free & Open Source Software) best practices05:31
Yes, yes! I don't want money to get in the way of learning.
TEAMS: I have great discounts available if you're buying for 5+ team members — 50% to 70% off. Feel free to contact me, and I'll set you up with 5/10/…/100+ accounts with reasonable discounts.
PPP: Course too expensive where you live? I am a big believer in purchasing power parity. get in touch with for PPP discounts.
WORKSHOPS: You can also get in touch with me for workshops or conference talks on this topic.
STUDENTS: Email me any sort of schooling proof, i.e., uni/college card, Bootcamp ID, and I'll send you a student discount.
Oh, that. Just buy a package. I recommend the masterclass for the most bang for your buck. Once the payment is received, you get a welcome email with access to my course platform, click the access link, set a password, and stream the course anytime with any device.
The videos are crystal clear, professionally recorded at a whopping 1920x1080 resolution for TrueHD™ 1080p result. I invested over $1000 bucks in my audio setup, no pops, clicks, or weird breathing sounds there. I am actually funny at times. No slides/ppts just the real deal and actual hands-on demos.
I love to teach, I can't help it, I think it's genetic bug. Both my grandparents and parents grandparents are teachers. So, believe you me — I don't assume anything.
I'll take your hand and walk you through each and everything, the pace is just right, you won't find sleep-inducing material here. So, yeah this course is equally suitable for beginners and advanced developers. You can even slow down the pace to 0.75x and make it go faster to 2x. Easy peasy.
My software and courses are helping thousands of developers become experts at what they do — every single day. If for any reason, you're feeling blue and not satisfied then email me within 14 days of your purchase and I'll refund you. Do mention the email address you bought the course with. Money-back guarantee. Seriously, I want you to learn. That's simple. No question about it.
No worries. All of my courses live here → Courses.AhmadAwais.com. So what you need to do is, go to the Forgot your password? link — use the same email address you bought the course with, and you'll get the same welcome access email again — set a new password & login.
That's true, you pay only once, the videos access never expires. When you're learning with me, I don't want you to feel like you're paying for university or Netflix. It's a one-time investment that pays itself over ten folds. No recurring payments. No expiry dates. Truly learn at your own pace without worrying about any subscription cost.
I have set up a USES page to answer such questions. Developers often ask me about what theme I use (hint: Shades of Purple), what are my favorite TV shows, macOS apps, terminal workflow, yadda yadda… all of that is listed on this page →
Sure. For quick questions tweet @MrAhmadAwais. You can also send me your questions via email if that's your jam. What else?!
Follow Awais on Twitter @MrAhmadAwais to ask more questions
I bought this course because I'm extremely interesting in building CLIs and want to deepen my knowledge even more. This course is by far the best value for the amount of content I've seen maybe ever. If you're interested in modern development, this is a solid investment!
Nader DabitSr. Developer Advocate · Amazon
Suuuuper stoked for this I just picked up my copy of NodeCLI course! I can't wait to take my CLI skills to the next level. Keep up the great work Awais.
Alexander RomanoFull Stack Associate App Developer · SKF · Virtually(Creative)
I've been walking through the VSCode.pro power user course by Ahmad Awais and I'm learning a lot! Bought the Node CLI course too, just to brush up. Good stuff.
Kassian Rosner WrenDeveloper Advocate · Cloudflare
Ex Auth0, Bocoup
I had the chance to go over the course I can say it's brilliant! The amount of work and details @MrAhmadAwais has put into the course is astonishing. Also, it's a subject you don't see that often. Give it a go.
Catalin PitSoftware Engineer at TypingDNA
I am learning a lot from the course. And it's approachable even if you're not experienced with Node.js.
Tommy WilliamsSr. Director/Developer · Tempest Tech
Ex Group PM · Microsoft (14yrs)
Awais thanks for Node CLI course! This looks like a great set of resources! I love the intro video, top notch!!
Scott SpenceWeb Developer · Karmarama UK
Wow; the quality of the courses is outstanding. Really great work Awais Awesome work!
Alberto MedinaGoogle Developer Advocate · Ph.D. CS
Just grabbed the new NodeCLI.com course from @MrAhmadAwais @NodeCLI. Really stoked to dig into this!
Tre AmmatunaSoftware Engineer - AWS SageMaker Studio · Ex Microsoft
How could I resist to NodeCLI masterclass made by Awais?! Since today count me in as a new padawan looking for your wisdom.
Pablo PaulJavaScript Team Lead
Damnnnn! Thanks for the course. It contains useful information even installation video where I usually skip are a lot beneficial.
QuirkyJavaScript Developer
Shit, I didn't know that!!!!!!! This tip is life changing to me!!
Zouhir ⚡Edge Microsoft · Google Dev Expert
Today for #devAdvent: the very hardworking @MrAhmadAwais! Awais is a WordPress Core member and TEDx speaker and he recently created a course to help people become VS Code Power Users. If you're using VSCode as your editor, VSCode.pro is a fun/cool resource!
Sarah DrasnerVP of Developer Experience · Netlify
Vuejs Core Team · Ex Microsoft
I can't wait to "Code. Publish. Maintain." CLI Automation DevTools with #JavaScript and Node.js. Picked up the Node CLI course.
Frontend DudeSr. Frontend Developer
Open Source work: "It's very impressive". — Won Automattic Design Award Trophy. The create-guten-block project is an awesome awesome contribution to the community — at AWP Gutenberg series.
Matt MullenwegCo-Founder of WordPress
I also just made the decision to move away from PHPStorm to VSCode. I mean, just one year in license fees pays for the VSCode.pro master package and I'll learn from one of the best Just by going through the UI improvements videos, I can already see how the course will help me become #VSCODEpro
Jan KochMentor at WPMastery
"OMG awesome. How do you find those class names?" — Said in response to a VSCode tip shared by Awais on Twitter.
Dan AbramovCore Dev ReactJS at Facebook
It’s a 5 hour course that teaches you a huge amount of knowledge and after going through it myself, I can state that even as a fairly advanced user of VS Code, Awais taught me some neat tricks that I immediately am integrating into my workflow now.
Benjamin LannonVSCode Extensions Developer in NY
I've been using VSCode for a few months and I'm not a power user at all. Thanks to @MrAhmadAwais for creating an amazing course to help me bridge that gap in a short time. I highly recommend his course if you're looking to level up your VSCode game.
Haris ZulfiqarFounder Avada · Engineer at WDS
If you're looking to expand your VSCode knowledge, I have no doubt this course will be extremely useful. @MrAhmadAwais does great work.
Jeremy EnglertCore Contributor ZURB Foundation
Just grabbed @MrAhmadAwais's #VSCODEpro course masterclass. If you use any code editor, make the move. Support Awais :) he's a top guy — does great work. → VSCcode.pro
Mike StottCore Contributor ZURB Foundation
I love this theme! 🦄 Themes with more unique colors like purple are relatively rare, so it's great to see purple represented here. 😃 It's a fun theme, and it's easy to read! 🙌
Ali SpittelTech Director WomenWhoCode
Kudos to the teacher @MrAhmadAwais for making the #VSCODEpro learning a breeze. I am on the 14th chapter and this is getting as exciting as binge learning. Awais, your hard work is making a student's life easy. You deserve great respect
Raghu VamsiSCRUM Master + Front End Dev
I always find him to be an excellent communicator, highly skilled, considerate, and extremely generous. He's a pleasure to collaborate with and he's produced some very impressive public and FREE #OpenSource work for developers to learn and benefit from. In my book, those are some of the best characteristics to have in a person. Awais is highly recommended.
Matt CromwellPartner/Head Community Impress.org
I've never known someone to create such useful things on a regular basis. Truly impressive sir. I mean it. You just pump stuff out. It's incredible.
Lee PetersonCreative Lead at Rusty Dog Design
I've read over Awais's tutorial a few times and implemented most of it. He's the bee's knees for this kind of stuff. — In ref to the WordPress & Gulp implementation via WPGulp.
Alex ColemanWeb Designer at LeftSideDesign
This is a gorgeous, high contrast theme that stands out without getting in the way. Especially great for doing developer talks and screencasts and maintained by a supremely dedicated expert in all the VSCode pro tips. The documentation itself is a thing of beauty, too. 5 Stars!
Shawn Swyx WangDev Experience @Netlify · Reactjs
Yes, Awais writes great WordPress tutorials and makes great looking themes and websites, but that's not the only reason I endorse Awais. He is a great community member, he is a core contributor to WordPress and always helpful to other WordPress users. Also, he is a really nice guy, which is important.
Josh PollockLead Dev & Founder CalderaWP
Ahmad has written tutorials for me to publish at Tuts+ on a number of occasions, and I always appreciate his level of expertise both in the subject matter…, and in helping to educate others. I would hire Awais again for… training or consultancy in a heartbeat.
Japheth ThomsonDirector of Hosting at Human Made
I know Awais from his contributions to world wide web. His expertise in web & software technologies and his contributions to various open-source projects make it stand out of the crowd. I highly recommend Awais.
Jabran RafiqueTech Lead at Rated People
I'm really impressed with how much you are participating in the WordPress community! It's pretty insane. You're probably one of the most engaged people I have seen, ever. 😀
Stanislav KhromovDev at Schibsted Media Group
It is extremely rare that you come across highly skilled talent like Awais! We worked together on several occasions over the years and his efficiency is beyond superior.
Emil UzelacWordPress Quality Control Specialist
Awais regularly contributes to WordPress core for code and UX improvements. He is one of the most passionate developers I have ever met with an insatiable desire to streamline the workflow of the process of everything he works on. He dives in head first to any new challenges and conquers them with his tenacity and intelligence which make Awais an invaluable asset to any project.
Mike AndreasenWordPress Expert at Codeable
Awais is a very thorough writer and he is extremely knowledgeable of the WordPress industry. He knows exactly what is going on in the WordPress community and his outreach is an addition to any blog. I would recommend him.
Daan TollOwner of WPLift
I switch syntax themes so often, but I haven't felt the need to switch since using 🦄 Shades of Purple for the past 6 months, it's my new default 😃 - keep up the good work man!
Adam HollisterLead Developer at The British & Irish Modern Music Institute
I jumped ship from Cobalt 2 by Wes to 🦄 Shades of Purple theme by Ahmad Awais and I'm not looking back, beautiful shades of purple lighten up my code in a way that no other theme can, great job Awais!
IgnacioaalRails Hacker
At go6.media we always use Shades of Purple for all our PHP/HTML/JS/CSS and other languages. It's so beautiful and easy to read, we also added some slight tweaks to make it even better and we could not be happier that we found it. Thank you!
WayneDevs at Go6 Media
Awais takes his extension seriously and fixed a bug for me overnight. A fantastic theme that is both attractive but more importantly, effective in bring your attention to the import parts of your code.
Mark PorterDev at PorterPeople
I started loving the 🦄 Shades of Purple theme from its name ;) After seeing images of the themes, I saw there was more and to get to know about the 'more', an installation will have to occur which did occur...After installation, I got to find out that the theme is super duper awesome than I thought… Welldone Ahmad Awais
Uche JudeSoftware Developer Andela
Just installed 🦄 Shades of Purple and absolutely love it! Thank you for creating it! I love these colors! I also switched from Cobalt2. And just beginning a new job as a React.js dev, with it :-)
Alexandra SpalatoJavascript & WordPress Developer
I started using SOP during the better release and ever since it has being a perfect choice for me. Love to see my IDE always with the shades of purple splash. It improved my overall workflow. Thanks @AhamadAwais for such work.
Ojo OluwasetemiJavaScript Dev & Teacher
Have been using 🦄 Shades of Purple theme for the last couple of weeks and in love with it. Its fun writing code with those shades of purple <3
Ajit BohraEngineer & Speaker @lubusIN