GRMustache is a flexible and production-ready implementation of Mustache templates for MacOS Cocoa and iOS.
GRMustache targets iOS down to version 4.3, MacOS down to 10.6 Snow Leopard (with or without garbage collection), and only depends on the Foundation framework.
February 14, 2013: GRMustache 6.4.0 is out. Release notes
Don't miss a single release: follow @GRMustache on Twitter.
You have three options, from the simplest to the hairiest:
#import "GRMustache.h"
// Renders "Hello Arthur!"
NSString *rendering = [GRMustacheTemplate renderObject:[Person personWithName:@"Arthur"]
fromString:@"Hello {{name}}!"
error:NULL];
// Renders a document from the `Profile.mustache` resource
NSString *rendering = [GRMustacheTemplate renderObject:[Person personWithName:@"Arthur"]
fromResource:@"Profile"
bundle:nil
error:NULL];
GRMustachio by Jonathan Mitchell is "A super simple, interactive GRMustache based application". It can help you design and test your templates.
Introduction:
- Introduction: a tour of the library features, and most common use cases.
Basics:
- Templates: how to load templates.
- Partials: decompose your templates into components named "partials".
- Templates Repositories: manage groups of templates.
- Runtime: how GRMustache renders your data.
Services:
- Configuration
- HTML vs. Text templates
- Standard Library: built-in candy, for your convenience.
- NSFormatter, NSNumberFormatter, NSDateFormatter, etc. Use them.
Hooks:
- Filters:
{{ uppercase(name) }}
et al. - Tag Delegates: observe and alter template rendering.
- Rendering Objects: "Mustache lambdas", and more.
- Protected Contexts: protect some keys so that they always evaluate to the same value.
Mustache, and beyond:
- Compatibility: compatibility with other Mustache implementations, in details.
- Feeding The Templates: an overview of various techniques to feed templates.
- Collection Indexes: how to render array indexes, render sections for the first or the last element, for odd or even elements, etc.
- Reference: the GRMustache reference, automatically generated from inline documentation, for fun and profit, by appledoc.
- Forking: the forking guide tells you everything about GRMustache organization.
-
Q: I get "unrecognized selector sent to instance" errors.
A: Check that you have added the
-ObjC
option in the "Other Linker Flags" of your target (how to). -
Q: Is it possible to render array indexes? Customize first and last elements? Distinguish odd and even items, play fizzbuzz?
-
Q: Is it possible to format numbers and dates?
A: Yes. Use NSNumberFormatter and NSDateFormatter.
-
Q: Is it possible to embed partial templates whose name is only known at runtime?
A: Yes
-
Q: Does GRMustache provide any layout or template inheritance facility?
A: Yes
-
Q: Is it possible to localize templates?
A: Yes
-
Q: Is it possible to render a default value for missing keys?
A: Yes
-
Q: Is it possible to disable HTML escaping?
A: Yes
-
Q: What is this NSUndefinedKeyException stuff?
A: When GRMustache has to try several objects until it finds the one that provides a
{{key}}
, several NSUndefinedKeyException are raised and caught. Let us double guess you: it's likely that you wish Xcode would stop breaking on those exceptions. This use case is covered in the Runtime Guide. -
Q: Why does GRMustache need JRSwizzle?
A: GRMustache does not need it, and this swizzling is a mere convenience that will not ship in your released binary:
You may be happy having GRMustache swizzle
valueForUndefinedKey:
in the NSObject class when you invoke[GRMustache preventNSUndefinedKeyExceptionAttack]
: it allows you to debug your application without being interrupted by the NSUndefinedKeyException that may be raised and caught by template rendering. The use case is described in the Runtime Guide.
I'm loving grmustache
Oh man GRMustache saved my ass once again. Awesome lib.
GRMustache filters extension saved us from great escaping PITAs. Thanks @groue.
@orj:
Thank fucking christ for decent iOS developers who ship .lib files in their Github repos. #GRMustache
@issya should see the HTML template I built, pretty wicked. GRMustache is the best.
Using GRMustache (Cocoa) for template processing. Looks like a top quality library. Good developer and good units tests. Get it on GitHub.
okay GRMustache is the fucking daddy
- tomaz/appledoc: Objective-c code Apple style documentation set generator
- mapbox/mapbox-ios-sdk: MapBox iOS SDK, an open source alternative to MapKit
- CarterA/Tribo: Extremely fast static site generator written in Objective-C
- AutoLib uses GRMustache and spullara/mustache.java for rendering an identical set of Mustache templates on iOS and Android.
- CinéObs uses GRMustache for RSS feeds rendering
- Fotopedia, the first collaborative photo encyclopedia
- FunGolf GPS, a golf app with 3D maps
- KosmicTask, an integrated scripting environment for OS X that supports more than 20 scripting languages.
- Servus can turn any file on your computer into a branded download page hosted on Dropbox.
Please look for an open issue that smiles at you!
... And I wish somebody would review the non-native English of the documentation and guides.
Please fork. You'll learn useful information in the Forking Guide.
Released under the MIT License.