Repository: GMOD/jbrowse-jupyter (language: python)

Issue:
Update documentation and run github actions with python 3.6
* adds badges and updates documentation
* allows python 3.6
* runs workflows on python 3.6


Discussion / hints:

Fix patch:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..f6314e0
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,145 @@
+# Contributing
+We use conda environments for development.
+
+First install conda. Read the [conda docs](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) for getting started with conda and clone the directory.
+
+## Development
+Now we can
+1. after cloning the repo, cd into jbrowse-jupyter
+```
+$ cd jbrowse-jupyter
+```
+2. create a conda environment and install the dependencies
+```
+$ conda create -n myenv python=3.6
+$ source avtivate myenv
+$ python -m pip install -r requirements.txt
+```
+This command will create a conda environment with python 3.6. 
+
+3. Now you are ready to run the the example
+```
+$ python browser.py
+```
+4. For development with jupyter lab or jupyter notebooks, install
+jupyter lab or jupyter notebook following [these docs](https://jupyter.org/install)
+More about configuring your [jupyter notebook env](https://softwarejargon.com/jupyterlab-and-conda-environment-installation-and-setup/).
+
+5. For testing the package in another environment, you can pip install a specific branch with this command
+```
+$ pip install git+https://github.com/GMOD/jbrowse-jupyter.git@branch
+``` 
+
+## Running the tests and lint
+You can find all the tests in the `tests/` directory
+To run the tests, you can run this command from the root of the repo directory
+```
+$ python -m pytest tests/
+```
+We use flake8 for linting. You can run 
+```
+$ flake8 --count
+```
+from the root of this repo to see any lint errors
+
+## Sphinx Docs
+https://gmod.github.io/jbrowse-jupyter/
+We store the docs in `docs/` directory. Our docs are created with Sphinx.
+Check [this](https://www.sphinx-doc.org/en/master/contents.html) out for Sphinx documentation.
+```
+$ cd docs
+```
+You should see a requirements.txt, Makefile and a make.bat file, docs/ and source/ directories etc
+1. after creating an environment, install the dependencies
+```
+$ conda create -n myenv python=3.6
+$ source activate myenv
+$ python -m pip install -r requirements.txt
+```
+2. Make modifications in the `source` directory
+    - the main entry point for the docs is the source/index.rst
+3. After making any modifications, 
+```
+$ make html
+```
+Run this command from the same place where the Makefile exists.
+you can also run 
+```
+$ make clean
+```
+to delete the contentst of docs/docs directory
+
+5. To view your changes, you can checkout `docs/docs/html/index.html`
+6. When you are ready to publish any changes, make a PR against the gh-pages branch. We host our sphinx docs in github pages, and oushing to the gg-pages will publish the updated docs. Once those are published, you can check out this link to view your live docs https://gmod.github.io/jbrowse-jupyter/
+
+
+
+## Releasing/publishing 
+
+### Testing Pypi
+1. create an account with [test PyPi](https://test.pypi.org/) and `pip install twine`
+
+2. generate an API Token for this 'jbrowse-jupyter' package. You will need to be added as a contributor first
+
+3. Make sure that you have update the version in your setup.py
+
+4. From the root of the directory, run
+```
+$ python setup.py sdist bdist_wheel
+```
+This command will create a source distribution and a wheel in a temporary directory called `dist/` and `build/` at the root of the repo. You will need this when uploading to pypi.
+
+5. Now you can check your tar works by moving the jbrowse-jupyter-<you-version>.tar.gz to your testing env and manually installing it 
+```
+pip installing jbrowse-jupyter-<you-version>.tar.gz
+```
+
+6 if it worked, you can 
+```
+$ twine upload --repository-url https://test.pypi.org/legacy/dist/*
+```
+This will upload to test pypi. The command will prompt you for your username. Simply enter `__token__` and paste the API token that you generated for step 2.
+
+7. Now you can pip install your package in any env and test if it works. When you feel ready to release then you can make a pr to main. 
+
+### Production Pypi
+1. Repeat step 2 but for production [PyPi](https://pypi.org/)
+2. generate an API Token for this 'jbrowse-jupyter' package. You will need to be added as a contributor first
+3. Update the version on setup.py and push to main
+4. Create a tag from main
+5. Draft a release in github
+6. Run
+```
+$ python setup.py sdist bdist_wheel
+```
+and test that you can correctly pip install your tar
+`jbrowse-jupyter-<you-version>.tar.gz`
+7. if it works and you are ready to release
+8. Run 
+```
+twine upload dist/*
+```
+This will upload to pypi. The command will prompt you for your username. Simply enter `__token__` and paste the API token that you generated for step 2.
+9. Test that it works by pip installing in a new env and running your jupyter notebook.
+10. Add your tar and wheel files to your github release, and link to the new version on pypi.
+11. Publish your github release.
+
+
+## Maintenance
+This package depends on `Dash JBrowse`. The repo can be found [here](https://github.com/GMOD/dash_jbrowse). The [Dash JBrowse] package currently has a dependency on the JBrowse React Linear Genome View npm package. In order to keep up with the dependencies, the version of the Browse React Linear Genome View npm package was set up to allow newer versions. If there are any breaking changes, we will need to update the dependencies
+1. Checkout the [dash_jbrowse repo](https://github.com/GMOD/dash_jbrowse/blob/main/CONTRIBUTING.md)
+2. npm install the dependencies
+3. Update the [JBrowse React Linear Genome View npm package](https://www.npmjs.com/package/@jbrowse/react-linear-genome-view)
+4. Make sure the package.json was updated
+5. Test everything works appropriately by running
+```
+$ npm run build
+$ python usage.py
+```
+Verify the app works appropriately
+Run the tests and make a pr to main.
+We can draft a release  following the contributing docs found [here](https://github.com/GMOD/dash_jbrowse/blob/main/CONTRIBUTING.md)
+
+6. Now you can update this package and upgrade the python dash-jbrowse package to the latest version of dash jbrowse.
+7. Follow the release steps mentioned above for jupyter jbrowse
+8. Test that everything works as expected, and you are done!
diff --git a/README.md b/README.md
index 6408442..e3aab6a 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 ![Pytest and flake8](https://github.com/GMOD/jbrowse-jupyter/actions/workflows/push.yml/badge.svg)
 [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/browser.ipynb)
 
-# JBrowse Jupyter
+# [JBrowse Jupyter](https://gmod.github.io/jbrowse-jupyter/)
 
 JBrowse Jupyter is a python package that provides a python interface to JBrowse views.
 
@@ -19,6 +19,12 @@ You can find more information about our Dash JBrowse library [here](https://gith
 
 ## Installation
 
+### Pre-requisites
+* [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html) - for virtual environments
+* [pip](https://packaging.python.org/en/latest/guides/installing-using-linux-tools/) - python package manager
+* [Python](https://docs.python-guide.org/starting/installation/#installation) - 3.6 or greater
+* [Jupyter](https://jupyter.org/install) - jupyter lab or jupyter notebook to run .ipynb files
+
 ### PyPI
 
 ```
diff --git a/browser.ipynb b/browser.ipynb
index 2caa342..4993267 100644
--- a/browser.ipynb
+++ b/browser.ipynb
@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -40,7 +40,7 @@
     "\n",
     "df = pd.DataFrame(data)\n",
     "print(df)\n",
-    "hg38.add_df_track(df, 'track_name', track_id=\"df_track_id\")"
+    "hg38.add_df_track(df, 'track_name', track_id=\"df_track_id\", overwrite=True)"
    ]
   },
   {
@@ -51,7 +51,7 @@
     {
      "output_type": "display_data",
      "data": {
-      "text/plain": "<IPython.lib.display.IFrame at 0x7fc200d84390>",
+      "text/plain": "<IPython.lib.display.IFrame at 0x7f89817c0940>",
       "text/html": "\n        <iframe\n            width=\"100%\"\n            height=\"300\"\n            src=\"http://127.0.0.1:3003/\"\n            frameborder=\"0\"\n            allowfullscreen\n        ></iframe>\n        "
      },
      "metadata": {}
@@ -92,7 +92,7 @@
     {
      "output_type": "display_data",
      "data": {
-      "text/plain": "<IPython.lib.display.IFrame at 0x7fc240432278>",
+      "text/plain": "<IPython.lib.display.IFrame at 0x7f89e1d79d30>",
       "text/html": "\n        <iframe\n            width=\"100%\"\n            height=\"800\"\n            src=\"http://127.0.0.1:8000/\"\n            frameborder=\"0\"\n            allowfullscreen\n        ></iframe>\n        "
      },
      "metadata": {}
diff --git a/browser.py b/browser.py
index cd039b2..c92f173 100644
--- a/browser.py
+++ b/browser.py
@@ -19,7 +19,9 @@
 
 # setting the assembly
 assembly_data = "https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz"
-jbrowse_conf.set_assembly(assembly_data, aliases, ref_name_aliases)
+jbrowse_conf.set_assembly(assembly_data,
+                          aliases=aliases,
+                          ref_name_aliases=ref_name_aliases)
 
 # add a track
 track_data = "https://s3.amazonaws.com/jbrowse.org/genomes/" \
diff --git a/docs/docs/doctrees/contact.doctree b/docs/docs/doctrees/contact.doctree
index 7b993a8..4a0c612 100644
Binary files a/docs/docs/doctrees/contact.doctree and b/docs/docs/doctrees/contact.doctree differ
diff --git a/docs/docs/doctrees/environment.pickle b/docs/docs/doctrees/environment.pickle
index cc23f36..cb16238 100644
Binary files a/docs/docs/doctrees/environment.pickle and b/docs/docs/doctrees/environment.pickle differ
diff --git a/docs/docs/doctrees/index.doctree b/docs/docs/doctrees/index.doctree
index 057fd46..2fa78c6 100644
Binary files a/docs/docs/doctrees/index.doctree and b/docs/docs/doctrees/index.doctree differ
diff --git a/docs/docs/doctrees/installation.doctree b/docs/docs/doctrees/installation.doctree
index b810036..10f63c1 100644
Binary files a/docs/docs/doctrees/installation.doctree and b/docs/docs/doctrees/installation.doctree differ
diff --git a/docs/docs/doctrees/jbrowse_jupyter.doctree b/docs/docs/doctrees/jbrowse_jupyter.doctree
index 152d347..ba2867d 100644
Binary files a/docs/docs/doctrees/jbrowse_jupyter.doctree and b/docs/docs/doctrees/jbrowse_jupyter.doctree differ
diff --git a/docs/docs/doctrees/modules.doctree b/docs/docs/doctrees/modules.doctree
index 0c135ca..cf2e01f 100644
Binary files a/docs/docs/doctrees/modules.doctree and b/docs/docs/doctrees/modules.doctree differ
diff --git a/docs/docs/doctrees/quickstart.doctree b/docs/docs/doctrees/quickstart.doctree
index 8ea992c..e1c0f32 100644
Binary files a/docs/docs/doctrees/quickstart.doctree and b/docs/docs/doctrees/quickstart.doctree differ
diff --git a/docs/docs/doctrees/tutorial.doctree b/docs/docs/doctrees/tutorial.doctree
index ef35f26..60500b5 100644
Binary files a/docs/docs/doctrees/tutorial.doctree and b/docs/docs/doctrees/tutorial.doctree differ
diff --git a/docs/docs/doctrees/util.doctree b/docs/docs/doctrees/util.doctree
index b769a5a..6e1764a 100644
Binary files a/docs/docs/doctrees/util.doctree and b/docs/docs/doctrees/util.doctree differ
diff --git a/docs/docs/html/_sources/jbrowse_jupyter.rst.txt b/docs/docs/html/_sources/jbrowse_jupyter.rst.txt
index d7ff9fb..efc857f 100644
--- a/docs/docs/html/_sources/jbrowse_jupyter.rst.txt
+++ b/docs/docs/html/_sources/jbrowse_jupyter.rst.txt
@@ -1,4 +1,4 @@
-JBrowseConfig
+JBrowseConfig API
 ---------------------------------------
 .. automodule:: jbrowse_jupyter.jbrowse_config
    :members:
diff --git a/docs/docs/html/index.html b/docs/docs/html/index.html
index 6627daf..b981b09 100644
--- a/docs/docs/html/index.html
+++ b/docs/docs/html/index.html
@@ -85,7 +85,7 @@ <h1>Welcome to JBrowse Jupyter’s documentation!<a class="headerlink" href="#we
 </li>
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="util.html">Creating components</a></li>
-<li class="toctree-l2"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig</a></li>
+<li class="toctree-l2"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig API</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials</a></li>
diff --git a/docs/docs/html/jbrowse_jupyter.html b/docs/docs/html/jbrowse_jupyter.html
index 089e84c..d52f2f7 100644
--- a/docs/docs/html/jbrowse_jupyter.html
+++ b/docs/docs/html/jbrowse_jupyter.html
@@ -4,7 +4,7 @@
   <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-  <title>JBrowseConfig &mdash; JBrowse Jupyter</title>
+  <title>JBrowseConfig API &mdash; JBrowse Jupyter</title>
       <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
       <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
   <!--[if lt IE 9]>
@@ -42,7 +42,7 @@
 <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="modules.html">Reference</a><ul class="current">
 <li class="toctree-l2"><a class="reference internal" href="util.html">Creating components</a></li>
-<li class="toctree-l2 current"><a class="current reference internal" href="#">JBrowseConfig</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#">JBrowseConfig API</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials</a></li>
@@ -64,7 +64,7 @@
   <ul class="wy-breadcrumbs">
       <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
           <li><a href="modules.html">Reference</a> &raquo;</li>
-      <li>JBrowseConfig</li>
+      <li>JBrowseConfig API</li>
       <li class="wy-breadcrumbs-aside">
             <a href="_sources/jbrowse_jupyter.rst.txt" rel="nofollow"> View page source</a>
       </li>
@@ -75,11 +75,14 @@
            <div itemprop="articleBody">
              
   <section id="module-jbrowse_jupyter.jbrowse_config">
-<span id="jbrowseconfig"></span><h1>JBrowseConfig<a class="headerlink" href="#module-jbrowse_jupyter.jbrowse_config" title="Permalink to this headline"></a></h1>
+<span id="jbrowseconfig-api"></span><h1>JBrowseConfig API<a class="headerlink" href="#module-jbrowse_jupyter.jbrowse_config" title="Permalink to this headline"></a></h1>
 <dl class="py class">
 <dt class="sig sig-object py" id="jbrowse_jupyter.jbrowse_config.JBrowseConfig">
 <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">JBrowseConfig</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">conf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#jbrowse_jupyter.jbrowse_config.JBrowseConfig" title="Permalink to this definition"></a></dt>
-<dd><p>Creates a state configuration for JBrowse embeddable components</p>
+<dd><p>Creates Browse configuration objects.
+Currently supporting configuration objects for the
+React JBrowse Linear Genome View
+<a class="reference external" href="https://jbrowse.org/storybook/lgv/main">https://jbrowse.org/storybook/lgv/main</a></p>
 <dl class="py method">
 <dt class="sig sig-object py" id="jbrowse_jupyter.jbrowse_config.JBrowseConfig.add_df_track">
 <span class="sig-name descname"><span class="pre">add_df_track</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">track_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#jbrowse_jupyter.jbrowse_config.JBrowseConfig.add_df_track" title="Permalink to this definition"></a></dt>
@@ -181,29 +184,48 @@
 create_component to launch or create a Dash JBrowse
 component (currently only supporting LinearGenomeView)</p>
 <p>e.g: create(“view”, genome=”hg19”).get_config()</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>returns configuration object</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p>obj</p>
+</dd>
+</dl>
 </dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_assembly">
-<span class="sig-name descname"><span class="pre">set_assembly</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">assembly_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">aliases</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">refname_aliases</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_assembly" title="Permalink to this definition"></a></dt>
+<span class="sig-name descname"><span class="pre">set_assembly</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">assembly_data</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_assembly" title="Permalink to this definition"></a></dt>
 <dd><p>Sets the assembly.</p>
-<p>set_assembly(“url/assembly.fasta”)</p>
+<p>Assumes assembly_data.fai exists for fasta assembly data
+that is not bgzipped.</p>
+<p>Assumes assembly_data.fai and assembly_data.gzi exist for
+bgzipped assembly data.</p>
+<p>e.g set_assembly(“url/assembly.fasta.gz”, overwrite=True)
+assumes
+“url/assembly.fasta.gz.fai” and
+“url/assembly.fasta.gz.gzi” also exist</p>
+<p>For configuring assemblies check out our config docs
+<a class="reference external" href="https://jbrowse.org/jb2/docs/config_guide/#assembly-config">https://jbrowse.org/jb2/docs/config_guide/#assembly-config</a></p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>assembly_data</strong> (<em>str</em>) – path to the assembly data</p></li>
-<li><p><strong>aliases</strong> (<em>list</em>) – list of aliases for the assembly</p></li>
-<li><p><strong>refname_aliases</strong> (<em>obj</em>) – configuration for refname aliases.</p></li>
+<li><p><strong>assembly_data</strong> (<em>str</em>) – path to the sequence data</p></li>
+<li><p><strong>name</strong> (<em>str</em>) – (optional) name for the assembly,
+defaults to name generated from assembly_data file name</p></li>
+<li><p><strong>aliases</strong> (<em>list</em>) – (optional) list of aliases for the assembly</p></li>
+<li><p><strong>refname_aliases</strong> (<em>obj</em>) – (optional) config for refname aliases.</p></li>
+<li><p><strong>overwrite</strong> (<em>str</em>) – flag wether or not to overwrite
+existing assembly, default to False.</p></li>
 </ul>
 </dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p>assembly name</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>str</p>
-</dd>
 <dt class="field-even">Raises</dt>
-<dd class="field-even"><p><strong>TypeError</strong> – if assembly_data is a local file</p>
+<dd class="field-even"><ul class="simple">
+<li><p><strong>TypeError</strong> – if assembly_data is a local file</p></li>
+<li><p><strong>TypeError</strong> – adapter used for file type is not supported or
+recognized</p></li>
+</ul>
 </dd>
 </dl>
 </dd></dl>
diff --git a/docs/docs/html/modules.html b/docs/docs/html/modules.html
index 303cfb4..7e9e7d2 100644
--- a/docs/docs/html/modules.html
+++ b/docs/docs/html/modules.html
@@ -42,7 +42,7 @@
 <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">Reference</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="util.html">Creating components</a></li>
-<li class="toctree-l2"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig</a></li>
+<li class="toctree-l2"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig API</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials</a></li>
@@ -78,7 +78,7 @@ <h1>Reference<a class="headerlink" href="#reference" title="Permalink to this he
 <div class="toctree-wrapper compound">
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="util.html">Creating components</a></li>
-<li class="toctree-l1"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig</a></li>
+<li class="toctree-l1"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig API</a></li>
 </ul>
 </div>
 </section>
diff --git a/docs/docs/html/objects.inv b/docs/docs/html/objects.inv
index 85daf86..8ae4f6d 100644
Binary files a/docs/docs/html/objects.inv and b/docs/docs/html/objects.inv differ
diff --git a/docs/docs/html/quickstart.html b/docs/docs/html/quickstart.html
index 75d92e0..01d8c49 100644
--- a/docs/docs/html/quickstart.html
+++ b/docs/docs/html/quickstart.html
@@ -85,7 +85,7 @@ <h1>Quickstart<a class="headerlink" href="#quickstart" title="Permalink to this
 <section id="jupyter-notebook">
 <h2>Jupyter Notebook<a class="headerlink" href="#jupyter-notebook" title="Permalink to this headline"></a></h2>
 <p>Using the package, we can create a Dash JBrowse LinearGenomeView  to embed in a jupyter cell.</p>
-<ol class="simple">
+<ol class="arabic simple">
 <li><p>Import the package’s <code class="docutils literal notranslate"><span class="pre">create</span></code> and <code class="docutils literal notranslate"><span class="pre">launch</span></code> methods.</p></li>
 <li><p>Use the <code class="docutils literal notranslate"><span class="pre">create(view_type,</span> <span class="pre">**kwargs)</span></code> to create a <code class="docutils literal notranslate"><span class="pre">JBrowseConfig</span></code> from one of the provided default assemblies/genomes. Currently providing hg38 and hg19. For more information about the default, you can checkout the data directory in our repo <a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/tree/doc_updates/jbrowse_jupyter/data">here</a></p>
 <ul class="simple">
@@ -99,7 +99,7 @@ <h2>Jupyter Notebook<a class="headerlink" href="#jupyter-notebook" title="Permal
 </section>
 <section id="python-dash-application">
 <h2>Python Dash Application<a class="headerlink" href="#python-dash-application" title="Permalink to this headline"></a></h2>
-<ol class="simple">
+<ol class="arabic simple">
 <li><p>Import the package’s <code class="docutils literal notranslate"><span class="pre">create</span></code> and  <code class="docutils literal notranslate"><span class="pre">create_component</span></code></p></li>
 <li><p>Use the <code class="docutils literal notranslate"><span class="pre">create(view_type,</span> <span class="pre">**kwargs)</span></code> to create a <code class="docutils literal notranslate"><span class="pre">JBrowseConfig</span></code> from one of the provided default assemblies/genomes. Currently providing hg38 and hg19. For more information about the default, you can checkout the data directory in our repo <a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/tree/doc_updates/jbrowse_jupyter/data">here</a></p>
 <ul class="simple">
diff --git a/docs/docs/html/searchindex.js b/docs/docs/html/searchindex.js
index 2922ee4..aaa7b12 100644
--- a/docs/docs/html/searchindex.js
+++ b/docs/docs/html/searchindex.js
@@ -1,1 +1,1 @@
-Search.setIndex({docnames:["contact","index","installation","jbrowse_jupyter","modules","quickstart","tutorial","util"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["contact.md","index.rst","installation.md","jbrowse_jupyter.rst","modules.rst","quickstart.md","tutorial.md","util.rst"],objects:{"jbrowse_jupyter.jbrowse_config":[[3,1,1,"","JBrowseConfig"]],"jbrowse_jupyter.jbrowse_config.JBrowseConfig":[[3,2,1,"","add_df_track"],[3,2,1,"","add_text_search_adapter"],[3,2,1,"","add_track"],[3,2,1,"","get_config"],[3,2,1,"","set_assembly"],[3,2,1,"","set_default_session"],[3,2,1,"","set_location"],[3,2,1,"","set_theme"]],"jbrowse_jupyter.util":[[7,3,1,"","create_component"],[7,3,1,"","launch"]],jbrowse_jupyter:[[3,0,0,"-","jbrowse_config"],[7,0,0,"-","util"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"0097a7":3,"1":3,"2":5,"3":2,"311b92":3,"4":3,"8":2,"8081":5,"90":3,"boolean":3,"class":3,"default":[3,5,7],"function":5,"import":5,"int":[3,7],"new":0,"return":[3,7],"true":[3,5],For:[2,5],If:3,It:5,The:5,To:2,__main__:5,__name__:5,about:[2,5],accept:3,activ:2,adapt:3,adapter_id:3,add:3,add_df_track:3,add_text_search_adapt:3,add_track:3,aggreg:3,ajax:0,alias:3,alreadi:3,also:[3,5],an:[0,3,7],ani:0,api:5,aplic:2,app:[5,7],applic:[1,2,6],ar:[0,3],articl:2,assembl:[3,5],assembly_data:3,assum:3,bai:3,bam:3,been:3,below:[2,5],browser:[2,3],bug:0,build:[0,2],can:[2,3,5],cd:2,cell:[2,5],chat:0,check:[2,5],checkout:5,choos:7,chr1:3,clone:2,colab:6,color:3,column:3,com:0,compon:[1,2,3,4,5],conda:1,conf:[3,7],config:[3,5],configur:[2,3,5,7],contact:1,creat:[1,2,3,4,5],create_compon:[3,5,7],current:[3,5,7],custom:[3,5],custum:2,d50000:3,dash:[1,2,3,6,7],dash_html_compon:5,dashjbrows:2,dashjupyt:2,data:[3,5],datafram:3,debug:5,dependeci:2,depth:6,develop:0,df:3,directori:[2,3,5],displai:3,display_assembl:3,div:5,e:3,els:3,email:0,emb:[2,5],embed:2,embedd:3,enabl:2,end:3,envirn:2,environ:2,exampl:[2,5],except:3,exist:3,f57c00:3,facilit:5,fals:3,fasta:3,featur:[0,3],file:3,filenam:3,find:2,first:[3,5],flag:3,follow:2,found:[2,3],from:[3,5,7],further:5,g:3,genom:[2,3,5,7],get:2,get_config:[3,5,7],github:0,gitter:0,given:[3,7],gmod:[0,2],ha:3,have:[0,2,3],height:7,help:[2,7],here:5,hexadecim:3,hg19:[3,5,7],hg38:[5,7],how:2,html:[2,5],http:0,id:[3,5,7],im:0,index:[1,3],inform:[2,5],initi:3,instal:[1,5],instanc:[3,7],interfac:5,invalid:3,ipynb:2,issu:0,ix:3,ix_path:3,ixx:3,ixx_path:3,jb2config:7,jbrows:[0,2,3,5,7],jbrowse2:0,jbrowse_conf:5,jbrowse_jupyt:5,jbrowseconfig:[1,4,5,7],jbrowseconfigur:7,join:0,json:3,jupyt:[0,2,6],jupyterdash:[2,7],jupyterlab:2,kwarg:[3,5,7],launch:[3,5,7],layout:[2,5],librari:2,linear:[2,5,7],lineargenomeview:[2,3,5,7],list:[0,3],load:3,local:3,locat:3,love:0,mail:0,make:2,meta:3,meta_path:3,method:5,more:[2,5,6],myenv:2,n:2,name:3,net:0,none:3,note:7,notebook:[1,2,6],obj:[3,7],object:[3,5,7],onc:2,one:5,onli:3,option:[3,7],other:5,our:[0,5],out:[0,2],overwrit:3,packag:[2,5],page:1,palett:3,panda:3,paramet:[3,7],pass:[3,7],path:3,pip:[2,5],pleas:0,port:[5,7],present:3,primari:3,provid:[3,5],py:2,pypi:1,python:[1,2,6],quantit:3,quaternari:3,quickstart:1,r:2,rais:[3,7],reach:0,react:5,realli:0,refer:[1,3],refnam:3,refname_alias:3,repo:5,report:0,repositori:2,request:0,requir:[2,3],resourc:1,root:2,run:[2,7],run_serv:5,s:5,same:3,score:3,search:[1,3],secondari:3,send:0,sequenc:3,server:7,session:3,set:3,set_assembl:3,set_default_sess:3,set_loc:3,set_them:3,sourceforg:0,specif:2,start:[2,3],state:[3,5],step:2,str:[3,7],subconfigur:3,suit:2,support:[3,7],sure:2,syntax:3,talk:0,tertiari:3,test:5,text:3,them:5,theme:3,thi:[2,3],thought:0,track:3,track_data:3,track_id2:3,track_id:3,track_nam:3,track_typ:3,trackid:3,tracks_id:3,trix:3,tutori:1,two:2,txt:2,type:[3,7],typeerror:[3,7],up:3,url:3,us:[1,2,5,7],user:0,util:[5,7],view:[2,3,5,7],view_typ:[5,7],we:[0,5],wether:3,what:0,when:[3,7],where:7,within:2,you:[0,2,5]},titles:["Contact us","Welcome to JBrowse Jupyter\u2019s documentation!","Installation","JBrowseConfig","Reference","Quickstart","Tutorials","Creating components"],titleterms:{applic:5,compon:7,conda:2,contact:0,creat:7,dash:5,document:1,indic:1,instal:2,jbrows:1,jbrowseconfig:3,jupyt:[1,5],notebook:5,pypi:2,python:5,quickstart:5,refer:4,resourc:2,s:1,tabl:1,tutori:6,us:0,welcom:1}})
\ No newline at end of file
+Search.setIndex({docnames:["contact","index","installation","jbrowse_jupyter","modules","quickstart","tutorial","util"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["contact.md","index.rst","installation.md","jbrowse_jupyter.rst","modules.rst","quickstart.md","tutorial.md","util.rst"],objects:{"jbrowse_jupyter.jbrowse_config":[[3,1,1,"","JBrowseConfig"]],"jbrowse_jupyter.jbrowse_config.JBrowseConfig":[[3,2,1,"","add_df_track"],[3,2,1,"","add_text_search_adapter"],[3,2,1,"","add_track"],[3,2,1,"","get_config"],[3,2,1,"","set_assembly"],[3,2,1,"","set_default_session"],[3,2,1,"","set_location"],[3,2,1,"","set_theme"]],"jbrowse_jupyter.util":[[7,3,1,"","create_component"],[7,3,1,"","launch"]],jbrowse_jupyter:[[3,0,0,"-","jbrowse_config"],[7,0,0,"-","util"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function"},terms:{"0097a7":3,"1":3,"2":5,"3":2,"311b92":3,"4":3,"8":2,"8081":5,"90":3,"boolean":3,"class":3,"default":[3,5,7],"function":5,"import":5,"int":[3,7],"new":0,"return":[3,7],"true":[3,5],For:[2,3,5],If:3,It:5,The:5,To:2,__main__:5,__name__:5,about:[2,5],accept:3,activ:2,adapt:3,adapter_id:3,add:3,add_df_track:3,add_text_search_adapt:3,add_track:3,aggreg:3,ajax:0,alias:3,alreadi:3,also:[3,5],an:[0,3,7],ani:0,api:[1,4,5],aplic:2,app:[5,7],applic:[1,2,6],ar:[0,3],articl:2,assembl:[3,5],assembly_data:3,assum:3,bai:3,bam:3,been:3,below:[2,5],bgzip:3,brows:3,browser:[2,3],bug:0,build:[0,2],can:[2,3,5],cd:2,cell:[2,5],chat:0,check:[2,3,5],checkout:5,choos:7,chr1:3,clone:2,colab:6,color:3,column:3,com:0,compon:[1,2,3,4,5],conda:1,conf:[3,7],config:[3,5],config_guid:3,configur:[2,3,5,7],contact:1,creat:[1,2,3,4,5],create_compon:[3,5,7],current:[3,5],custom:[3,5],custum:2,d50000:3,dash:[1,2,3,6,7],dash_html_compon:5,dashjbrows:2,dashjupyt:2,data:[3,5],datafram:3,debug:5,dependeci:2,depth:6,develop:0,df:3,directori:[2,3,5],displai:3,display_assembl:3,div:5,doc:3,e:3,els:3,email:0,emb:[2,5],embed:2,enabl:2,end:3,envirn:2,environ:2,exampl:[2,5],except:3,exist:3,f57c00:3,facilit:5,fai:3,fals:3,fasta:3,featur:[0,3],file:3,filenam:3,find:2,first:[3,5],flag:3,follow:2,found:[2,3],from:[3,5,7],further:5,g:3,gener:3,genom:[2,3,5,7],get:2,get_config:[3,5,7],github:0,gitter:0,given:[3,7],gmod:[0,2],gz:3,gzi:3,ha:3,have:[0,2,3],height:7,help:[2,7],here:5,hexadecim:3,hg19:[3,5,7],hg38:[5,7],how:2,html:[2,5],http:[0,3],id:[3,5,7],im:0,index:[1,3],inform:[2,5],initi:3,instal:[1,5],instanc:[3,7],interfac:5,invalid:3,ipynb:2,issu:0,ix:3,ix_path:3,ixx:3,ixx_path:3,jb2:3,jbrows:[0,2,3,5,7],jbrowse2:0,jbrowse_conf:5,jbrowse_jupyt:5,jbrowseconfig:[1,4,5,7],jbrowseconfigur:7,join:0,json:3,jupyt:[0,2,6],jupyterdash:[2,7],jupyterlab:2,kwarg:[3,5,7],launch:[3,5,7],layout:[2,5],lgv:3,librari:2,linear:[2,3,5,7],lineargenomeview:[2,3,5,7],list:[0,3],load:3,local:3,locat:3,love:0,mail:0,main:3,make:2,meta:3,meta_path:3,method:5,more:[2,5,6],myenv:2,n:2,name:3,net:0,none:3,notebook:[1,2,6],obj:[3,7],object:[3,5,7],onc:2,one:5,onli:3,option:[3,7],org:3,other:5,our:[0,3,5],out:[0,2,3],overwrit:3,packag:[2,5],page:1,palett:3,panda:3,paramet:[3,7],pass:[3,7],path:3,pip:[2,5],pleas:0,port:[5,7],present:3,primari:3,provid:[3,5],py:2,pypi:1,python:[1,2,6],quantit:3,quaternari:3,quickstart:1,r:2,rais:[3,7],reach:0,react:[3,5],realli:0,recogn:3,refer:[1,3],refnam:3,refname_alias:3,repo:5,report:0,repositori:2,request:0,requir:[2,3],resourc:1,root:2,run:[2,7],run_serv:5,s:5,same:3,score:3,search:[1,3],secondari:3,send:0,sequenc:3,server:7,session:3,set:3,set_assembl:3,set_default_sess:3,set_loc:3,set_them:3,sourceforg:0,specif:2,start:[2,3],state:5,step:2,storybook:3,str:[3,7],subconfigur:3,suit:2,support:3,sure:2,syntax:3,talk:0,tertiari:3,test:5,text:3,them:5,theme:3,thi:[2,3],thought:0,track:3,track_data:3,track_id2:3,track_id:3,track_nam:3,track_typ:3,trackid:3,tracks_id:3,trix:3,tutori:1,two:2,txt:2,type:[3,7],typeerror:[3,7],up:3,url:3,us:[1,2,3,5,7],user:0,util:[5,7],view:[2,3,5,7],view_typ:[5,7],we:[0,5],wether:3,what:0,when:[3,7],where:7,within:2,you:[0,2,5]},titles:["Contact us","Welcome to JBrowse Jupyter\u2019s documentation!","Installation","JBrowseConfig API","Reference","Quickstart","Tutorials","Creating components"],titleterms:{api:3,applic:5,compon:7,conda:2,contact:0,creat:7,dash:5,document:1,indic:1,instal:2,jbrows:1,jbrowseconfig:3,jupyt:[1,5],notebook:5,pypi:2,python:5,quickstart:5,refer:4,resourc:2,s:1,tabl:1,tutori:6,us:0,welcom:1}})
\ No newline at end of file
diff --git a/docs/docs/html/tutorial.html b/docs/docs/html/tutorial.html
index 94e689e..fe8e59b 100644
--- a/docs/docs/html/tutorial.html
+++ b/docs/docs/html/tutorial.html
@@ -19,7 +19,7 @@
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Contact us" href="contact.html" />
-    <link rel="prev" title="JBrowseConfig" href="jbrowse_jupyter.html" /> 
+    <link rel="prev" title="JBrowseConfig API" href="jbrowse_jupyter.html" /> 
 </head>
 
 <body class="wy-body-for-nav"> 
@@ -82,7 +82,7 @@ <h1>Tutorials<a class="headerlink" href="#tutorials" title="Permalink to this he
            </div>
           </div>
           <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
-        <a href="jbrowse_jupyter.html" class="btn btn-neutral float-left" title="JBrowseConfig" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="jbrowse_jupyter.html" class="btn btn-neutral float-left" title="JBrowseConfig API" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
         <a href="contact.html" class="btn btn-neutral float-right" title="Contact us" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
 
diff --git a/docs/docs/html/util.html b/docs/docs/html/util.html
index 8d13832..e2d9be4 100644
--- a/docs/docs/html/util.html
+++ b/docs/docs/html/util.html
@@ -18,7 +18,7 @@
     <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="JBrowseConfig" href="jbrowse_jupyter.html" />
+    <link rel="next" title="JBrowseConfig API" href="jbrowse_jupyter.html" />
     <link rel="prev" title="Reference" href="modules.html" /> 
 </head>
 
@@ -42,7 +42,7 @@
 <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
 <li class="toctree-l1 current"><a class="reference internal" href="modules.html">Reference</a><ul class="current">
 <li class="toctree-l2 current"><a class="current reference internal" href="#">Creating components</a></li>
-<li class="toctree-l2"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig</a></li>
+<li class="toctree-l2"><a class="reference internal" href="jbrowse_jupyter.html">JBrowseConfig API</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials</a></li>
@@ -80,7 +80,6 @@ <h1>Creating components<a class="headerlink" href="#creating-components" title="
 <dt class="sig sig-object py">
 <span class="sig-name descname"><span class="pre">create</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">view_type</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span></dt>
 <dd><p>Creates a JBrowseConfig given a view type.</p>
-<p>Note: currently not supporting view type JB2config</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
@@ -90,10 +89,10 @@ <h1>Creating components<a class="headerlink" href="#creating-components" title="
 </ul>
 </dd>
 <dt class="field-even">Returns</dt>
-<dd class="field-even"><p>JBrowseConfig configuration object</p>
+<dd class="field-even"><p>JBrowseConfig</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>obj</p>
+<dd class="field-odd"><p>JBrowseConfig instance</p>
 </dd>
 <dt class="field-even">Raises</dt>
 <dd class="field-even"><ul class="simple">
@@ -157,7 +156,7 @@ <h1>Creating components<a class="headerlink" href="#creating-components" title="
           </div>
           <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
         <a href="modules.html" class="btn btn-neutral float-left" title="Reference" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
-        <a href="jbrowse_jupyter.html" class="btn btn-neutral float-right" title="JBrowseConfig" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+        <a href="jbrowse_jupyter.html" class="btn btn-neutral float-right" title="JBrowseConfig API" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
 
   <hr/>
diff --git a/docs/requirements.txt b/docs/requirements.txt
index a894542..224983e 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,82 +1,9 @@
-alabaster==0.7.12
-ansi2html==1.6.0
-appnope==0.1.2
-attrs==21.2.0
-Babel==2.9.1
-backcall==0.2.0
-Brotli==1.0.9
-certifi==2020.6.20
-charset-normalizer==2.0.9
-click==8.0.3
-dash==2.0.0
-dash-core-components==2.0.0
-dash-html-components==2.0.0
-dash-jbrowse==0.0.2
-dash-table==5.0.0
-dataclasses==0.8
-decorator==5.1.0
-docutils==0.17.1
-entrypoints==0.3
-flake8==4.0.1
-Flask==2.0.2
-Flask-Compress==1.10.1
-idna==3.3
-imagesize==1.3.0
-importlib-metadata==4.2.0
-iniconfig==1.1.1
-ipykernel==5.5.6
-ipython==7.16.2
-ipython-genutils==0.2.0
-itsdangerous==2.0.1
-jedi==0.17.2
-Jinja2==3.0.3
-jupyter-client==7.1.0
-jupyter-core==4.9.1
-jupyter-dash==0.4.0
-markdown-it-py==1.1.0
-MarkupSafe==2.0.1
-mccabe==0.6.1
-mdit-py-plugins==0.2.8
-myst-parser==0.15.2
-nest-asyncio==1.5.4
-numpy==1.19.5
-packaging==21.3
-pandas==1.1.5
-parso==0.7.1
-pexpect==4.8.0
-pickleshare==0.7.5
-plotly==5.4.0
-pluggy==1.0.0
-prompt-toolkit==3.0.24
-ptyprocess==0.7.0
-py==1.11.0
-pycodestyle==2.8.0
-pyflakes==2.4.0
-Pygments==2.10.0
-pyparsing==3.0.6
-pytest==6.2.5
-python-dateutil==2.8.2
-pytz==2021.3
-PyYAML==6.0
-pyzmq==22.3.0
-requests==2.26.0
-retrying==1.3.3
-six==1.16.0
-snowballstemmer==2.2.0
-Sphinx==4.3.1
-sphinx-rtd-theme==1.0.0
-sphinxcontrib-applehelp==1.0.2
-sphinxcontrib-devhelp==1.0.2
-sphinxcontrib-htmlhelp==2.0.0
-sphinxcontrib-jsmath==1.0.1
-sphinxcontrib-qthelp==1.0.3
-sphinxcontrib-serializinghtml==1.1.5
-tenacity==8.0.1
-toml==0.10.2
-tornado==6.1
-traitlets==4.3.3
-typing_extensions==4.0.1
-urllib3==1.26.7
-wcwidth==0.2.5
-Werkzeug==2.0.2
-zipp==3.6.0
+dash>=2.0
+dash-jbrowse>=0.0.2
+flake8>=4.0.1
+jupyter_dash>=0.4.0
+pandas>=1.1.5
+pytest>=6.2.5
+Sphinx>=4.3.1
+sphinx-rtd-theme>=1.0.0
+myst-parser>=0.15.2
diff --git a/docs/source/jbrowse_jupyter.rst b/docs/source/jbrowse_jupyter.rst
index d7ff9fb..efc857f 100644
--- a/docs/source/jbrowse_jupyter.rst
+++ b/docs/source/jbrowse_jupyter.rst
@@ -1,4 +1,4 @@
-JBrowseConfig
+JBrowseConfig API
 ---------------------------------------
 .. automodule:: jbrowse_jupyter.jbrowse_config
    :members:
diff --git a/jbrowse_jupyter/data/hg19.json b/jbrowse_jupyter/data/hg19.json
index f68038e..e4a8d4f 100644
--- a/jbrowse_jupyter/data/hg19.json
+++ b/jbrowse_jupyter/data/hg19.json
@@ -51,24 +51,19 @@
         "view": {
             "id": "aU9Nqje1U",
             "type": "LinearGenomeView",
-            "offsetPx": 22654,
-            "bpPerPx": 108.93300653594771,
-            "displayedRegions": [
+            "tracks": [
                 {
-                    "refName": "1",
-                    "start": 0,
-                    "end": 249250621,
-                    "reversed": false,
-                    "assemblyName": "hg19"
+                    "type": "ReferenceSequenceTrack",
+                    "configuration": "hg19-ReferenceSequenceTrack",
+                    "displays": [
+                        {
+                            "type": "LinearReferenceSequenceDisplay",
+                            "configuration": "hg19-ReferenceSequenceTrack-LinearReferenceSequenceDisplay"
+                        }
+                    ]
                 }
-            ],
-            "tracks": [],
-            "hideHeader": false,
-            "hideHeaderOverview": false,
-            "trackSelectorType": "hierarchical",
-            "trackLabels": "overlapping",
-            "showCenterLine": false
+            ]
         }
     },
-    "location": "1:2,467,681..2,667,681"
+    "location": "1:68654694..68654738"
 }
diff --git a/jbrowse_jupyter/data/hg38.json b/jbrowse_jupyter/data/hg38.json
index 1d07437..5371171 100644
--- a/jbrowse_jupyter/data/hg38.json
+++ b/jbrowse_jupyter/data/hg38.json
@@ -70,16 +70,6 @@
                             "configuration": "GRCh38-ReferenceSequenceTrack-LinearReferenceSequenceDisplay"
                         }
                     ]
-                },
-                {
-                    "type": "FeatureTrack",
-                    "configuration": "ncbi_refseq_109_hg38",
-                    "displays": [
-                        {
-                            "type": "LinearBasicDisplay",
-                            "configuration": "ncbi_refseq_109_hg38-LinearBasicDisplay"
-                        }
-                    ]
                 }
             ]
         }
diff --git a/jbrowse_jupyter/jbrowse_config.py b/jbrowse_jupyter/jbrowse_config.py
index b0a7dd3..4ede6fe 100644
--- a/jbrowse_jupyter/jbrowse_config.py
+++ b/jbrowse_jupyter/jbrowse_config.py
@@ -12,13 +12,11 @@ def create(view_type, **kwargs):
     """
     Creates a JBrowseConfig given a view type.
 
-    Note: currently not supporting view type JB2config
-
     :param str view_type: the type of view ('view' or 'conf')
     :param str genome: genome ('hg19' or 'hg38')
         for view type `view`
-    :return: JBrowseConfig configuration object
-    :rtype: obj
+    :return: JBrowseConfig
+    :rtype: JBrowseConfig instance
     :raises TypeError: if genome passed is not hg19 or hg38
     :raises TypeError: if genome is not passed when choosing view_type `view`
     :raises TypeError: if view type is not `view` or `conf`
@@ -51,7 +49,12 @@ def create(view_type, **kwargs):
 
 
 class JBrowseConfig:
-    """ Creates a state configuration for JBrowse embeddable components"""
+    """
+    Creates Browse configuration objects.
+    Currently supporting configuration objects for the
+    React JBrowse Linear Genome View
+    https://jbrowse.org/storybook/lgv/main
+    """
     def __init__(self, conf=None):
         """
         Initializes class.
@@ -93,6 +96,9 @@ def get_config(self):
         component (currently only supporting LinearGenomeView)
 
         e.g: create("view", genome="hg19").get_config()
+
+        :return: returns configuration object
+        :rtype: obj
         """
         return self.config
 
@@ -111,22 +117,52 @@ def get_assembly_name(self):
         else:
             raise Exception(assembly_error)
 
-    def set_assembly(self, assembly_data, aliases, refname_aliases):
+    def set_assembly(self, assembly_data, **kwargs):
         """
         Sets the assembly.
 
-        set_assembly("url/assembly.fasta")
+        Assumes assembly_data.fai exists for fasta assembly data
+        that is not bgzipped.
+
+        Assumes assembly_data.fai and assembly_data.gzi exist for
+        bgzipped assembly data.
+
+        e.g set_assembly("url/assembly.fasta.gz", overwrite=True)
+        assumes
+        "url/assembly.fasta.gz.fai" and
+        "url/assembly.fasta.gz.gzi" also exist
 
-        :param str assembly_data: path to the assembly data
-        :param list aliases: list of aliases for the assembly
-        :param obj refname_aliases: configuration for refname aliases.
-        :return: assembly name
-        :rtype: str
+        For configuring assemblies check out our config docs
+        https://jbrowse.org/jb2/docs/config_guide/#assembly-config
+
+        :param str assembly_data: path to the sequence data
+        :param str name: (optional) name for the assembly,
+            defaults to name generated from assembly_data file name
+        :param list aliases: (optional) list of aliases for the assembly
+        :param obj refname_aliases: (optional) config for refname aliases.
+        :param str overwrite: flag wether or not to overwrite
+            existing assembly, default to False.
         :raises TypeError: if assembly_data is a local file
+        :raises TypeError: adapter used for file type is not supported or
+            recognized
         """
+        overwrite = kwargs.get('overwrite', False)
+        indx = kwargs.get('index', "defaultIndex")
+        err = 'assembly is already set, set overwrite to True to overwrite'
+        if self.get_assembly() and not overwrite:
+            raise TypeError(err)
+        aliases = kwargs.get('aliases', [])
+        refname_aliases = kwargs.get('refname_aliases', {})
         if (is_url(assembly_data)):
-            name = get_name(assembly_data)
-            assembly_adapter = guess_adapter_type(assembly_data, 'uri')
+            if (indx != 'defaultIndex'):
+                if not is_url(indx):
+                    raise TypeError("Local files are not currently supported")
+            name = kwargs.get('name', get_name(assembly_data))
+            assembly_adapter = guess_adapter_type(assembly_data, 'uri', indx)
+            if (assembly_adapter["type"] == "UNKNOWN"):
+                raise TypeError("Adapter type is not recognized")
+            if (assembly_adapter["type"] == "UNSUPPORTED"):
+                raise TypeError("Adapter type is not supported")
             assembly_config = {
                 "name": name,
                 "sequence": {
diff --git a/jbrowse_jupyter/tracks.py b/jbrowse_jupyter/tracks.py
index 947298c..f92a8a6 100644
--- a/jbrowse_jupyter/tracks.py
+++ b/jbrowse_jupyter/tracks.py
@@ -211,10 +211,11 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
 
     # fasta indexed
     if bool(re.search(fasta_idx, file_location)):
+        fai = index if index != "defaultIndex" else f"{file_location}.fai"
         return {
             "type": "IndexedFastaAdapter",
             "fastaLocation": make_location(file_location, protocol),
-            "faiLocation": make_location(f"{file_location}.fai", protocol),
+            "faiLocation": make_location(fai, protocol),
         }
 
     # Bgzipped fasta
diff --git a/requirements.txt b/requirements.txt
index d417121..f8c75b1 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,65 +1,6 @@
-ansi2html==1.6.0
-appnope==0.1.2
-attrs==21.2.0
-backcall==0.2.0
-Brotli==1.0.9
-certifi==2020.6.20
-charset-normalizer==2.0.9
-click==8.0.3
-dash==2.0.0
-dash-core-components==2.0.0
-dash-html-components==2.0.0
-dash-jbrowse==0.0.2
-dash-table==5.0.0
-dataclasses==0.6
-decorator==5.1.0
-entrypoints==0.3
-flake8==4.0.1
-Flask==2.0.2
-Flask-Compress==1.10.1
-idna==3.3
-importlib-metadata==4.2.0
-iniconfig==1.1.1
-ipykernel==5.5.6
-ipython==7.16.2
-ipython-genutils==0.2.0
-itsdangerous==2.0.1
-jedi==0.17.2
-Jinja2==3.0.3
-jupyter-client==7.1.0
-jupyter-core==4.9.1
-jupyter-dash==0.4.0
-MarkupSafe==2.0.1
-mccabe==0.6.1
-nest-asyncio==1.5.4
-numpy==1.19.5
-packaging==21.3
-pandas==1.1.5
-parso==0.7.1
-pexpect==4.8.0
-pickleshare==0.7.5
-plotly==5.4.0
-pluggy==1.0.0
-prompt-toolkit==3.0.24
-ptyprocess==0.7.0
-py==1.11.0
-pycodestyle==2.8.0
-pyflakes==2.4.0
-Pygments==2.10.0
-pyparsing==3.0.6
-pytest==6.2.5
-python-dateutil==2.8.2
-pytz==2021.3
-pyzmq==22.3.0
-requests==2.26.0
-retrying==1.3.3
-six==1.16.0
-tenacity==8.0.1
-toml==0.10.2
-tornado==6.1
-traitlets==4.3.3
-typing_extensions==4.0.1
-urllib3==1.26.7
-wcwidth==0.2.5
-Werkzeug==2.0.2
-zipp==3.6.0
+dash>=2.0
+dash-jbrowse>=0.0.2
+flake8>=4.0.1
+jupyter_dash>=0.4.0
+pandas>=1.1.5
+pytest>=6.2.5
diff --git a/setup.py b/setup.py
index 0b7b0ab..77d1544 100644
--- a/setup.py
+++ b/setup.py
@@ -10,7 +10,7 @@
 # TODO: figure out install requires vs requirements.txt and look up classifiers
 setuptools.setup(
     name="jbrowse-jupyter",
-    version="0.0.3",
+    version="0.0.4",
     author="Teresa De Jesus Martinez",
     author_email="tere486martinez@gmail.com",
     maintainer="Teresa De Jesus Martinez; JBrowse Team",
@@ -28,8 +28,9 @@
     packages=['jbrowse_jupyter'],
     python_requires=">=3.6",
     classifiers=[
-        "Development Status :: 1 - Planning",
         "Programming Language :: Python :: 3",
         "Topic :: Scientific/Engineering",
+        "Intended Audience :: Science/Research",
+        "Topic :: Scientific/Engineering :: Bio-Informatics",
     ],
 )


Test patch:
diff --git a/tests/test_jbrowse_config.py b/tests/test_jbrowse_config.py
index b2f1459..c878021 100644
--- a/tests/test_jbrowse_config.py
+++ b/tests/test_jbrowse_config.py
@@ -46,7 +46,7 @@ def test_set_assembly_name():
     assert "Please set the assembly before adding a track." in str(excinfo)
     # raises an error, there is no local file support yet
     with pytest.raises(TypeError) as excinfo:
-        conf.set_assembly("./path/to/local/file", [], {})
+        conf.set_assembly("./path/to/local/file")
     assert "Local files are not currently supported." in str(excinfo)
     aliases = ["hg38"]
     uri = "https://s3.amazonaws.com/jbrowse.org/genomes/" \
@@ -61,9 +61,17 @@ def test_set_assembly_name():
     }
     conf.set_assembly(
         "https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz",
-        aliases,
-        ref_name_aliases,
+        aliases=aliases,
+        ref_name_aliases=ref_name_aliases,
     )
+    err = "assembly is already set, set overwrite to True to overwrite"
+    with pytest.raises(TypeError) as excinfo:
+        conf.set_assembly(
+            "https://another/assembly.fa.gz",
+            aliases=aliases,
+            ref_name_aliases=ref_name_aliases,
+        )
+    assert err in str(excinfo)
     assert conf.get_assembly_name() == "hg38"
     track_data = "https://s3.amazonaws.com/jbrowse.org/" \
         "genomes/GRCh38/ncbi_refseq/GCA_000001405.15_" \