Skip to content


Subversion checkout URL

You can clone with
Download ZIP
_.m is a port of Underscore.js to Objective-C.
Objective-C C Ruby
branch: master
Failed to load latest commit information.
Tests Upgrades to latest ARC
LICENSE Refactor fro latest Cocoapods Structure
Podfile.lock Refactor fro latest Cocoapods Structure
Rakefile Refactor fro latest Cocoapods Structure


Version Platform

_.m is a port of Underscore.js to Objective-C. It strives to provide the fullest feature set possible in a way that is familiar to JavaScript developers (despite the differences between JavaScript and Objective-C).

To help achieve this vision, _.m uses SubjectiveScript.m to bring JavaScript-like syntax and features into Objective-C, and QUnit.m to port unit tests from JavaScript to Objective-C. You should check them out, too!

Full documentation can be found on the _.m Website

A Quick Taster

You can use familiar Underscore.js functions:

N* result = (N*) _.detect(AI(1, 2, 3), ^B(N* num){ return num.I * 2 == 4; });
equal(result.I, 2, @"found the first '2' and broke the loop");

and you can even use chaining:

A* lyrics = AO(
  @"I'm a lumberjack and I'm okay",
  @"I sleep all night and I work all day",
  @"He's a lumberjack and he's okay",
  @"He sleeps all night and he works all day"
O* counts = (O*) __(lyrics)
  .map(^(NSS* line, ...) { return line.split(@""); })
  .flatten(/* REQUIRED */ false )
  .reduce(^(O* hash, N* l, ... /* KEY, LIST */) {
    N* value = (N*) hash.getOrAdd(l, ^{ return N.I(0); });
    hash.set(l, N.I(value.I+1));
    return hash;
ok(counts.get(@"a").I == 16 && counts.get(@"e").I == 10, @"counted all the letters in the song");


To run the example project; clone the repo, and run pod install from the Project directory first.



_.m is available through CocoaPods, to install it simply add the following line to your Podfile:

pod "_.m"


Kevin Malakoff,


_.m is available under the MIT license. See the LICENSE file for more info.

Something went wrong with that request. Please try again.