需 PostgreSQL 11~18,版本不匹配要另装;每个连接都要执行 CREATE EXTENSION age、LOAD 'age' 并设置 search_path;psycopg/JDBC 等非自动提交客户端需显式 commit,否则建图不可见;CREATE EXTENSION 前不要让其他角色先创建 ag_catalog schema

age
apacheApache-2.0活跃维护基于 PostgreSQL 的图数据库扩展,用 SQL 就能做图查询和实时分析,适合在现有 PG 上直接跑图分析而不用另搭一套图库。
Graph database optimized for fast analysis and real-time data processing. It is provided as an extension to PostgreSQL.
docker pull apache/age
docker run --name age -p 5455:5432 -e POSTGRES_USER=postgresUser -e POSTGRES_PASSWORD=postgresPW -e POSTGRES_DB=postgresDB -d apache/ageREADME 未说明显存或 GPU 要求,属于 PostgreSQL 扩展,在 CPU 上运行
PostgreSQL 图数据库扩展,让你在关系库上直接用 openCypher 做图查询与分析
基于 PostgreSQL 的图数据库扩展,用 SQL 就能做图查询和实时分析,适合在现有 PG 上直接跑图分析而不用另搭一套图库。
核心能力
- 以扩展形式在 PostgreSQL 上启用图模型
- 支持 openCypher 图查询语言
- SQL 与 Cypher 混合查询
- 可同时查询多个图
- 支持顶点和边的属性索引
容易踩的坑
- PG15/v1.8.0-rc0Release v1.8.0 for PG15pre-release2026-09-19 · 2026-09-19 16:02 UTC
查看更新说明
This candidate is for development testing and community review, pending Apache AGE PMC approval.
Performance and memory improvements
- Added PostgreSQL composite
vertexandedgetypes so queries can access IDs and properties without constructing and decoding complete agtype entities. Returning these composite types also avoids the final conversion toagtype. - Reduced entity access and comparison overhead through fixed field positions, direct binary graph-ID comparisons, and reusable comparison memory, benefiting sorting, joins, and aggregation.
- Improved variable-length traversal with flat adjacency arrays, array-based traversal stacks, compact hash tables, and batched edge lookups.
- Reduced graph-cache memory usage by storing tuple locations and fetching properties when needed. Traversals that only filter by label avoid fetching properties.
- Exposed variable-length traversal endpoints as
graphidcolumns, allowing ordinary equality joins instead of repeatedly decoding paths to match their endpoints. - Added per-graph version counters so unrelated database activity does not invalidate cached graphs. On PostgreSQL 15, this requires
shared_preload_libraries = 'age';otherwise, snapshot-based invalidation remains in use. - Added automatic vertex-ID and edge-endpoint indexes, with indexed lookups for entity existence checks, updates, and deletes. The upgrade also creates the required indexes for existing labels.
- Reduced planning overhead for containment and key-existence predicates by replacing expensive statistics evaluation with fixed selectivity estimates, trading estimation precision for lower planning cost.
- Improved CSV loading through PostgreSQL’s COPY parser, batched heap inserts, row and byte limits for flushing batches, and memory reuse between batches.
- Added specialized edge-uniqueness checks for fixed-length paths containing two, three, or four relationships, reducing overhead for common short patterns.
Cypher and graph features
- Adds
MERGEwithON CREATE SETandON MATCH SET. - Adds
reduce()list folding, including references to enclosing query values, and the predicate functionsall(),any(),none(), andsingle().
PostgreSQL and driver integration
- Adds row-level security enforcement and improves permission checks for graph reads and writes.
- Supports loading AGE through
shared_preload_librariesand adds helpers for preparing and completing PostgreSQL major-version upgrades. - Adds Python APIs for configuring existing or pooled psycopg connections and converting graph models to ordinary Python dictionaries.
- Includes Python, Node.js, JDBC, and Go driver fixes and dependency updates.
Correctness and stability
- Fixes visibility of changes across CREATE, MATCH, and chained MERGE operations.
- Corrects OPTIONAL MATCH, NULL propagation, zero-hop traversal, and read-only replica behavior.
- Fixes crashes involving generated or additional label columns, malformed CSV input, prepared statements, and value conversions.
- Addresses memory leaks, invalid memory accesses, and driver input-validation issues.
Full Changelog: https://github.com/apache/age/compare/PG15/v1.6.0-rc0...PG15/v1.8.0-rc0
- Added PostgreSQL composite
- PG18/v1.8.0-rc0Release v1.8.0 for PG18最新正式版2026-07-09 · 2026-07-09 00:21 UTC
Release Notes for Apache AGE release 1.8.0 for PG18 branch
WARNING!
Always back up your database before executing any upgrade scripts
WARNING!
Apache AGE 1.8.0 - Release Notes
Merge master into PG18: advance to Apache AGE 1.8.0 Advance master branch to Apache AGE version 1.8.0 (#2455) Fix installcheck fetch-depth parameter to 100 (#2461) Fix segfault on CREATE/MERGE/SET with generated or extra label columns (#2458) Propagate null through unnest and single() three-valued logic (#2406) Add automatic header-dependency tracking to the Makefile (#2454) ci: pin Build/Regression runner to ubuntu-24.04 and guard Bison version for GLR grammar (#2445) Fix segfault and out-of-bounds reads in file loaders on malformed rows (#2453) Support outer references in reduce() fold bodies (#2448) Fix stack overflow and precision loss in toFloatList() conversion (#2451) Fix Node.js driver CI build broken by @types/node drift (#2452) Preserve null-valued keys in map literals (#2391) (#2412) Fix single-node labeled pattern expressions not filtering by label (#2443) (#2444) Support relationship-type filters and a minimum hop count (#2442) resolve subgraph staging sequences via regclass (#2446) Add reduce() list folding function (#2435) Support pattern expressions as boolean expressions (#2360) Add shortest_path / all_shortest_paths SRFs (#2430) cypher_with: add ORDER BY to non-deterministic RETURN queries (#2436) Make ag_catalog ownership and built-in resolution explicit (#2440) Makefile: add installcheck-existing target and improve readability (#2437) age_global_graph: stabilize regression tests (#2431) cypher_vle: add ORDER BY to non-deterministic RETURN queries (#2434) feature: add create_subgraph() (#2441) Make age extension usable from shared_preload_libraries (#2438) Fix locale-dependent string comparison in direct_field_access test (#2439) Fix VLE [*0..N] zero-hop self-binding when edge label is missing (#2382) (#2419) fix: remove pthread_mutex that causes self-deadlock on VLE queries (#2433) Restore contsel/contjoinsel for containment & key-existence operators (#2356) (#2417) perf: VLE hash-adjacency overhaul — agehash + flat-array VertexEdgeArray (#2421) python driver: preserve trailing quotes in agtype string values (#2425) perf(agtype): arena passthrough + binary-direct id extraction (#2424) Add vertex and edge composite types with direct field access optimization (#2303) perf: VLE terminal-qual rewrite (#2420) Add agtype <-> jsonb bidirectional casts (#350) (#2361) feat(python-driver): add public API for connection pooling and model dict conversion (#2374) Fix upgrade test: allow function removal (#2422) Zero-initialize parent_cpstate in analyze_cypher (#2423) Fix upgrade test: replace data-integrity checks with catalog comparison (#2403) Allow safe Cypher reserved keywords in alias positions (#2355) (#2415) Propagate null through agtype arithmetic operators (#2405) Update README.md (#2414) Add VLE semantics and cost model design note (#2349) (#2413) Fix property access on list comprehension / predicate loop variables (#2402) Add MERGE ON CREATE SET / ON MATCH SET support (#2347) Propagate null in agtype_access_slice bounds (#2400) VLE cache + performance improvements (#2376) CI: fail build on compiler and bison warnings (#2398) fix(python-driver): add null-guards in ANTLR parser and relax runtime version pin (#2372) Return an empty list from tail() for empty and singleton lists (#2399) Fix substring() crash when start-offset is NULL and length is supplied (#2401) fix(python-driver): quote-escape column aliases in buildCypher() (#2373) Implement predicate functions: all(), any(), none(), single() (#2359) Fix OPTIONAL MATCH dropping null-preserving rows with subquery WHERE (#2380) Python driver: Add
skip_loadparameter to skipLOAD 'age'statement (#2366) Fix upgrade test: build default install SQL from HEAD, not initial commit (#2397) Improve extension up - PG17/v1.7.0-rc0Release v1.7.0 for PG172026-02-11 · 2026-02-11 17:08 UTC
查看更新说明
Release Notes for Apache AGE release 1.7.0 for PG17 branch
WARNING!
Please note the upgrade script (age--1.6.0--1.7.0.sql) may take a while to complete for large graphs, due to creation of indexes for existing labels.
WARNING!
Apache AGE 1.7.0 - Release Notes
Fix upgrade script for 1.6.0 to 1.7.0 (#2320) Add RLS support and fix permission checks (#2309) Replace libcsv with pg COPY for csv loading (#2310) Fix Issue 1884: Ambiguous column reference (#2306) Upgrade Jest to v29 for node: protocol compatibility (#2307) Optimize vertex/edge field access with direct array indexing (#2302) feat: Add 32-bit platform support for graphid type (#2286) Fix and improve index.sql addendum (#2301) Fix and improve index.sql regression test coverage (#2300) Fix Issue 2289: handle empty list in IN expression (#2294) Revise README for Python driver updates (#2298) Makefile: fix race condition on cypher_gram_def.h (#2273) Restrict age_load commands (#2274) Migrate python driver configuration to pyproject.toml (#2272) Convert string to raw string to remove invalid escape sequence warning (#2267) Update grammar file for maintainability (#2270) Fix ORDER BY alias resolution with AS in Cypher queries (#2269) Fix possible memory and file descriptors leaks (#2258) Adjust 'could not find rte for' ERROR message (#2266) Fix Issue 2256: segmentation fault when calling coalesce function (#2259) Add index on id columns (#2117) Fix issue 2245 - Creating more than 41 vlabels causes crash in drop_graph (#2248) Fix issue 2243 - Regression in string concatenation (#2244) Add fast functions for checking edge uniqueness (#2227) Bump gopkg.in/yaml.v3 from 3.0.0 to 3.0.1 in /drivers/golang (#2212) Fix issue with CALL/YIELD for user defined and qualified functions. (#2217)
- PG18/v1.7.0-rc0Release v1.7.0 for PG182026-01-21 · 2026-01-21 20:26 UTC
查看更新说明
Release Notes for Apache AGE release 1.7.0 for PG18 branch
Apache AGE 1.7.0 - Release Notes
NOTE: There isn't an upgrade path for PostgreSQL PG18 1.7.0 as there isn't a prior version.
Advance PG18 branch to Apache AGE version 1.7.0 Add RLS support and fix permission checks (#2309) Replace libcsv with pg COPY for csv loading (#2310) Fix Issue 1884: Ambiguous column reference (#2306) Upgrade Jest to v29 for node: protocol compatibility (#2307) Optimize vertex/edge field access with direct array indexing (#2302) feat: Add 32-bit platform support for graphid type (#2286) Fix and improve index.sql addendum (#2301) Fix and improve index.sql regression test coverage (#2300) Fix Issue 2289: handle empty list in IN expression (#2294) Revise README for Python driver updates (#2298) Makefile: fix race condition on cypher_gram_def.h (#2273) Restrict age_load commands (#2274) Migrate python driver configuration to pyproject.toml (#2272) Convert string to raw string to remove invalid escape sequence warning (#2267) Update grammar file for maintainability (#2270) Fix ORDER BY alias resolution with AS in Cypher queries (#2269) Fix possible memory and file descriptors leaks (#2258) Adjust 'could not find rte for' ERROR message (#2266) Fix Issue 2256: segmentation fault when calling coalesce function (#2259) Add index on id columns (#2117) Fix issue 2245 - Creating more than 41 vlabels causes crash in drop_graph (#2248) Fix DockerHub build warning messages (#2252) Update CI for BaseDockerizedTest (#2254) PG18 port for AGE (#2251) Updated CI, Labeler, Docker, and branch security files for PG18 (#2246) Fix issue 2243 - Regression in string concatenation (#2244) Add fast functions for checking edge uniqueness (#2227) Bump gopkg.in/yaml.v3 from 3.0.0 to 3.0.1 in /drivers/golang (#2212) Update branch security (#2219) Fix issue with CALL/YIELD for user defined and qualified functions. (#2217)
- PG15/v1.6.0-rc0Release v1.6.0 for PG152025-11-20 · 2025-11-20 18:41 UTC
查看更新说明
Release Notes for Apache AGE release 1.6.0 for PostgreSQL version 15
WARNING!
Since there are modifications to agtype gin operators, users who are upgrading will need to drop the gin indexes before running the upgrade script and recreate them afterwards.
As always, please backup your database prior to any upgrade.
WARNING!
Apache AGE 1.6.0 - Release Notes
Fix issue 2205: left doesn't catch overflow (#2207) Fix issue 2201: unexpected empty string behavior (#2203) Add support for operators in cypher query (#2172) Reimplement list comprehension (#2169) Update labeler.yml (#2186) Fix issue with the CI build and labeler (#2183) Fix CSV import for edge with one property (#2175) Remove stale bot and update .asf.yaml settings (#2171) Prevent object access hook from accesing not installed namespace (#2161) Fix CI build errors caused by missing dependencies (#2163) Add support for external extensions (#2088) Fix issue 2093: pfree() called with a NULL pointer (#2095) Fix issue 1955 - List comprehension in WHERE clause (#2094) Add support for fuzzystrmatch and other external extensions (#2083) Fix memory leaks in functions part 1 (#2066) Issue 1996 - Add agtype to json typecast (#2075) Fix issue 2046: Memory leak during btree(agtype) (#2060) Refactor Dockerfile to use multi-stage builds (#2004) Revamp age csv loader (#2044) Fix issue 2020: Memory leak (#2028) Fix Issue 1907: SET on MERGE not storing edge properties (#2019) Add EmitWarningsOnPlaceholders("age") (#1997) Fix Issue 1988: How to update a property which is a keyword (#2005) Fix obsolete docker-compose command in CIs (#2007) Fix issue 1986: Failure creating label name close to MAX_LABEL_NAME_LEN (#1989) Fix issue 1953 - PG Boolean used as AGTYPE object (#1959) Add graph_exists function (#1958) Fix issue 1956 - null key name passed. (#1957) docs: add link to .NET open-source driver (#1938) Add the `load_from_plugins` parameter in the Python driver to load AGE from the $libdir/plugins directory (#1935) Fix issue 1910: Server crashes when using exists(vle path) (#1924) Converted single line comments to multiline (#1908) Add function is_valid_label_name (#1911) (#1912) Fixes small typos in the python driver's README.md file (#1909) Fix agtype_build_map to allow more than 50 pairs (#1901) Agtype hash cmp (#1893) Order some regression tests for stability on big-endian (#1892) Update github stale action (#1891) Make CALL YIELD grammar more precise (#1852) Fix issue 1878 - Regression test failure with delete global graphs (#1881) Corrected typos and grammatical errors in apache-age-basic.ipynb (#879) Add workflow for stale issues and PRs (#1872) Implement Returnless Unions in Subqueries (#1803) [CI] Update docker image tags (#1865) Add branch protection rules in .asf.yaml (#1854) [CI] Update labeler github action (#1851) Fix error using list comprehension with WITH * (#1838) python driver psycopg3 (#1793) Minor VLE and agtype_eq/ne performance updates (#1808) Fix issue 1767: CREATE TABLE AS SELECT * FROM cypher, errors (#1799) Implement Constraints on Subqueries (#1751) Fix connection string in Python Driver (#1757) Added integer conversion in toBoolean functions (#1199) Update README.md (#1756) Add the command graph_stats and improve VLE messaging for load (#1750) Add helpful messages to the VLE subsystem (#1742) Update README.md (#1728) Added Networkx Support in python driver (#1716) Remove duplicate check (#1740) Fix Issue 1709 - MERGE creates incomplete vertices after the first one (#1721) Fix shift/reduce conflict in grammar (#1719) Fix Issue 1691 - MERGE incorrectly creates multiple vertices
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Apache AGE is an extension for PostgreSQL that enables users to leverage a graph database on top of the existing relational databases. AGE is an acronym for A Graph Extension and is inspired by Bitnine's AgensGraph, a multi-model database fork of PostgreSQL. The basic principle of the project is to create a single storage that handles both the relational and graph data model so that the users can use the standard ANSI SQL along with openCypher, one of the most popular graph query languages today. There is a strong need for cohesive, easy-to-implement multi-model databases. As an extension of PostgreSQL, AGE supports all the functionalities and features of PostgreSQL while also offering a graph model to boot.
Apache AGE is :
- Powerful: adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA.
- Flexible: allows you to perform openCypher queries, which makes complex queries much easier to write. It also enables querying multiple graphs at the same time.
- Intelligent: allows you to perform graph queries that are the basis for many next-level web services such as fraud detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management, and more.
- Cypher Query: supports graph query language
- Hybrid Querying: enables SQL and/or Cypher
- Querying: enables multiple graphs
- Hierarchical: graph label organization
- Property Indexes: on both vertices(nodes) and edges
- Full PostgreSQL: supports PG features
Refer to our latest Apache AGE documentation to learn about installation, features, built-in functions, and Cypher queries.
Install the following essential libraries according to each OS. Building AGE from the source depends on the following Linux libraries:
- CentOS
yum install gcc glibc glib-common readline readline-devel zlib zlib-devel flex bison
- Fedora
dnf install gcc glibc bison flex readline readline-devel zlib zlib-devel
- Ubuntu
sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison
Apache AGE is intended to be simple to install and run. It can be installed with Docker and other traditional ways.
You will need to install an AGE compatible version of Postgres, for now AGE supports Postgres 11, 12, 13, 14, 15, 16, 17 & 18. Supporting the latest versions is on AGE roadmap.
You can use a package management that your OS provides to download PostgreSQL.
sudo apt install postgresql
You can download the Postgres source code and install your own instance of Postgres. You can read instructions on how to install from source code for different versions on the official Postgres Website.
Clone the github repository or download the download an official release. Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11, 12, 13, 14, 15, 16, 17 & 18 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11, 12, 13, 14, 15, 16, 17 & 18.
pg_config
Run the following command in the source code directory of Apache AGE to build and install the extension.
make install
If the path to your Postgres installation is not in the PATH variable, add the path in the arguments:
make PG_CONFIG=/path/to/postgres/bin/pg_config install
docker pull apache/age
docker run \
--name age \
-p 5455:5432 \
-e POSTGRES_USER=postgresUser \
-e POSTGRES_PASSWORD=postgresPW \
-e POSTGRES_DB=postgresDB \
-d \
apache/age
docker exec -it age psql -d postgresDB -U postgresUser
For every connection of AGE you start, you will need to load the AGE extension.
CREATE EXTENSION age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;
Note on ag_catalog ownership
AGE installs all of its objects into the ag_catalog schema. Install AGE
(CREATE EXTENSION age) before granting the CREATE privilege on the
database to other roles. A role that can create schemas could otherwise
pre-create ag_catalog and own it; CREATE EXTENSION age therefore refuses to
install when ag_catalog already exists and is owned by a different role. If you
hit that error, drop the stray schema (DROP SCHEMA ag_catalog CASCADE) or
transfer its ownership to the installing role, then retry.
If you are using AGE from a database client that does not default to autocommit — most commonly psycopg v3 or JDBC — you must understand how PostgreSQL's transaction semantics apply to AGE's setup and DDL-like functions. Otherwise, you may see graphs or labels that appear to be created successfully, but are not visible from new connections.
This is not a bug in AGE — it is standard PostgreSQL behavior. AGE's DDL-like functions write to the catalog, and catalog writes only become visible to other sessions after the enclosing transaction is committed.
What is and isn't transactional
| Statement | Scope | Needs commit to be visible elsewhere? |
|---|---|---|
LOAD 'age' | Session-local (loads the .so into the current backend) | No |
SET search_path = ag_catalog, "$user", public | Session-local | No |
SELECT create_graph('g') | Writes to ag_graph and creates a schema | Yes |
SELECT create_vlabel('g', 'L') / create_elabel(...) | Writes to ag_label and creates a table | Yes |
SELECT drop_graph('g', true) / drop_label(...) | Writes to catalog | Yes |
SELECT load_labels_from_file(...) / load_edges_from_file(...) | Writes to catalog + data | Yes |
cypher('g', $$ CREATE (:L {...}) $$) | Writes data | Yes |
In a client that defaults to autocommit (e.g. psql), every statement commits automatically, so this is never noticed. In a non-autocommit client, the first statement you run implicitly opens a transaction that stays open until you call commit(), rollback(), or close the connection.
psycopg v3 — the "savepoint gotcha"
The common pitfall is that with connection.transaction(): in psycopg does not start a new top-level transaction when one is already open — it creates a savepoint inside the existing outer transaction. Releasing a savepoint is not a commit, so your create_graph write stays invisible to other sessions until the outer transaction is explicitly committed.
❌ Broken: graph is not visible from a new connection
import psycopg
params = {"host": "localhost", "port": 5432, "user": "postgres",
"password": "pw", "dbname": "mydb"}
# --- First connection ---
conn = psycopg.connect(**params)
conn.execute("LOAD 'age'") # implicitly opens a txn
conn.execute("SET search_path = ag_catalog, '$user', public")
with conn.transaction(), conn.cursor() as cur: # <-- SAVEPOINT, not a real txn
cur.execute("SELECT * FROM create_graph('my_graph')")
# outer transaction is STILL OPEN here
conn.close() # outer transaction is rolled back on close → my_graph is gone
# --- New connection ---
conn = psycopg.connect(**params)
conn.execute("LOAD 'age'")
conn.execute("SET search_path = ag_catalog, '$user', public")
with conn.cursor() as cur:
cur.execute("SELECT name FROM ag_graph;")
# 'my_graph' is NOT in the results
✅ Fix 1: explicit commit() after setup
conn = psycopg.connect(**params)
conn.execute("LOAD 'age'")
conn.execute("SET search_path = ag_catalog, '$user', public")
conn.commit() # <-- closes the implicit outer txn
with conn.transaction(), conn.cursor() as cur:
cur.execute("SELECT * FROM create_graph('my_graph')")
# this transaction block is now top-level and commits on exit
conn.close()
✅ Fix 2: enable autocommit on the connection
conn = psycopg.connect(**params, autocommit=True)
conn.execute("LOAD 'age'")
conn.execute("SET search_path = ag_catalog, '$user', public")
conn.execute("SELECT * FROM create_graph('my_graph')") # commits immediately
conn.close()
You can also toggle autocommit at runtime with conn.set_autocommit(True).
JDBC
JDBC connections also default to autocommit true per the JDBC spec, but many frameworks (Spring, etc.) flip it off. If you are running AGE DDL-like calls from JDBC, either:
connection.setAutoCommit(true);
// ... LOAD 'age'; SET search_path ...; SELECT create_graph(...);
or keep autocommit off and explicitly commit after DDL-like calls:
stmt.execute("LOAD 'age'");
stmt.execute("SET search_path = ag_catalog, \"$user\", public;");
stmt.execute("SELECT create_graph('my_graph');");
connection.commit(); // make the graph visible to other sessions
Rule of thumb
If an AGE call creates, drops, or modifies a graph, label, vertex, edge, or property, it is a transactional write. In a non-autocommit client, it will not be visible to other sessions until you explicitly
commit().
To create a graph, use the create_graph function located in the ag_catalog namespace.
SELECT create_graph('graph_name');
To create a single vertex with label and properties, use the CREATE clause.
SELECT *
FROM cypher('graph_name', $$
CREATE (:label {property:"Node A"})
$$) as (v agtype);
SELECT *
FROM cypher('graph_name', $$
CREATE (:label {property:"Node B"})
$$) as (v agtype);
To create an edge between two nodes and set its properties:
SELECT *
FROM cypher('graph_name', $$
MATCH (a:label), (b:label)
WHERE a.property = 'Node A' AND b.property = 'Node B'
CREATE (a)-[e:RELTYPE {property:a.property + '<->' + b.property}]->(b)
RETURN e
$$) as (e agtype);
And to query the connected nodes:
SELECT * from cypher('graph_name', $$
MATCH (V)-[R]-(V2)
RETURN V,R,V2
$$) as (V agtype, R agtype, V2 agtype);
Starting with Apache AGE is very simple. You can easily select your platform and incorporate the relevant SDK into your code.
Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. This web visualization tool allows users to enter complex graph queries and explore the results in graph and table forms. Apache AGE Viewer is enhanced to proceed with extensive graph data and discover insights through various graph algorithms. Apache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: https://github.com/apache/age-viewer.
This is a visualization tool. After installing AGE Extension, you may use this tool to get access to the visualization features.

You can also get help from these videos.
You can improve ongoing efforts or initiate new ones by sending pull requests to this repository. Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation by visiting the Apache AGE official site - Developer Guidelines. Send all your comments and inquiries to the user mailing list, [email protected].