diff --git a/core/core.services.yml b/core/core.services.yml
index 3f68677200..0bbc0b7dc6 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -972,6 +972,11 @@ services:
     tags:
       - { name: paramconverter }
     arguments: ['@entity.manager', '@language_manager']
+  paramconverter.simple_config:
+    class: Drupal\Core\ParamConverter\SimpleConfigConverter
+    tags:
+      - { name: paramconverter }
+    arguments: ['@config.factory']
   paramconverter.entity_revision:
     class: Drupal\Core\ParamConverter\EntityRevisionParamConverter
     tags:
diff --git a/core/lib/Drupal/Core/ParamConverter/SimpleConfigConverter.php b/core/lib/Drupal/Core/ParamConverter/SimpleConfigConverter.php
new file mode 100644
index 0000000000..46ad05881b
--- /dev/null
+++ b/core/lib/Drupal/Core/ParamConverter/SimpleConfigConverter.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Drupal\Core\ParamConverter;
+
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Converts simple configuration.
+ */
+class SimpleConfigConverter implements ParamConverterInterface {
+
+  /**
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * SimpleConfigConverter constructor.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory
+   */
+  public function __construct(ConfigFactoryInterface $configFactory) {
+    $this->configFactory = $configFactory;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function convert($value, $definition, $name, array $defaults) {
+    return $this->configFactory->get($definition['simple_config']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function applies($definition, $name, Route $route) {
+    return !empty($definition['simple_config']);
+  }
+
+}
diff --git a/core/modules/rest/src/Plugin/Deriver/SimpleConfigDeriver.php b/core/modules/rest/src/Plugin/Deriver/SimpleConfigDeriver.php
new file mode 100644
index 0000000000..00e6e71f4b
--- /dev/null
+++ b/core/modules/rest/src/Plugin/Deriver/SimpleConfigDeriver.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace Drupal\rest\Plugin\Deriver;
+
+use Drupal\Core\Config\TypedConfigManagerInterface;
+use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+class SimpleConfigDeriver implements ContainerDeriverInterface {
+
+  /**
+   * List of derivative definitions.
+   *
+   * @var array
+   */
+  protected $derivatives;
+
+  /**
+   * The typed config manager.
+   *
+   * @var \Drupal\Core\Config\TypedConfigManagerInterface
+   */
+  protected $typedConfigManager;
+
+  /**
+   * SimpleConfigDeriver constructor.
+   *
+   * @param \Drupal\Core\Config\TypedConfigManagerInterface $typedConfigManager
+   *   The typed config manager.
+   */
+  public function __construct(TypedConfigManagerInterface $typedConfigManager) {
+    $this->typedConfigManager = $typedConfigManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) {
+    return new static(
+      $container->get('config.typed')
+    );
+  }
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinition($derivative_id, $base_plugin_definition) {
+    if (!isset($this->derivatives)) {
+      $this->getDerivativeDefinitions($base_plugin_definition);
+    }
+    if (isset($this->derivatives[$derivative_id])) {
+      return $this->derivatives[$derivative_id];
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinitions($base_plugin_definition) {
+    if (isset($this->derivatives)) {
+      return $this->derivatives;
+    }
+
+    // Get all simple config and create plugin definition for them.
+    $config_schemas = $this->typedConfigManager->getDefinitions();
+    $simple_config_schemas = array_filter($config_schemas, function ($config_schema) use ($config_schemas) {
+      return $this->isConfigSchema($config_schema, $config_schemas);
+    });
+
+    foreach ($simple_config_schemas as $name => $simple_config_schema) {
+      $this->derivatives[str_replace('.', '_', $name)] = [
+        'id' => 'config_' . str_replace('.', '_', $name),
+        'config_name' => $name,
+        'serialization_class' => '@fixme',
+        'label' => isset($simple_config_schema['label']) ? $simple_config_schema['label'] : 'Config: ' . $name,
+      ] + $base_plugin_definition;
+    }
+
+    return $this->derivatives;
+  }
+
+  protected function isConfigSchema(array $schema, array $all_schemas) {
+    if (empty($schema['type'])) {
+      return FALSE;
+    }
+    if ($schema['type'] === 'config_object') {
+      return TRUE;
+    }
+    elseif (isset($all_schemas[$schema['type']])) {
+      return $this->isConfigSchema($all_schemas[$schema['type']], $all_schemas);
+    }
+    else {
+      return FALSE;
+    }
+  }
+
+}
diff --git a/core/modules/rest/src/Plugin/Type/ResourcePluginManager.php b/core/modules/rest/src/Plugin/Type/ResourcePluginManager.php
index 4dd9ca2d4e..a51120e6e0 100644
--- a/core/modules/rest/src/Plugin/Type/ResourcePluginManager.php
+++ b/core/modules/rest/src/Plugin/Type/ResourcePluginManager.php
@@ -30,7 +30,7 @@ class ResourcePluginManager extends DefaultPluginManager {
   public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
     parent::__construct('Plugin/rest/resource', $namespaces, $module_handler, 'Drupal\rest\Plugin\ResourceInterface', 'Drupal\rest\Annotation\RestResource');
 
-    $this->setCacheBackend($cache_backend, 'rest_plugins');
+//    $this->setCacheBackend($cache_backend, 'rest_plugins');
     $this->alterInfo('rest_resource');
   }
 
diff --git a/core/modules/rest/src/Plugin/rest/resource/SimpleConfigResource.php b/core/modules/rest/src/Plugin/rest/resource/SimpleConfigResource.php
new file mode 100644
index 0000000000..ef4cabbfda
--- /dev/null
+++ b/core/modules/rest/src/Plugin/rest/resource/SimpleConfigResource.php
@@ -0,0 +1,149 @@
+<?php
+
+namespace Drupal\rest\Plugin\rest\resource;
+
+use Drupal\Component\Plugin\DependentPluginInterface;
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Core\Config\StorableConfigBase;
+use Drupal\Core\Config\StorageException;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\rest\Plugin\ResourceBase;
+use Drupal\rest\ResourceResponse;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\rest\ModifiedResourceResponse;
+use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+
+/**
+ * Represents simple config as resources.
+ *
+ * @see \Drupal\rest\Plugin\Deriver\SimpleConfigDeriver
+ *
+ * @RestResource(
+ *   id = "simple_config",
+ *   label = @Translation("Simple config"),
+ *   deriver = "\Drupal\rest\Plugin\Deriver\SimpleConfigDeriver",
+ *   uri_paths = {
+ *     "canonical" = "/config/{simple_config}",
+ *   }
+ * )
+ */
+class SimpleConfigResource extends ResourceBase implements DependentPluginInterface {
+
+  /**
+   * The config factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * The link relation type manager used to create HTTP header links.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $linkRelationTypeManager;
+
+  /**
+   * Constructs a Drupal\rest\Plugin\rest\resource\EntityResource object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager
+   * @param array $serializer_formats
+   *   The available serialization formats.
+   * @param \Psr\Log\LoggerInterface $logger
+   *   A logger instance.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory.
+   * @param \Drupal\Component\Plugin\PluginManagerInterface $link_relation_type_manager
+   *   The link relation type manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, $serializer_formats, LoggerInterface $logger, ConfigFactoryInterface $config_factory, PluginManagerInterface $link_relation_type_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
+    $this->configFactory = $config_factory;
+    $this->linkRelationTypeManager = $link_relation_type_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_type.manager'),
+      $container->getParameter('serializer.formats'),
+      $container->get('logger.factory')->get('rest'),
+      $container->get('config.factory'),
+      $container->get('plugin.manager.link_relation_type')
+    );
+  }
+
+  /**
+   * Responds to entity GET requests.
+   *
+   * @param \Drupal\Core\Config\StorableConfigBase $config
+   * @return \Drupal\rest\ResourceResponse
+   *   The response containing the entity with its accessible fields.
+   */
+  public function get(StorableConfigBase $config) {
+    // @fixme access checking?
+
+    $response = new ResourceResponse($config, 200);
+    $response->addCacheableDependency($config);
+
+    return $response;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function permissions() {
+    // @todo how to implement this?
+    // @see https://www.drupal.org/node/2664780
+    if ($this->configFactory->get('rest.settings')->get('bc_entity_resource_permissions')) {
+      // The default Drupal 8.0.x and 8.1.x behavior.
+      return parent::permissions();
+    }
+    return parent::permissions();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getBaseRoute($canonical_path, $method) {
+    $route = parent::getBaseRoute($canonical_path, $method);
+    $definition = $this->getPluginDefinition();
+
+    $parameters = $route->getOption('parameters') ?: [];
+    // @todo Add a config param converter?
+    $parameters['simple_config']['simple_config'] = $definition['config_name'];
+    $route->setOption('parameters', $parameters);
+
+    return $route;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function availableMethods() {
+    return ['GET'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    return [];
+  }
+
+}
diff --git a/core/modules/serialization/serialization.services.yml b/core/modules/serialization/serialization.services.yml
index dca6094787..0d7f6464d8 100644
--- a/core/modules/serialization/serialization.services.yml
+++ b/core/modules/serialization/serialization.services.yml
@@ -7,6 +7,11 @@ services:
     tags:
       - { name: normalizer }
     arguments: ['@entity.manager']
+  serializer.normalizer.simple_config:
+      class: Drupal\serialization\Normalizer\SimpleConfigNormalizer
+      tags:
+        - { name: normalizer }
+      arguments: ['@entity.manager']
   serializer.normalizer.content_entity:
       class: Drupal\serialization\Normalizer\ContentEntityNormalizer
       tags:
diff --git a/core/modules/serialization/src/Normalizer/SimpleConfigNormalizer.php b/core/modules/serialization/src/Normalizer/SimpleConfigNormalizer.php
new file mode 100644
index 0000000000..b047174b46
--- /dev/null
+++ b/core/modules/serialization/src/Normalizer/SimpleConfigNormalizer.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Drupal\serialization\Normalizer;
+
+use Symfony\Component\Serializer\Exception\CircularReferenceException;
+use Symfony\Component\Serializer\Exception\InvalidArgumentException;
+use Symfony\Component\Serializer\Exception\LogicException;
+use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
+
+class SimpleConfigNormalizer extends NormalizerBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $supportedInterfaceOrClass = '\Drupal\Core\Config\StorableConfigBase';
+
+  /**
+   * {@inheritdoc}
+   */
+  public function normalize($object, $format = NULL, array $context = array()) {
+    /** @var \Drupal\Core\Config\StorableConfigBase $object */
+    return $object->get();
+  }
+
+}
