diff --git a/app.py b/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..868d1fc0a60a1bd78a74d16f05d256e829449d3a
--- /dev/null
+++ b/app.py
@@ -0,0 +1,37 @@
+from flask import Flask
+from flask_security import Security, login_required, \
+     SQLAlchemySessionUserDatastore
+from flask_graphql import GraphQLView
+
+from os import environ
+
+from database.database import db_session, init_db
+from database.schema import schema
+from database.models import User, Role
+
+app = Flask(__name__)
+
+app.debug = True if "DEBUG" in environ and environ["DEBUG"] else False
+
+app.add_url_rule(
+    '/graphql',
+    view_func=GraphQLView.as_view(
+        'graphql',
+        schema=schema,
+        graphiql=True # for having the GraphiQL interface
+    )
+)
+
+user_datastore = SQLAlchemySessionUserDatastore(db_session,
+                                                User, Role)
+
+@app.teardown_appcontext
+def shutdown_session(exception=None):
+    db_session.remove()
+
+@app.before_first_request
+def initialize_database():
+    init_db()
+
+if __name__ == '__main__':
+    app.run()
diff --git a/database/schema.py b/database/schema.py
new file mode 100644
index 0000000000000000000000000000000000000000..851777b7cd4357c4445be4e3231e9031531bbc4b
--- /dev/null
+++ b/database/schema.py
@@ -0,0 +1,47 @@
+import graphene
+from graphene import relay
+from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField
+from database.models import User as UserModel, Application as ApplicationModel, Role as RoleModel
+from database.database import scoped_session
+
+
+class User(SQLAlchemyObjectType):
+    class Meta:
+        model = UserModel
+        interfaces = (relay.Node, )
+
+
+class UserConnections(relay.Connection):
+    class Meta:
+        node = User
+
+
+class Application(SQLAlchemyObjectType):
+    class Meta:
+        model = ApplicationModel
+        interfaces = (relay.Node, )
+
+
+class ApplicationConnections(relay.Connection):
+    class Meta:
+        node = Application
+
+
+class Role(SQLAlchemyObjectType):
+    class Meta:
+        model = RoleModel
+        interfaces = (relay.Node, )
+
+
+class RoleConnections(relay.Connection):
+    class Meta:
+        node = Role
+
+
+class Query(graphene.ObjectType):
+    node = relay.Node.Field()
+    all_users = SQLAlchemyConnectionField(UserConnections)
+    all_application = SQLAlchemyConnectionField(ApplicationConnections)
+    all_roles = SQLAlchemyConnectionField(RoleConnections)
+
+schema = graphene.Schema(query=Query)
diff --git a/requirements.txt b/requirements.txt
index fd57dc5812dd09f5e10618fb866132e37814de20..18fe452d8710db8caf6994633b7a74c0b00b7afc 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,3 +2,5 @@ sqlalchemy
 psycopg2
 flask-sqlalchemy
 flask-security
+graphene_sqlalchemy
+Flask-GraphQL