{"id":43667334,"url":"https://github.com/CogitatorTech/onager","last_synced_at":"2026-02-06T15:01:38.257Z","repository":{"id":330346577,"uuid":"1069211952","full_name":"CogitatorTech/onager","owner":"CogitatorTech","description":"A DuckDB extension for graph data analytics","archived":false,"fork":false,"pushed_at":"2026-01-31T19:06:07.000Z","size":1008,"stargazers_count":114,"open_issues_count":2,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-02-01T04:31:27.532Z","etag":null,"topics":["duckdb","duckdb-extension","graph-algorithms","graph-analytics","graph-data-science","rust"],"latest_commit_sha":null,"homepage":"https://cogitatortech.github.io/onager/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CogitatorTech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["habedi"]}},"created_at":"2025-10-03T15:16:34.000Z","updated_at":"2026-01-31T19:18:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/CogitatorTech/onager","commit_stats":null,"previous_names":["cogitatortech/onager"],"tags_count":3,"template":false,"template_full_name":"habedi/template-rust-project","purl":"pkg:github/CogitatorTech/onager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CogitatorTech%2Fonager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CogitatorTech%2Fonager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CogitatorTech%2Fonager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CogitatorTech%2Fonager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CogitatorTech","download_url":"https://codeload.github.com/CogitatorTech/onager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CogitatorTech%2Fonager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29165672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T14:37:12.680Z","status":"ssl_error","status_checked_at":"2026-02-06T14:36:22.973Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["duckdb","duckdb-extension","graph-algorithms","graph-analytics","graph-data-science","rust"],"created_at":"2026-02-04T23:00:31.224Z","updated_at":"2026-02-06T15:01:38.246Z","avatar_url":"https://github.com/CogitatorTech.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg alt=\"Onager Logo\" src=\"logo.svg\" height=\"25%\" width=\"25%\"\u003e\n  \u003c/picture\u003e\n\u003cbr\u003e\n\n\u003ch2\u003eOnager\u003c/h2\u003e\n\n[![Tests](https://img.shields.io/github/actions/workflow/status/CogitatorTech/onager/tests.yml?label=tests\u0026style=flat\u0026labelColor=282c34\u0026logo=github)](https://github.com/CogitatorTech/onager/actions/workflows/tests.yml)\n[![Code Quality](https://img.shields.io/codefactor/grade/github/CogitatorTech/onager?label=code%20quality\u0026style=flat\u0026labelColor=282c34\u0026logo=codefactor)](https://www.codefactor.io/repository/github/CogitatorTech/onager)\n[![Examples](https://img.shields.io/badge/examples-view-green?style=flat\u0026labelColor=282c34\u0026logo=github)](https://cogitatortech.github.io/onager/examples/basic/)\n[![Docs](https://img.shields.io/badge/docs-read-blue?style=flat\u0026labelColor=282c34\u0026logo=read-the-docs)](https://cogitatortech.github.io/onager/)\n[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-007ec6?style=flat\u0026labelColor=282c34\u0026logo=open-source-initiative)](https://github.com/CogitatorTech/onager)\n\nA Graph Analytics Toolbox for DuckDB\n\n\u003c/div\u003e\n\n---\n\nOnager is a DuckDB extension that adds a large number of graph analytics functions to DuckDB,\nincluding centrality measures, community detection algorithms, pathfinding algorithms, graph metrics,\nand graph generators.\nOnager is written in Rust and uses [Graphina](https://github.com/habedi/graphina) graph library under the hood.\n\nCompared to [DuckPGQ](https://github.com/cwida/duckpgq-extension), Onager is focused on graph analytics instead of graph querying.\nMore specifically, DuckPGQ tries to implement [SQL/PGQ](https://pgql-lang.org/) (the SQL:2023 standard)\nfor graph pattern matching and path-finding queries with a property graph model.\nOnager instead provides a collection of ready-to-use graph algorithms (like PageRank, Louvain community detection, Dijkstra's shortest path, etc.)\nas simple table functions.\nUsers typically want something like DuckPGQ when they need to query graph patterns or model the data in a property graph model\n(like a graph database), and use Onager when they need to run specific graph algorithms on their graph data for a specific application.\n\n### Features\n\n- Adds over 40 graph algorithms as SQL table functions\n- Provides a simple and uniform API\n- Supports both directed and undirected graphs\n- Supports weighted and unweighted edges\n- Includes multi-threaded algorithm implementations\n\nSee [ROADMAP.md](ROADMAP.md) for the list of implemented and planned features.\nCheck out [KNOWN_ISSUES.md](KNOWN_ISSUES.md) for known issues and limitations of the current version.\n\n\u003e [!IMPORTANT]\n\u003e Onager is in early development, so bugs and breaking changes are expected.\n\u003e Please use the [issues page](https://github.com/CogitatorTech/onager/issues) to report bugs or request features.\n\n---\n\n### Quickstart\n\n#### Install from Community Extensions Repository\n\nYou can install and load Onager from\nthe [DuckDB community extensions](https://duckdb.org/community_extensions/extensions/onager) repository by running the\nfollowing SQL commands in the DuckDB shell:\n\n```sql\ninstall onager from community;\nload onager;\n```\n\n#### Build from Source\n\nAlternatively, you can build Onager from source and use it by following these steps:\n\n1. Clone the repository and build the Onager extension from source:\n\n```bash\ngit clone --recursive https://github.com/CogitatorTech/onager.git\ncd onager\n\n# This might take a while to run\nmake release\n```\n\n2. Start DuckDB shell (with Onager statically linked to it):\n\n```bash\n./build/release/duckdb\n```\n\n\u003e [!NOTE]\n\u003e After building from source, the Onager binary will be `build/release/extension/onager/onager.duckdb_extension`.\n\u003e You can load it using the `load 'build/release/extension/onager/onager.duckdb_extension';` in the DuckDB shell.\n\u003e Note that the extension binary will only work with the DuckDB version that it was built against.\n\u003e You can download the pre-built binaries from the [releases page](https://github.com/CogitatorTech/onager/releases) for\n\u003e your platform.\n\n#### Trying Onager\n\n```sql\n-- Create an edge table\ncreate table edges as\nselect * from\n             (values (1::bigint, 2::bigint),\n             (2, 3),\n             (3, 1),\n             (3, 4)) t(src, dst);\n\n-- Compute PageRank\nselect * from onager_ctr_pagerank((select src, dst from edges));\n\n-- Detect communities\nselect * from onager_cmm_louvain((select src, dst from edges));\n\n-- Find shortest paths\nselect * from onager_pth_dijkstra((select src, dst from edges), source := 1);\n\n-- Generate a random graph\nselect * from onager_gen_erdos_renyi(100, 0.1, seed := 42);\n```\n\n[![Simple Demo 1](https://asciinema.org/a/5RBqT9bO2mB28EaEn8qPesn8t.svg)](https://asciinema.org/a/5RBqT9bO2mB28EaEn8qPesn8t)\n\n---\n\n### Documentation\n\nCheck out the [Onager documentation](https://cogitatortech.github.io/onager/) for the API documentation and examples.\n\n---\n\n### Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to make a contribution.\n\n### License\n\nOnager is available under either of the following licenses:\n\n* MIT License ([LICENSE-MIT](LICENSE-MIT))\n* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))\n\n### Acknowledgements\n\n* The logo is from [here](https://www.svgrepo.com/svg/452885/donkey) with some modifications.\n* This project uses [Graphina](https://github.com/habedi/graphina) graph library.\n","funding_links":["https://github.com/sponsors/habedi"],"categories":["Extensions"],"sub_categories":["[Community Extensions](https://duckdb.org/community_extensions/)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCogitatorTech%2Fonager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCogitatorTech%2Fonager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCogitatorTech%2Fonager/lists"}