All Posts

  • Graphs, Agents, and the Characters Between

    Using character‑driven metaphors has long helped shape the way people think about Apache TinkerPop and graphs, but this same approach equally helps with other complex systems, like multi‑agent workflows.

  • Long-term agentic memory in Apache TinkerPop using Beads

    Using Beads, a memory upgrade for your coding agent, to capture a new graph-based artifact in agentic coding for Apache TinkerPop.

  • Gremlin goes to Gastown

    Using Gastown, a multi-agent workspace manager, to build Gremlator for Apache TinkerPop.

  • TinkerPop 3.8.0 Reflections

    Reflections on TinkerPop 3.8.0’s release strategy, bridging stable Gremlin semantics with future-focused upgrades.

  • Semantics of times(0)

    Unpacks subtle differences in Gremlin’s repeat step when times(0) is used

  • constant() is Not inject() – A Follow-Up

    Distills the core distinction between Gremlin’s constant() and inject().

  • Unique Vertex Label Anti-pattern

    Warns against the anti-pattern of unique vertex labels in graph databases and advocates for categorical labeling.

  • Eager and Lazy tree()

    Differentiates eager and lazy tree() semantics in Gremlin.

  • dedup() on Path objects

    Details deduplication nuances for Path objects in Gremlin, stressing effects of path labeling on result sets.

  • tree() Node Equality

    Explains the behavior of tree() node equality in Gremlin and how unique nodes shape traversal output structure.

  • Use of local() Revisited

    Revisits the local() step in Gremlin, clarifying its use case amid common confusion with Scope.local.

  • If-Then Semantics

    Advocates for readable if-then patterns in Gremlin, comparing coalesce(), choose(), sideEffect() and optional().

  • Thinking in VertexPrograms

    Discusses OLAP-style Gremlin and custom VertexProgram implementations for specialized graph analytics.

  • Subgraphing without subgraph()

    Reviews alternatives to Gremlin’s subgraph() step for non-JVM languages, focusing on edge list extraction.

  • Removing Backtracking

    Encourages Gremlin query refactoring by removing excessive backtracking for clarity and performance.

  • Use of local()

    Distinguishes Gremlin’s local() step from map() and flatMap(), highlighting its role in object-local processing.

  • Restricting simplePath()

    Examines Gremlin’s simplePath() for cycle filtering and advanced path control using from and to modulators.

  • profile() and Indices

    Shows how Gremlin’s profile() step exposes query optimization potential and performance issues around indices.

  • Inserting a Vertex Using a Map

    Explains efficient ways to insert vertex properties in Gremlin using Maps and advocates for simplifying with a DSL.

  • Grouping Edge Directions

    Demonstrates techniques for grouping and analyzing edge directions in Gremlin to understand message flows.

  • Maps as Keys

    Highlights language-specific issues of using Maps as keys in Gremlin and practical workarounds for compatibility.

  • Static and Dynamic Map Instances

    Compares static vs dynamic Map creation in Gremlin and how object equality impacts traversal results.

  • WTF - What the fold()

    Demystifies Gremlin’s fold() step and illustrates its importance in stream reduction and transformation.

  • constant() Is Not inject()

    Clarifies the practical differences between Gremlin’s constant() and inject() steps for value transformation.

  • A Nulled Union

    Explores Gremlin’s choose() step and new handling of nulls for flexible conditional logic in graph traversals.