{"id":32184809,"url":"https://github.com/clojurewerkz/ogre","last_synced_at":"2025-10-21T23:57:51.654Z","repository":{"id":7400233,"uuid":"8730405","full_name":"clojurewerkz/ogre","owner":"clojurewerkz","description":"Clojure library for querying Apache TinkerPop graphs","archived":false,"fork":false,"pushed_at":"2021-09-01T16:04:42.000Z","size":3812,"stargazers_count":129,"open_issues_count":5,"forks_count":27,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-10-21T23:57:47.623Z","etag":null,"topics":["clojure","graph","graph-algorithms","gremlin","tinkerpop","tinkerpop-graphs"],"latest_commit_sha":null,"homepage":"http://ogre.clojurewerkz.org/","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clojurewerkz.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-03-12T14:59:19.000Z","updated_at":"2025-08-24T20:51:54.000Z","dependencies_parsed_at":"2022-09-15T16:03:21.346Z","dependency_job_id":null,"html_url":"https://github.com/clojurewerkz/ogre","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/clojurewerkz/ogre","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fogre","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fogre/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fogre/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fogre/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clojurewerkz","download_url":"https://codeload.github.com/clojurewerkz/ogre/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fogre/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280354182,"owners_count":26316400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["clojure","graph","graph-algorithms","gremlin","tinkerpop","tinkerpop-graphs"],"created_at":"2025-10-21T23:57:50.702Z","updated_at":"2025-10-21T23:57:51.647Z","avatar_url":"https://github.com/clojurewerkz.png","language":"Clojure","readme":"# Ogre\n\n\u003cimg src=\"gremlin-ogre.png\"\u003e\u003c/img\u003e\n\nOgre is a Clojure [Gremlin Language Variant](http://tinkerpop.apache.org/docs/current/tutorials/gremlin-language-variants/) \nof the [Gremlin](http://tinkerpop.apache.org/gremlin.html) graph traversal language from [Apache Tinkerpop](http://tinkerpop.apache.org/).\nLike Gremlin, it can be used to query any graphs that are [TinkerPop-enabled](http://tinkerpop.apache.org/providers.html).\n\n## Project Goals\n\n* Provide an API that enhances the expressivity of Gremlin when working in Clojure.\n* Expose the features of TinkerPop as it makes sense in Clojure.\n* Don't introduce any significant amount of performance overhead.\n\n## Community\n\nQuestions related to Ogre can be asked on the [clojure-titanium mailing list](https://groups.google.com/forum/#!forum/clojure-titanium).\n\nTo subscribe for announcements of releases, important changes and so on, please follow [@ClojureWerkz](https://twitter.com/#!/clojurewerkz) on Twitter.\n\n## Project Maturity\n\nDespite being first released in 2014, Orge is a relatively young project that regained\nactive development in 2016. Most of Ogre's features are driven by changes to Apache\nTinkerPop (specifically the [Traversal API](http://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps))\nwhich has largely stabilized itself in over the course of the 3.2.x line of code. As a\nresult, Ogre tends to be fairly stable with its implementation of that API. Ogre also\nimplements the TinkerPop Process Test Suite, which helps validate that Ogre is compliant\nwith Gremlin.\n\nOgre currently targets TinkerPop 3.4.x.\n\n## Artifacts\n\nOrge artifacts are [released to Clojars](https://clojars.org/clojurewerkz/ogre). Maven users should add the following \nrepository definition to your `pom.xml`:\n\n``` xml\n\u003crepository\u003e\n  \u003cid\u003eclojars.org\u003c/id\u003e\n  \u003curl\u003ehttp://clojars.org/repo\u003c/url\u003e\n\u003c/repository\u003e\n```\n\n### The Most Recent Release\n\nWith Leiningen:\n\n    [clojurewerkz/ogre \"3.4.11.0\"]\n\nWith Maven:\n\n    \u003cdependency\u003e\n      \u003cgroupId\u003eclojurewerkz\u003c/groupId\u003e\n      \u003cartifactId\u003eogre\u003c/artifactId\u003e\n      \u003cversion\u003e3.4.11.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\n## Documentation \u0026 Examples\n\nYou'll need to choose a TinkerPop-enabled graph database and add that to your project's dependencies. Here we use the \nin-memory graph database implementation provided by `org.apache.tinkerpop/tinkergraph-gremlin`, e.g.:\n\nWith Leiningen:\n\n    [org.apache.tinkerpop/tinkergraph-gremlin \"3.4.11\"]\n\nWith Maven:\n\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.apache.tinkerpop\u003c/groupId\u003e\n      \u003cartifactId\u003etinkergraph-gremlin\u003c/artifactId\u003e\n      \u003cversion\u003e3.4.11\u003c/version\u003e\n    \u003c/dependency\u003e\n\nREPL examples:\n\n```text\nuser=\u003e (load \"clojurewerkz/ogre/core\")\nnil\nuser=\u003e (in-ns 'clojurewerkz.ogre.core)\n#object[clojure.lang.Namespace 0x2bcfe59c \"clojurewerkz.ogre.core\"]\nclojurewerkz.ogre.core=\u003e (def graph (open-graph {(Graph/GRAPH) (.getName org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph)}))\n#'clojurewerkz.ogre.core/graph\nclojurewerkz.ogre.core=\u003e (def g (traversal graph))\n#'clojurewerkz.ogre.core/g\nclojurewerkz.ogre.core=\u003e (org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory/generateModern graph)\nnil\nclojurewerkz.ogre.core=\u003e (traverse g V (match\n                    #_=\u003e   (__ (as :a) (out :created) (as :b))\n                    #_=\u003e   (__ (as :b) (has :name \"lop\"))\n                    #_=\u003e   (__ (as :b) (in :created) (as :c))\n                    #_=\u003e   (__ (as :c) (has :age 29)))\n                    #_=\u003e   (select :a :c) (by :name)\n                    #_=\u003e   (into-seq!))\n({\"a\" \"marko\", \"c\" \"marko\"} {\"a\" \"josh\", \"c\" \"marko\"} {\"a\" \"peter\", \"c\" \"marko\"})\n```\n\nAs an alternative to embedded graph databases like TinkerGraph, you might also choose to utilize a remote graph (e.g.\none hosted in [Gremlin Server](https://tinkerpop.apache.org/docs/current/reference/#connecting-gremlin-server) or\na [Remote Gremlin Provider](https://tinkerpop.apache.org/docs/current/reference/#connecting-rgp)). In such case, you\nwould first need `org.apache.tinkerpop/gremlin-driver` to connect to the remote graph:\n\nWith Leiningen:\n\n    [org.apache.tinkerpop/gremlin-driver \"3.4.11\"]\n\nWith Maven:\n\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.apache.tinkerpop\u003c/groupId\u003e\n      \u003cartifactId\u003egremlin-driver\u003c/artifactId\u003e\n      \u003cversion\u003e3.4.11\u003c/version\u003e\n    \u003c/dependency\u003e\n\nFrom the driver, you create a `DriverRemoteConnection` and pass that to the `traversal` function (rather than the \n`Graph` instance as demonstrated in the last example):\n\n```text\nclojurewerkz.ogre.core=\u003e (def conn (org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection/using \"localhost\" 8182 \"g\"))\n#'clojurewerkz.ogre.core/conn\nclojurewerkz.ogre.core=\u003e (def g (traversal conn))\n#'clojurewerkz.ogre.core/g\nclojurewerkz.ogre.core=\u003e (traverse g V (has :name \"josh\") (values :age) (into-seq!))\n(32)\n```\n\nIn short, to connect to a remote graph simply use Java interop to construct a `DriverRemoteConnection` instance in the\nways specified by the TinkerPop [Reference Documentation](https://tinkerpop.apache.org/docs/current/reference/#gremlin-java-connecting)\nand then give that object to the `traversal` function to create `g`.\n\nOgre has more complete documentation [here](http://ogre.clojurewerkz.org/).\n\n## Supported Clojure Versions\n\nOrge requires Clojure 1.8+. The most recent stable release is always recommended.\n\n## Continuous Integration\n\n[![Build Status](https://travis-ci.org/clojurewerkz/ogre.svg?branch=master)](https://travis-ci.org/clojurewerkz/ogre)\n\n## Development\n\nOrge uses [Leiningen 2](https://github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md). Once installed and run tests using:\n\n    lein test\n\n## License\n\nCopyright (C) 2014-2017 Zack Maril, and the ClojureWerkz team.\nCopyright (C) 2017-2021 Stephen Mallette, Zack Maril, and the ClojureWerkz team.\n\nLicensed under the [Eclipse Public License](http://www.eclipse.org/legal/epl-v10.html) (the same as Clojure).\n\n## Acknowledgements\n\n[Joe Lee](http://www.jml3designz.com/) illustrated the \"Gremlin Ogre\" image based on the original Clojurewerkz Ogre logo and\nApache TinkerPop's Gremlin character developed [Ketrina Yim](http://ketrinayim.tumblr.com/).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclojurewerkz%2Fogre","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclojurewerkz%2Fogre","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclojurewerkz%2Fogre/lists"}