Posted on:

While testing Theo 6.0, our Swift driver for Neo4j, I made an interesting discovery: Theo works with Memgraph out of the box!

The Discovery

Memgraph is a high-performance graph database that implements the Bolt protocol - the same binary protocol that Neo4j uses for client communication. Since Theo communicates with Neo4j using the Bolt protocol (versions 3.0 through 5.6), I was curious to see if it would work with Memgraph.

Testing Setup

I spun up a Memgraph container using Docker:

docker run -d --name memgraph \
  -p 7696:7687 \
  memgraph/memgraph:latest \
  --bolt-server-name-for-init="Neo4j/"

The --bolt-server-name-for-init flag is important - it ...

Posted on:

Following on from the Bolt-swift 6.0 release, Theo has also been modernized for Swift 6. Theo is the high-level Neo4j client library that sits on top of Bolt-swift, providing a more convenient API for working with graph data in Swift.

The name comes from the combination of "Neo" (as in Neo4j) and "Thomas" (Thomas Anderson being Neo's real name in The Matrix). It's been around since 2016, originally created by Cory Wiles, and I've been maintaining it since version 3.

The Swift 6 update brings the same concurrency improvements as Bolt-swift. The library now properly supports Swift's strict concurrency checking, with Sendable conformances throughout. This means you can use Theo safely in concurrent code without worrying about data races.

Here's ...

Posted on:

It's been a while since Bolt-swift got some love. The library has been quietly working away for many users, but Swift has evolved significantly since the last major release, and Neo4j has moved on, so it was time for an update.

The main driver for this release was getting the library to work with modern Neo4j versions. I kept getting reports that connections to Neo4j 5.x were failing. Now the library works across the full spectrum from Neo4j 3.5 all the way to Neo4j 2025.12.1.

While I was in there, I took the opportunity to modernize the codebase for Swift 6. The library now uses Swift's structured concurrency with async/await, which makes for much cleaner code than the old EventLoopFuture-based approach. You can now write queries like this:

let connection = try await Connection.connect(
  ...
Posted on:

Lots of companies are working on VR, and we're led to believe that this is the defining technology of the near future. I'm an optimist when it comes to new technologies, so I wanted to try it out to get a status of where we are today.

My background in VR is not great - I tried a giant helmet once in the 90s at a technology fare. It was a very pixelated rollercoaster, it was all very interesting, and nothing became of it. I tried a VR setup in a Medialogy lab ca 2007, and it looked better but it was mostly a very expensive way of doing storytelling with better immersion.

The reason I find VR interesting today is that it has become cheap, because you can use your smartphone for all the tech and just add some lenses via Google Cardboard. A DIY kit can be had for a dollar ...

Posted on:

I'm an iOS developer at Snapsale, and I spend some time on the road, either travelling to our main office in Oslo, or to conferences. For my out-of-office work, I chose the entry-level Macbook.

The specs were not very powerful: a 1,1Ghz dual-core Broadwell Core-M with 8GB of RAM and 256GB SSD. But then again my expectation was mainly to do meetings and notes, UI review and the occasional Xcode hacking. Thus I chose 12" to optimize for being able to "comfortably" work from the flight seat and the coach seat, and retina for working on UI together with our designer.

Optimizing for the screen is something I would not have expected to do five years ago, and I must admit to being a bit hesitant to how the Macbook would deal with Xcode. The answer is: surprisingly well. What I had not factored in was that the SSD is ...

Image Image

Father, husband, software developer, musician and photographer.


Get to know what I'm up to

© 2020 Niklas Saers Contact Me