{"id":13597546,"url":"https://github.com/krlawrence/graph","last_synced_at":"2026-01-16T03:23:44.733Z","repository":{"id":41203175,"uuid":"105672026","full_name":"krlawrence/graph","owner":"krlawrence","description":"Practical Gremlin - An Apache TinkerPop Tutorial","archived":false,"fork":false,"pushed_at":"2026-01-12T19:46:20.000Z","size":40221,"stargazers_count":854,"open_issues_count":17,"forks_count":259,"subscribers_count":44,"default_branch":"main","last_synced_at":"2026-01-13T00:46:54.871Z","etag":null,"topics":["air-routes","graph","graph-database","graphml","gremlin","gremlin-console","gremlin-graph-guide","practical-gremlin","tinkerpop"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/krlawrence.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeHistory.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-10-03T15:59:56.000Z","updated_at":"2025-12-28T11:10:13.000Z","dependencies_parsed_at":"2023-10-14T20:37:20.089Z","dependency_job_id":"2e637cf6-06aa-40ac-ac70-340d9c2b81cf","html_url":"https://github.com/krlawrence/graph","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/krlawrence/graph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krlawrence%2Fgraph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krlawrence%2Fgraph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krlawrence%2Fgraph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krlawrence%2Fgraph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krlawrence","download_url":"https://codeload.github.com/krlawrence/graph/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krlawrence%2Fgraph/sbom","scorecard":{"id":570552,"data":{"date":"2025-08-11","repo":{"name":"github.com/krlawrence/graph","commit":"454fee91aa4d39e7027318ae215e8b27483dfa1b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.9,"checks":[{"name":"Maintained","score":10,"reason":"9 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/build-asciidoc.yml:12","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v282-tp-3.4.4 not signed: https://api.github.com/repos/krlawrence/graph/releases/20932301","Warn: release artifact v281-tp-3.3.4 not signed: https://api.github.com/repos/krlawrence/graph/releases/14686031","Warn: release artifact v280-tp.3.3.3 not signed: https://api.github.com/repos/krlawrence/graph/releases/12062470","Warn: release artifact v279-tp.3.3.3 not signed: https://api.github.com/repos/krlawrence/graph/releases/11196477","Warn: release artifact V278-3.3.1 not signed: https://api.github.com/repos/krlawrence/graph/releases/10044237","Warn: release artifact v282-tp-3.4.4 does not have provenance: https://api.github.com/repos/krlawrence/graph/releases/20932301","Warn: release artifact v281-tp-3.3.4 does not have provenance: https://api.github.com/repos/krlawrence/graph/releases/14686031","Warn: release artifact v280-tp.3.3.3 does not have provenance: https://api.github.com/repos/krlawrence/graph/releases/12062470","Warn: release artifact v279-tp.3.3.3 does not have provenance: https://api.github.com/repos/krlawrence/graph/releases/11196477","Warn: release artifact V278-3.3.1 does not have provenance: https://api.github.com/repos/krlawrence/graph/releases/10044237"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-asciidoc.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/krlawrence/graph/build-asciidoc.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-asciidoc.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/krlawrence/graph/build-asciidoc.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-asciidoc.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/krlawrence/graph/build-asciidoc.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-asciidoc.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/krlawrence/graph/build-asciidoc.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-asciidoc.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/krlawrence/graph/build-asciidoc.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-asciidoc.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/krlawrence/graph/build-asciidoc.yml/main?enable=pin","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-20T16:13:47.525Z","repository_id":41203175,"created_at":"2025-08-20T16:13:47.525Z","updated_at":"2025-08-20T16:13:47.525Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"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":["air-routes","graph","graph-database","graphml","gremlin","gremlin-console","gremlin-graph-guide","practical-gremlin","tinkerpop"],"created_at":"2024-08-01T17:00:35.800Z","updated_at":"2026-01-16T03:23:39.720Z","avatar_url":"https://github.com/krlawrence.png","language":"Ruby","funding_links":[],"categories":["AsciiDoc","Learning Materials","Learning materials","\u003cA NAME=\"tutorials-and-resources\"\u003e\u003c/A\u003eTutorials and Resources","Ruby"],"sub_categories":["Community Effort","Community effort"],"readme":"# Practical Gremlin: An Apache TinkerPop Tutorial\n\n\n![map](https://github.com/krlawrence/graph/raw/main/images/GremlinEaselNoText.png?raw=true, \"graph picture\")\n\n## Welcome!\n\nThis repository is the home for the source materials, sample code and examples for the book \"Practical Gremlin - An Apache TinkerPop Tutorial\". This is also the home for the `air-routes` dataset referenced throughout the book and samples.\n\n### Quick Start - the latest version\n\nPreview releases for the second edition are published as HTML automatically as they are authored and can be found [here](https://krlawrence.github.io/graph/). It should be noted when reading this revision of the book that it is still a draft version and under significant modification, so you can expect volatile changes. \n\nThe first edition is still available. To view it in a browser (HTML format) click [here](http://kelvinlawrence.net/book/PracticalGremlin.html) or for a PDF version click [here](http://kelvinlawrence.net/book/PracticalGremlin.pdf). These versions are not typically updated anymore. You will find other formats including MOBI, EPUB and XML (Docbook) in the [releases](https://github.com/krlawrence/graph/releases)  section. The PDF version is currently the \"official\" version. It has a better table of contents, page numbers, and some better formatting.\n\n### LATEST NEWS\n- [Jul-17-2024] Auto-published the book via GitHub Actions as changes arrive to the 'main' branch. \n- [Sep-23-2023] Work has started on a second edition of the book! See the note below for more details.\n- [Sep-22-2023] Added a script to the sample-data folder for producing Cypher versions of the air-routes data.  \n- [Aug-29-2022] Updated versions of the sample data and corresponding demo apps have been uploaded. \n\n### Work has begun on the second edition!\n\nSeptember 23rd 2023\n\nEver since I began working on Practical Gremlin, I viewed it as a living book, and have tried to keep up with new features and changes taking place at Apache TinkerPop, updating the manuscript as TinkerPop and Gremlin evolve. However, and this is great to see, the rate and pace at which new features are appearing in Gremlin has steadily increased over the years. This has made it hard to keep up in a \"living book\" fashion. Moreover, some of the material currently in Practical Gremlin discusses features and limitations in the language that have since either been improved or deprecated. It's really time to start work on a second edition.  I'm excited to announce that [Stephen Mallette](https://github.com/spmallette) has graciously offered to help with this task. We have created a [V1](https://github.com/krlawrence/graph/tree/v1) branch which archives the first edition progress. Work for the second edition will simply occur on the default branch. Many of the new Gremlin features that need adding to the manuscript are captured in a [tracking issue](https://github.com/krlawrence/graph/issues/115) and there is also a [planning board](https://github.com/krlawrence/graph/projects/2#) that will continue to be used as a way to organize the work ahead. I'm really looking forward to the collaboration with Stephen, and to the production of a fully up-to-date second edition of Practical Gremlin. Please keep an eye on the latest news section here for more updates.\n\n## Releases and change history\n\nThe most recent changes and additions are tracked in the [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) file.\n\n**A Special note about releases**\n\nStarting with revision 274 (Dec 24th 2017), all of the output files (XML, EPUB, MOBI, HTML and PDF) will now be stored using Git releases. Going forward, this should reduce the amount of disk space required for people who create forks of this project. The release notes and downloadable materials are located [here](https://github.com/krlawrence/graph/releases).\n\nDetails of how to build the various output formats from the AsciiDoc source are contained in the `README.md` file under the *book* folder.\n\n## How this book came to be\n\nI forget exactly when, but over a year ago I started compiling a list of notes, hints and tips, initially  for my own benefit, of things I had found poorly explained elsewhere while using graph databases and especially using Apache TinkerPop, JanusGraph and Gremlin. Over time that document grew (and continues to grow) and has effectively become a book. After some encouragement from colleagues I have decided to release it as a living book in an open source venue so that anyone who is interested can read it. It is aimed at programmers and  anyone using the Gremlin query language to work with graphs. Lots of code examples, sample queries,  discussion of best practices, lessons I learned the hard way etc. are included.\n\nWhile this book remains a work in progress, indeed some sections are still to be filled in, I think there is enough here that people may find it a useful aid to learning the Gremlin graph traversal and query language.\n\nThanks to all those that have encouraged me to keep going with this adventure!  \n\nKelvin R. Lawrence  \nOctober 6th, 2017  \n\n## Introduction\n\n**This book is a work in progress. Feedback (ideally via issue) is very much encouraged and welcomed!**\n\nThe title of this book could equally well be \"A getting started guide for users of graph databases and the Gremlin query language featuring hints, tips and sample queries\". It turns out that is a bit too too long to fit on one line for a heading but in a single sentence that describes the focus of this book pretty well.\n\nThe book introduces the Apache TinkerPop 3 Gremlin graph query and traversal language via real examples against a real world graph. They are given as a set of working examples against a graph that is also provided in the sample-data folder. The graph, air-routes.graphml, is a model of the world airline route network between 3,367 airports including 43,160 routes. The examples presented will work unmodified with the air-routes.graphml file loaded into the Gremlin console running with a TinkerGraph.\n\n## How this site is organized\n\nThe book is being written using a text editor in AsciiDoc format. The source manuscript \"Practical-Gremlin.adoc\" can be found in the /book folder. These files always reflect the most recent updates and will often be ahead of the other formats that are only updated as part of a formal release. You will find formatted HTML and PDF versions of the book in the releases area. Formal releases also include DOCBOOK, EPUB and MOBI versions. These can be viewed using many tools and e-book readers. Note that currently, only the HTML and PDF versions have all the nice colors for source code listings etc.\n\nIncluded with the book are sample graph data (GraphML) and program files. You will find these, as well as some screen shots and images, and demos in the following folders.\n\n- /book\n- /sample-data\n- /sample-code\n- /images\n- /demos\n\nThe air-routes data set, along with tools to manipulate it and generate different file formats, is located here:\n\n- /make-route-graph\n  \n## How the book is organized\nThis is the current layout of the second edition. As work progresses additional chapters\nmay be added and the layout further refined.\n\n**Chapter 1 - INTRODUCTION**\n- We start our journey with a brief introduction to Apache Tinkerpop and a quick look\n  at why Graph databases are of interest to us. We also discuss how the book is\n  organized and where to find additional materials; such as sample code and data\n  sets. \n\n**Chapter 2 - GETTING STARTED**\n- Many of the examples throughout the book use the Gremlin Console and TinkerGraph,\n  and both are introduced in this chapter. We also introduce the air-routes example\n  graph - `air-routes.graphml` -  used throughout the book.\n\n**Chapter 3 - WRITING GREMLIN QUERIES**\n- Now that the basics have been covered, things start to get a lot more interesting!\n  It's time to start writing Gremlin queries. We\n  briefly explore how we could have built the 'air-routes' graph using a\n  relational database, and then look at how SQL and Gremlin are both similar in some\n  way,s and very different in others. We then introduce several of the key Gremlin\n  query language '\"steps\"'. We focus on exploring the graph rather than changing it\n  in this chapter.\n\n**Chapter 4 - BEYOND BASIC QUERIES**\n- Having now introduced Gremlin in some detail, we introduce the Gremlin steps that\n  can be used to create, modify, and delete, data. We present a selection of best\n  practices and start to explore some more advanced query writing.\n\n**Chapter 5 - MISCELLANEOUS QUERIES AND THE RESULTS THEY GENERATE**\n- Using the Gremlin steps introduced in Chapters 3 and 4, we are now ready to use\n  what we have learned so far and write queries that analyze the air-routes graph in\n  more depth, and answer more complicated questions. The material presented includes\n  a discussion of analyzing distances, route distribution, and writing geospatial\n  queries.\n\n**Chapter 6 - MOVING BEYOND THE GREMLIN CONSOLE**\n- The next step in our journey is to move beyond the Gremlin console and take a look\n  at interacting with a TinkerGraph using Java and Groovy applications.\n\n**Chapter 7 - INTRODUCING JANUS GRAPH**\n- As we continue the journey beyond the Gremlin Console, we now also move beyond\n  TinkerGraph. This chapter introduces JanusGraph and includes a discussion of\n  defining schema, managing trabsactions, and different storage and indexing options.\n\n**Chapter 8 - INTRODUCING GREMLIN SERVER**\n- Our journey so far has focussed on working with graphs in a \"directly attached\"\n  fashion. We now introduce Gremlin Server as a way to deploy and interact with\n  remotely hosted graphs.\n\n**Chapter 9 - COMMON GRAPH SERIALIZATION FORMATS**\n- Having introduced Gremlin Server we take a look at some common Graph serialization\n  file formats along with coverage of how to use them in the context of TinkerPop\n  enabled graphs. We take a close look at the TinkerPop GraphSON (JSON) format which\n  is  used extensively when using Gremlin queries in conjunction with a Gremlin\n  Server.\n\n**Chapter 10 - FURTHER READING**\n- Our journey to explore Apache TinkerPop and Gremlin concludes with a look at\n  useful sources of further reading. We present l links to useful web sites where you\n  can find tools and documentation for many of the topics and technologies covered in\n  this book. \n                                                           \n---\n\n**NEWS ARCHIVE**  \n- [May-04-2022] The latest preview draft of revision 283 (TP 3.5.1) is now available in HTML and PDF versions. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n- [Jun-28-2020] I have started creating a series of [issues](https://github.com/krlawrence/graph/issues) to capture changes and updates I hope to make soon. The issues contain some interesting examples of both new Gremlin features and some additional queries, some of which are quite advanced, that I intend to add to the manuscript as time allows. The issues have been sorted into a Kanban board which can be found in the Projects area. \n- [Oct-26-2019] Revision 282 (TP 3.4.4) was just published in all formats. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Aug-31-2021] Updated versions of the sample data and corresponding demo apps have been uploaded.  \n[Aug-02-2021] The latest preview draft of revision 283 (TP 3.5.1) is now available in HTML and PDF versions. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.    \n[Jul-31-2021] Updated versions of the sample data and corresponding demo apps have been uploaded.  \n[Jul-10-2021] The latest preview draft of revision 283 (TP 3.4.10) is now available in HTML and PDF versions. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Mar-21-2021] The latest preview draft of revision 283 (TP 3.4.10) is now available in HTML and PDF versions. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Mar-14-2021] The latest preview draft of revision 283 (TP 3.4.10) is now available in HTML and PDF versions. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Aug-28-2020] The latest preview draft of revision 283 (TP 3.4.8) is now available in HTML and PDF versions. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Feb-01-2020] Updated versions of the sample data and corresponding demo apps have been uploaded.   \n[Jan-06-2020] The latest draft of revision 283 (TP 3.4.4 preview) is now available in HTML and PDF versions. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Oct-13-2019] Updated versions of the sample data and corresponding demo apps have been uploaded.  \n[Oct-26-2019] Revision 282 (TP 3.4.4) was just published in all formats. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Apr-27-2019] Updated versions of the sample data and corresponding demo apps have been uploaded.  \n[Dec-26-2018] Revision 281 (TP 3.3.4) was just published in all formats. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Dec-24-2018] Updated versions of the sample data and corresponding demo apps have been uploaded.  \n[Sep-29-2018] Updated versions of the sample data and corresponding demo apps have been uploaded.  \n[Jul-28-2018] Revision 280 (TP 3.3.3) was just published in all formats. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[May-29-2018] Revision 279 (TP 3.3.3) was just published in all formats. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Mar-28-2018] Revision 278 (TP 3.3.1) was just published in all formats. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Feb-11-2018] Revision 277 was just published in all formats. See [change history](https://github.com/krlawrence/graph/blob/main/ChangeHistory.md) for details.  \n[Jan-12-2018] Revision 276 was just published in all formats. Many updates to book and samples.  \n[Jan-12-2018] Based on feedback I have decided to rename the book \"Practical Gremlin\" (see issue #29)  \n[Jan-06-2018] Several new Java samples have been added to the sample-code directory and others improved.  \n[Jan-03-2018] Revision 275 was just published in all formats. Lots of updates to book and sample code.  \n[Dec-24-2017] Revision 274 was just published in all formats. Now using releases to store output files.  \n[Dec-12-2017] Revision 273 was just published in all formats. Fixes issue #12. Also added additonal clarifications.  \n[Nov-23-2017] Revision 272 was just published in all formats. Many updates to sections 3 and 4.  \n[Nov-03-2017] Revision 271 was just published in all formats. Several improvements and additions.  \n[Oct-27-2017] Revision 270 was just published in all formats. Fixes issue #6 and adds more to Janus section.  \n[Oct-23-2017] Quite a lot has been added to the Janus Graph section - more to come soon  \n[Oct-15-2017] Experimental - The /book folder now includes DOCBOOK, EPUB and MOBI format versions of the book.  \n[Oct-10-2017] Several sections have been improved, I also made updates to reflect changes made in Tinkerpop 3.3  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrlawrence%2Fgraph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrlawrence%2Fgraph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrlawrence%2Fgraph/lists"}