diff --git a/entity_example/entity_example.info.yml b/entity_example/entity_example.info.yml
new file mode 100644
index 0000000..d6ed712
--- /dev/null
+++ b/entity_example/entity_example.info.yml
@@ -0,0 +1,9 @@
+name: Entity Example
+type: module
+description: A simple entity example showing the main steps required to set up your own entity.
+core: 8.x
+package: Example modules
+dependencies:
+  - field
+#files[] = entity_example.test
+configure: admin/structure/entity_example_basic/manage
diff --git a/entity_example/entity_example.install b/entity_example/entity_example.install
new file mode 100644
index 0000000..bcc5b30
--- /dev/null
+++ b/entity_example/entity_example.install
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * @file
+ * Install for a basic entity - need to create the base table for our entity.
+ * This table can have as many columns as you need to keep track of
+ * entity-specific data that will not be added via attached fields.
+ * The minimum information for the entity to work is an id and an entity name.
+ */
+
+/**
+ * Implements hook_schema().
+ *
+ * @ingroup entity_example
+ */
+function entity_example_schema() {
+  $schema = array();
+
+  // The name of the table can be any name we choose. However, namespacing the
+  // table with the module name is best practice.
+  $schema['entity_example_basic'] = array(
+    'description' => 'The base table for our basic entity.',
+    'fields' => array(
+      'basic_id' => array(
+        'description' => 'Primary key of the basic entity.',
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+      ),
+      // If we allow multiple bundles, then the schema must handle that;
+      // We'll put it in the 'bundle_type' field to avoid confusion with the
+      // entity type.
+      'bundle_type' => array(
+        'description' => 'The bundle type',
+        'type' => 'text',
+        'size' => 'medium',
+        'not null' => TRUE
+      ),
+      // Additional properties are just things that are common to all
+      // entities and don't require field storage.
+      'item_description' => array(
+        'description' => 'A description of the item',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'created' => array(
+        'description' => 'The Unix timestamp of the entity creation time.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+    ),
+    'primary key' => array('basic_id'),
+  );
+
+  return $schema;
+}
+
+/*
+ * Implements hook_uninstall().
+ *
+ * At uninstall time we'll notify field.module that the entity was deleted
+ * so that attached fields can be cleaned up.
+ *
+ * @ingroup entity_example
+ */
+
+function entity_example_uninstall() {
+  //field_attach_delete_bundle('entity_example_basic', 'first_example_bundle');
+}
diff --git a/entity_example/entity_example.module b/entity_example/entity_example.module
new file mode 100644
index 0000000..cb942ad
--- /dev/null
+++ b/entity_example/entity_example.module
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * @file
+ */
+
+/**
+ * Implements hook_menu().
+ */
+function entity_example_menu() {
+
+  $items['examples/entity_example'] = array(
+    'title' => 'Entity Example',
+    'route' => 'entity_example_info',
+//    'page callback' => 'entity_example_info_page',
+//    'access arguments' => array('view any entity_example_basic entity'),
+  );
+  return $items;
+
+  // This provides a place for Field API to hang its own
+  // interface and has to be the same as what was defined
+  // in basic_entity_info() above.
+  $items['admin/structure/entity_example_basic/manage'] = array(
+    'title' => 'Administer entity_example_basic entity type',
+    'route' => 'entity_example',
+//    'page callback' => 'entity_example_basic_list_entities',
+//    'access arguments' => array('administer entity_example_basic entities'),
+  );
+
+  // Add example entities.
+  $items['admin/structure/entity_example_basic/manage/add'] = array(
+    'title' => 'Add an Entity Example Basic Entity',
+    'route' => 'entity_example',
+//    'page callback' => 'entity_example_basic_add',
+//    'access arguments' => array('create entity_example_basic entities'),
+    'type' => MENU_LOCAL_ACTION,
+  );
+
+  // List of all entity_example_basic entities.
+  $items['admin/structure/entity_example_basic/manage/list'] = array(
+    'title' => 'List',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+  );
+
+  // The page to view our entities - needs to follow what
+  // is defined in basic_uri and will use load_basic to retrieve
+  // the necessary entity info.
+  $items['examples/entity_example/basic/%entity_example_basic'] = array(
+    'title callback' => 'entity_example_basic_title',
+    'title arguments' => array(3),
+    'route' => 'entity_example',
+//    'page callback' => 'entity_example_basic_view',
+//    'page arguments' => array(3),
+//    'access arguments' => array('view any entity_example_basic entity'),
+  );
+
+  // 'View' tab for an individual entity page.
+  $items['examples/entity_example/basic/%entity_example_basic/view'] = array(
+    'title' => 'View',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => -10,
+  );
+
+  // 'Edit' tab for an individual entity page.
+  $items['examples/entity_example/basic/%entity_example_basic/edit'] = array(
+    'title' => 'Edit',
+    'route' => 'entity_example',
+//    'page callback' => 'drupal_get_form',
+//    'page arguments' => array('entity_example_basic_form', 3),
+//    'access arguments' => array('edit any entity_example_basic entity'),
+    'type' => MENU_LOCAL_TASK,
+  );
+
+  // Add example entities.
+  $items['examples/entity_example/basic/add'] = array(
+    'title' => 'Add an Entity Example Basic Entity',
+    'route' => 'entity_example',
+//    'page callback' => 'entity_example_basic_add',
+//    'access arguments' => array('create entity_example_basic entities'),
+  );
+
+  return $items;
+}
+
+/**
+ * Implements hook_permission().
+ */
+function entity_example_permission() {
+  $permissions = array(
+    'administer entity_example_basic entities' => array(
+      'title' => t('Administer entity_example_basic entities'),
+    ),
+    'view any entity_example_basic entity' => array(
+      'title' => t('View any Entity Example Basic entity'),
+    ),
+    'edit any entity_example_basic entity' => array(
+      'title' => t('Edit any Entity Example Basic entity'),
+    ),
+    'create entity_example_basic entities' => array(
+      'title' => t('Create Entity Example Basic Entities'),
+    ),
+  );
+  return $permissions;
+}
+
+/**
+ * Loads multiple basic entities.
+ *
+ * We only need to pass this request along to entity_load(), which
+ * will in turn call the load() method of our entity controller class.
+ */
+function entity_example_basic_load_multiple($basic_ids = FALSE, $conditions = array(), $reset = FALSE) {
+  return entity_load('entity_example_basic', $basic_ids, $conditions, $reset);
+}
diff --git a/entity_example/entity_example.routing.yml b/entity_example/entity_example.routing.yml
new file mode 100644
index 0000000..506c257
--- /dev/null
+++ b/entity_example/entity_example.routing.yml
@@ -0,0 +1,6 @@
+entity_example_info:
+  path: 'examples/entity_example'
+  defaults:
+    _content: '\Drupal\entity_example\Controller\EntityExampleController::infoPage'
+  requirements:
+    _permission: 'view any entity_example_basic entity'
diff --git a/entity_example/lib/Drupal/entity_example/Controller/EntityExampleController.php b/entity_example/lib/Drupal/entity_example/Controller/EntityExampleController.php
new file mode 100644
index 0000000..2bc1593
--- /dev/null
+++ b/entity_example/lib/Drupal/entity_example/Controller/EntityExampleController.php
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\entity_example\Controller\EntityExampleController.
+ */
+
+namespace Drupal\entity_example\Controller;
+
+use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
+
+/**
+ * Controller routines for Entity Example routes.
+ */
+class EntityExampleController {
+
+  /**
+   * Displays a page with a descriptive page.
+   *
+   * Our router maps this method to the path 'examples/entity_example'.
+   */
+  function infoPage() {
+    $content['preface'] = array(
+      '#type' => 'item',
+      '#markup' => t('The entity example provides a simple example entity.')
+    );
+    if (user_access('administer entity_example_basic entities')) {
+      $content['preface']['#markup'] = t('You can administer these and add fields and change the view !link.', array('!link' => l(t('here'), 'admin/structure/entity_example_basic/manage'))
+      );
+    }
+    $content['table'] = $this->listEntities();
+
+    return $content;
+  }
+
+  /**
+   * Returns a render array with all entity_example_basic entities.
+   *
+   * In this basic example we know that there won't be many entities,
+   * so we'll just load them all for display. See pager_example.module
+   * to implement a pager. Most implementations would probably do this
+   * with the contrib Entity API module, or a view using views module,
+   * but we avoid using non-core features in the Examples project.
+   *
+   * @see pager_example.module
+   */
+  function listEntities() {
+    $content = array();
+    // Load all of our entities.
+    $entities = entity_example_basic_load_multiple();
+    if (!empty($entities)) {
+      foreach ($entities as $entity) {
+        // Create tabular rows for our entities.
+        $rows[] = array(
+          'data' => array(
+            'id' => $entity->basic_id,
+            'item_description' => l($entity->item_description, 'examples/entity_example/basic/' . $entity->basic_id),
+            'bundle' => $entity->bundle_type,
+          ),
+        );
+      }
+      // Put our entities into a themed table. See theme_table() for details.
+      $content['entity_table'] = array(
+        '#theme' => 'table',
+        '#rows' => $rows,
+        '#header' => array(t('ID'), t('Item Description'), t('Bundle')),
+      );
+    }
+    else {
+      // There were no entities. Tell the user.
+      $content[] = array(
+        '#type' => 'item',
+        '#markup' => t('No entity_example_basic entities currently exist.'),
+      );
+    }
+    return $content;
+  }
+
+}
diff --git a/entity_example/lib/Drupal/entity_example/Entity/ExampleBasicEntity.php b/entity_example/lib/Drupal/entity_example/Entity/ExampleBasicEntity.php
new file mode 100644
index 0000000..d68a203
--- /dev/null
+++ b/entity_example/lib/Drupal/entity_example/Entity/ExampleBasicEntity.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Drupal\entity_example\Entity;
+
+use Drupal\Core\Entity;
+use Drupal\Core\Entity\Annotation\EntityType;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * Defines the comment entity class.
+ *
+ * @EntityType(
+ *   id = "entity_example_basic",
+ *   label = @Translation("Example Basic Entity"),
+ *   bundle_label = @Translation("Content type"),
+ *   module = "entity_example",
+ *   controllers = {
+ *     "storage" = "Drupal\Core\Entity\DatabaseStorageControllerNG",
+ *     "access" = "Drupal\Core\Entity\EntityAccessControllerBase",
+ *     "render" = "Drupal\Core\Entity\EntityRenderControllerBase",
+ *     "form" = {
+ *       "default" = "Drupal\comment\CommentFormController",
+ *       "delete" = "Drupal\comment\Form\DeleteForm"
+ *     },
+ *     "translation" = "Drupal\comment\CommentTranslationController"
+ *   },
+ *   base_table = "entity_example_basic",
+ *   uri_callback = "entity_example_basic_uri",
+ *   fieldable = TRUE,
+ *   translatable = TRUE,
+ *   render_cache = FALSE,
+ *   route_base_path = "admin/structure/comments/manage/{bundle}",
+ *   entity_keys = {
+ *     "id" = "basic_id",
+ *     "bundle" = "bundle_type"
+ *   },
+ *   bundle_keys = {
+ *     "bundle" = "bundle_type"
+ *   },
+ *   links = {
+ *     "canonical" = "/comment/{comment}",
+ *     "edit-form" = "/comment/{comment}/edit"
+ *   }
+ * )
+ */
+class ExampleBasicEntity extends Entity {
+  //put your code here
+}
