What is Nimbus?
Nimbus is an iOS framework that grows only as fast as its documentation. Its roots stem from the Three20 framework and much of its code is forked from Three20, though with meticulous care and thought.
In short, you'll find a number of features within Nimbus to accelerate your development of iOS applications. Nimbus will be evolving quickly over time so it is likely in your best interest to simply browse the documentation by checking out Nimbus' Modules.
- Learn how to add Nimbus to your project.
- Check out the README for the introduction sample project.
- Follow Nimbus through its @link Version-History Version History@endlink.
Three20 was garbage though, why would I use Nimbus?
Three20 most certainly has issues. Among them:
- Relatively zero documentation.
- Spaghetti dependencies.
- Suffering from a "kitchen sink" complex.
- Complex build structure.
- Enormous number of difficult-to-solve bugs.
- Low test coverage.
But for its weaknesses, Three20 does provide a good deal of value through its feature set. It is used in over 100 apps in the app store by companies such as Facebook, LinkedIn, Posterous, Meetup, and SCVNGR.
The goal of Nimbus is to one day provide this same value through its feature set. Along the way, infinitely more value will be provided in better documentation, better test coverage, and a smaller learning curve.
What are the plans for Nimbus?
I'm a strong believer in shipping early, shipping fast, and shipping often. Any other way of being genuinely frustrates me so I hope to apply this to Nimbus.
I plan to tackle Nimbus by first building a strong foundation in the Nimbus Core. From there I will branch out and tackle migrating a variety of features over from Three20. Some features on my immediate horizon in increasing order of difficulty:
- The Launcher (done!)
- Network images (done!)
For each day that I work on Nimbus I hope to have a pseudo-stable build that I can push out and summarize the changes since the previous day's build. For this reason I will likely use a MAJOR.MINOR.SCORE version model.
Major version numbers will be reserved for major milestones in the project (completing a large set of features, for example).
Minor version numbers will be reserved for minor milestones in the project (completing a small set of features, for example).
Score version numbers will be reserved for stable cuts of Nimbus after individual tasks are completed (fully implementing the Launcher, for example).
I'd like to treat the score version number like points from a video game. Finishing an individual task will increase the score for a particular major release, so version 1.130.2 indicates "the first major release of Nimbus, 130 tasks tackled, and 2 incremental builds for bugfixes and daily progress since the 130th task was finished". Perhaps there may be some merit in allowing people who complete tasks to earn these points in some sense as well to encourage some friendly competition.
Who's working on Nimbus?
Nimbus was started by me (Jeff Verkoeyen) in June 2011. My background includes over 10 years of software development and experience at Google and Facebook designing software and building user interfaces. I took over the Three20 project in 2009 after its original creator, Joe Hewitt, moved on to other projects. Over the proceeding 6 months much time was invested in splitting the framework apart and attempting to clobber its spaghetti dependencies while improving the project's documentation.
In early May of 2010, my life was completely shaken up: my mother suddenly passed away at age 42 due to a pulmonary embolism. This is relevant because for the following year I checked out of life and, as a direct result, little progress was made with Three20. Over the last year I've found that shedding baggage is not only an emotionally satisfying process, but also a necessary one. So I am shedding Three20's baggage and out of the remaining bits building Nimbus. I learned a lot about working with an open source project and community and sincerely hope to carry much of this knowledge over to Nimbus.
So what about everyone who's still using Three20?
My goal with Nimbus is to eventually provide a feature set that contains Three20's. I sincerely hope to make it easy for anyone using Three20 to transition to Nimbus. In the meantime, Three20 will likely stay in a bug-fixing state. The library is stable as it stands so I have every bit of confidence in the community to tackle any bugs as necessary.