Skip to content
A path-finding library powered by GameplayKit 👾
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.


Build status Swift Package Manager MacOS + iOS + iPadOS + tvOS Twitter: @zntfdr

Welcome to Connection, a Swift path-finding library. Its primary goal is to extend Apple's GameplayKit framework.


  • Weighted connections.
  • Total path weight.
  • Associated values support.
  • Find the shortest path between multiple origins and destinations.


Connection defines two new generic classes: Node and Graph, which are, respectively, GKGraphNode and GKGraph counterparts.

import Connection

// Create nodes.
let nodeA = Node(value: "A")
let nodeB = Node(value: "B")
let nodeC = Node(value: "C")

// Make connections.
nodeA.addConnection(to: nodeB, bidirectional: false, weight: 1)
nodeB.addConnection(to: nodeC, bidirectional: true, weight: 2)

// Create graph.
let graph = Graph([nodeA, nodeB, nodeC])

// Find path.
let shortestAtoCPath = graph.findPath(from: nodeA, to: nodeC)

print(shortestAtoCPath) // ["A", "B", "C"]

You can find many more examples in the Tests folder.


Connection is distributed using the Swift Package Manager. To install it into a project, follow this tutorial and use this repository URL:


Connection was built by Federico Zanetello as a component of Bangkok Metro.

If you'd like to dive deeper into iOS path-finding algorithms, please read this two-part serie:

Contributions and Support

All users are welcome and encouraged to become active participants in the project continued development — by fixing any bug that they encounter, or by improving the documentation wherever it’s found to be lacking.

If you'd like to make a change, please open a Pull Request, even if it just contains a draft of the changes you’re planning, or a test that reproduces an issue.

Thank you and please enjoy using Connection!

You can’t perform that action at this time.