[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6625":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},6625,"age","apache\u002Fage","apache","Graph database optimized for fast analysis and real-time data processing. It is provided as an extension to PostgreSQL.","https:\u002F\u002Fage.apache.org",null,"C",4593,503,74,174,0,1,21,103,12,30.11,"Apache License 2.0",false,"master",true,[27,28,29,30,31,32,33,34],"age-database","agensgraph","analytics","graph-database","graphdb","multi-model-dbms","postgresql","postgresql-extension","2026-06-12 02:01:27","\u003Cbr>\n\n\u003Cp align=\"center\">\n     \u003Cimg src=\"https:\u002F\u002Fage.apache.org\u002Fage-manual\u002Fmaster\u002F_static\u002Flogo.png\" width=\"30%\" height=\"30%\">\n\u003C\u002Fp>\n\u003Cbr>\n\n\u003Ch3 align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fage.apache.org\u002Fage-manual\u002Fmaster\u002F_static\u002Flogo.png\" target=\"_blank\">\n        \u003Cimg src=\"https:\u002F\u002Fage.apache.org\u002Fage-manual\u002Fmaster\u002F_static\u002Flogo.png\" height=\"25\" height=\"30% alt=\"Apache AGE style=\"margin: 0 0 -3px 0\">\n    \u003C\u002Fa>\n    \u003Ca href=\"https:\u002F\u002Fage.apache.org\u002Fage-manual\u002Fmaster\u002F_static\u002Flogo.png\" target=\"_blank\">\n    \u003C\u002Fa>\n     is a leading multi-model graph database \u003C\u002Fh3>\n     \n\u003C\u002Fh3>\n\n\u003Ch3 align=\"center\">Graph Processing & Analytics for Relational Databases\u003C\u002Fh3>\n\n\u003Cbr>\n\n\n\u003C\u002Fbr>\n\n\n\n\u003Cp align=\"center\">                                                                                                    \n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\u002Fblob\u002Fmaster\u002FLICENSE\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fapache\u002Fage\"\u002F>\n  \u003C\u002Fa>\n  &nbsp;\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\u002Freleases\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRelease-v1.7.0-FFA500?labelColor=gray&style=flat&link=https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\u002Freleases\"\u002F>\n  \u003C\u002Fa>\n  &nbsp;\n  \u003Ca href=\"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002F18\u002Findex.html\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVersion-Postgresql 18-00008B?labelColor=gray&style=flat&link=https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002F18\u002Findex.html\"\u002F>\n  \u003C\u002Fa>\n  &nbsp;\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\u002Fissues\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fapache\u002Fage\"\u002F>\n  \u003C\u002Fa>\n  &nbsp;\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\u002Fnetwork\u002Fmembers\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fapache\u002Fage\"\u002F>\n  \u003C\u002Fa>\n  &nbsp;\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\u002Fstargazers\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fapache\u002Fage\"\u002F>\n  \u003C\u002Fa>\n\n\u003C\u002Fp>\n\n\u003Cbr>\n\n\n\u003Ch2>\u003Cimg height=\"30\" src=\"\u002Fimg\u002FAGE.png\">&nbsp;&nbsp;What is Apache AGE?\u003C\u002Fh2>\n\n[Apache AGE](https:\u002F\u002Fage.apache.org\u002F#) 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.\n\u003C\u002Fbr>\n\u003C\u002Fbr>\n\u003C\u002Fbr>\n\n\u003Cp align=\"center\">\n\u003Cimg src=\"\u002Fimg\u002Fage-01.png\" width=\"80%\" height=\"80%\">\n\u003C\u002Fp>\n\n\u003C\u002Fbr>\n\n\n\u003Ch2>\u003Cimg height=\"30\" src=\"\u002Fimg\u002Ftick.svg\">&nbsp;&nbsp;Overview\u003C\u002Fh2>\n\nApache AGE is :\n\n- **Powerful**: adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA.\n- **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.\n- **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.\n\n\u003Ch2>\u003Cimg height=\"30\" src=\"\u002Fimg\u002Ffeatures.svg\">&nbsp;&nbsp;Features\u003C\u002Fh2>\n\u003C\u002Fbr>\n\u003C\u002Fbr>\n\n\u003Cp align=\"center\">\n\u003Cimg src=\"\u002Fimg\u002Fage-03.png\" width=\"80%\" height=\"80%\">\n\u003C\u002Fp>\n\u003C\u002Fbr>\n\n- **Cypher Query**: supports graph query language\n- **Hybrid Querying**: enables SQL and\u002For Cypher\n- **Querying**: enables multiple graphs\n- **Hierarchical**: graph label organization\n- **Property Indexes**: on both vertices(nodes) and edges\n- **Full PostgreSQL**: supports PG features\n\n\n\n\u003Ch2>\u003Cimg height=\"30\" src=\"\u002Fimg\u002Fdocumentation.svg\">&nbsp;&nbsp;Documentation\u003C\u002Fh2>\n\nRefer to our latest [Apache AGE documentation](https:\u002F\u002Fage.apache.org\u002Fage-manual\u002Fmaster\u002Findex.html) to learn about installation, features, built-in functions, and  Cypher queries.\n\n\n\n\u003Ch2>\u003Cimg height=\"30\" src=\"\u002Fimg\u002Finstallation.svg\">&nbsp;&nbsp;Pre-Installation\u003C\u002Fh2>\n\nInstall the following essential libraries according to each OS. Building AGE from the source depends on the following Linux libraries (Ubuntu package names shown below):\n\n- **CentOS**\n```bash\nyum install gcc glibc glib-common readline readline-devel zlib zlib-devel flex bison\n```\n- **Fedora**\n```bash\ndnf install gcc glibc bison flex readline readline-devel zlib zlib-devel\n```\n- **Ubuntu**\n```bash\nsudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison\n```\n\n\u003Ch2>\u003Cimg height=\"30\" src=\"\u002Fimg\u002Finstallation.svg\">&nbsp;&nbsp;Installation\u003C\u002Fh2>\n\nApache AGE is intended to be simple to install and run. It can be installed with Docker and other traditional ways. \n\n\u003Ch4>\u003Ca>\u003Cimg width=\"20\" src=\"\u002Fimg\u002Fpg.svg\">\u003C\u002Fa>\n&nbsp;Install PostgreSQL\n\u003C\u002Fh4>\n\nYou will need to install an AGE compatible version of Postgres\u003Ca>, for now AGE supports Postgres 11, 12, 13, 14, 15, 16, 17 & 18. Supporting the latest versions is on AGE roadmap.\n\n\u003Ch4>\n&nbsp;Installation via Package Manager\n\u003C\u002Fh4>\n\nYou can use a \u003Ca href=\"https:\u002F\u002Fwww.postgresql.org\u002Fdownload\u002F\">package management \u003C\u002Fa> that your OS provides to download PostgreSQL.\n\n\u003Cbr>\n\n```bash\nsudo apt install postgresql\n\n```\n\u003Ch4>\n&nbsp;Installation From Source Code\n\u003C\u002Fh4>\n\nYou can \u003Ca href=\"https:\u002F\u002Fwww.postgresql.org\u002Fftp\u002Fsource\u002F\"> download the Postgres \u003C\u002Fa> 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 \u003Ca href=\"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002F18\u002Finstallation.html\">official Postgres Website.\u003C\u002Fa>\n\n\n\n\u003Ch4>\u003Cimg width=\"20\" src=\"\u002Fimg\u002Ftux.svg\">\u003Cimg width=\"20\" src=\"\u002Fimg\u002Fapple.svg\"> &nbsp;Install AGE on Linux and MacOS\n\u003C\u002Fh4>\n\nClone the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\">github repository\u003C\u002Fa> or download the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fapache\u002Fage\u002Freleases\">download an official release.\n\u003C\u002Fa>\nRun 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.\n\u003Cbr>\n    \n```bash\npg_config\n```\nRun the following command in the source code directory of Apache AGE to build and install the extension.  \n     \n```bash\nmake install\n```\n     \nIf the path to your Postgres installation is not in the PATH variable, add the path in the arguments:\n```bash\nmake PG_CONFIG=\u002Fpath\u002Fto\u002Fpostgres\u002Fbin\u002Fpg_config install\n```\n\n\n\u003Ch4>\u003C\u002Fa>\u003Cimg width=\"30\" src=\"\u002Fimg\u002Fdocker.svg\">\u003C\u002Fa>\n&nbsp;Run using Docker\n\u003C\u002Fh4>\n\n\u003Ch5> Get the docker image \u003C\u002Fh5>\n\n```bash\ndocker pull apache\u002Fage\n\n```\n\u003Ch5> Create AGE docker container \u003C\u002Fh5>\n\n```bash\ndocker run \\\n    --name age  \\\n    -p 5455:5432 \\\n    -e POSTGRES_USER=postgresUser \\\n    -e POSTGRES_PASSWORD=postgresPW \\\n    -e POSTGRES_DB=postgresDB \\\n    -d \\\n    apache\u002Fage\n```\n\n\u003Ch5> Enter PostgreSQL's psql: \u003C\u002Fh5>\n\n```bash\ndocker exec -it age psql -d postgresDB -U postgresUser\n```\n\n\n\n\u003Ch2>\u003Cimg height=\"20\" src=\"\u002Fimg\u002Fcontents.svg\">&nbsp;&nbsp;Post Installation\u003C\u002Fh2>\n\nFor every connection of AGE you start, you will need to load the AGE extension.\n\n```bash\nCREATE EXTENSION age;\n```\n```bash\nLOAD 'age';\n```\n```bash\nSET search_path = ag_catalog, \"$user\", public;\n```\n\n\u003Ch2>\u003Cimg height=\"20\" src=\"\u002Fimg\u002Fcontents.svg\">&nbsp;&nbsp;Using AGE with Non-Autocommit Clients (psycopg, JDBC, etc.)\u003C\u002Fh2>\n\nIf 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.\n\nThis 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.\n\n### What is and isn't transactional\n\n| Statement | Scope | Needs commit to be visible elsewhere? |\n|---|---|---|\n| `LOAD 'age'` | Session-local (loads the .so into the current backend) | No |\n| `SET search_path = ag_catalog, \"$user\", public` | Session-local | No |\n| `SELECT create_graph('g')` | **Writes** to `ag_graph` and creates a schema | **Yes** |\n| `SELECT create_vlabel('g', 'L')` \u002F `create_elabel(...)` | **Writes** to `ag_label` and creates a table | **Yes** |\n| `SELECT drop_graph('g', true)` \u002F `drop_label(...)` | **Writes** to catalog | **Yes** |\n| `SELECT load_labels_from_file(...)` \u002F `load_edges_from_file(...)` | **Writes** to catalog + data | **Yes** |\n| `cypher('g', $$ CREATE (:L {...}) $$)` | **Writes** data | **Yes** |\n\nIn 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.\n\n### psycopg v3 — the \"savepoint gotcha\"\n\nThe 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.\n\n#### ❌ Broken: graph is not visible from a new connection\n\n```python\nimport psycopg\n\nparams = {\"host\": \"localhost\", \"port\": 5432, \"user\": \"postgres\",\n          \"password\": \"pw\", \"dbname\": \"mydb\"}\n\n# --- First connection ---\nconn = psycopg.connect(**params)\nconn.execute(\"LOAD 'age'\")                                      # implicitly opens a txn\nconn.execute(\"SET search_path = ag_catalog, '$user', public\")\n\nwith conn.transaction(), conn.cursor() as cur:                  # \u003C-- SAVEPOINT, not a real txn\n    cur.execute(\"SELECT * FROM create_graph('my_graph')\")\n# outer transaction is STILL OPEN here\n\nconn.close()  # outer transaction is rolled back on close → my_graph is gone\n\n# --- New connection ---\nconn = psycopg.connect(**params)\nconn.execute(\"LOAD 'age'\")\nconn.execute(\"SET search_path = ag_catalog, '$user', public\")\nwith conn.cursor() as cur:\n    cur.execute(\"SELECT name FROM ag_graph;\")\n    # 'my_graph' is NOT in the results\n```\n\n#### ✅ Fix 1: explicit `commit()` after setup\n\n```python\nconn = psycopg.connect(**params)\nconn.execute(\"LOAD 'age'\")\nconn.execute(\"SET search_path = ag_catalog, '$user', public\")\nconn.commit()   # \u003C-- closes the implicit outer txn\n\nwith conn.transaction(), conn.cursor() as cur:\n    cur.execute(\"SELECT * FROM create_graph('my_graph')\")\n# this transaction block is now top-level and commits on exit\nconn.close()\n```\n\n#### ✅ Fix 2: enable autocommit on the connection\n\n```python\nconn = psycopg.connect(**params, autocommit=True)\nconn.execute(\"LOAD 'age'\")\nconn.execute(\"SET search_path = ag_catalog, '$user', public\")\nconn.execute(\"SELECT * FROM create_graph('my_graph')\")          # commits immediately\nconn.close()\n```\n\nYou can also toggle autocommit at runtime with `conn.set_autocommit(True)`.\n\n### JDBC\n\nJDBC 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:\n\n```java\nconnection.setAutoCommit(true);\n\u002F\u002F ... LOAD 'age'; SET search_path ...; SELECT create_graph(...);\n```\n\nor keep autocommit off and explicitly commit after DDL-like calls:\n\n```java\nstmt.execute(\"LOAD 'age'\");\nstmt.execute(\"SET search_path = ag_catalog, \\\"$user\\\", public;\");\nstmt.execute(\"SELECT create_graph('my_graph');\");\nconnection.commit();   \u002F\u002F make the graph visible to other sessions\n```\n\n### Rule of thumb\n\n> 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()`.\n\n\u003Ch2>\u003Cimg height=\"20\" src=\"\u002Fimg\u002Fcontents.svg\">&nbsp;&nbsp;Quick Start\u003C\u002Fh2>\n\nTo create a graph, use the create_graph function located in the ag_catalog namespace.\n\n```bash\nSELECT create_graph('graph_name');\n```\n\nTo create a single vertex with label and properties, use the CREATE clause.\n\n```bash\nSELECT * \nFROM cypher('graph_name', $$\n    CREATE (:label {property:\"Node A\"})\n$$) as (v agtype);\n```\n\n```bash\nSELECT * \nFROM cypher('graph_name', $$\n    CREATE (:label {property:\"Node B\"})\n$$) as (v agtype);\n```\n\nTo create an edge between two nodes and set its properties:\n\n```bash\nSELECT * \nFROM cypher('graph_name', $$\n    MATCH (a:label), (b:label)\n    WHERE a.property = 'Node A' AND b.property = 'Node B'\n    CREATE (a)-[e:RELTYPE {property:a.property + '\u003C->' + b.property}]->(b)\n    RETURN e\n$$) as (e agtype);\n```\n\nAnd to query the connected nodes:\n\n```\nSELECT * from cypher('graph_name', $$\n        MATCH (V)-[R]-(V2)\n        RETURN V,R,V2\n$$) as (V agtype, R agtype, V2 agtype);\n```\n\n\u003Ch2>\u003Cimg height=\"20\" src=\"\u002Fimg\u002Fgettingstarted.svg\">&nbsp;&nbsp;Language Specific Drivers\u003C\u002Fh2>\n\nStarting with Apache AGE is very simple. You can easily select your platform and incorporate the relevant SDK into your code.\n\u003C\u002Fbr>\n\u003C\u002Fbr>\n\n\u003Cp align=\"center\">\n\u003Cimg src=\"\u002Fimg\u002Fage-02.png\" width=\"80%\" height=\"80%\">\n\u003C\u002Fp>\n\n\n\u003Ch4>Built-in\u003C\u002Fh4>\n\n- [Go driver](.\u002Fdrivers\u002Fgolang)\n- [Java driver](.\u002Fdrivers\u002Fjdbc)\n- [NodeJs driver](.\u002Fdrivers\u002Fnodejs)\n- [Python driver](.\u002Fdrivers\u002Fpython)\n\n\u003Ch4>Community-driven Driver\u003C\u002Fh4>\n\n- [Apache AGE Rust Driver](https:\u002F\u002Fgithub.com\u002FDzordzu\u002Frust-apache-age.git)\n- [Apache AGE .NET Driver](https:\u002F\u002Fgithub.com\u002FAllison-E\u002Fpg-age)\n\n\u003Ch2>\u003Cimg height=\"20\" src=\"\u002Fimg\u002Fvisualization.svg\">&nbsp;&nbsp;Graph Visualization Tool for AGE\u003C\u002Fh2>\n\n\nApache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data.\nThis web visualization tool allows users to enter complex graph queries and explore the results in graph and table forms.\nApache AGE Viewer is enhanced to proceed with extensive graph data and discover insights through various graph algorithms.\nApache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: \u003Chttps:\u002F\u002Fgithub.com\u002Fapache\u002Fage-viewer>.\n\n**This is a visualization tool.**\nAfter installing AGE Extension, you may use this tool to get access to the visualization features.\n\n\n![Viewer gdb, and graph](\u002Fimg\u002Fagce.gif)\n\n\n\u003Ch2>\u003Cimg height=\"20\" src=\"\u002Fimg\u002Fvideos.png\">&nbsp;&nbsp;Video Links\u003C\u002Fh2>\n\nYou can also get help from these videos. \n\n- Install on [Windows](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ddk8VX8Hm-I&list=PLGp3huJbWNDjgwP7s99Q-9_w1vxpjNHXG)\n- Install on [MacOS](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=0-qMwpDh0CA)\n\n\n\n\u003Ch2>\u003Cimg height=\"20\" src=\"\u002Fimg\u002Fcommunity.svg\">&nbsp;&nbsp;Contributing\u003C\u002Fh2>\n\nYou can improve ongoing efforts or initiate new ones by sending pull requests to [this repository](https:\u002F\u002Fgithub.com\u002Fapache\u002Fage).\nAlso, 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](https:\u002F\u002Fage.apache.org\u002Fcontribution\u002Fguide).\nSend all your comments and inquiries to the user mailing list, users@age.apache.org.\n","Apache AGE 是一个针对快速分析和实时数据处理优化的图数据库，作为 PostgreSQL 的扩展提供。其核心功能包括在现有的关系型数据库上添加图数据库支持，允许用户同时使用标准的 ANSI SQL 和 openCypher 进行查询。技术特点在于AGE能够创建一个单一存储来处理关系型和图数据模型，从而满足对易于实现的多模型数据库的需求。适用于需要结合关系型与图数据处理能力的应用场景，如社交网络分析、推荐系统等。",2,"2026-06-11 03:07:57","top_language"]