[[https://github.com/tinkerpop/frames/raw/master/doc/images/frames-logo.png|height=143px]]

Frames exposes any "Blueprints":http://blueprints.tinkerpop.com graph as a collection of interrelated domain objects. Frames makes heavy use of @InvocationHandler@, @Proxy@ classes, and @Annotations@ to allow a developer to _frame_ a graph element (vertex or edge) in terms of a particular Java interface. With Frames, its easy to ensure that data within a graph is respective of a schema represented as a collection of annotated Java interfaces. 

Please join the Gremlin users group at "http://groups.google.com/group/gremlin-users":http://groups.google.com/group/gremlin-users for all "TinkerPop":http://tinkerpop.com related discussions.

Frames JavaDoc: "2.5.0":http://tinkerpop.com/docs/javadocs/frames/2.5.0/ - "2.4.0":http://tinkerpop.com/docs/javadocs/frames/2.4.0/ -  "2.3.1":http://tinkerpop.com/docs/javadocs/frames/2.3.0/ -  "2.3.0":http://tinkerpop.com/docs/javadocs/frames/2.3.0/ - "2.2.0":http://tinkerpop.com/docs/javadocs/frames/2.2.0/ - "2.1.0":http://tinkerpop.com/docs/javadocs/frames/2.1.0/ - "2.0.0":http://tinkerpop.com/docs/javadocs/frames/2.0.0/ - "0.7":http://tinkerpop.com/maven2/com/tinkerpop/frames/0.7/api/ - "0.6":http://tinkerpop.com/maven2/com/tinkerpop/frames/0.6/api/ - "0.5":http://tinkerpop.com/maven2/com/tinkerpop/frames/0.5/api/ - "0.4":http://tinkerpop.com/maven2/com/tinkerpop/frames/0.4/api/ - "0.3":http://tinkerpop.com/maven2/com/tinkerpop/frames/0.3/api/ - "0.2":http://tinkerpop.com/maven2/com/tinkerpop/frames/0.2/api/ - "0.1":http://tinkerpop.com/maven2/com/tinkerpop/frames/0.1/api/
Frames WikiDoc: "2.5.0":http://www.tinkerpop.com/docs/wikidocs/frames/2.5.0/Home.html - "2.4.0":http://www.tinkerpop.com/docs/wikidocs/frames/2.4.0/Home.html - "2.3.1":http://www.tinkerpop.com/docs/wikidocs/frames/2.3.0/Home.html - "2.3.0":http://www.tinkerpop.com/docs/wikidocs/frames/2.3.0/Home.html - "2.2.0":http://www.tinkerpop.com/docs/wikidocs/frames/2.2.0/Home.html - "2.1.0":http://www.tinkerpop.com/docs/wikidocs/frames/2.1.0/Home.html - "2.0.0":http://www.tinkerpop.com/docs/wikidocs/frames/2.0.0/Home.html

```xml
<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>frames</artifactId>
  <version>2.5.0</version>
</dependency>
```

Non-Maven users can get the raw release jars from Apache's "Central Repository":http://maven.org.  Snapshots can be obtained from "Sonatype":https://oss.sonatype.org/content/repositories/snapshots/  (see "Maven Repositories":https://github.com/tinkerpop/homepage/wiki/Maven-Repositories for more information).

Here is an example Frame interface:
```java
public interface Person {
  @Property("name")
  public String getName();

  @Adjacency(label="knows")
  public Iterable<Person> getKnowsPeople();

  @Adjacency(label="knows")
  public void addKnowsPerson(final Person person);

  @GremlinGroovy("it.out('knows').out('knows').dedup") //Make sure you use the GremlinGroovy module! #1
  public Iterable<Person> getFriendsOfAFriend()
}
```

Now you can use it to interact with the graph:
```java
TinkerGraph graph = TinkerGraphFactory.createTinkerGraph(); //This graph is pre-populated.
FramedGraphFactory factory = new FramedGraphFactory(new GremlinGroovyModule()); //(1) Factories should be reused for performance and memory conservation.

FramedGraph framedGraph = factory.create(graph); //Frame the graph.

Person person = framedGraph.getVertex(1, Person.class);
person.getName(); // equals "marko"
```
Frames can be used with "Rexster":http://rexster.tinkerpop.com through the "Rexster Kibbles":https://github.com/tinkerpop/rexster/wiki/Rexster-Kibbles Frames extension.

==<hr/>==

* [[Introduction]]
** [[Getting Started]]
** [[Creating Frames]]
** [[Core Annotations]] (*Cheat Sheet*)
** [[Factories and Modules]]
** [[Frames Ecosystem]]
** [[Upgrading from 2.3.1]]
* Core Modules
** [[Gremlin Groovy]]
** [[Typed Graph]]
** [[Java Handler]]
* [[Custom Modules]] 
*** [[Method Handlers]] 
*** [[Frame Initializers]]
*** [[Type Resolvers]] 
* Conclusion
** [[Acknowledgments]] 
** [[Release Notes]]