diff --git a/packages/redux-devtools-inspector/.babelrc b/packages/redux-devtools-inspector/.babelrc
new file mode 100644
index 00000000..162b8b90
--- /dev/null
+++ b/packages/redux-devtools-inspector/.babelrc
@@ -0,0 +1,15 @@
+{
+ "presets": ["es2015", "stage-0", "react"],
+ "plugins": ["transform-runtime"],
+ "env": {
+ "development": {
+ "plugins": [["react-transform", {
+ "transforms": [{
+ "transform": "react-transform-hmr",
+ "imports": ["react"],
+ "locals": ["module"]
+ }]
+ }]]
+ }
+ }
+}
diff --git a/packages/redux-devtools-inspector/.eslintrc b/packages/redux-devtools-inspector/.eslintrc
new file mode 100644
index 00000000..59aac234
--- /dev/null
+++ b/packages/redux-devtools-inspector/.eslintrc
@@ -0,0 +1,57 @@
+{
+ "parser": "babel-eslint",
+ "rules": {
+ "no-undef": ["error"],
+ "no-trailing-spaces": ["warn"],
+ "space-before-blocks": ["warn", "always"],
+ "no-unused-expressions": ["off"],
+ "no-underscore-dangle": ["off"],
+ "quote-props": ["warn", "as-needed"],
+ "no-multi-spaces": ["off"],
+ "no-unused-vars": ["warn"],
+ "no-loop-func": ["off"],
+ "key-spacing": ["off"],
+ "max-len": ["warn", 100],
+ "strict": ["off"],
+ "eol-last": ["warn"],
+ "no-console": ["warn"],
+ "indent": ["warn", 2],
+ "quotes": ["warn", "single", "avoid-escape"],
+ "curly": ["off"],
+ "jsx-quotes": ["warn", "prefer-single"],
+
+ "react/jsx-boolean-value": "warn",
+ "react/jsx-no-undef": "error",
+ "react/jsx-uses-react": "warn",
+ "react/jsx-uses-vars": "warn",
+ "react/no-did-mount-set-state": "warn",
+ "react/no-did-update-set-state": "warn",
+ "react/no-multi-comp": "off",
+ "react/no-unknown-property": "error",
+ "react/react-in-jsx-scope": "error",
+ "react/self-closing-comp": "warn",
+ "react/jsx-wrap-multilines": "warn",
+
+ "generator-star-spacing": "off",
+ "new-cap": "off",
+ "object-curly-spacing": "off",
+ "object-shorthand": "off",
+
+ "babel/generator-star-spacing": "warn",
+ "babel/new-cap": "warn",
+ "babel/object-curly-spacing": ["warn", "always"],
+ "babel/object-shorthand": "warn"
+ },
+ "plugins": [
+ "react",
+ "babel"
+ ],
+ "settings": {
+ "ecmascript": 6,
+ "jsx": true
+ },
+ "env": {
+ "browser": true,
+ "node": true
+ }
+}
diff --git a/packages/redux-devtools-inspector/.npmignore b/packages/redux-devtools-inspector/.npmignore
new file mode 100644
index 00000000..7e7ce1e8
--- /dev/null
+++ b/packages/redux-devtools-inspector/.npmignore
@@ -0,0 +1,8 @@
+static
+src
+demo
+.*
+webpack.config.js
+index.html
+*.gif
+*.png
diff --git a/packages/redux-devtools-inspector/LICENSE b/packages/redux-devtools-inspector/LICENSE
new file mode 100644
index 00000000..32950549
--- /dev/null
+++ b/packages/redux-devtools-inspector/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2015 Alexander Kuznetsov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/redux-devtools-inspector/README.md b/packages/redux-devtools-inspector/README.md
new file mode 100644
index 00000000..12650821
--- /dev/null
+++ b/packages/redux-devtools-inspector/README.md
@@ -0,0 +1,68 @@
+# redux-devtools-inspector
+
+[](https://badge.fury.io/js/redux-devtools-inspector)
+
+A state monitor for [Redux DevTools](https://github.com/gaearon/redux-devtools) that provides a convenient way to inspect "real world" app states that could be complicated and deeply nested.
+
+
+
+### Installation
+
+```
+npm install --save-dev redux-devtools-inspector
+```
+
+### Usage
+
+You can use `Inspector` as the only monitor in your app:
+
+##### `containers/DevTools.js`
+
+```js
+import React from 'react';
+import { createDevTools } from 'redux-devtools';
+import Inspector from 'redux-devtools-inspector';
+
+export default createDevTools(
+
+);
+```
+
+Then you can render `` to any place inside app or even into a separate popup window.
+
+Alternative, you can use it together with [`DockMonitor`](https://github.com/gaearon/redux-devtools-dock-monitor) to make it dockable.
+Consult the [`DockMonitor` README](https://github.com/gaearon/redux-devtools-dock-monitor) for details of this approach.
+
+[Read how to start using Redux DevTools.](https://github.com/gaearon/redux-devtools)
+
+### Features
+
+The inspector displays a list of actions and a preview panel which shows the state after the selected action and a diff with the previous state. If no actions are selected, the last state is shown.
+
+You may pin a certain part of the state to only track its changes.
+
+### Props
+
+Name | Type | Description
+------------------ | ---------------- | -------------
+`theme` | Object or string | Contains either [base16](https://github.com/chriskempson/base16) theme name or object, that can be `base16` colors map or object containing classnames or styles.
+`invertTheme` | Boolean | Inverts theme color luminance, making light theme out of dark theme and vice versa.
+`supportImmutable` | Boolean | Better `Immutable` rendering in `Diff` (can affect performance if state has huge objects/arrays). `false` by default.
+`tabs` | Array or function | Overrides list of tabs (see below)
+`diffObjectHash` | Function | Optional callback for better array handling in diffs (see [jsondiffpatch docs](https://github.com/benjamine/jsondiffpatch/blob/master/docs/arrays.md))
+`diffPropertyFilter` | Function | Optional callback for ignoring particular props in diff (see [jsondiffpatch docs](https://github.com/benjamine/jsondiffpatch#options))
+
+
+If `tabs` is a function, it receives a list of default tabs and should return updated list, for example:
+```
+defaultTabs => [...defaultTabs, { name: 'My Tab', component: MyTab }]
+```
+If `tabs` is an array, only provided tabs are rendered.
+
+`component` is provided with `action` and other props, see [`ActionPreview.jsx`](src/ActionPreview.jsx#L42) for reference.
+
+Usage example: [`redux-devtools-test-generator`](https://github.com/zalmoxisus/redux-devtools-test-generator#containersdevtoolsjs).
+
+### License
+
+MIT
diff --git a/packages/redux-devtools-inspector/demo.gif b/packages/redux-devtools-inspector/demo.gif
new file mode 100644
index 00000000..382294f2
Binary files /dev/null and b/packages/redux-devtools-inspector/demo.gif differ
diff --git a/packages/redux-devtools-inspector/demo/src/.noderequirer.json b/packages/redux-devtools-inspector/demo/src/.noderequirer.json
new file mode 100644
index 00000000..20e76308
--- /dev/null
+++ b/packages/redux-devtools-inspector/demo/src/.noderequirer.json
@@ -0,0 +1,3 @@
+{
+ "import": true
+}
diff --git a/packages/redux-devtools-inspector/demo/src/index.html b/packages/redux-devtools-inspector/demo/src/index.html
new file mode 100644
index 00000000..f0a32249
--- /dev/null
+++ b/packages/redux-devtools-inspector/demo/src/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+ <%= htmlWebpackPlugin.options.package.name %>
+
+
+
+
+
+
+
+
+
diff --git a/packages/redux-devtools-inspector/demo/src/js/DemoApp.jsx b/packages/redux-devtools-inspector/demo/src/js/DemoApp.jsx
new file mode 100644
index 00000000..608b8748
--- /dev/null
+++ b/packages/redux-devtools-inspector/demo/src/js/DemoApp.jsx
@@ -0,0 +1,244 @@
+import React from 'react';
+import PageHeader from 'react-bootstrap/lib/PageHeader';
+import { connect } from 'react-redux';
+import pkg from '../../../package.json';
+import Button from 'react-bootstrap/lib/Button';
+import FormGroup from 'react-bootstrap/lib/FormGroup';
+import FormControl from 'react-bootstrap/lib/FormControl';
+import ControlLabel from 'react-bootstrap/lib/ControlLabel';
+import Form from 'react-bootstrap/lib/Form';
+import Col from 'react-bootstrap/lib/Col';
+import InputGroup from 'react-bootstrap/lib/InputGroup';
+import Combobox from 'react-input-enhancements/lib/Combobox';
+import * as base16 from 'base16';
+import * as inspectorThemes from '../../../src/themes';
+import getOptions from './getOptions';
+import { push as pushRoute } from 'react-router-redux';
+
+const styles = {
+ wrapper: {
+ height: '100vh',
+ width: '80%',
+ margin: '0 auto',
+ paddingTop: '1px'
+ },
+ header: {
+ },
+ content: {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ height: '50%'
+ },
+ buttons: {
+ display: 'flex',
+ width: '40rem',
+ justifyContent: 'center',
+ flexWrap: 'wrap'
+ },
+ muted: {
+ color: '#CCCCCC'
+ },
+ button: {
+ margin: '0.5rem'
+ },
+ links: {
+ textAlign: 'center'
+ },
+ link: {
+ margin: '0 0.5rem',
+ cursor: 'pointer',
+ display: 'block'
+ },
+ input: {
+ display: 'inline-block',
+ textAlign: 'left',
+ width: '30rem'
+ }
+};
+
+const themeOptions = [
+ ...Object.keys(inspectorThemes)
+ .map(value => ({ value, label: inspectorThemes[value].scheme })),
+ null,
+ ...Object.keys(base16)
+ .map(value => ({ value, label: base16[value].scheme }))
+ .filter(opt => opt.label)
+];
+
+const ROOT = process.env.NODE_ENV === 'production' ? '/redux-devtools-inspector/' : '/';
+
+function buildUrl(options) {
+ return `${ROOT}?` + [
+ options.useExtension ? 'ext' : '',
+ options.supportImmutable ? 'immutable' : '',
+ options.theme ? 'theme=' + options.theme : '',
+ options.dark ? 'dark' : ''
+ ].filter(s => s).join('&');
+}
+
+class DemoApp extends React.Component {
+ render() {
+ const options = getOptions();
+
+ return (
+