# Connection

A connection is a vitaminized version of a List that provides ways of slicing and paginating through it. The way you create Connection types in `graphene` is using `relay.Connection` and `relay.ConnectionField`.

## Quick example

If we want to create a custom Connection on a given node, we have to subclass the `Connection` class.

In the following example, `extra` will be an extra field in the connection, and `other` an extra field in the Connection Edge.

    class ShipConnection(Connection):
        extra = String()

        class Meta:
            node = Ship

        class Edge:
            other = String()

The `ShipConnection` connection class, will have automatically a `pageInfo` field, and a `edges` field (which is a list of `ShipConnection.Edge`). This `Edge` will have a `node` field linking to the specified node (in `ShipConnection.Meta`) and the field `other` that we defined in the class.

## Connection Field

You can create connection fields in any Connection, in case any ObjectType that implements `Node` will have a default Connection.

    class Faction(graphene.ObjectType):
        name = graphene.String()
        ships = relay.ConnectionField(ShipConnection)

        def resolve_ships(root, info):
            return []