diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..21f01d0
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,7 @@
+[build-system]
+
+requires = ["setuptools",
+            "setuptools_scm",
+            "wheel"]
+
+build-backend = 'setuptools.build_meta'
\ No newline at end of file
diff --git a/setup.cfg b/setup.cfg
index 44a3246..160a515 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -32,4 +32,4 @@ install_requires =
     sphinx
 
 # version should be PEP440 compatible (http://www.python.org/dev/peps/pep-0440)
-version = 0.3.7
+version = 1.0.0
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..0a18bb0
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,103 @@
+[tox]
+envlist =
+    py{36,37,38}-test{,-alldeps,-devdeps}{,-cov}
+    py{36,37,38}-test-numpy{116,117,118}
+    py{36,37,38}-test-astropy{30,40,lts}
+    py{36,37,38}-test-external
+    build_docs
+    linkcheck
+    codestyle
+requires =
+    setuptools >= 30.3.0
+    pip >= 19.3.1
+isolated_build = true
+indexserver =
+    NIGHTLY = https://pypi.anaconda.org/scipy-wheels-nightly/simple
+
+[testenv]
+# Suppress display of matplotlib plots generated during docs build
+setenv =
+    MPLBACKEND=agg
+    # Disable the accelerate linear algebra library when running on macos as
+    # latest numpy versions do not work with it
+    NPY_BLAS_ORDER=
+    NPY_LAPACK_ORDER=
+
+# Pass through the following environment variables which may be needed for the CI
+passenv = HOME WINDIR LC_ALL LC_CTYPE CC CI TRAVIS
+
+# Run the tests in a temporary directory to make sure that we don't import
+# this package from the source tree
+changedir = .tmp/{envname}
+
+# tox environments are constructed with so-called 'factors' (or terms)
+# separated by hyphens, e.g. test-devdeps-cov. Lines below starting with factor:
+# will only take effect if that factor is included in the environment name. To
+# see a list of example environments that can be run, along with a description,
+# run:
+#
+#     tox -l -v
+#
+description =
+    run tests
+    alldeps: with all optional dependencies
+    devdeps: with the latest developer version of key dependencies
+    oldestdeps: with the oldest supported version of key dependencies
+    cov: and test coverage
+    numpy116: with numpy 1.16.*
+    numpy117: with numpy 1.17.*
+    numpy118: with numpy 1.18.*
+    astropy30: with astropy 3.0.*
+    astropy40: with astropy 4.0.*
+    astropylts: with the latest astropy LTS
+    external: with outside packages as dependencies
+
+# The following provides some specific pinnings for key packages
+deps =
+
+    numpy116: numpy==1.16.*
+    numpy117: numpy==1.17.*
+    numpy118: numpy==1.18.*
+
+    astropy30: astropy==3.0.*
+    astropy40: astropy==4.0.*
+    astropylts: astropy==4.0.*
+
+    devdeps: :NIGHTLY:numpy
+    devdeps: git+https://github.com/astropy/astropy.git#egg=astropy
+
+    external: asdf
+    external: git+https://github.com/spacetelescope/jwst@stable
+
+# The following indicates which extras_require from setup.cfg will be installed
+extras =
+    test
+    alldeps: all
+
+commands =
+    pip freeze
+    !cov: pytest --pyargs specutils {toxinidir}/docs {posargs}
+    cov: pytest --pyargs specutils {toxinidir}/docs --cov specutils --cov-config={toxinidir}/setup.cfg {posargs}
+
+[testenv:build_docs]
+changedir = docs
+description = invoke sphinx-build to build the HTML docs
+extras = docs
+commands =
+    pip freeze
+    sphinx-build -W -b html . _build/html
+
+[testenv:linkcheck]
+changedir = docs
+description = check the links in the HTML docs
+extras = docs
+commands =
+    pip freeze
+    sphinx-build -W -b linkcheck . _build/html
+
+[testenv:codestyle]
+skip_install = true
+changedir = .
+description = check code style, e.g. with flake8
+deps = flake8
+commands = flake8 specutils --count --max-line-length=100 --select=E101,W191,W291,W292,W293,W391,E111,E112,E113,E502,E722,E901,E902
\ No newline at end of file