Latest 1.1.2
License MIT
Platforms ios 8.0

A text search and auto-completion library written in Swift for iOS.

CI Status
codebeat badge

Index and quickly search Swift objects for specific words. Based on a Trie data structure.

The library does not include a user interface, however there is a full working UI in the Example code. Originally this was written for MessMoji.


A SOWPODS word list is used for testing and contains 267753 words.

Via iOS Simulator on a Macbook Pro 13" 2.4 GHz Intel Core i5 8GB, index time is roughly 5 seconds and searching usually takes 200ms or less.


Andrew Crookston @acr

Tweet me if you like this library, have questions or feedback.


This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

Bug reports and pull requests are welcome via GitHub at

You will need SwiftLint installed for the build process to pass.

If you’re making a big change, please open an Issue first, so we can discuss. Otherwise:

  • Fork the repo
  • Open Example/ACRAutoComplete.workspace
  • Make your changes and add tests
  • Confirm tests are passing
  • Confirm that SwiftLint passes (no Xcode warnings).
  • Create a pull-request on Github.

Example Project

The Example project contains a fully working implementation with a simple user interface to search the SOWPODS word list.

To run the example project, clone the repo, and run pod install from the Example directory before running.


The library was written for iOS and has no external requirements. It’s possible it will work on macOS or other Swift platforms, but has not been tested.

Built for:

  • Swift 3 or 4
  • iOS 8+


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

pod "ACRAutoComplete"

Swift 3 legacy support through the swift-3 branch:

pod "ACRAutoComplete", git: "", branch: "swift-3"

Support for Carthage and SPM is on the way (and a good place to add your contribution).


First add the protocol to whatever object you wish to index, for example with a Word class, and add the required methods:

import ACRAutoComplete

class Word: Searchable {
    let word: String
    init(_ word: String) {
        self.word = word

    // From Searchable protocol
    var keywords: [String] {
        return [word]

    // Hashable
    var hashValue: Int { return word.hashValue }

    static func == (lhs: Word, rhs: Word) -> Bool {
        return ==

In your controller or place where you wish to use the index. Create an AutoComplete object with the Word class:

let autocomplete = AutoComplete<Word>()

Insert the objects you wish to index:

let football = Word("Football")

Finally, when needed, search the index for any matching objects:"foot") // -> [Word("Football")]


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

The example project (not the framework) includes a SOWPODS word file which is used for testing. The license of the SOWPODS file when downloaded was unknown but was labeled "open source".

Latest podspec

    "name": "ACRAutoComplete",
    "version": "1.1.2",
    "summary": "An auto-complete library written in Swift for iOS using the trie data structure",
    "description": "An auto-complete library written in Swift for iOS using the trie data structure.nnA simple Trie structure implementation in Swift for indexing and searching words.nnThis library does not include a user interface, it was built to be a simple easy to use auto-completion tool. Originally, it written for MessMoji.",
    "homepage": "",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    "source": {
        "git": "",
        "tag": "1.1.2"
    "authors": {
        "Andrew Crookston": "[email protected]"
    "social_media_url": "",
    "platforms": {
        "ios": "8.0"
    "source_files": "ACRAutoComplete/Classes/**/*",
    "pushed_with_swift_version": "4.0"

Pin It on Pinterest

Share This