Back in January of 2015, I posted the longest continuous blob of text I had written since college, a review titled 9 months with Codekit 2: A review, which was a meditation on task management in the world of front end development. The review was popular enough to be ripped off by a few hack writers on other blogs like yourwebsitefirst.com which managed to use a verbatim copy of my review's final points. As the saying goes: Imitation is the highest form of flattery. It seems fitting that this now is officially the longest single article I've written. I'd like this review to be as accessible to novice coders and beginners as possible but it will inevitably be more technical as the differences between CodeKit 2 and 3 requires such vernacular, vocabulary, terminology, and industry acronyms. Readers may want to revisit my previous review for context as I spend more time explaining the usefulness of a task manager and Sass.
Also, this review may sound like I'm focusing on the negative (isn't that the way of 2016?), this is because CodeKit 3 is a very mature, very stable product and you probably should buy it if you like CodeKit 2 or fancy a GUI for task managing. (How's that for a review? You can essentially skip the rest of this review if you want.)
As with my previous review, I'm starting with a mini-glossary of terms and how they relate to the review below.
Mini Glossary of Terms
Command Line Interface(CLI) - A GUIless (graphical user interface) way to interact with a computer. Commands are entered and run via the terminal on a computer, for most users this is done via a BASH terminal on a Linux/Unix variant like macOS (Formerly OS X) or Ubuntu (Linux). For web development, many utilities/libraries (like Node.js) require some basic terminal knowledge to use.
Preprocessor - a utility that processes and converts one type of data into another type of data that another program can use. Preprocessors are not compilers, but for the sanity of this article, I will refer to the action of "compiling". This is often used as a blanket term for programming languages that require a preprocessor to interpret the code into a browser readable language. Sass and Less are often referred to as preprocessor languages.
Task Manager / Task Runner - a program that once configured can automatically performs common tasks. Task managers can “listen” for events and automatically run a series of instructions based on event parameters. For web development, this usually means when a file is saved or project structure is altered or a specific command is entered into the CLI, it can trigger a preprocessor to compile code, followed by reloading a page and chained together with other common tasks. Popular task managers include:
- CodeKit - A Mac only utility with a graphical user interface
- Prepros - A cross platform utility with a graphical user interface
- Gulp.js - a command line utility built on Node.JS + Node Package Manager (NPM) built on Node Streams (asynchronous data flows) via 'pipelines'
- Grunt.js - A command line utility built on node.js + Node Package Manager (NPM). Predates Gulp.
Gulp and Grunt are open source command line utilities that allow you to execute custom code or functions in other utilities to compile / minify / uglify / concatenate, pre-compiler languages such as Sass and TypeScript automatically each time you hit save. This is hardly all they can do. Both can be configured to use popular plugins like BrowserSync, a server wrapper that acts as a middleman to live-inject CSS changes and reload when various files are changed like HTML/PHP/Python/JS/JSON files and synch mouse clicks/scrolls across multiple browsers. They can be configured to do auto vendor prefixing for CSS, remove unused CSS, optimize CSS to shorthand, image optimization, image resizing, svg minification, svg merging, create custom builds of libraries like Modernizr, Linting, use Unit Test libs, create basic style guides, generate CSS icons, move files/folders, rename files and folders, zip files/folders, search and replace strings, and even integrate with PageSpeed analytics, create screenshots and monitor file sizes. These events can be chained together.
That's quite a list of things that can be automated and sadly both Gulp and Grunt aren't the most forgiving utilities for those new to web development and even can be cumbersome or annoying to set up for developers who are in a turn-and-burn environment where project timelines do not account much time for setup. Most seasoned devs using Gulp/Grunt (self included) have a template that they use to easily configure with several favorite tasks, and call it a day.
DOM (Document Object Model) - This is your life. Think of it as the rendered version of your HTML/CSS/JS. A good cliff notes introduction to the DOM is the CSStricks article, "What is the DOM?". Web browsers have the ability to expose the DOM structure via developer tools such as "Inspect Element".
Package Manager - a package manager automates the process of installing, upgrading, configuring, and removing software, and the respective dependencies. This term often refers to package managers used by operating systems but for the sake of this review, I will be only using this term for web centric package managers. Node Package Manager and Bower are the most popular package managers for front end developers. When a project requires installing libraries in order to run, these are often referred to as "dependencies". However, Bower and Node are not dependency managers. node.js is more than a package manager.
This has to be one of the biggest sanity checks for front end developers in the past 5 to 6 years.
Auto-prefixing - Browsers often add features before they're an official CSS spec. The supported-but-not-official specification features would require a vendor prefix like -webkit-font-smoothing or for Firefox, -moz-osx-font-smoothing. Keeping track of these is a pain. Depending on your support configuration, writing a simple gradient such as:
background: linear-gradient(to bottom, rgba(30,87,153,1) 0%,rgba(125,185,232,1) 100%)
Will also generate all the browser prefixed code such as:
background: -moz-linear-gradient(top, rgba(30,87,153,1) 0%, rgba(125,185,232,1) 100%);
background: -webkit-linear-gradient(top, rgba(30,87,153,1) 0%,rgba(125,185,232,1) 100%);
background: linear-gradient(to bottom, rgba(30,87,153,1) 0%,rgba(125,185,232,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 )
This will ensure your code will work on older browsers that require prefixes and prepare for the day when prefixes aren't needed. This has to be one of the biggest sanity checks for front end developers in the past 5 to 6 years. Also, prefixing may become a thing of the past one day, as webkit announced that it was doing away with prefixes.
Sass - Syntactically Awesome Style Sheets. If you are still writing vanilla CSS you really should stop and start using Sass. It's more or less assumed today that developers are using Sass (or at least LESS).
This has to be one of the biggest sanity checks for front end developers in the past 5 to 6 years. If you'd like a quick explanation of why you should be using Sass, please visit my original CodeKit 2 review or visit an article such as Scotch.io - Getting started with Sass..
This has to be one of the biggest sanity checks for front end developers in the past 5 to 6 years.
Bless - A lesser-known bug in Internet Explorer which causes CSS to be completely ignored after the limit of selectors allowed in a single CSS file is reached. Bless provides a simple solution: parse the CSS file into multiple segments.See blesscss.com for more details.
BrowserSync - an open source application that allows for synchronized browser testing, and the ability to manipulate the page in realtime via code injection. The most common use is pairing with Gulp or Grunt and used to trigger browser reloads on code changes or live CSS code injections after a task manager detects the CSS file has been altered. This allows the browser to seamlessly change the layouts in near realtime or trigger page refreshes on HTML/PHP/Python/JS/etc changes when properly configured. It even allows the user to pair page interactions to multiple devices. If a user clicks on a menu in one browser, the same menu will be opened in all other browsers that are using the BrowserSync web server. It's pretty magical to click a link on an iPhone and see both the desktop browsers and the iPhone load the requested page. If that weren't enough, BrowserSync also features remote device inspect element by using the JS library Wienre. Wienre gets several mentions on this page because it can be a massive time saver for extreme edge case browsers that do not have the ability to inspect element. For more info, visit browsersync.io. There are few utilities that make my life easier on a daily basis than BrowserSync + Sass.
This has to be one of the biggest sanity checks for front end developers in the past 5 to 6 years.... (you get the idea)
About My Workflow
What is CodeKit?
Simply put: Everything that CodeKit does, can be performed by Grunt or Gulp. What you're paying for is a refined GUI for extremely quick and nimble setup and a much lower learning curve. Even as a seasoned dev, I'll admit that I can get rolling with CodeKit with in less time than with my grunt or gulp starter templates. CodeKit's primary value is that it lowers the barrier to coding, and cuts out some of the set up. Drag and drop your project in, then create a few paths for where compiled files go and which get concatenated and you're back to your IDE. CodeKit isn't aiming to replace all complex tasks for edge cases that Gulp and Grunt can do but rather all the common ones. It's designed to be the daily warrior, akin to my favored task setup in my grunt and gulp template files.
For less seasoned devs, CodeKit is indispensable. While I'd argue eventually it's a good idea to familiarize yourself with a CLI task manager, the front end developer pool is a deep one to jump into head first. There's decades of tacit skills, like IE or Safari hacks (browser testing / device compatibility), learning how to vertically align things with CSS (this is still a problem even though CSS's W3C Recommendation dates back to December 1996), how to leverage ES6, learning the ins-and-outs of a syntactic sugar preprocessor, what new hot JS framework is bringing all the devs to HackerNews, and so on. The state of front end development is a precarious one so anything that frees mental space for concentrating on core tasks is welcomed. This is where CodeKit truly shines.
First and foremost, CodeKit got a facelift... if you can call it that. It's gone hyper minimalist to the point of abstraction or undesign. I actually found Codekit 2's "look" pleasing even if the interface was occasionally bumpy. I can't say I'm a fan of the new GUI. I also was not a fan of Yosemite's design or iOS 7's design. Both took several iterations to strike a balance between minimalism and design and I'm hoping perhaps CodeKit 3 will follow this trend of slash and burn and then replanting. Almost all text has been removed such as "Server", "Preview", "Assets". Even worse, a mouse hover doesn't bring up any tooltip explanation. Instead you're left with "Click and hope for the best". When I first was writing this review, I initially missed CodeKit 3's package manager leading me to believe it had been removed. It took accidentally clicking on it to realize it was still there. It's not a great start for a utility that's value is explicitly that it's easier to use than a CLI. The redesign is not a total loss: there's a nice project overview that also includes a build project button so builds can be triggered manually.
That said, any caveats with CodeKit 3 are minor seeing as the primary function of a task manager is to operate silently in the background until something triggers it to take action (usually hitting save on a file). The real changes are under-the-hood. The full list is on CodeKit's website, but I'll highlight what I think are the most important new features. Don't worry if you you're unsure what the differences are as as I'll break it down later in the review.
- Build System: Trigger builds from UI. Project migration
- Image Optimization: SVG optimization, gif optimization. Better optimization engine for PNG/JPG.
- Server: Simple SSL Support
- Hooks: Matching support with RegEx, per file triggering, hook error logging
- Custom Language Support: Add Your own languages and combine with hooks
- Bower: Creates/updates bower.json, version support for components, rename/relocate bower folders
- CSS: Bless, autoprefixing, Minification, Source mapping (for shits and giggles I suppose) for regular CSS files
- Other: Bitters framework support, Pug: Jade's successor with backwards compatibility for Jade
My Wishlist from late 2014
For fun, let's compare CodeKit 3 to my late 2013 wishlist of features found in my CodeKit 2 review.
- Optional Remote Inspect Element (FireBug’s JS beta or otherwise would do nicely).
Remote server tuning (I get JS errors in IE10 and IE11) SVG minification
- Ability read Grunt or Gulp tasks and pair them to CodeKit’s functionality (A man can dream…)
Ability read Bower configurations and automatically install missing libraries
So of all the features other than my pie-in-sky dream of Grunt/Gulp pairing, all but one of my requests were addressed. Did Bryan Jones read them? Probably not, these were pretty reasonable and probably obvious feature requests. The best it can affirm is that I am a front end developer who has enough technical prowess to know there are reasonable features that would make my life easier. I stress reasonable because I could wish for a "make website better button" but its insanely non-specific.
Overall I'm pretty happy that all but one target was hit. I'm still surprised that CodeKit doesn't have a remote element inspection mostly because it doesn't seem to use browsersync. BrowserSync has the ability to use Weinre, and track user interactions to pair across multiple browsers. As near as I can tell is its a custom WebSockets configged server. Perhaps one day, CodeKit 3 may switch to BrowserSync.
CodeKit's primary function is compiling code. If you've used CodeKit 2, then configuring CodeKit 3 is pretty much the same process. CodeKit will read imports in JS/SCSS/LESS etc but the initial pathing is set up via the UI. CodeKit 2 never was perfect about making sense of project pathing and CodeKit 3 makes no more attempts to improve it. It'd be helpful to see an overview of sorts to know what files are outputting to where at a glance. That said, its no less esoteric than reading JSON config files. All linked files can be viewed from a master file but without any pathing info nor can listed files be right clicked to "show in finder" or "open in editor".
All the front end coding greatest hits are here: concatenation, minification, source map, auto-prefixing and blessing..
Compiling is as fast as Gulp or Grunt, as the compilers in CodeKit are built around the same open source software. Without a technical way to benchmark, the best I can say is it feels as zippy as I'm accustomed to with Gulp. Compiling Sass can differ widely based on any number of factors like the obvious complexity of a project, how bogged down your computer is, and so on. What I can say with certainty is CodeKit idles well. Grunt taxes the CPU even when just watching files. Gulp seems to be much better at this and (to me personally) marks the largest difference between gulp vs grunt (despite all the hype around Gulp's asynchronous abilities). CodeKit seems right in line with Gulp.
Builds are triggered by hitting save on a watched file or via hooks, and hooks can be set to trigger other actions. If you're adventurous, you could configure CodeKit on a save to copy files to an FTP.
CodeKit also comes preconfigured to refresh the page on HTML/PHP/Python/JS/Pug etc saves and to inject CSS without page reloads. If you're still in the old world of manually page refreshing, you'll wonder how you lived before code injection and auto-page refreshes.
CodeKit can also sort JSON content to be organized, and this can be triggered on file changes so you can always have alphabetized JSON files.
Lastly, like any good code compiler, the error log is the main event. More than likely, almost all your time in CodeKit will be spent in the error log. Its presented in a single pane, cleanly formatted. Successful builds are marked in green dots and bad in red. It's simple and effective, and now has the ability to consolidate external compilers to the error log, which was to some ire of me before.
If you've used CodeKit 2's server, it now has SSL provisioning and event syncing. I never knew or noticed the SSL issue since all my development is done locally but I imagine for some this is a crucial fix. Calling CodeKit's internal server, a "server" may be misleading. Akin to BrowserSync, it's a simple wrapper that can be mapped to any domain or directory, and injects the necessary JS to trigger page refreshes and CSS injection.
CodeKit now features event syncing for any page clicks, forms and scrolls. This is incredibly useful for testing multiple browesrs and devices simultaneously. This is a big addition.
As mentioned previously, Wienre allows for remote inspect element. This may not seem like a killer feature as Android and iOS offer remote device inspect element via using a desktop browser to run inspect element on physical device connected via USB or simulators. Occasionally as a Front End Developer, you may be asked to test on an esoteric browser like Amazon's Kindle's Silk which doesn't have Chrome or Safari device inspection. Wienre is the answer.
CodeKit's Servers works well for a wide variety of projects and even integrates with MAMP.
Saving an image from most image programs is not the most data efficient use of a file format. Often they bundle in meta data, and do not use obsession-tuning that makes the most use of compression, optimization techniques. For JPEGs and PNGs, there's a set of algorithms that optimize images and can shave significant amounts of data off them without affecting the image quality. Since these require zero input from the user other than what files to target, its a painless way to shave significant amounts of data off file sizes.
CodeKit's image optimization got a much needed revamp. Prior, image optimization worked but had some serious caveats. Edit: April 10, 2017. CodeKit now folds in ImageOptim's incredibly powerful image optimization algorithms. It's technically a lossy encoder but virtually unnoticeable (I haven't ever noticed it). While ImageOptim is free, this means one less thing you need to use. CodeKit now is the best of the best when it comes to auto-optimization. Notably, this isn't the same as treating a PNG image manually using ImageAlpha. Codekit 3 launched with a much revamped image optimization, prior it did not have any SVG minification support. Prior to the addition of ImageOptim, In my tests of a 4.1 MB PNG, both ImageOptim and CodeKit 3 produced a 2.6 MB PNG file. CodeKit 2 produced a 3.1 MB image. Results will vary wildly based on the individual image.. Also, Codekit 3 can be tuned to also watch files to recompress on a file change unlike CodeKit 2.
I'm quite fond of this and CodeKit provides the best quick UI for SVG optimization I know of. This is a huge win for CodeKit.
About the only thing CodeKit doesn't do is export inline SVGs or crunch all SVGs into a single SVG file, which are edge case optimizations. I'm guessing for the truly ambitious this is obtainable but this is pure speculation as I haven't had time to mess with hooks.
In future releases I'd like to see CodeKit go beyond simple optimization, specifically creating sets of resized images based on rules for responsive images. The would take some careful consideration to deliver a simple solution but I'd love to easily create image sets from an original source image. Perhaps that's a sister utility waiting to happen for CodeKit? I'm not sure...
Codekit 2 made an admirable attempt to bring package management to CodeKit although I always found it a little confusing. CodeKit 3 is still no different and the interface isn't entirely great. Its hyper minimal and allows for a set of favorite components, and the ability to search for new ones. Unfortunately, the search bar is hidden and takes poking around to find.
CodeKit offers easy installs for a few well used add-ons (Bourbon, Bourbon Neat, Bitters, Compass, Zurb Foundation, Susy, Nib, and Web Starter Kit) via the project preferences pane. CodeKit also offers Bower support and can read bower.json files to install dependencies. I'm unsure if CodeKit can use .bowerrc configs and I plan to test this when I have time.
CodeKit also offers the ability to create your own framework of commonly used files as before. I can't say I personally like CodeKit's package manager as I found it easier to simply search and find the frameworks or plugins I was looking for via google and installing them (via bower or node or manually) than the guess and check method of CodeKit . I do like the Bower config file support as even junior devs can understand the bower.json after a little bit of reading.
CodeKit doesn't offer package.json support for NPM (node package manager). Deal breaker? Not at all, but it is a nice-to-have feature to make CodeKit all encompassing.
This section is TBA.
In the interest of time, I may revisit this as it is important but also could double the amount of time it'd take for me to write this review. I updated my CodeKit 2 review over 7 times over the course of 2 years and plan to do the same with this review. CodeKit 3 hooks look MUCH improved to the point of being much more useful.
The CLI task managers vs CodeKit 3
Gulp as exciting as it gets
Both Grunt and Gulp are immensely powerful. As I was working on transitioning a Cordova project to Gulp after using CodeKit 3, I was debating if I wanted to try out a plugin to auto generate a style guide and to delete unused CSS. The last project, I created a customized Modernizr build based on scanning my CSS file for modernizr classes using a grunt task. Grunt and Gulp have amazing support and it shows but the setup is intensely unfriendly. It'd be easy for me to go "greybeard" and detest kids and their GUIs but they have their place.
How much is a clean and easy to use GUI worth? This is the most prescient existential question to CodeKit. It'd be easy to say not much, or launch into a tirade about the superiority of Gulp but this for years was at the very crux of Apple's OS X as it was Unix but dressed up and cleaned for day-to-day use. This isn't the best analogy and we have better analogues to CodeKit 3.
CodeKit does for task management as what Tower does for Git; provide a GUI to CLI utilities. Even as a world weary web developer, I still live by Tower. Tower can't do all things that Git does but it does enough and makes it digestible enough where I rarely use Git via the command line. The only time I can really recall CLI Git in the past year was for git resets and nuking a branch. CodeKit can do the same albeit with a few more limitations. (Tower recreates the functionality Git whereas CodeKit recreates plethora of utilities)
CodeKit does something that I find valuable: it gets me to writing code more quickly. My personal portfolio always has been managed by CodeKit, and even when I start projects and need to rapidly code something up, I tend to lean on CodeKit. It reminds me of my early days as a digital musician. I learned to use Reason 1.0 in the year 2000. Reason was novel since it was immensely easy to spin up and start making music with minimal delay. Around 2004, I outgrew it and switched to Cubase and but I still pine for the simplicity of Reason in which project setup was a lot faster and took a lot less overhead. It wasn't as powerful but it got my idea out much more quickly. It's also why I still use Apple Motion despite Adobe After Effects being superior. That's the niché of CodeKit to me today.
Depending on your job needs or workflow, CodeKit may be all you ever need, or you may quickly outgrow it (and anything in between). This is a question I cannot answer for you but I can say that CodeKit can be useful even to am accomplished developer.
CodeKit 3 vs Prepros 6
Prepros (to my knowledge) is still the only competitor to CodeKit. Prepros offers a very similar feature set.
- Live Reload
- Minification, Uglification, Concatenation
- Browser Sync (Scroll / click / form sync)
- Image Optimization for PNG / JPEG
- Remote inspect element
- CSS Injection & Live Reload
- Minification, Uglification, Concatenation, Bless
- Browser Sync (Scroll / click / form sync)
- Image Optimization for PNG / JPEG / GIF / SVG + Keep original files
- Hooks to add support for other languages and execute terminal commands
- Package Manager via Bower & GUI
- Linting for JS/SCSS/Stylus/CoffeeScript
- Enforce Coding Styles
- Quick installs of popular frameworks
Absolutely the biggest difference between Prepros and CodeKit is, CodeKit is macOS / OS X only. Prepros also offers Wienre support which is nice, and a built in FTP. For most people in production environments the later isn't really useful, as you should be using staging servers managed by a utility like Jenkins but that's another story.
I wrote a review on Prepros 5 that's still pretty relevant to Prepros 6 that's worth reading as I break down the superiority of CodeKit in detail. If you're a Windows user, you can effectively stop reading this review as CodeKit is OS X only or consider getting a Mac to run CodeKit. This isn't a slight against Windows as Microsoft has made some serious sweeping changes to allow Bash in Windows, which means no longer the dissonance of trying to use frameworks like node.js on Windows which required a special Node CLI. You'll be hard pressed to find Windows front end developers but I assure you, they're out there and perhaps reading this review.
OS X users (excuse me, macOS) users have the agency of choice between Prepros vs CodeKit but Codekit is the clear winner. Codekit's ability to use external compilers saved the day on a few projects in the past for me. When I was working on a project that required a newer version of LibSass than CodeKit offered, I simply changed the engine to use the latest compiler instead of waiting for an update. Prepros does not have this ability. Also, Prepros doesn't have the nice framework library bundling, nor SVG optimization, ability to create hooks, create custom frameworks, and is a little more CPU heavy.
Looking forward: Where do we go from here?
I made some pretty bold feature requests back in 2014 and to my surprise, most were answered. So what would I like CodeKit to do in the future? This is tricky as some useful features like SVG-to-WebFonts have a limited shelf life, as webfonts are bad for accessibility.
- Single click install dependencies for new projects (including node)
- BrowserSync to replace the current server or something nearing its functionality
- HTML minification
- Responsive image processing (auto generate different image sizes based on parameters)
- Pie in the sky: Visual Regression Testing or jsDoc (auto documentation generation), TMI (too many images) reporting and/or PSI (Page speed analytics)
Are these the best features? Perhaps, perhaps not. I'm not as confident with my asks as I was in late 2014. This may be a case of the Aristotlian principle: "The more you know, the more you know you don't know" but I think the easy-fixes are mostly done. Perhaps I'll have some better insight later in 2017. We're starting to get to more avant-garde features as Front End Development itself becomes more avant-garde.
I'll probably have some more insight as I start my venture into the world of React in 2017.
After jumping into React first Gulp then Webpack, I'm not sure where CodeKit 3 can exist in a framework centric flow. Webpack's killer feature is the ability inject code while maintaining states. For those who aren't using React, this means hitting save will keep all the components in the same state (forms, views, whatever) while the browser refreshes with the latest JS. While I haven't tried it, I assume CodeKit's babel support works with ES6 imports and JSX markup, thus could conceivably compile React and mimick a Gulp React workflow. Gulp and React isn't the smoothest, as every save require a full recompile and thus zeros out any states on screen that only stored in active memory. I quickly abandoned Gulp for Webpack and haven't looked back. I'll be honest and admit I don't really understand Webpack and had a hell of a time getting it configged so if anyone brings sanity to webpack, I'd probably throw money at them. React/Angular probably are going to warrant specific tooling that CodeKit just cannot support for the foreseeable future. CodeKit may evolve as these frameworks mature, to support them better.
- CodeKit 3 is a logical step forward and almost all the things I wanted from CodeKit 2 are in 3.
- Backwards compatible
- Improved server now offers event syncing
- More languages and more JS centric features
- Much improved image optimization
- External processors and hooks
- ImageOptim's super awesome PNG compression!
- More build configuration
- Less resource intensive than Grunt when idling
- Seems a bit faster
- CodeKit 2 users get CodeKit 3 (sans new features) for free
- New GUI obfuscates features in nebulous icons and suffers for it
- If you're on a CLI task manager, not a huge compelling reason to use CodeKit
- Must make current project active (Only watches one project at time)
- Even after weeks of use, still not a fan of the UI update
CodeKit is the beginning and end as far as GUI task managers go. It's quick. It's powerful. It lowers the learning curve for preprocessor languages like sass, typescript and even babel (a little). It's $35 for a first time buyer and offers upgrade pricing. CodeKit 2 users can continue using CodeKit 3 but only with the CodeKit 2 feature set. It's a nice gesture for long term support and users can upgrade at any time. Currently the paid upgrade pattern for CodeKit is once every two years, so you can expect around 2 years of support for $35 and then upgrade pricing. CodeKit 2 had a lot of bug fixes and mild improvements over time. At launch CodeKit 2 didn't have Bless or autoprefixing, that came in version 2.1.9 for compass projects or sourcemaps for stylus until 2.1.4. There's probably more features that are bound to hit CodeKit 3 that aren't on this list.
If you outgrow CodeKit, chances are you'll still consider it money well spent.
3.0.1 to 3.1
Price: $35 first time purchase.
Fun fact: After writing 11,000 words in three reviews between CodeKit 2, Prepros 5 and Codekit 4, I've written 42 pages single spaced or 84 pages now on GUI task managers for Front end development. This review isn't finalized but I wanted to get this up ASAP, spelling errors, bad grammar and all.
12/21/16 update: Minor editing / grammar fixing, a lot more reference links, trimmed down intro.
12/23/16 update: Minor editing still, (a little list rambling, a little more content), better Prepros vs Codekit breakdown, error correction about event syncing
4/10/17 update: Added information about CodeKit's addition of ImageOptim and thoughts on frameworks + CodeKit.