diff --git a/compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/CompatSince.java b/compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/CompatSince.java
new file mode 100644
index 0000000000..104bbe0f20
--- /dev/null
+++ b/compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/CompatSince.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) "Neo4j"
+ * Neo4j Sweden AB [http://neo4j.com]
+ *
+ * This file is part of Neo4j.
+ *
+ * Neo4j is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.neo4j.gds.compat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marker interface to help with keeping the compat layer as small as necessary.
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.SOURCE)
+public @interface CompatSince {
+
+ /**
+ * The Neo4j version that brought the change that required
+ * this compatibility method to exist.
+ */
+ Neo4jVersion value();
+
+ /**
+ * If the Neo4jVersion is "dev", this field can be used
+ * to specify the exact version, since there most likely is no
+ * enum value for it.
+ */
+ String dev() default "";
+}
diff --git a/compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/Neo4jProxyApi.java b/compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/Neo4jProxyApi.java
index e067acc7ca..5bbff7d49d 100644
--- a/compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/Neo4jProxyApi.java
+++ b/compatibility/api/neo4j-kernel-adapter/src/main/java/org/neo4j/gds/compat/Neo4jProxyApi.java
@@ -29,17 +29,24 @@
public interface Neo4jProxyApi {
- AccessMode accessMode(CustomAccessMode customAccessMode);
-
- long estimateNodeCount(Read read, int label);
-
- long estimateRelationshipCount(Read read, int sourceLabel, int targetLabel, int type);
-
+ @CompatSince(Neo4jVersion.V_5_12)
CursorContextFactory cursorContextFactory(Optional pageCacheTracer);
+ @CompatSince(Neo4jVersion.V_5_12)
DependencyResolver emptyDependencyResolver();
+ @CompatSince(Neo4jVersion.V_5_13)
+ AccessMode accessMode(CustomAccessMode customAccessMode);
+
+ @CompatSince(Neo4jVersion.V_5_14)
String neo4jArrowServerAddressHeader();
+ @CompatSince(Neo4jVersion.V_5_15)
String metricsManagerClass();
+
+ @CompatSince(value = Neo4jVersion.V_Dev, dev = "5.17")
+ long estimateNodeCount(Read read, int label);
+
+ @CompatSince(value = Neo4jVersion.V_Dev, dev = "5.17")
+ long estimateRelationshipCount(Read read, int sourceLabel, int targetLabel, int type);
}