Image for post
Image for post

Over the past few years I’ve spent a lot of time trying to define the difference between a Graph and a Chart. But I’m here today to muddy the waters once again.

I’d like to introduce a Graph App that I’ve been working on for the past few weeks, simply called Charts. I’ve designed the app to be useful to both beginners to Neo4j or more experienced users who would like to make their graph-shaped data more understandable to the people around them.

As the name suggests, Charts allows you to create sets of charts from the data held in a Neo4j Database. The Graph App will take the raw results from a Cypher query and convert them into the correct format for the applicable chart, meaning you only have to do a minimal amount of manipulation to the data within your query. …


For my role as a Developer Experience Engineer at Neo4j, I’ve spent some time recently looking at how developers interact with Neo4j. It’s always been a surprise that there weren’t more community tools that make it easier to work with, especially for a front-end framework as popular as React.

Granted, in a lot of cases, a Front-End Developer will be interacting with an API, and we’ve got that covered with tools along with the official drivers and frameworks like Spring Data Neo4j or GRANDstack.

But if your only aim is to quickly prototype an application or to build a Graph App then there’s a lot of boiler plate. You’d need to obtain some login credentials, create a driver, open a session, and run a query/transaction all before you can get to the fun part. …


Image for post
Image for post
Dart River-Te Awa Whakatipu, New Zealand shot by Alistair MacKenzie from unsplash.

This post has been inspired by a call I had with an old client in which we discussed ways to improve the efficiency of their imports into Neo4j. The client heavily uses Reactive programming to deal with streams of data into their application. The data is then split into new streams, which are transformed and then inserted into Neo4j.

This inspired me to take a closer look at RxJS, and to see where it might be useful in for importing data into Neo4j.

What is Reactive Programming?

There are many out there that will no doubt describe Reactive programming in better terms than me. But to me, Reactive programming is a declarative paradigm in which streams (or observables) of data are manipulated asynchronously using a “pipe” of one or more operators. There are implementations for Java, JavaScript and . …


Image for post
Image for post
Frank Wang on Unsplash

In this post, I will outline how you can test your Neo4j-based Nest.js application using unit tests and End-to-End testing

This article is one of a series of blog posts that accompany the Livestream on the Neo4j Twitch Channel where I build an application on top of Neo4j with Nest.js.

The recordings are also all available in a YouTube Playlist.

This article assumes some prior knowledge of Neo4j and Nest.js. If you haven’t already done so, you can read the previous articles at:

  1. Building a Web Application with Neo4j and Nest.js
  2. Authentication in a Nest.js Application with Neo4j
  3. Authorising Requests in Nest.js with Neo4j
  4. Handling Neo4j Constraint Errors with Nest Interceptors

Which tests should I use?

So far, I’ve only really touched End-to-End testing. End-to-end (or E2E) tests are functional tests that test the application as a whole. In the streams so far I’ve used E2E tests to test the entire application stack and represent a user’s entire journey through the website…


How to turn your Slack messages into a source of insight and information about conversations, topics, experts and questions using graph queries and analytics.

TL;DR: All of the code is available on Github. Follow the steps to export your messages and load them into Neo4j using the import scripts.

If you want to watch me working on this, you can check out this week’s twitch stream.

Earlier in the year, myself and other members of the EMEA Professional Services team put together our own Enterprise Knowledge Graph based on information from our internal Slack Workspace, supplemented with additional information from other sources including Google Drive, Github and Salesforce.

Image for post
Image for post
Not the original slack UI but our own clone, based on the graph of slack data

The original blog post published in April 2020 went into detail about the why’s and the what’s, but I thought it was about time to publish some information on the how and provide some information on how you can get started building you own. …


This post is the third in a series of blog posts that accompany the Twitch stream on the Neo4j Twitch channel where I build an application on top of Neo4j with NestJS.

This article assumes some prior knowledge of Neo4j and Nest.js. If you haven’t already done so, you can read the first three articles at:

  1. Building a Web Application with Neo4j and Nest.js
  2. Authentication in a Nest.js Application with Neo4j
  3. Authorising Requests in Nest.js with Neo4j

Unique Constraints

The definition of insanity is doing the same thing over and over again, but expecting different results.
- Albert Einstein

One thing that we haven’t tested yet is that our constraints are correctly handled in our API. You may recall that while implementing the Authentication functionality, we created a unique constraint to ensure that the email property was unique for any node with a User


Image for post
Image for post
Justine Camacho on Unsplash

This post is the third in a series of blog posts that accompany the Twitch stream on the Neo4j Twitch channel where I build an application on top of Neo4j with NestJS.

This article assumes some prior knowledge of Neo4j and Nest.js. If you haven’t already done so, you can read the first two articles at:

  1. Building a Web Application with Neo4j and Nest.js
  2. Authentication in a Nest.js Application with Neo4j

Authorisation

Previously, we looked at authentication; how we could verify that the user is who they say they are. Now, we’ll look at ensuring that a user is actually able to do what they want — in other words authorisation. …


This post is the second in a series of blog posts that accompany the Twitch stream on the Neo4j Twitch channel where I build an application on top of Neo4j with NestJS.

If you haven’t already done so, check out the first article here or watch the videos back on the Neo4j Youtube Channel.

Authentication is a key part of any subscription or SaaS site. For every request, we should be able to verify who the user is and whether they have the correct subscription to do what they are trying to do. As such, API calls to view or stream any content via the API will require valid user credentials. To enforce this, we will use a combination of Nest.js …


Image for post
Image for post
Halacious on Unsplash

This article is the introduction to a series of articles and a Twitch stream on the Neo4j Twitch channel where I build an application on top of Neo4j with NestJS and a yet-to-be-decided Front End. This week I built a Module and Service for interacting with Neo4j.

Watch the first stream in full on YouTube, or head to the Neo4j Twitch Channel for the next session.

TL;DR: I’ve pushed the code to Github and created a Neo4j module for NestJS to save you some time.

Over the past few weeks I have been spending an hour live streaming something that I have found interesting that week, but from this week I thought I would change things up and start to build out a project on Neo4j. …


The GA of Neo4j 4.1 is officially out this week. Head over to neo4j.com/download or create a new local graph in Neo4j Desktop to give it a try now.

In celebration, I thought I’d write a quick tutorial on the new Role Based Access Control features.

A brief history

Role Based Access Control has been around since Neo4j version 3.1 with built in reader, publisher, architect and admin roles. A new set of DBMS procedures allowed you to create users and assign them to roles.

Along with multiple databases, Version 4.0 introduced a new syntax for defining roles. Instead of calling procedures, these commands are now run against the system database. For example, you can use the CREATE USER to create a User before running GRANT ROLE to assign the user to a role. …

Adam Cowley

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store