CheckOps home

Tools directory

N

CheckOps

Nimble

Nimble is an Apache-2.0 matcher framework for Swift and Objective-C, offering expressive expect(...).to(...) assertions and asynchronous toEventually expectations, used with XCTest or Quick.

Visit website

Latest public signals

Not refreshed yet. Refresh reads the public site and, when the entry has a GitHub repository, the latest release.

Visit Website

Introduction

Nimble is a matcher framework for Swift and Objective-C, inspired by Cedar. It lets you express expectations in a readable style, such as expect(seagull.squawk).to(equal("Squee!")) or expect(ocean.isClean).toEventually(beTruthy()), and produces clear failure messages. It is maintained by the Quick organisation and is commonly paired with the Quick BDD framework, but works perfectly well with plain XCTest.

Nimble includes matchers for equality, identity, comparisons, collections (contain, beEmpty, haveCount), strings, types, errors (throwError), nil, and Swift assertions, and supports custom matchers. Asynchronous expectations (toEventually, toNever, toAlways) poll until a condition is satisfied, which is useful for UI and networking code, and async/await variants integrate with Swift concurrency. require provides expectations that stop the test on failure. Version 14.0.0 was released on 28 November 2025, with commits in May 2026.

The source code is at Quick/Nimble on GitHub under the Apache-2.0 licence, with about 4,800 stars; the most recent commit was on 4 May 2026.

Features

  1. Readable matchers: expect(...).to(...) style.
  2. Async expectations: toEventually, toNever and toAlways.
  3. Custom matchers: Define domain-specific matchers.
  4. Works with XCTest and Quick: No special runner required.

Pros

  1. Free to use: Open source under the Apache-2.0 licence, so the core tool costs nothing to use.
  2. Actively maintained: The repository had commits as recent as 4 May 2026.
  3. Community: About 4,800 GitHub stars.

Cons

  1. Overlap with Swift Testing: #expect covers many needs natively.
  2. Release cadence: Releases are less frequent; check compatibility with new Xcode versions.
import XCTest
import Nimble
@testable import Shop

final class CartTests: XCTestCase {
    func testTotals() {
        let cart = Cart(items: [Item(price: 5), Item(price: 7)])
        expect(cart.total).to(equal(12))
        expect(cart.items).to(haveCount(2))
    }

    func testSyncFinishes() {
        let sync = Syncer()
        sync.start()
        expect(sync.isDone).toEventually(beTrue(), timeout: .seconds(2))
    }
}

Resources:

Pricing

Nimble is free and open source under the Apache-2.0 licence.

  1. XCTest users wanting more expressive assertions.
  2. Teams using Quick for BDD-style specs.

Conclusion

Nimble adds expressive, asynchronous-friendly matchers to Swift and Objective-C tests, a long-standing favourite in the iOS community.

Alternatives

Other tools on CheckOps that cover similar ground. Open a page, or compare one with Nimble side by side.