diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..304901598
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,39 @@
+dist: xenial
+language: python
+
+cache: apt
+before_install:
+ - sudo apt update
+ - sudo apt install curl
+ - sudo apt install nodejs npm
+ - npm install -g yarn
+ - sudo curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
+ - source $HOME/.poetry/env
+install:
+ - bash scripts/install.sh
+ - bash scripts/build.sh
+
+script: cd $WORK_DIR && eval $TEST_CMD
+
+matrix:
+ include:
+ - name: "black"
+ python: 3.7
+ env:
+ - WORK_DIR="./"
+ - TEST_CMD="black --verbose ."
+ - name: "flake8"
+ python: 3.7
+ env:
+ - WORK_DIR="src/py"
+ - TEST_CMD="flake8"
+ - name: "python-3.6"
+ python: 3.6
+ env:
+ - WORK_DIR="src/py"
+ - TEST_CMD="pytest"
+ - name: "python-3.7"
+ python: 3.7
+ env:
+ - WORK_DIR="src/py"
+ - TEST_CMD="pytest"
diff --git a/README.md b/README.md
index a179bc6bd..d040cba8a 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,9 @@
# iDOM
+
+
+
+
Libraries for defining and controlling interactive webpages with Python 3.6 and above.
* [Python Documentation](https://github.com/rmorshea/idom/blob/master/idom/py/README.md)
diff --git a/scripts/build.sh b/scripts/build.sh
index cfe69ba50..209fb492e 100644
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -1,4 +1,6 @@
-cd idom
+set -e
+
+cd src
# clean up possible old install
if [ -d "py/idom/static" ]; then
diff --git a/scripts/install.sh b/scripts/install.sh
index 7c502f048..c8ab46a24 100644
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -1,3 +1,20 @@
-cd purly/py
-pip install .
-cd ../
+set -e
+
+# Javascript
+# ==========
+
+cd src/js
+
+yarn
+yarn setup
+
+cd ../../
+
+# Python
+# ======
+
+cd src/py
+
+poetry install
+
+cd ../../
diff --git a/idom/js/.gitignore b/src/js/.gitignore
similarity index 100%
rename from idom/js/.gitignore
rename to src/js/.gitignore
diff --git a/idom/js/README.md b/src/js/README.md
similarity index 100%
rename from idom/js/README.md
rename to src/js/README.md
diff --git a/idom/js/lerna.json b/src/js/lerna.json
similarity index 100%
rename from idom/js/lerna.json
rename to src/js/lerna.json
diff --git a/idom/js/package.json b/src/js/package.json
similarity index 100%
rename from idom/js/package.json
rename to src/js/package.json
diff --git a/idom/js/packages/idom-jupyter-widget-hook/README.md b/src/js/packages/idom-jupyter-widget-hook/README.md
similarity index 100%
rename from idom/js/packages/idom-jupyter-widget-hook/README.md
rename to src/js/packages/idom-jupyter-widget-hook/README.md
diff --git a/idom/js/packages/idom-jupyter-widget-hook/package.json b/src/js/packages/idom-jupyter-widget-hook/package.json
similarity index 100%
rename from idom/js/packages/idom-jupyter-widget-hook/package.json
rename to src/js/packages/idom-jupyter-widget-hook/package.json
diff --git a/idom/js/packages/idom-jupyter-widget-hook/public/favicon.ico b/src/js/packages/idom-jupyter-widget-hook/public/favicon.ico
similarity index 100%
rename from idom/js/packages/idom-jupyter-widget-hook/public/favicon.ico
rename to src/js/packages/idom-jupyter-widget-hook/public/favicon.ico
diff --git a/idom/js/packages/idom-jupyter-widget-hook/public/index.html b/src/js/packages/idom-jupyter-widget-hook/public/index.html
similarity index 100%
rename from idom/js/packages/idom-jupyter-widget-hook/public/index.html
rename to src/js/packages/idom-jupyter-widget-hook/public/index.html
diff --git a/idom/js/packages/idom-jupyter-widget-hook/public/manifest.json b/src/js/packages/idom-jupyter-widget-hook/public/manifest.json
similarity index 100%
rename from idom/js/packages/idom-jupyter-widget-hook/public/manifest.json
rename to src/js/packages/idom-jupyter-widget-hook/public/manifest.json
diff --git a/idom/js/packages/idom-jupyter-widget-hook/src/index.js b/src/js/packages/idom-jupyter-widget-hook/src/index.js
similarity index 100%
rename from idom/js/packages/idom-jupyter-widget-hook/src/index.js
rename to src/js/packages/idom-jupyter-widget-hook/src/index.js
diff --git a/idom/js/packages/idom-layout/.babelrc b/src/js/packages/idom-layout/.babelrc
similarity index 100%
rename from idom/js/packages/idom-layout/.babelrc
rename to src/js/packages/idom-layout/.babelrc
diff --git a/idom/js/packages/idom-layout/.eslintrc.js b/src/js/packages/idom-layout/.eslintrc.js
similarity index 100%
rename from idom/js/packages/idom-layout/.eslintrc.js
rename to src/js/packages/idom-layout/.eslintrc.js
diff --git a/idom/js/packages/idom-layout/README.md b/src/js/packages/idom-layout/README.md
similarity index 100%
rename from idom/js/packages/idom-layout/README.md
rename to src/js/packages/idom-layout/README.md
diff --git a/idom/js/packages/idom-layout/config/jest/test-setup.js b/src/js/packages/idom-layout/config/jest/test-setup.js
similarity index 100%
rename from idom/js/packages/idom-layout/config/jest/test-setup.js
rename to src/js/packages/idom-layout/config/jest/test-setup.js
diff --git a/idom/js/packages/idom-layout/config/jest/test-shim.js b/src/js/packages/idom-layout/config/jest/test-shim.js
similarity index 100%
rename from idom/js/packages/idom-layout/config/jest/test-shim.js
rename to src/js/packages/idom-layout/config/jest/test-shim.js
diff --git a/idom/js/packages/idom-layout/package.json b/src/js/packages/idom-layout/package.json
similarity index 100%
rename from idom/js/packages/idom-layout/package.json
rename to src/js/packages/idom-layout/package.json
diff --git a/idom/js/packages/idom-layout/src/index.js b/src/js/packages/idom-layout/src/index.js
similarity index 100%
rename from idom/js/packages/idom-layout/src/index.js
rename to src/js/packages/idom-layout/src/index.js
diff --git a/idom/js/packages/idom-simple-client/README.md b/src/js/packages/idom-simple-client/README.md
similarity index 100%
rename from idom/js/packages/idom-simple-client/README.md
rename to src/js/packages/idom-simple-client/README.md
diff --git a/idom/js/packages/idom-simple-client/package.json b/src/js/packages/idom-simple-client/package.json
similarity index 100%
rename from idom/js/packages/idom-simple-client/package.json
rename to src/js/packages/idom-simple-client/package.json
diff --git a/idom/js/packages/idom-simple-client/public/favicon.ico b/src/js/packages/idom-simple-client/public/favicon.ico
similarity index 100%
rename from idom/js/packages/idom-simple-client/public/favicon.ico
rename to src/js/packages/idom-simple-client/public/favicon.ico
diff --git a/idom/js/packages/idom-simple-client/public/index.html b/src/js/packages/idom-simple-client/public/index.html
similarity index 100%
rename from idom/js/packages/idom-simple-client/public/index.html
rename to src/js/packages/idom-simple-client/public/index.html
diff --git a/idom/js/packages/idom-simple-client/public/manifest.json b/src/js/packages/idom-simple-client/public/manifest.json
similarity index 100%
rename from idom/js/packages/idom-simple-client/public/manifest.json
rename to src/js/packages/idom-simple-client/public/manifest.json
diff --git a/idom/js/packages/idom-simple-client/src/index.css b/src/js/packages/idom-simple-client/src/index.css
similarity index 100%
rename from idom/js/packages/idom-simple-client/src/index.css
rename to src/js/packages/idom-simple-client/src/index.css
diff --git a/idom/js/packages/idom-simple-client/src/index.js b/src/js/packages/idom-simple-client/src/index.js
similarity index 86%
rename from idom/js/packages/idom-simple-client/src/index.js
rename to src/js/packages/idom-simple-client/src/index.js
index 1d1a713a5..ae9bce173 100644
--- a/idom/js/packages/idom-simple-client/src/index.js
+++ b/src/js/packages/idom-simple-client/src/index.js
@@ -17,4 +17,4 @@ if (secure) {
let endpoint = protocol + "//" + url.join("/");
const mount = document.getElementById("root");
-ReactDOM.render(, mount);
+ReactDOM.render(, mount);
diff --git a/idom/js/yarn.lock b/src/js/yarn.lock
similarity index 100%
rename from idom/js/yarn.lock
rename to src/js/yarn.lock
diff --git a/idom/py/.flake8 b/src/py/.flake8
similarity index 100%
rename from idom/py/.flake8
rename to src/py/.flake8
diff --git a/idom/py/.gitignore b/src/py/.gitignore
similarity index 100%
rename from idom/py/.gitignore
rename to src/py/.gitignore
diff --git a/idom/py/.pre-commit-config.yaml b/src/py/.pre-commit-config.yaml
similarity index 100%
rename from idom/py/.pre-commit-config.yaml
rename to src/py/.pre-commit-config.yaml
diff --git a/idom/py/LICENSE b/src/py/LICENSE
similarity index 100%
rename from idom/py/LICENSE
rename to src/py/LICENSE
diff --git a/idom/py/README.md b/src/py/README.md
similarity index 100%
rename from idom/py/README.md
rename to src/py/README.md
diff --git a/idom/py/idom/__init__.py b/src/py/idom/__init__.py
similarity index 97%
rename from idom/py/idom/__init__.py
rename to src/py/idom/__init__.py
index e129b0a45..0e50b6482 100644
--- a/idom/py/idom/__init__.py
+++ b/src/py/idom/__init__.py
@@ -18,6 +18,7 @@
"Events",
"Layout",
"node",
+ "nodes",
"SimpleServer",
"SimpleWebServer",
"State",
diff --git a/idom/py/idom/bunch.py b/src/py/idom/bunch.py
similarity index 95%
rename from idom/py/idom/bunch.py
rename to src/py/idom/bunch.py
index 6671ed697..4ca6dc7c8 100644
--- a/idom/py/idom/bunch.py
+++ b/src/py/idom/bunch.py
@@ -1,6 +1,6 @@
from collections.abc import Mapping, MutableMapping
-from typing import Iterator, Tuple, Any
+from typing import Iterator, Any
class StaticBunch(Mapping):
diff --git a/idom/py/idom/display.py b/src/py/idom/display.py
similarity index 100%
rename from idom/py/idom/display.py
rename to src/py/idom/display.py
diff --git a/idom/py/idom/element.py b/src/py/idom/element.py
similarity index 100%
rename from idom/py/idom/element.py
rename to src/py/idom/element.py
diff --git a/idom/py/idom/helpers.py b/src/py/idom/helpers.py
similarity index 100%
rename from idom/py/idom/helpers.py
rename to src/py/idom/helpers.py
diff --git a/idom/py/idom/layout.py b/src/py/idom/layout.py
similarity index 100%
rename from idom/py/idom/layout.py
rename to src/py/idom/layout.py
diff --git a/idom/py/idom/nodes.py b/src/py/idom/nodes.py
similarity index 100%
rename from idom/py/idom/nodes.py
rename to src/py/idom/nodes.py
diff --git a/idom/py/idom/py.typed b/src/py/idom/py.typed
similarity index 100%
rename from idom/py/idom/py.typed
rename to src/py/idom/py.typed
diff --git a/idom/py/idom/server/__init__.py b/src/py/idom/server/__init__.py
similarity index 100%
rename from idom/py/idom/server/__init__.py
rename to src/py/idom/server/__init__.py
diff --git a/idom/py/idom/server/base.py b/src/py/idom/server/base.py
similarity index 100%
rename from idom/py/idom/server/base.py
rename to src/py/idom/server/base.py
diff --git a/idom/py/idom/server/simple.py b/src/py/idom/server/simple.py
similarity index 100%
rename from idom/py/idom/server/simple.py
rename to src/py/idom/server/simple.py
diff --git a/idom/py/idom/utils.py b/src/py/idom/utils.py
similarity index 100%
rename from idom/py/idom/utils.py
rename to src/py/idom/utils.py
diff --git a/idom/py/mypy.ini b/src/py/mypy.ini
similarity index 100%
rename from idom/py/mypy.ini
rename to src/py/mypy.ini
diff --git a/idom/py/poetry.lock b/src/py/poetry.lock
similarity index 100%
rename from idom/py/poetry.lock
rename to src/py/poetry.lock
diff --git a/idom/py/pyproject.toml b/src/py/pyproject.toml
similarity index 100%
rename from idom/py/pyproject.toml
rename to src/py/pyproject.toml
diff --git a/idom/py/scripts/setup-linux-dev.sh b/src/py/scripts/setup-linux-dev.sh
similarity index 100%
rename from idom/py/scripts/setup-linux-dev.sh
rename to src/py/scripts/setup-linux-dev.sh
diff --git a/idom/py/tests/__init__.py b/src/py/tests/__init__.py
similarity index 100%
rename from idom/py/tests/__init__.py
rename to src/py/tests/__init__.py
diff --git a/idom/py/tests/conftest.py b/src/py/tests/conftest.py
similarity index 100%
rename from idom/py/tests/conftest.py
rename to src/py/tests/conftest.py
diff --git a/idom/py/tests/test_element.py b/src/py/tests/test_element.py
similarity index 100%
rename from idom/py/tests/test_element.py
rename to src/py/tests/test_element.py
diff --git a/idom/py/tests/test_helpers.py b/src/py/tests/test_helpers.py
similarity index 100%
rename from idom/py/tests/test_helpers.py
rename to src/py/tests/test_helpers.py
diff --git a/idom/py/tests/test_layout.py b/src/py/tests/test_layout.py
similarity index 100%
rename from idom/py/tests/test_layout.py
rename to src/py/tests/test_layout.py
diff --git a/idom/py/tests/utils.py b/src/py/tests/utils.py
similarity index 100%
rename from idom/py/tests/utils.py
rename to src/py/tests/utils.py