Web Development Stack In OSX

It has been almost a month since I ventured out into contracting and took up OSX on a Macbook Pro as my primary operating system. In that time, I’ve been very fortunate to have Joey Beninghove guide me through the torrent of options and possibilities for building web apps in OSX. I’ve thrown in a few of my own tools based on all the things I’m doing and my own personal experience, too. Most of these tools are available to other platforms, too. You don’t have to be a OSX user to take advantage of them, but it certainly seems to be easy if you are.

Here’s what I’ve settled on, so far, creating an awesome development experience – far better than any IDE I’ve ever used.



At the root of it all is the OSX Terminal. I’m using the standard Bash shell at this point, though a number of people have told me I need to try out ZSH. I’ll probably get around to that eventually. For now, though, Terminal handles my needs quite nicely.

I’ve already talked about my terminal prompt. Joey has also talked about setting up window groups to auto-start the various components of a project. It works out well – only requires one menu option to launch all of the core services of a project.




I don’t like installing things manually. Linux has the wonder packages managers, and OSX has a few options, too. The choice of Homebrew vs. Macports wasn’t too hard, really. I’ve used Macports in the past and it was… usable. I went with Homebrew at the suggestion of several people and it’s been quite nice in comparison to Macports. The commands seem to be easier and more friendly to work with.




Installed via Homebrew

brew install git

The only source control I love, at this point. I’m sure that will change once the next new hotness comes down the line… but for today (and the last 2 years), Git is where it’s at for me.


VIM (MacVim)


Installed via Homebrew

brew install macvim

Ah, vim. It’s the most difficult “text editor” I’ve ever used and the most amazing code editor I’ve ever fell in love with. After many months of working with vim and vim-like plugins for other editors, I can’t imagine using anything that doesn’t have vim’s core editing features.

… and the many, many plugins available make automating most tasks that you would want from an IDE, extremely simple. Here’s the plugins that I use:

  • bufexplorer
  • command-t
  • nerdtree
  • twilight (color theme)
  • vim-cucumber
  • viim-endwise
  • vim-fugitive
  • vim-git
  • vim-haml
  • vim-rails
  • vim-rake
  • vim-ruby
  • vim-surround
  • vim-textile

Of course, there are countless others available.


RVM (Ruby Version Manager)


If you do any work with ruby on OSX or Linux, you need to be using RVM. It allows you to easily switch between different versions of ruby, install new versions of ruby, and manage your gems for specific projects with gem sets. The best part is, you can automate rvm usage by putting a .rvm file in a folder. When you cd into that folder in terminal, rvm will read the file and automatically set the correct version of ruby and the gem set that you want to use for that project.


Ruby On Rails


The de-facto standard in MVC web frameworks, these days. Here’s a few of the plugins that Joey and I are currently using with Rails:

  • RSpec
  • Cucumber
  • Capybara
  • HAML
  • SASS
  • Compass
  • FactoryGirl
  • Mongoid
  • JQuery

These, combined with other misc items and Rails itself, make the web development story very nice.




Installed from Homebrew

brew install mongodb

Yes, I’ve jumped into the whole “NoSQL” thing. I’m impressed with MongoDB, so far. From it’s native Javascript interface, to the drivers that are available for the various languages, and the performance and scalability of the system. It’s quite impressive and an option that everyone should have in their back pocket.

The Rails drive that Joey and I are using is Mongoid. It handles most of our needs without any effort. The few things it doesn’t handle are easy to do on our own.




Yes, I am doing more than just Rails work. I’m also working on some WordPress sites – mostly converting existing sites to WordPress, including the creation of themes, etc.

If you’re doing any WordPress work, or any web work that involves Apache, MySql, PHP or Perl, then you need to be using XAMPP. This goes for OSX, Linux, and Windows. XAMPP is, in a nutshell, a complete package for web development in the xAMPP stack (hence, the name). You don’t need to install or configure any of these tools on your machine, with XAMPP. It is an isolated install of them, providing a clean separation between your machine and the web development stack.




This is probably my favorite new tool out of all of these tools. Not only is the technology behind it really really cool – EventMachine and websockets – but what it does is amazing.

This tool monitors your file system and watches for changes to your web app’s files – ruby code, php code, css, html, you name it and LiveReload will monitor it. Just set what you want to watch in a .livereload file in your project folder. When any changes to the watched files are found, your browser (Safari or Chrome) will automatically reload the page that you are looking at!

What this means, in practice, is that you no longer have to do the save-switch-refresh dance when you are building html and css – or writing code in your controllers or WordPress themes! You can have your browser window set on the page you are editing / styling, enable livereload for the page, and then switch over to your editor of choice. When you make some changes and save the file(s), your browser will refresh the page for you and you will see the changes immediately! No more “save”, “switch to the browser”, “hit refresh”, “switch back to the code editor”. Just save and see your changes.


More Than Just This List

Of course there are fare more tools and add-ons that I am using, than this list. I’ve only touched on the big name tools that give me the most bang for the buck. Beyond this, the tools get much more specialized and specific to the app that I’m building at any given point in time.

About Derick Bailey

Derick Bailey is an entrepreneur, problem solver (and creator? :P ), software developer, screecaster, writer, blogger, speaker and technology leader in central Texas (north of Austin). He runs SignalLeaf.com - the amazingly awesome podcast audio hosting service that everyone should be using, and WatchMeCode.net where he throws down the JavaScript gauntlets to get you up to speed. He has been a professional software developer since the late 90's, and has been writing code since the late 80's. Find me on twitter: @derickbailey, @mutedsolutions, @backbonejsclass Find me on the web: SignalLeaf, WatchMeCode, Kendo UI blog, MarionetteJS, My Github profile, On Google+.
This entry was posted in Behavior Driven Development, Command Line, Git, Productivity, RSpec, Ruby, Source Control, Test Automation, Testing, Tools and Vendors, Unit Testing, Vim. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • Thank you.

    The timing of this has been excellent as I have recently made a change to Mac as one of my development platforms, and preferred for Ruby.

  • Snap!


    VIM: how the hell did you get the hang of that? I’ve tried twice in (kind of) and it’s still a big mystery. TextMate still the fave, although tried RubyMine recently and it’s pretty good.

    Thanks for the hint on LiveReload, will give that a go.


  • Steve


    I’m the same way with VIM. The problem is, I think you need to just completely throw yourself into it, which (for me anyways) is difficult because I spend 9 hrs a day in Visual Studio for work.

    Textmate is acting as my gateway drug for now. :)

  • I am leaping out of .net and learning linux and am curious why one would choose to develop on OSX instead of just some free Linux distro? What factors drove you to OSX instead of another alternative?

  • Tobin / Steve,

    I learned VIM inside of Visual Studio, using the ViEmu plugin. it gave me a comfortable place to start. whether you are starting with viemu or going straight into vim, though,

    the best way to learn is to start out in insert mode all the time. this basically turns vim into a standard notepad-like editor where you can just move around and write code. from there, watch the various tutorials online – i really like the ones by derek wyatt. he does a great job and makes it very entertaining.

    learn a new command every day, and just play with and practice that command until you remember what it does… this is the same way i learned resharper. it’ll be slow going for a while, but eventually, you’ll start to pick it up and see some benefit.

    i had to force myself to learn for about a month before i really saw any benefit. now i love it and won’t work without it. i have a textmate license, but i never open it. vim is so much better. :)

    @mike – options, really. i like the OSX ui and capabilities from a GUI perspective. the hardware is very stable and the operating system is very stable. … but the same can be said of linux if you guy good hardware. so for me, it came down to options. by using a macbook pro and osx, with VMWare Fusion (or another virtualizing system), i can run OSX, Windows, or Linux. it gives me the ability to take advantage of all the operating systems out there… and i do take advantage of them all. with linux – you can’t really run or develop for OSX. but if you don’t care about that, then by all means go with linux. you won’t be dissapointed. :)

  • Steve


    Yeah, I know I just need to do it, I’ll make it one of my New Years Resolutions. :)


    This is coming from a someone who used to really dislike Macs, but once you start developing on a MacBookPro, you hate going a back to PCs. I’ve drank the whole glass of Coolaid and even grabbed an iPad and my wife is getting me Apple TV for Xmas. The hardware is solid, the UX is just so refined, and due to to the fact that OSX is built on Unix, it’s ridiculously powerful. I’ll never by a PC ever again.

  • Steve

    Err…”buy a PC again” that is…wtb post editing ability