Getting Started
Add Theo to your Swift Package Manager dependencies:
.package(url: "https://github.com/Neo4j-Swift/Neo4j-Swift.git", from: "6.0.0")
Then import and use:
import Theo
let client = try BoltClient(
hostname: "localhost",
port: 7687,
username: "neo4j",
password: "your-password",
encrypted: true
)
// Connect
try await client.connect()
// Create a node
let node = Node(label: "Person", properties: ["name": "Neo"])
let createdNode = try await client.createAndReturnNode(node: node)
// Run Cypher queries
let result = try await client.executeCypher("MATCH (n) RETURN n LIMIT 10")
Code Examples
Creating Nodes
let node = Node(label: "Person", properties: [
"name": "Thomas Anderson",
"alias": "Neo"
])
let result = client.createAndReturnNodeSync(node: node)
switch result {
case .failure(let error):
print("Failed: \(error)")
case .success(let createdNode):
print("Created node with ID: \(createdNode.id ?? 0)")
}
Creating Relationships
let result = client.relateSync(node: reader, to: writer, type: "follows")
if result.isSuccess {
print("Relationship created")
}
Running Cypher Queries
let result = client.executeCypherSync(
"MATCH (n:Person) WHERE n.name = $name RETURN n",
params: ["name": "Thomas Anderson"]
)
switch result {
case .failure(let error):
print("Query failed: \(error)")
case .success(let queryResult):
for row in queryResult.rows {
print(row)
}
}
Using Transactions
try client.executeAsTransaction { tx in
client.executeCypherSync("CREATE (n:Test {prop: 'value1'})")
client.executeCypherSync("CREATE (n:Test {prop: 'value2'})")
// Call tx.markAsFailed() to rollback if needed
}