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

Issue:
update binder badge
* updated binder badge with latest build and version of jbrowse jupyter


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index d316f9d..3ceb062 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -17,6 +17,7 @@ jobs:
          python3 -m pip install --upgrade pip
          python3 -m pip install setuptools wheel twine
          pip install -r requirements.txt
+         pip install pytest
      - name: Test with pytest
        run: |
          pytest tests -v
diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index e7a7a5b..06a7022 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -30,6 +30,7 @@ jobs:
        run: |
          python3 -m pip install --upgrade pip
          pip install -r requirements.txt
+         pip install pytest
      - name: Test with pytest
        run: |
          pytest tests -v
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 21489c8..0b40b9c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -21,6 +21,7 @@ jobs:
          python3 -m pip install --upgrade pip
          python3 -m pip install setuptools wheel twine
          pip install -r requirements.txt
+         pip install pytest
      - name: Test with pytest
        run: |
          pytest tests -v
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index acc9754..9672e6d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -47,6 +47,7 @@ $ pip install git+https://github.com/GMOD/jbrowse-jupyter.git@branch
 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
 ```
+$ pip install pytest
 $ python -m pytest tests/
 ```
 We use flake8 for linting. You can run 
diff --git a/README.md b/README.md
index b277926..ef71b8c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,9 @@
 ![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)
-[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GMOD/jbrowse-jupyter/4ace1180f633eb5a6179c6e4f53fdbd8a436cd1e?urlpath=lab%2Ftree%2Fbinder%2Fbinder.ipynb)
+[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GMOD/jbrowse-jupyter/binder_updates?labpath=binder%2Fbinder.ipynb)
 [![Downloads](https://pepy.tech/badge/jbrowse-jupyter)](https://pepy.tech/project/jbrowse-jupyter)
+[![made-with-sphinx-doc](https://img.shields.io/badge/Made%20with-Sphinx-1f425f.svg)](https://gmod.github.io/jbrowse-jupyter/docs/html/index.html)
+
 
 # [JBrowse Jupyter](https://gmod.github.io/jbrowse-jupyter/)
 
@@ -12,21 +14,17 @@ The package provides a JBrowseConfig API to enable the creation of JBrowse state
 ![demo-gif](https://user-images.githubusercontent.com/45598764/144863573-2bcd982b-1d18-4dc8-aa2f-fd8adf4985a2.gif)
 
 *You can open this browser.ipynb in colab* [here](https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/browser.ipynb)
-Note: to install the package in colab you can use this command.
-In a new cell above the import statement
-```
-!pip install git+https://github.com/GMOD/jbrowse-jupyter.git@main
-```
-### Dash JBrowse
-Dash JBrowse is a collection of dash components for JBrowse's embeddable components.
-
-We utilize the Dash JBrowse package along with [jupyter-dash](https://github.com/plotly/jupyter-dash) library to embed [JBrowse React Linear Genome view](https://www.npmjs.com/package/@jbrowse/react-linear-genome-view) or the [JBrowse React Circular Genome view](https://www.npmjs.com/package/@jbrowse/react-circular-genome-view) in any jupyter notebook.
 
-You can find more information about our Dash JBrowse library [here](https://github.com/GMOD/dash_jbrowse).
+> ### Dash JBrowse
+> JBrowse Jupyter uses [Dash JBrowse](https://github.com/GMOD/dash_jbrowse), which is a collection of Dash components for JBrowse's embeddable React components.
+>
+> We utilize the Dash JBrowse package along with the [jupyter-dash](https://github.com/plotly/jupyter-dash) library to embed [JBrowse React Linear Genome view](https://www.npmjs.com/package/@jbrowse/react-linear-genome-view) or the [JBrowse React Circular Genome view](https://www.npmjs.com/package/@jbrowse/react-circular-genome-view) in any jupyter notebook.
+>
+> To learn more about the Dash JBrowse package, including how the Dash components can be used outside of Jupyter Notebooks, see [here](https://github.com/GMOD/dash_jbrowse).
 
 ## Demos
 * Browser notebook demo - https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/browser.ipynb
-* SK-BR-3 demo -  https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/skbr3.ipynb
+* SK-BR-3 demo - https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/skbr3.ipynb
 
 ## Documentation
 Additional details and tutorials can be found in our Sphinx documentation page.
@@ -34,34 +32,16 @@ https://gmod.github.io/jbrowse-jupyter/docs/html/index.html
 ## Installation
 `jbrowse-jupyter` is freely available for download on the Python Package Index
 https://pypi.org/project/jbrowse-jupyter/
-### 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
 
 ```
 $ pip install jbrowse-jupyter
 ```
 
-### Install with conda
+## Quickstart
 
-Clone this repository and [install conda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html). Once you have conda installed, follow the steps found below 
-to create a conda envirnment and install the dependecies.
-```
-$ cd jbrowse-jupyter
-$ conda create -n myenv
-$ conda activate myenv
-$ pip install -r requirements.txt
-```
+For all of the following examples, make sure that the JBrowse Jupyter package has been installed into your environment (pipenv, venv, conda, etc.).
 
-## Quickstart
-Install the JBrowse Jupyter package using pip
-```
-$ pip install jbrowse-jupyter
-```
+### In a Jupyter Notebook
 
 *Launching a Linear Genome View in Jupyter Notebook*
 ![Launching hg38 LGV in python notebook](https://github.com/GMOD/jbrowse-jupyter/raw/main/images/notebook.png)
@@ -96,17 +76,9 @@ if __name__ == "__main__":
 or using the [jupyter-server-proxy extension](https://github.com/jupyterhub/jupyter-server-proxy)
 and the [jupyter-dash extension](https://github.com/plotly/jupyter-dash)
 
-### Using Pypi
 ```
 $ pip install jupyter-server-proxy
 $ pip install jupyter-dash
-
-```
-### Using conda
-```
-$ conda install jupyter-server-proxy -c conda-forge
-$ conda install -c conda-forge -c plotly jupyter-dash
-$ jupyter lab build 
 ```
 
 ```python
@@ -132,7 +104,7 @@ app.layout = html.Div(
 )
 
 if __name__ == "__main__":
-    # the external mode should display  a url proxied by jupyter-server-proxy, 
+    # the external mode should display a url proxied by jupyter-server-proxy, 
     # very handy on jupyterlab behind jupyterhub as in departmental jupyterlab instances.
     
     app.run_server(mode='external', debug=True, port=8999)
@@ -146,27 +118,27 @@ Find more information about the JBrowseConfig API [here](https://gmod.github.io/
 
 ## Other Examples
 
-You can find examples in the root of this repo, 
+You can find examples in the root of this repo or in the examples folder, 
 * `browser.py` - uses the Dash library to create a python application with the Dash JBrowse LinearGenomeView component
 * `browser.ipynb` - jupyter notebook using the JupyterDash library to embed a Dash JBrowse LinearGenomeView component in a cell
-* `cgv_examples.py` - uses the Dash library to create a python application with the Dash JBrowse CircularGenomeView component
-* `cgv_examples.ipynb` - jupyter notebook using the JupyterDash library to embed a Dash JBrowse CircularGenomeView component in a cell
+* `examples/cgv_examples.py` - uses the Dash library to create a python application with the Dash JBrowse CircularGenomeView component
+* `examples/cgv_examples.ipynb` - jupyter notebook using the JupyterDash library to embed a Dash JBrowse CircularGenomeView component in a cell
 * `local_support.ipynb` - jupyter notebook with tutorial on using your local data and passing it to JBrowse views
 
-### To run the Python Dash application
+### To run a Python Dash application
 ```
 $ python browser.py
 ```
-### To run the jupyter notebook
+### To run a jupyter notebook
 
-Make sure you have [jupyter notebook or jupyterlab](https://jupyter.org/install).
+Make sure you have [jupyter notebook or jupyterlab](https://jupyter.org/install) installed.
 
-Within the myenv conda environment
 ```
-$ pip install jupyterlab
+# May look different if you have classic notebooks instead of jupyterlab
+jupyter-lab build
+jupyter-lab browser.ipynb
 ```
-More information on using a specific [environment in 
-a jupyter notebook](https://softwarejargon.com/jupyterlab-and-conda-environment-installation-and-setup/)
+
 ## Usage
 The `jbrowse-jupyter` package provides several utility functions to create and launch Dash JBrowse components in python applications and jupyter notebooks.
 
@@ -178,10 +150,10 @@ The `jbrowse-jupyter` package provides several utility functions to create and l
         OR 
         - conf: use a conf object, you can manually edit and pass json object.
         e.g `create`('LGV', conf={"my-conf": "object"})
-        *Note:* you can manually create a conf following the https://jbrowse.org/jb2/docs/config_guide/
+        > **Note**: you can manually create a conf following the https://jbrowse.org/jb2/docs/config_guide/
         - if no genome or conf is passed, you will create an empty JBrowseConfig for that view type.
-    *defaults* if you pass no params,an empty JBrowse config for a LGV (LinearGenomeView) will be created
-* `create_component`(conf, **kwargs) - creates and returns a Dash JBrowse component -> 'CGV' or 'LGV'. This component can be used as any  Dash component in Dash applications.
+    *defaults* if you pass no params, an empty JBrowse config for a LGV (LinearGenomeView) will be created
+* `create_component`(conf, **kwargs) - creates and returns a Dash JBrowse component -> 'CGV' or 'LGV'. This component can be used as any Dash component in Dash applications.
   - conf: JBrowseConfig obj 
   - id: id for Dash components (opyional)
   - dash_comp: 'CGV' or 'LGV', defaults to 'LGV' when none is passed
@@ -218,7 +190,7 @@ JBrowseConfig().
     - assumes an index exists within the same directory of the track data if no index url path is provided. 
     - currently supporting Wiggle, Variant, Feature and Alignments tracks
     - params:
-        * data (str) – track file or url (currently only supporting url)
+        * data (str) – track path or url
         * name (str) – (optional) name for the track
         * index (str) – (optional) index file for the track
         * track_type (str) – (optional) track type. If none is passed, the api will infer one based on the file type
@@ -237,7 +209,10 @@ JBrowseConfig().
         * display_assembly (boolean) – display the assembly reference sequence track. default=True
 * `set_theme`(primary, secondary=None, tertiary=None, quaternary=None)
     - sets the theme in the configuration given up to 4 hexadecimal colors
-* `add_text_search_adapter`(ix_path, ixx_path, meta_path, adapter_id=None)
+* `set_env`(notebook_host, notebook_port):
+    - Changes the port and the host for creating links to files found within the file tree of jupyter.
+    - The port and host should match those configured in your jupyter config.
+* `add_text_search_adapter`(ix, ixx, meta, adapter_id=None)
     - adds a trix text search adapter
     - not available for CGV
 * `get_config`() - returns the configuration object
@@ -250,17 +225,106 @@ JBrowseConfig().
 
 
 
-### Local file support
+## Local file support
 We currently support two ways of passing your local data to JBrowse Views.
 
-For our Jupyter users, you can leverage the Jupyter server to host your files and pass those urls to the JBrowse views. You can find a detailed example in our local_support.ipynb
+For our **Jupyter lab and Jupyter notebook** users, you can create urls by leveraging the Jupyter server where your notebook is running or you can provide paths relative to root of the file tree. You can also provide paths relative to the root of the Jupyter file tree. Examples of these can be found below or in the
+local_support.ipynb.
+
+For those using **colab notebooks and binder** (will also work in Jupyter) you can use the JBrowse dev server. An example of how to use the JBrowse dev server can be found below.
+
+> **Note**: These solutions are recommended for your development environments and not supported in production.
+### Jupyter Server
+
+Jupyter Lab and Jupyter Notebook users can leverage the Jupyter server to create urls or paths to pass to JBrowse Jupyter view configs. 
+
+Once you have the data within the file tree where the notebook is running, then you will be able to format the urls or paths to pass to the API. (Note: you will need to serve your entire project where the notebook is running.)
+
+To verify that your data is in the correct place, you can navigate to *http://your-host:your-port/tree* . Make sure that you use the same port and host that is used in your jupyter configuration. 
+
+e.g http://localhost:8888/tree is the url your should navigate to if you are running your jupyter notebook in localhost in port 8888
+
+If you have a different port or host, you can change the port and host used by JBrowse with the use of the set_env(notebook_host, notebook_port). 
+
+Example:
+config = create("LGV)
+config.set_env("host", 9999).
+
+#### Using Jupyter URLS
+
+In this example, the notebook is configured to run in localhost in port 8888. It is assumed that you have Jupyter lab installed in your venv.
+
+File tree of the project: 
+```
+- example_dir/
+    - example.ipynb
+    - data1.gff.gz
+    - data2.gff.gz.tbi
+```
+Running Jupyter
+```
+(venv)$ cd example_dir
+(venv)$ jupyter lab
+```
+
+This will be the url that you should see at the top of your browser if you opened the example.ipynb
+http://localhost:8888/lab/tree/example.ipynb
+
+Urls for file `data1.gff.gz` and `data2.gff.gz.tbi`
+would be in the form `http://localhost:8888/files/<your_file_name>`.
+* `http://localhost:8888/files/data1.gff.gz`
+* `http://localhost:8888/files/data2.gff.gz.tbi`
+Note that you do not need to add lab or tree to this url.
+
+You can use these urls. For example, you could add a track with thse urls like this:
+```python
+
+config.add_track(
+    "http://localhost:8888/files/data1.gff.gz", # track data
+    index="http://localhost:8888/files/data2.gff.gz.tbi", # track index
+    track_id="example-track", # track id
+    name="track-name" # track name
+)
+```
+
+Resources:
+* [Configuring the Jupyter Notebook server](https://jupyter-notebook.readthedocs.io/en/stable/config_overview.html#notebook-server)
+* [Getting started with Jupyter Lab](https://jupyterlab.readthedocs.io/en/stable/getting_started/starting.html)
+
+#### Using Jupyter paths
+JBrowse also supports paths to files are within the Jupyter file tree (this only works if you are running your notebook in Jupyter lab or Jupyter notebook).
+
+You can repeat the steps in the previous section to ensure that your files are in the correct place. Instead of formatting the urls yourself, you can pass paths **relative to the root of the Jupyter file tree** .
+
+Using the same structure of the previous example...
 
-For those using colab notebooks,binder, jupyter and more you can use the JBrowse dev server.
+File tree of the project: 
+```
+- example_dir/
+    - example.ipynb
+    - data1.gff.gz
+    - data2.gff.gz.tbi
+```
+Running Jupyter
+```
+(venv)$ cd example_dir
+(venv)$ jupyter lab
+```
+A user could then specify paths to data1 and data2 like this
+```python
+
+config.add_track(
+    "/data1.gff.gz", # track data
+    index="/data2.gff.gz.tbi", # track index
+    track_id="example-track", # track id
+    name="track-name" # track name
+)
+```
 
-#### JBrowse dev server
+### JBrowse dev server
 We also provide a simple http server configured with CORS that will allow you to serve your local files from a specified directory within your machine.
 
-> **_Note__** that the use of local files or the dev server provided is not recommended for production environments. 
+> **Note** The use of local files or the dev server provided is not recommended for production environments. 
 
 You can spin the dev server in two ways.
 1. Git clone this repo
@@ -296,7 +360,34 @@ if __name__ == "__main__":
 - For example: the url to the data you wish to pass to the JBrowse view config for the local dev server running on port 8080 on local host will look like this "http://localhost:8080/<your-file-name>"
 e.g `jbrowse_conf.add_track("http://localhost:8080/<your-file-name>", name="test-demo")`
 
-
+## JBrowse Jupyter vs Other tools
+
+| Features        | JBrowse/ JBrowse Jupyter | IGV.js /igv-notebook | ipyIgv | Gosling/Gos | D3GB | PygBrowse | Mango |
+| --------------- | ----------------   | ------------------   |  ----  | ----------- | ---- | --------- | ----  |
+| Binder support            | :heavy_check_mark: | :heavy_check_mark:   | :heavy_check_mark: | :heavy_check_mark: | :x:  | :x: | :x: |
+| Colab  support            | :heavy_check_mark: | :heavy_check_mark:   | :x: | :heavy_check_mark: | :x: | :x: | :x: |
+| Custom Color Theming      | :heavy_check_mark: | :x:                  | :x:                | :heavy_check_mark: | :x: | :x: | :x: |
+| Deletion of tracks        | :heavy_check_mark: | :x:                  | :heavy_check_mark: | :x: | :x: | :x: | :x: |
+| Export view as SVG        | :heavy_check_mark: &ast; | :heavy_check_mark:   | :heavy_check_mark:| :x: | :x: | :x: | :heavy_check_mark:|
+| Local file support        | :heavy_check_mark: &ast;&ast; | :heavy_check_mark:   | :heavy_check_mark: | :heavy_check_mark:| :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
+| Supports Circular Genome View | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :x: |
+| Ability to enable text searching from indexed files | :heavy_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: |
+| Ability to add tracks from Dataframes  | :heavy_check_mark: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x:| 
+| Zooming in on regions of interest | :heavy_check_mark: &ast; | :heavy_check_mark:  | :heavy_check_mark: &ast;| :heavy_check_mark: &ast; | :heavy_check_mark: &ast;| :x: | :heavy_check_mark: &ast; |
+
+&ast; Feature is accessible via the component's UI and not by API.
+&ast;&ast; Path support for local files is only available when running notebook in Jupyter lab and Jupyter notebook. Local file support in colab and binder is available by running the JBrowse dev server to host your data and creating urls to pass to the JBrowse view. More information available in the [local file suport section of this readme](#Local-file-support)
+
+* For more features of the JBrowse and JBrowse embedded components checkout 
+[our documentation](https://jbrowse.org/jb2/docs/embedded_components/)
+* Igv.js [documentation](https://github.com/igvteam/igv.js/wiki/) 
+* igv-notebook [documentation](https://github.com/igvteam/igv-notebook)
+* ipyIgv [documentation](https://github.com/QuantStack/ipyigv)
+* D3GB [documentation](http://d3gb.usal.es/index.html)
+* PygBrowse [documentation](https://github.com/phageghost/python-genome-browser)
+* Gosling [documentaiton](https://github.com/gosling-lang/gosling.js)
+* Gos [documentation](https://gosling-lang.github.io/gos/)
+* Mango [documentation](https://bdg-mango.readthedocs.io/en/latest/jupyterWidgets/usage.html)
 
 ## Resources
 * [JBrowse](https://jbrowse.org/jb2/) - the next generation genome browser
@@ -304,8 +395,13 @@ e.g `jbrowse_conf.add_track("http://localhost:8080/<your-file-name>", name="test
 * [JBrowse React Linear Genome View Docs](https://jbrowse.org/storybook/lgv/main/?path=/story/getting-started--page) - storybook docs of React LGV
 * [Dash Applications](https://dash.plotly.com/layout) how to get started to custumize Dash applications.
 * [Dash HTML components](https://dash.plotly.com/dash-html-components) Dash html components to build the Dash aplication layout.
-* [DashJupyter](https://github.com/plotly/jupyter-dash) library to enable embedding Dash components in jupyter notebooks.
-* [DashJbrowse](https://github.com/GMOD/dash_jbrowse) suite of Dash components for JBrowse views. (JBrowse Linear Genome View)
+* [Dash Jupyter](https://github.com/plotly/jupyter-dash) library to enable embedding Dash components in jupyter notebooks.
+* [Dash Jbrowse](https://github.com/GMOD/dash_jbrowse) suite of Dash components for JBrowse views. (JBrowse Linear Genome View)
+
+## Contributing
+
+See our [contributing guide](./CONTRIBUTING.md).
+
 ## Academic Use
 This package was written with funding from the [NHGRI](https://genome.gov/) as
 part of the JBrowse project. If you use it in an academic project that you
@@ -359,6 +455,15 @@ We **really** love talking to our users. Please reach out with any thoughts you
         2. Launch your own http server with CORS which will enable you to use local files. You can run our serve.py to launch our dev server. 
     (Checkout our local_support.ipynb for tutorials on how to use your own data)
 
-**_Note_:** that these solutions are recommended for your development environments and not supported in production.
+> **Note**: These solutions are recommended for your development environments and not supported in production.
 * I am running a colab notebook/binder notebook and wish to use my local data, how can I do this? 
     - You can run JBrowse dev server to serve local files to use in your JBrowse views. More information on the dev server can be found in the local file support section of this readme.
+
+* My paths are not working?
+    - If you are using paths, make sure you are in a jupyter environment (Jupyter lab or jupyter notebook). Additionally, make sure that the port and host match the ones in your config. If they are different, use the set_env(notebook_host, notebook_port) to change the default port and host used by JBrowse to configure paths in jupyter.
+
+* My data says it's is loading and never loads?
+    - If your view shows that it is loading and never loads, it could be a fetch error or CORS.
+        - the JBrowse Dev Server has CORS enabled.
+    - Make sure that your alias is correctly configured. Data that never loads could also indicate that the format is correct, but will not display anything for it if the assembly does not match.
+    - Data that never loads could also indicate that the port and host do not match where your data is hosted when using paths in jupyter envs
diff --git a/browser.ipynb b/browser.ipynb
index f8a9e80..12bbbee 100644
--- a/browser.ipynb
+++ b/browser.ipynb
@@ -2,76 +2,9 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": null,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Requirement already satisfied: jbrowse-jupyter in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (1.2.9)\n",
-      "Requirement already satisfied: pandas>=1.1.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jbrowse-jupyter) (1.4.0)\n",
-      "Requirement already satisfied: Werkzeug==2.0.3 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jbrowse-jupyter) (2.0.3)\n",
-      "Requirement already satisfied: pytest>=6.2.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jbrowse-jupyter) (6.2.5)\n",
-      "Requirement already satisfied: jupyter-dash>=0.4.2 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jbrowse-jupyter) (0.4.2)\n",
-      "Requirement already satisfied: dash==2.3.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jbrowse-jupyter) (2.3.0)\n",
-      "Requirement already satisfied: dash-jbrowse>=1.0.4 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jbrowse-jupyter) (1.1.0)\n",
-      "Requirement already satisfied: dash-table==5.0.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (5.0.0)\n",
-      "Requirement already satisfied: dash-html-components==2.0.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (2.0.0)\n",
-      "Requirement already satisfied: plotly>=5.0.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (5.3.1)\n",
-      "Requirement already satisfied: dash-core-components==2.0.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (2.0.0)\n",
-      "Requirement already satisfied: Flask>=1.0.4 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (1.1.2)\n",
-      "Requirement already satisfied: flask-compress in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (1.10.1)\n",
-      "Requirement already satisfied: ipython in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (7.19.0)\n",
-      "Requirement already satisfied: retrying in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (1.3.3)\n",
-      "Requirement already satisfied: ipykernel in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (5.3.4)\n",
-      "Requirement already satisfied: requests in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (2.24.0)\n",
-      "Requirement already satisfied: ansi2html in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (1.6.0)\n",
-      "Requirement already satisfied: nest-asyncio in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (1.4.2)\n",
-      "Requirement already satisfied: numpy>=1.18.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter) (1.19.2)\n",
-      "Requirement already satisfied: python-dateutil>=2.8.1 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter) (2.8.1)\n",
-      "Requirement already satisfied: pytz>=2020.1 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter) (2020.1)\n",
-      "Requirement already satisfied: toml in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (0.10.1)\n",
-      "Requirement already satisfied: pluggy<2.0,>=0.12 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (0.13.1)\n",
-      "Requirement already satisfied: attrs>=19.2.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (20.3.0)\n",
-      "Requirement already satisfied: iniconfig in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (1.1.1)\n",
-      "Requirement already satisfied: packaging in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (20.4)\n",
-      "Requirement already satisfied: py>=1.8.2 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (1.9.0)\n",
-      "Requirement already satisfied: itsdangerous>=0.24 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (1.1.0)\n",
-      "Requirement already satisfied: click>=5.1 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (7.1.2)\n",
-      "Requirement already satisfied: Jinja2>=2.10.1 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (2.11.2)\n",
-      "Requirement already satisfied: tenacity>=6.2.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from plotly>=5.0.0->dash==2.3.0->jbrowse-jupyter) (8.0.1)\n",
-      "Requirement already satisfied: six in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from plotly>=5.0.0->dash==2.3.0->jbrowse-jupyter) (1.16.0)\n",
-      "Requirement already satisfied: brotli in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from flask-compress->dash==2.3.0->jbrowse-jupyter) (1.0.9)\n",
-      "Requirement already satisfied: tornado>=4.2 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (6.1)\n",
-      "Requirement already satisfied: traitlets>=4.1.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (5.1.1)\n",
-      "Requirement already satisfied: jupyter-client in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (6.1.7)\n",
-      "Requirement already satisfied: appnope in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.1.0)\n",
-      "Requirement already satisfied: pickleshare in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.7.5)\n",
-      "Requirement already satisfied: backcall in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.2.0)\n",
-      "Requirement already satisfied: pexpect>4.3 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (4.8.0)\n",
-      "Requirement already satisfied: pygments in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (2.7.2)\n",
-      "Requirement already satisfied: decorator in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (4.4.2)\n",
-      "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (3.0.8)\n",
-      "Requirement already satisfied: jedi>=0.10 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.17.1)\n",
-      "Requirement already satisfied: setuptools>=18.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (59.2.0)\n",
-      "Requirement already satisfied: pyparsing>=2.0.2 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from packaging->pytest>=6.2.5->jbrowse-jupyter) (2.4.7)\n",
-      "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (1.25.11)\n",
-      "Requirement already satisfied: idna<3,>=2.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (2.10)\n",
-      "Requirement already satisfied: certifi>=2017.4.17 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (2020.6.20)\n",
-      "Requirement already satisfied: chardet<4,>=3.0.2 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (3.0.4)\n",
-      "Requirement already satisfied: parso<0.8.0,>=0.7.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jedi>=0.10->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.7.0)\n",
-      "Requirement already satisfied: MarkupSafe>=0.23 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from Jinja2>=2.10.1->Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (2.0.1)\n",
-      "Requirement already satisfied: ptyprocess>=0.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pexpect>4.3->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.6.0)\n",
-      "Requirement already satisfied: wcwidth in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.2.5)\n",
-      "Requirement already satisfied: pyzmq>=13 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-client->ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (19.0.2)\n",
-      "Requirement already satisfied: jupyter-core>=4.6.0 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from jupyter-client->ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (4.6.3)\n",
-      "\u001b[33mWARNING: You are using pip version 22.0.4; however, version 22.2.2 is available.\n",
-      "You should consider upgrading via the '/Users/teresamartinez/opt/anaconda3/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\u001b[33m\n",
-      "\u001b[0m"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "# For its use in colab notebook\n",
     "!pip install jbrowse-jupyter"
@@ -79,32 +12,18 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": null,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Requirement already satisfied: pandas in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (1.4.0)\n",
-      "Requirement already satisfied: numpy>=1.18.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pandas) (1.19.2)\n",
-      "Requirement already satisfied: pytz>=2020.1 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pandas) (2020.1)\n",
-      "Requirement already satisfied: python-dateutil>=2.8.1 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from pandas) (2.8.1)\n",
-      "Requirement already satisfied: six>=1.5 in /Users/teresamartinez/opt/anaconda3/lib/python3.8/site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)\n",
-      "\u001b[33mWARNING: You are using pip version 22.0.4; however, version 22.2.2 is available.\n",
-      "You should consider upgrading via the '/Users/teresamartinez/opt/anaconda3/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\u001b[33m\n",
-      "\u001b[0m"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "# For its use in colab notebook\n",
-    "!pip install pandas"
+    "!pip install pandas\n",
+    "!pip install --force-reinstall MarkupSafe==2.0.1"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -114,7 +33,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -123,7 +42,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 11,
    "metadata": {},
    "outputs": [
     {
@@ -151,7 +70,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
@@ -161,7 +80,7 @@
        "        <iframe\n",
        "            width=\"100%\"\n",
        "            height=\"300\"\n",
-       "            src=\"http://127.0.0.1:3003/\"\n",
+       "            src=\"http://127.0.0.1:3013/\"\n",
        "            frameborder=\"0\"\n",
        "            allowfullscreen\n",
        "            \n",
@@ -169,7 +88,7 @@
        "        "
       ],
       "text/plain": [
-       "<IPython.lib.display.IFrame at 0x7fb258f60ee0>"
+       "<IPython.lib.display.IFrame at 0x7fed89f39b50>"
       ]
      },
      "metadata": {},
@@ -180,12 +99,12 @@
     "hg38.set_location(\"10:100..350\")\n",
     "hg38.set_default_session(['df_track_id'], False)\n",
     "new_conf = hg38.get_config()\n",
-    "launch(new_conf, port=3003)"
+    "launch(new_conf, port=3013)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -204,7 +123,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -222,7 +141,7 @@
        "        "
       ],
       "text/plain": [
-       "<IPython.lib.display.IFrame at 0x7fb258fddd00>"
+       "<IPython.lib.display.IFrame at 0x7fed58e04e20>"
       ]
      },
      "metadata": {},
@@ -247,11 +166,8 @@
   }
  ],
  "metadata": {
-  "interpreter": {
-   "hash": "aaf81c8f28912d07c45359b3a81eb2244c23c90e1b370733684a5666e4e4597e"
-  },
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -265,7 +181,12 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.5"
+   "version": "3.8.13"
+  },
+  "vscode": {
+   "interpreter": {
+    "hash": "aaf81c8f28912d07c45359b3a81eb2244c23c90e1b370733684a5666e4e4597e"
+   }
   }
  },
  "nbformat": 4,
diff --git a/browser.py b/browser.py
index f28a776..f97fddc 100644
--- a/browser.py
+++ b/browser.py
@@ -19,6 +19,9 @@
 
 # setting the assembly
 assembly_data = "https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz"
+ix = "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/trix/hg38.ix"
+ixx = "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/trix/hg38.ixx"
+meta = "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/trix/meta.json"
 jbrowse_conf.set_assembly(assembly_data,
                           aliases=aliases,
                           refname_aliases=ref_name_aliases)
@@ -28,9 +31,11 @@
               "GRCh38/ncbi_refseq/GCA_000001405.15_GRCh38_full" \
               "_analysis_set.refseq_annotation.sorted.gff.gz"
 jbrowse_conf.add_track(track_data, name="test-demo", track_id="test-track")
-
+# deleting a track
+jbrowse_conf.add_track(track_data, name="delete", track_id="test-delete-track")
+jbrowse_conf.delete_track("test-delete-track")
 # set location
-
+jbrowse_conf.add_text_search_adapter(ix, ixx, meta)
 jbrowse_conf.set_location("10:1..19999")
 
 # add custom theme
diff --git a/docs/docs/doctrees/environment.pickle b/docs/docs/doctrees/environment.pickle
index 7d3b980..a848e4c 100644
Binary files a/docs/docs/doctrees/environment.pickle and b/docs/docs/doctrees/environment.pickle differ
diff --git a/docs/docs/doctrees/faq.doctree b/docs/docs/doctrees/faq.doctree
index dac6003..a28bb63 100644
Binary files a/docs/docs/doctrees/faq.doctree and b/docs/docs/doctrees/faq.doctree differ
diff --git a/docs/docs/doctrees/features.doctree b/docs/docs/doctrees/features.doctree
new file mode 100644
index 0000000..d5ffff2
Binary files /dev/null and b/docs/docs/doctrees/features.doctree differ
diff --git a/docs/docs/doctrees/index.doctree b/docs/docs/doctrees/index.doctree
index 6f2d8c7..657beec 100644
Binary files a/docs/docs/doctrees/index.doctree and b/docs/docs/doctrees/index.doctree differ
diff --git a/docs/docs/doctrees/jbrowse_jupyter.doctree b/docs/docs/doctrees/jbrowse_jupyter.doctree
index e466e2b..5339348 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/local.doctree b/docs/docs/doctrees/local.doctree
new file mode 100644
index 0000000..33d3ddd
Binary files /dev/null and b/docs/docs/doctrees/local.doctree differ
diff --git a/docs/docs/doctrees/tutorial.doctree b/docs/docs/doctrees/tutorial.doctree
index aef5652..c6171be 100644
Binary files a/docs/docs/doctrees/tutorial.doctree and b/docs/docs/doctrees/tutorial.doctree differ
diff --git a/docs/docs/html/_sources/faq.md.txt b/docs/docs/html/_sources/faq.md.txt
index f17ea50..2e8523f 100644
--- a/docs/docs/html/_sources/faq.md.txt
+++ b/docs/docs/html/_sources/faq.md.txt
@@ -32,8 +32,20 @@
 ![Custom Palette](https://github.com/GMOD/jbrowse-jupyter/raw/main/images/custom_palette.png)
 
 * Can I use local files/my own data?
-    - There are a couple of ways in which you can configure and use your own data from your local environment in jbrowse views. 
-        1.  make use of the jupyter notebook server as shown in the local_support.ipynb 
-        2. launch your own http server with CORS which will enable you to use local files in Google Colab notebooks and binder notebooks
+    - Yes, there are a couple of ways in which you can configure and use your own data from your local environment in jbrowse views. 
+        1. Make use of the jupyter notebook/lab server. Intended for those running their notebooks with jupyter lab or jupyter notebook.
+        2. Launch your own http server with CORS which will enable you to use local files. You can run our serve.py to launch our dev server. 
+    (Checkout our local_support.ipynb for tutorials on how to use your own data)
 
-    **_Note_:** that these solutions are recommended for your development environments and not supported in production.
+> **Note**: These solutions are recommended for your development environments and not supported in production.
+* I am running a colab notebook/binder notebook and wish to use my local data, how can I do this? 
+    - You can run JBrowse dev server to serve local files to use in your JBrowse views. More information on the dev server can be found in the local file support section of this readme.
+
+* My paths are not working?
+    - If you are using paths, make sure you are in a jupyter environment (Jupyter lab or jupyter notebook). Additionally, make sure that the port and host match the ones in your config. If they are different, use the set_env(notebook_host, notebook_port) to change the default port and host used by JBrowse to configure paths in jupyter.
+
+* My data says it's is loading and never loads?
+    - If your view shows that it is loading and never loads, it could be a fetch error or CORS.
+        - the JBrowse Dev Server has CORS enabled.
+    - Make sure that your alias is correctly configured. Data that never loads could also indicate that the format is correct, but will not display anything for it if the assembly does not match.
+    - Data that never loads could also indicate that the port and host do not match where your data is hosted when using paths in jupyter envs
diff --git a/docs/docs/html/_sources/features.md.txt b/docs/docs/html/_sources/features.md.txt
new file mode 100644
index 0000000..761c1d3
--- /dev/null
+++ b/docs/docs/html/_sources/features.md.txt
@@ -0,0 +1,28 @@
+## JBrowse Jupyter vs Other tools
+
+| Features        | JBrowse/ JBrowse Jupyter | IGV.js /igv-notebook | ipyIgv | Gosling/Gos | D3GB | PygBrowse | Mango |
+| --------------- | ----------------   | ------------------   |  ----  | ----------- | ---- | --------- | ----  |
+| Binder support            | &#x2611; | &#x2611;   | &#x2611; | &#x2611; | &#x2612;  | &#x2612; | &#x2612; |
+| Colab  support            | &#x2611; | &#x2611;   | &#x2612; | &#x2611; | &#x2612; | &#x2612; | &#x2612; |
+| Custom Color Theming      | &#x2611; | &#x2612; | &#x2612; | &#x2611; | &#x2612; | &#x2612; | &#x2612; |
+| Deletion of tracks        | &#x2611; | &#x2612; | &#x2611; | &#x2612; | &#x2612;| &#x2612; | &#x2612; |
+| Export view as SVG        | &#x2611; &ast; | &#x2611;   | &#x2611;| &#x2612; | &#x2612; | &#x2612; | &#x2611;|
+| Local file support        | &#x2611; &ast;&ast; | &#x2611;   | &#x2611; | &#x2611;| &#x2611; | &#x2611; | &#x2611; |
+| Supports Circular Genome View | &#x2611; | &#x2612; | &#x2612; | &#x2611; | &#x2612; | &#x2612; | &#x2612; |
+| Ability to enable text searching from indexed files | &#x2611; | &#x2612; | &#x2612; | &#x2612; | &#x2612; | &#x2612; | &#x2612; |
+| Ability to add tracks from Dataframes  | &#x2611; | &#x2612; | &#x2612; | &#x2612; | &#x2612; | &#x2611; | &#x2612;| 
+| Zooming in on regions of interest | &#x2611; &ast; | &#x2611;  | &#x2611; &ast;| &#x2611; &ast; | &#x2611; &ast;| &#x2612; | &#x2611; &ast; |
+
+&ast; Feature is accessible via the component's UI and not by API.
+&ast;&ast; Path support for local files is only available when running notebook in Jupyter lab and Jupyter notebook. Local file support in colab and binder is available by running the JBrowse dev server to host your data and creating urls to pass to the JBrowse view.
+
+* For more features of the JBrowse and JBrowse embedded components checkout 
+[our documentation](https://jbrowse.org/jb2/docs/embedded_components/)
+* Igv.js [documentation](https://github.com/igvteam/igv.js/wiki/) 
+* igv-notebook [documentation](https://github.com/igvteam/igv-notebook)
+* ipyIgv [documentation](https://github.com/QuantStack/ipyigv)
+* D3GB [documentation](http://d3gb.usal.es/index.html)
+* PygBrowse [documentation](https://github.com/phageghost/python-genome-browser)
+* Gosling [documentaiton](https://github.com/gosling-lang/gosling.js)
+* Gos [documentation](https://gosling-lang.github.io/gos/)
+* Mango [documentation](https://bdg-mango.readthedocs.io/en/latest/jupyterWidgets/usage.html)
diff --git a/docs/docs/html/_sources/index.rst.txt b/docs/docs/html/_sources/index.rst.txt
index 79f4d47..6bd4016 100644
--- a/docs/docs/html/_sources/index.rst.txt
+++ b/docs/docs/html/_sources/index.rst.txt
@@ -14,6 +14,8 @@ Welcome to JBrowse Jupyter's documentation!
    modules
    tutorial
    contact
+   features
+   local 
    faq
 
 Indices and tables
diff --git a/docs/docs/html/_sources/local.md.txt b/docs/docs/html/_sources/local.md.txt
new file mode 100644
index 0000000..65d9b41
--- /dev/null
+++ b/docs/docs/html/_sources/local.md.txt
@@ -0,0 +1,136 @@
+## Local file support
+We currently support two ways of passing your local data to JBrowse Views.
+
+For our **Jupyter lab and Jupyter notebook** users, you can create urls by leveraging the Jupyter server where your notebook is running or you can provide paths relative to root of the file tree. You can also provide paths relative to the root of the Jupyter file tree. Examples of these can be found below or in the
+local_support.ipynb.
+
+For those using **colab notebooks and binder** (will also work in Jupyter) you can use the JBrowse dev server. An example of how to use the JBrowse dev server can be found below.
+
+> **Note**: These solutions are recommended for your development environments and not supported in production.
+
+A tutorial can be found in the root of the directory named [local_support.ipynb](https://github.com/GMOD/jbrowse-jupyter/blob/main/local_support.ipynb)
+### Jupyter Server
+
+Jupyter Lab and Jupyter Notebook users can leverage the Jupyter server to create urls or paths to pass to JBrowse Jupyter view configs. 
+
+Once you have the data within the file tree where the notebook is running, then you will be able to format the urls or paths to pass to the API. (Note: you will need to serve your entire project where the notebook is running.)
+
+To verify that your data is in the correct place, you can navigate to *http://your-host:your-port/tree* . Make sure that you use the same port and host that is used in your jupyter configuration. 
+
+e.g http://localhost:8888/tree is the url your should navigate to if you are running your jupyter notebook in localhost in port 8888
+
+If you have a different port or host, you can change the port and host used by JBrowse with the use of the set_env(notebook_host, notebook_port). 
+
+Example:
+config = create("LGV)
+config.set_env("host", 9999).
+
+#### Using Jupyter URLS
+
+In this example, the notebook is configured to run in localhost in port 8888. It is assumed that you have Jupyter lab installed in your venv.
+
+File tree of the project: 
+```
+- example_dir/
+    - example.ipynb
+    - data1.gff.gz
+    - data2.gff.gz.tbi
+```
+Running Jupyter
+```
+(venv)$ cd example_dir
+(venv)$ jupyter lab
+```
+
+This will be the url that you should see at the top of your browser if you opened the example.ipynb
+http://localhost:8888/lab/tree/example.ipynb
+
+Urls for file `data1.gff.gz` and `data2.gff.gz.tbi`
+would be in the form `http://localhost:8888/files/<your_file_name>`.
+* `http://localhost:8888/files/data1.gff.gz`
+* `http://localhost:8888/files/data2.gff.gz.tbi`
+Note that you do not need to add lab or tree to this url.
+
+You can use these urls. For example, you could add a track with thse urls like this:
+```python
+
+config.add_track(
+    "http://localhost:8888/files/data1.gff.gz", # track data
+    index="http://localhost:8888/files/data2.gff.gz.tbi", # track index
+    track_id="example-track", # track id
+    name="track-name" # track name
+)
+```
+
+Resources:
+* [Configuring the Jupyter Notebook server](https://jupyter-notebook.readthedocs.io/en/stable/config_overview.html#notebook-server)
+* [Getting started with Jupyter Lab](https://jupyterlab.readthedocs.io/en/stable/getting_started/starting.html)
+
+#### Using Jupyter paths
+JBrowse also supports paths to files are within the Jupyter file tree (this only works if you are running your notebook in Jupyter lab or Jupyter notebook).
+
+You can repeat the steps in the previous section to ensure that your files are in the correct place. Instead of formatting the urls yourself, you can pass paths **relative to the root of the Jupyter file tree** .
+
+Using the same structure of the previous example...
+
+File tree of the project: 
+```
+- example_dir/
+    - example.ipynb
+    - data1.gff.gz
+    - data2.gff.gz.tbi
+```
+Running Jupyter
+```
+(venv)$ cd example_dir
+(venv)$ jupyter lab
+```
+A user could then specify paths to data1 and data2 like this
+```python
+
+config.add_track(
+    "/data1.gff.gz", # track data
+    index="/data2.gff.gz.tbi", # track index
+    track_id="example-track", # track id
+    name="track-name" # track name
+)
+```
+
+### JBrowse dev server
+We also provide a simple http server configured with CORS that will allow you to serve your local files from a specified directory within your machine.
+
+> **Note** The use of local files or the dev server provided is not recommended for production environments. 
+
+You can spin the dev server in two ways.
+1. Git clone this repo
+2. From the root of this repository, you will be able to run the python file named `serve.py`
+```$ python serve.py```
+3. You can choose your own port, host, and directory from which to serve your files. You can also press enter to choose all the defaults. 
+  - Default PORT: 8080
+  - Default host: localhost
+  - Default directory: the current working directory -> os.getcwd() is used
+
+4. Now that the dev server is running you can use the url provided in the terminal to pass to your views. 
+- For example: the url to the data you wish to pass to the JBrowse view config for the local dev server running on port 8080 on local host will look like this "http://localhost:8080/<your-file-name>"
+e.g `jbrowse_conf.add_track("http://localhost:8080/<your-file-name>", name="test-demo")`
+
+Or you can make your own python file and run it to start the server.
+
+1. create a python file named dev_server.py and add the code below
+
+```
+import os
+from jbrowse_jupyter import serve
+
+
+if __name__ == "__main__":
+    serve(os.getcwd(), port=8080, host='localhost')
+```
+2. Run the python file
+`$ python dev_server.py`
+
+3. This will spin up a python simple http server with cors enabled. You can take a look at our implementation of our dev server here: `jbrowse_jupyter/dev_server.py`
+
+4. Now that the dev server is running you can use the url provided in the terminal to pass to your views. 
+- For example: the url to the data you wish to pass to the JBrowse view config for the local dev server running on port 8080 on local host will look like this "http://localhost:8080/<your-file-name>"
+e.g `jbrowse_conf.add_track("http://localhost:8080/<your-file-name>", name="test-demo")`
diff --git a/docs/docs/html/_sources/tutorial.md.txt b/docs/docs/html/_sources/tutorial.md.txt
index f65ce68..c7f78b2 100644
--- a/docs/docs/html/_sources/tutorial.md.txt
+++ b/docs/docs/html/_sources/tutorial.md.txt
@@ -3,7 +3,7 @@
 * [SK-BR-3 demo](https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/skbr3.ipynb)
 * [Browser Notebook demo](https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/browser.ipynb)
 * [Python Dash Application with LGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/browser.py)
-* [Python Dash Application with CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/cgv_examples.py)
+* [Python Dash Application with CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/examples/cgv_examples.py)
 * [Notebook Examples LGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/browser.ipynb)
-* [Notebook Examples CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/cgv_examples.py)
+* [Notebook Examples CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/examples/cgv_examples.py)
 * [Using Local Files in Jbrowse LGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/local_support.ipynb)
diff --git a/docs/docs/html/_static/documentation_options.js b/docs/docs/html/_static/documentation_options.js
index 907873f..ef69556 100644
--- a/docs/docs/html/_static/documentation_options.js
+++ b/docs/docs/html/_static/documentation_options.js
@@ -1,6 +1,6 @@
 var DOCUMENTATION_OPTIONS = {
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: '1.3.0',
+    VERSION: '1.3.6',
     LANGUAGE: 'None',
     COLLAPSE_INDEX: false,
     BUILDER: 'html',
diff --git a/docs/docs/html/contact.html b/docs/docs/html/contact.html
index b49a906..566932d 100644
--- a/docs/docs/html/contact.html
+++ b/docs/docs/html/contact.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="FAQ" href="faq.html" />
+    <link rel="next" title="JBrowse Jupyter vs Other tools" href="features.html" />
     <link rel="prev" title="Tutorials and Demos" href="tutorial.html" /> 
 </head>
 
@@ -43,6 +43,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
@@ -86,7 +88,7 @@ <h1>Contact us<a class="headerlink" href="#contact-us" title="Permalink to this
           </div>
           <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
         <a href="tutorial.html" class="btn btn-neutral float-left" title="Tutorials and Demos" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
-        <a href="faq.html" class="btn btn-neutral float-right" title="FAQ" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+        <a href="features.html" class="btn btn-neutral float-right" title="JBrowse Jupyter vs Other tools" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
     </div>
 
   <hr/>
diff --git a/docs/docs/html/dev_server.html b/docs/docs/html/dev_server.html
index 4ba7d8f..e36a4b6 100644
--- a/docs/docs/html/dev_server.html
+++ b/docs/docs/html/dev_server.html
@@ -48,6 +48,8 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
diff --git a/docs/docs/html/faq.html b/docs/docs/html/faq.html
index 2c0726f..be4418b 100644
--- a/docs/docs/html/faq.html
+++ b/docs/docs/html/faq.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="prev" title="Contact us" href="contact.html" /> 
+    <link rel="prev" title="Local file support" href="local.html" /> 
 </head>
 
 <body class="wy-body-for-nav"> 
@@ -42,6 +42,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">FAQ</a></li>
 </ul>
 
@@ -127,14 +129,40 @@ <h1>FAQ<a class="headerlink" href="#faq" title="Permalink to this headline"><
 </li>
 <li><p>Can I use local files/my own data?</p>
 <ul class="simple">
-<li><p>There are a couple of ways in which you can configure and use your own data from your local environment in jbrowse views.</p>
+<li><p>Yes, there are a couple of ways in which you can configure and use your own data from your local environment in jbrowse views.</p>
 <ol class="arabic simple">
-<li><p>make use of the jupyter notebook server as shown in the local_support.ipynb</p></li>
-<li><p>launch your own http server with CORS which will enable you to use local files in Google Colab notebooks and binder notebooks</p></li>
+<li><p>Make use of the jupyter notebook/lab server. Intended for those running their notebooks with jupyter lab or jupyter notebook.</p></li>
+<li><p>Launch your own http server with CORS which will enable you to use local files. You can run our serve.py to launch our dev server.
+(Checkout our local_support.ipynb for tutorials on how to use your own data)</p></li>
 </ol>
 </li>
 </ul>
-<p><strong><em>Note</em>:</strong> that these solutions are recommended for your development environments and not supported in production.</p>
+</li>
+</ul>
+<blockquote>
+<div><p><strong>Note</strong>: These solutions are recommended for your development environments and not supported in production.</p>
+</div></blockquote>
+<ul class="simple">
+<li><p>I am running a colab notebook/binder notebook and wish to use my local data, how can I do this?</p>
+<ul>
+<li><p>You can run JBrowse dev server to serve local files to use in your JBrowse views. More information on the dev server can be found in the local file support section of this readme.</p></li>
+</ul>
+</li>
+<li><p>My paths are not working?</p>
+<ul>
+<li><p>If you are using paths, make sure you are in a jupyter environment (Jupyter lab or jupyter notebook). Additionally, make sure that the port and host match the ones in your config. If they are different, use the set_env(notebook_host, notebook_port) to change the default port and host used by JBrowse to configure paths in jupyter.</p></li>
+</ul>
+</li>
+<li><p>My data says it’s is loading and never loads?</p>
+<ul>
+<li><p>If your view shows that it is loading and never loads, it could be a fetch error or CORS.</p>
+<ul>
+<li><p>the JBrowse Dev Server has CORS enabled.</p></li>
+</ul>
+</li>
+<li><p>Make sure that your alias is correctly configured. Data that never loads could also indicate that the format is correct, but will not display anything for it if the assembly does not match.</p></li>
+<li><p>Data that never loads could also indicate that the port and host do not match where your data is hosted when using paths in jupyter envs</p></li>
+</ul>
 </li>
 </ul>
 </section>
@@ -143,7 +171,7 @@ <h1>FAQ<a class="headerlink" href="#faq" title="Permalink to this headline"><
            </div>
           </div>
           <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
-        <a href="contact.html" class="btn btn-neutral float-left" title="Contact us" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="local.html" class="btn btn-neutral float-left" title="Local file support" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
     </div>
 
   <hr/>
diff --git a/docs/docs/html/features.html b/docs/docs/html/features.html
new file mode 100644
index 0000000..3d0a538
--- /dev/null
+++ b/docs/docs/html/features.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <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>JBrowse Jupyter vs Other tools &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]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <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="Local file support" href="local.html" />
+    <link rel="prev" title="Contact us" href="contact.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> JBrowse Jupyter
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
+<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
+<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">JBrowse Jupyter</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>JBrowse Jupyter vs Other tools</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/features.md.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="jbrowse-jupyter-vs-other-tools">
+<h1>JBrowse Jupyter vs Other tools<a class="headerlink" href="#jbrowse-jupyter-vs-other-tools" title="Permalink to this headline"></a></h1>
+<table class="colwidths-auto docutils align-default">
+<thead>
+<tr class="row-odd"><th class="head"><p>Features</p></th>
+<th class="head"><p>JBrowse/ JBrowse Jupyter</p></th>
+<th class="head"><p>IGV.js /igv-notebook</p></th>
+<th class="head"><p>ipyIgv</p></th>
+<th class="head"><p>Gosling/Gos</p></th>
+<th class="head"><p>D3GB</p></th>
+<th class="head"><p>PygBrowse</p></th>
+<th class="head"><p>Mango</p></th>
+</tr>
+</thead>
+<tbody>
+<tr class="row-even"><td><p>Binder support</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+</tr>
+<tr class="row-odd"><td><p>Colab  support</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+</tr>
+<tr class="row-even"><td><p>Custom Color Theming</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+</tr>
+<tr class="row-odd"><td><p>Deletion of tracks</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+</tr>
+<tr class="row-even"><td><p>Export view as SVG</p></td>
+<td><p>☑ *</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☑</p></td>
+</tr>
+<tr class="row-odd"><td><p>Local file support</p></td>
+<td><p>☑ **</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+<td><p>☑</p></td>
+</tr>
+<tr class="row-even"><td><p>Supports Circular Genome View</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+</tr>
+<tr class="row-odd"><td><p>Ability to enable text searching from indexed files</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+</tr>
+<tr class="row-even"><td><p>Ability to add tracks from Dataframes</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☒</p></td>
+<td><p>☑</p></td>
+<td><p>☒</p></td>
+</tr>
+<tr class="row-odd"><td><p>Zooming in on regions of interest</p></td>
+<td><p>☑ *</p></td>
+<td><p>☑</p></td>
+<td><p>☑ *</p></td>
+<td><p>☑ *</p></td>
+<td><p>☑ *</p></td>
+<td><p>☒</p></td>
+<td><p>☑ *</p></td>
+</tr>
+</tbody>
+</table>
+<p>* Feature is accessible via the component’s UI and not by API.
+** Path support for local files is only available when running notebook in Jupyter lab and Jupyter notebook. Local file support in colab and binder is available by running the JBrowse dev server to host your data and creating urls to pass to the JBrowse view.</p>
+<ul class="simple">
+<li><p>For more features of the JBrowse and JBrowse embedded components checkout
+<a class="reference external" href="https://jbrowse.org/jb2/docs/embedded_components/">our documentation</a></p></li>
+<li><p>Igv.js <a class="reference external" href="https://github.com/igvteam/igv.js/wiki/">documentation</a></p></li>
+<li><p>igv-notebook <a class="reference external" href="https://github.com/igvteam/igv-notebook">documentation</a></p></li>
+<li><p>ipyIgv <a class="reference external" href="https://github.com/QuantStack/ipyigv">documentation</a></p></li>
+<li><p>D3GB <a class="reference external" href="http://d3gb.usal.es/index.html">documentation</a></p></li>
+<li><p>PygBrowse <a class="reference external" href="https://github.com/phageghost/python-genome-browser">documentation</a></p></li>
+<li><p>Gosling <a class="reference external" href="https://github.com/gosling-lang/gosling.js">documentaiton</a></p></li>
+<li><p>Gos <a class="reference external" href="https://gosling-lang.github.io/gos/">documentation</a></p></li>
+<li><p>Mango <a class="reference external" href="https://bdg-mango.readthedocs.io/en/latest/jupyterWidgets/usage.html">documentation</a></p></li>
+</ul>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="contact.html" class="btn btn-neutral float-left" title="Contact us" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="local.html" class="btn btn-neutral float-right" title="Local file support" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2021, Teresa De Jesus Martinez, JBrowse Team.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/docs/html/genindex.html b/docs/docs/html/genindex.html
index aef4c69..e6565e3 100644
--- a/docs/docs/html/genindex.html
+++ b/docs/docs/html/genindex.html
@@ -40,6 +40,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
@@ -180,10 +182,12 @@ <h2 id="S">S</h2>
       <li><a href="dev_server.html#jbrowse_jupyter.dev_server.serve">serve() (in module jbrowse_jupyter.dev_server)</a>
 </li>
       <li><a href="jbrowse_jupyter.html#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_assembly">set_assembly() (JBrowseConfig method)</a>
+</li>
+      <li><a href="jbrowse_jupyter.html#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_default_session">set_default_session() (JBrowseConfig method)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="jbrowse_jupyter.html#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_default_session">set_default_session() (JBrowseConfig method)</a>
+      <li><a href="jbrowse_jupyter.html#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_env">set_env() (JBrowseConfig method)</a>
 </li>
       <li><a href="jbrowse_jupyter.html#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_location">set_location() (JBrowseConfig method)</a>
 </li>
diff --git a/docs/docs/html/index.html b/docs/docs/html/index.html
index 1d48bd8..b9a45c4 100644
--- a/docs/docs/html/index.html
+++ b/docs/docs/html/index.html
@@ -42,6 +42,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
@@ -92,6 +94,12 @@ <h1>Welcome to JBrowse Jupyter’s documentation!<a class="headerlink" href="#we
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="local.html#jupyter-server">Jupyter Server</a></li>
+<li class="toctree-l2"><a class="reference internal" href="local.html#jbrowse-dev-server">JBrowse dev server</a></li>
+</ul>
+</li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 </div>
diff --git a/docs/docs/html/installation.html b/docs/docs/html/installation.html
index fb60293..27259ca 100644
--- a/docs/docs/html/installation.html
+++ b/docs/docs/html/installation.html
@@ -48,6 +48,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
diff --git a/docs/docs/html/jbrowse_jupyter.html b/docs/docs/html/jbrowse_jupyter.html
index f0e6cb6..a98ca31 100644
--- a/docs/docs/html/jbrowse_jupyter.html
+++ b/docs/docs/html/jbrowse_jupyter.html
@@ -48,6 +48,8 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
@@ -102,7 +104,7 @@
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>df</strong> – panda DataFrame with the track data.</p></li>
+<li><p><strong>track_data</strong> – panda DataFrame with the track data.</p></li>
 <li><p><strong>name</strong> (<em>str</em>) – name for the track.</p></li>
 <li><p><strong>track_id</strong> (<em>str</em>) – (optional) trackId for the track</p></li>
 <li><p><strong>overwrite</strong> (<em>str</em>) – flag wether or not to overwrite existing track.</p></li>
@@ -122,7 +124,7 @@
 
 <dl class="py method">
 <dt class="sig sig-object py" id="jbrowse_jupyter.jbrowse_config.JBrowseConfig.add_text_search_adapter">
-<span class="sig-name descname"><span class="pre">add_text_search_adapter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ix_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ixx_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">meta_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adapter_id</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.add_text_search_adapter" title="Permalink to this definition"></a></dt>
+<span class="sig-name descname"><span class="pre">add_text_search_adapter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ix</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ixx</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">meta</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">adapter_id</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.add_text_search_adapter" title="Permalink to this definition"></a></dt>
 <dd><p>Adds an aggregate trix text search adapter.
 Currently not available for Circular Genome View</p>
 <p>e.g:
@@ -131,9 +133,9 @@
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>ix_path</strong> (<em>str</em>) – path to ix file</p></li>
-<li><p><strong>ixx_path</strong> (<em>str</em>) – path to ixx file</p></li>
-<li><p><strong>meta_path</strong> (<em>str</em>) – path to meta.json file</p></li>
+<li><p><strong>ix</strong> (<em>str</em>) – url/path to ix file</p></li>
+<li><p><strong>ixx</strong> (<em>str</em>) – url/path to ixx file</p></li>
+<li><p><strong>meta</strong> (<em>str</em>) – url/path to meta.json file</p></li>
 <li><p><strong>adapter_id</strong> (<em>str</em>) – optional adapter_id</p></li>
 </ul>
 </dd>
@@ -142,7 +144,7 @@
 <li><p><strong>Exception</strong> – if assembly has not been configured</p></li>
 <li><p><strong>TypeError</strong> – if adapter with same adapter id
 is already configured</p></li>
-<li><p><strong>TypeError</strong> – local paths are not supported</p></li>
+<li><p><strong>TypeError</strong> – Paths are only supported in jupyter.</p></li>
 <li><p><strong>TypeError</strong> – if view is CGV</p></li>
 </ul>
 </dd>
@@ -163,12 +165,11 @@
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> (<em>str</em>) – track file or url
-(currently only supporting url)</p></li>
+<li><p><strong>data</strong> (<em>str</em>) – track file url/path</p></li>
 <li><p><strong>name</strong> (<em>str</em>) – (optional) name for the track
 (defaults to data filename)</p></li>
 <li><p><strong>track_id</strong> (<em>str</em>) – (optional) trackId for the track</p></li>
-<li><p><strong>index</strong> (<em>str</em>) – (optional) index file for the track</p></li>
+<li><p><strong>index</strong> (<em>str</em>) – (optional) file url/path for the track</p></li>
 <li><p><strong>track_type</strong> (<em>str</em>) – (optional) track type</p></li>
 <li><p><strong>overwrite</strong> (<em>boolean</em>) – (optional) defaults to False</p></li>
 </ul>
@@ -178,6 +179,7 @@
 <li><p><strong>Exception</strong> – if assembly has not been configured</p></li>
 <li><p><strong>TypeError</strong> – if track data is not provided</p></li>
 <li><p><strong>TypeError</strong> – if track type is not supported</p></li>
+<li><p><strong>TypeError</strong> – Paths are only supported in jupyter.</p></li>
 </ul>
 </dd>
 </dl>
@@ -235,7 +237,7 @@
 <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 sequence data</p></li>
+<li><p><strong>assembly_data</strong> (<em>str</em>) – url/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>
@@ -246,7 +248,7 @@
 </dd>
 <dt class="field-even">Raises</dt>
 <dd class="field-even"><ul class="simple">
-<li><p><strong>TypeError</strong> – if assembly_data is a local path</p></li>
+<li><p><strong>TypeError</strong> – Paths are only supported in jupyter.</p></li>
 <li><p><strong>TypeError</strong> – adapter used for file type is not supported or
 recognized</p></li>
 </ul>
@@ -274,6 +276,30 @@
 </dl>
 </dd></dl>
 
+<dl class="py method">
+<dt class="sig sig-object py" id="jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_env">
+<span class="sig-name descname"><span class="pre">set_env</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">notebook_host</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'localhost'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">notebook_port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8888</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_env" title="Permalink to this definition"></a></dt>
+<dd><p>Changes the port and the host for creating links to files
+found within the file tree of jupyter.</p>
+<p>We want to be able to use paths to local files that can be
+accessed within the file tree of jupyter notebook and jupyter
+lab. The port and host should match those configured in your
+jupyter config.</p>
+<p>You can set_env after creating your view.
+browser = create(“LGV”)
+browser.set_env(“localhost”, 8989)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>notebook_host</strong> (<em>str</em>) – host used in jupyter config for
+for using paths to local files. (Defaults to “localhost”)</p></li>
+<li><p><strong>notebook_port</strong> (<em>str</em>) – port used in jupyter config for
+for using paths to local files. (Defaults to 8888)</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py method">
 <dt class="sig sig-object py" id="jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_location">
 <span class="sig-name descname"><span class="pre">set_location</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">location</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#jbrowse_jupyter.jbrowse_config.JBrowseConfig.set_location" title="Permalink to this definition"></a></dt>
diff --git a/docs/docs/html/local.html b/docs/docs/html/local.html
new file mode 100644
index 0000000..bf5384b
--- /dev/null
+++ b/docs/docs/html/local.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <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>Local file support &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]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
+        <script src="_static/jquery.js"></script>
+        <script src="_static/underscore.js"></script>
+        <script src="_static/doctools.js"></script>
+    <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="FAQ" href="faq.html" />
+    <link rel="prev" title="JBrowse Jupyter vs Other tools" href="features.html" /> 
+</head>
+
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+            <a href="index.html" class="icon icon-home"> JBrowse Jupyter
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
+<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
+<li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Local file support</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="#jupyter-server">Jupyter Server</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#using-jupyter-urls">Using Jupyter URLS</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#using-jupyter-paths">Using Jupyter paths</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="#jbrowse-dev-server">JBrowse dev server</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">JBrowse Jupyter</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
+      <li>Local file support</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/local.md.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="local-file-support">
+<h1>Local file support<a class="headerlink" href="#local-file-support" title="Permalink to this headline"></a></h1>
+<p>We currently support two ways of passing your local data to JBrowse Views.</p>
+<p>For our <strong>Jupyter lab and Jupyter notebook</strong> users, you can create urls by leveraging the Jupyter server where your notebook is running or you can provide paths relative to root of the file tree. You can also provide paths relative to the root of the Jupyter file tree. Examples of these can be found below or in the
+local_support.ipynb.</p>
+<p>For those using <strong>colab notebooks and binder</strong> (will also work in Jupyter) you can use the JBrowse dev server. An example of how to use the JBrowse dev server can be found below.</p>
+<blockquote>
+<div><p><strong>Note</strong>: These solutions are recommended for your development environments and not supported in production.</p>
+</div></blockquote>
+<p>A tutorial can be found in the root of the directory named <a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/local_support.ipynb">local_support.ipynb</a></p>
+<section id="jupyter-server">
+<h2>Jupyter Server<a class="headerlink" href="#jupyter-server" title="Permalink to this headline"></a></h2>
+<p>Jupyter Lab and Jupyter Notebook users can leverage the Jupyter server to create urls or paths to pass to JBrowse Jupyter view configs.</p>
+<p>Once you have the data within the file tree where the notebook is running, then you will be able to format the urls or paths to pass to the API. (Note: you will need to serve your entire project where the notebook is running.)</p>
+<p>To verify that your data is in the correct place, you can navigate to <em>http://your-host:your-port/tree</em> . Make sure that you use the same port and host that is used in your jupyter configuration.</p>
+<p>e.g http://localhost:8888/tree is the url your should navigate to if you are running your jupyter notebook in localhost in port 8888</p>
+<p>If you have a different port or host, you can change the port and host used by JBrowse with the use of the set_env(notebook_host, notebook_port).</p>
+<p>Example:
+config = create(“LGV)
+config.set_env(“host”, 9999).</p>
+<section id="using-jupyter-urls">
+<h3>Using Jupyter URLS<a class="headerlink" href="#using-jupyter-urls" title="Permalink to this headline"></a></h3>
+<p>In this example, the notebook is configured to run in localhost in port 8888. It is assumed that you have Jupyter lab installed in your venv.</p>
+<p>File tree of the project:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span> <span class="n">example_dir</span><span class="o">/</span>
+    <span class="o">-</span> <span class="n">example</span><span class="o">.</span><span class="n">ipynb</span>
+    <span class="o">-</span> <span class="n">data1</span><span class="o">.</span><span class="n">gff</span><span class="o">.</span><span class="n">gz</span>
+    <span class="o">-</span> <span class="n">data2</span><span class="o">.</span><span class="n">gff</span><span class="o">.</span><span class="n">gz</span><span class="o">.</span><span class="n">tbi</span>
+</pre></div>
+</div>
+<p>Running Jupyter</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>(venv)$ cd example_dir
+(venv)$ jupyter lab
+</pre></div>
+</div>
+<p>This will be the url that you should see at the top of your browser if you opened the example.ipynb
+http://localhost:8888/lab/tree/example.ipynb</p>
+<p>Urls for file <code class="docutils literal notranslate"><span class="pre">data1.gff.gz</span></code> and <code class="docutils literal notranslate"><span class="pre">data2.gff.gz.tbi</span></code>
+would be in the form <code class="docutils literal notranslate"><span class="pre">http://localhost:8888/files/&lt;your_file_name&gt;</span></code>.</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">http://localhost:8888/files/data1.gff.gz</span></code></p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">http://localhost:8888/files/data2.gff.gz.tbi</span></code>
+Note that you do not need to add lab or tree to this url.</p></li>
+</ul>
+<p>You can use these urls. For example, you could add a track with thse urls like this:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span>
+<span class="n">config</span><span class="o">.</span><span class="n">add_track</span><span class="p">(</span>
+    <span class="s2">&quot;http://localhost:8888/files/data1.gff.gz&quot;</span><span class="p">,</span> <span class="c1"># track data</span>
+    <span class="n">index</span><span class="o">=</span><span class="s2">&quot;http://localhost:8888/files/data2.gff.gz.tbi&quot;</span><span class="p">,</span> <span class="c1"># track index</span>
+    <span class="n">track_id</span><span class="o">=</span><span class="s2">&quot;example-track&quot;</span><span class="p">,</span> <span class="c1"># track id</span>
+    <span class="n">name</span><span class="o">=</span><span class="s2">&quot;track-name&quot;</span> <span class="c1"># track name</span>
+<span class="p">)</span>
+</pre></div>
+</div>
+<p>Resources:</p>
+<ul class="simple">
+<li><p><a class="reference external" href="https://jupyter-notebook.readthedocs.io/en/stable/config_overview.html#notebook-server">Configuring the Jupyter Notebook server</a></p></li>
+<li><p><a class="reference external" href="https://jupyterlab.readthedocs.io/en/stable/getting_started/starting.html">Getting started with Jupyter Lab</a></p></li>
+</ul>
+</section>
+<section id="using-jupyter-paths">
+<h3>Using Jupyter paths<a class="headerlink" href="#using-jupyter-paths" title="Permalink to this headline"></a></h3>
+<p>JBrowse also supports paths to files are within the Jupyter file tree (this only works if you are running your notebook in Jupyter lab or Jupyter notebook).</p>
+<p>You can repeat the steps in the previous section to ensure that your files are in the correct place. Instead of formatting the urls yourself, you can pass paths <strong>relative to the root of the Jupyter file tree</strong> .</p>
+<p>Using the same structure of the previous example…</p>
+<p>File tree of the project:</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span> <span class="n">example_dir</span><span class="o">/</span>
+    <span class="o">-</span> <span class="n">example</span><span class="o">.</span><span class="n">ipynb</span>
+    <span class="o">-</span> <span class="n">data1</span><span class="o">.</span><span class="n">gff</span><span class="o">.</span><span class="n">gz</span>
+    <span class="o">-</span> <span class="n">data2</span><span class="o">.</span><span class="n">gff</span><span class="o">.</span><span class="n">gz</span><span class="o">.</span><span class="n">tbi</span>
+</pre></div>
+</div>
+<p>Running Jupyter</p>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>(venv)$ cd example_dir
+(venv)$ jupyter lab
+</pre></div>
+</div>
+<p>A user could then specify paths to data1 and data2 like this</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span>
+<span class="n">config</span><span class="o">.</span><span class="n">add_track</span><span class="p">(</span>
+    <span class="s2">&quot;/data1.gff.gz&quot;</span><span class="p">,</span> <span class="c1"># track data</span>
+    <span class="n">index</span><span class="o">=</span><span class="s2">&quot;/data2.gff.gz.tbi&quot;</span><span class="p">,</span> <span class="c1"># track index</span>
+    <span class="n">track_id</span><span class="o">=</span><span class="s2">&quot;example-track&quot;</span><span class="p">,</span> <span class="c1"># track id</span>
+    <span class="n">name</span><span class="o">=</span><span class="s2">&quot;track-name&quot;</span> <span class="c1"># track name</span>
+<span class="p">)</span>
+</pre></div>
+</div>
+</section>
+</section>
+<section id="jbrowse-dev-server">
+<h2>JBrowse dev server<a class="headerlink" href="#jbrowse-dev-server" title="Permalink to this headline"></a></h2>
+<p>We also provide a simple http server configured with CORS that will allow you to serve your local files from a specified directory within your machine.</p>
+<blockquote>
+<div><p><strong>Note</strong> The use of local files or the dev server provided is not recommended for production environments.</p>
+</div></blockquote>
+<p>You can spin the dev server in two ways.</p>
+<ol class="arabic simple">
+<li><p>Git clone this repo</p></li>
+<li><p>From the root of this repository, you will be able to run the python file named <code class="docutils literal notranslate"><span class="pre">serve.py</span></code>
+<code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">python</span> <span class="pre">serve.py</span></code></p></li>
+<li><p>You can choose your own port, host, and directory from which to serve your files. You can also press enter to choose all the defaults.</p></li>
+</ol>
+<ul class="simple">
+<li><p>Default PORT: 8080</p></li>
+<li><p>Default host: localhost</p></li>
+<li><p>Default directory: the current working directory -&gt; os.getcwd() is used</p></li>
+</ul>
+<ol class="arabic simple" start="4">
+<li><p>Now that the dev server is running you can use the url provided in the terminal to pass to your views.</p></li>
+</ol>
+<ul class="simple">
+<li><p>For example: the url to the data you wish to pass to the JBrowse view config for the local dev server running on port 8080 on local host will look like this “http://localhost:8080/<your-file-name>”
+e.g <code class="docutils literal notranslate"><span class="pre">jbrowse_conf.add_track(&quot;http://localhost:8080/&lt;your-file-name&gt;&quot;,</span> <span class="pre">name=&quot;test-demo&quot;)</span></code></p></li>
+</ul>
+<p>Or you can make your own python file and run it to start the server.</p>
+<ol class="arabic simple">
+<li><p>create a python file named dev_server.py and add the code below</p></li>
+</ol>
+<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">from</span> <span class="nn">jbrowse_jupyter</span> <span class="kn">import</span> <span class="n">serve</span>
+
+
+<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
+    <span class="n">serve</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">(),</span> <span class="n">port</span><span class="o">=</span><span class="mi">8080</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="s1">&#39;localhost&#39;</span><span class="p">)</span>
+</pre></div>
+</div>
+<ol class="arabic simple" start="2">
+<li><p>Run the python file
+<code class="docutils literal notranslate"><span class="pre">$</span> <span class="pre">python</span> <span class="pre">dev_server.py</span></code></p></li>
+<li><p>This will spin up a python simple http server with cors enabled. You can take a look at our implementation of our dev server here: <code class="docutils literal notranslate"><span class="pre">jbrowse_jupyter/dev_server.py</span></code></p></li>
+<li><p>Now that the dev server is running you can use the url provided in the terminal to pass to your views.</p></li>
+</ol>
+<ul class="simple">
+<li><p>For example: the url to the data you wish to pass to the JBrowse view config for the local dev server running on port 8080 on local host will look like this “http://localhost:8080/<your-file-name>”
+e.g <code class="docutils literal notranslate"><span class="pre">jbrowse_conf.add_track(&quot;http://localhost:8080/&lt;your-file-name&gt;&quot;,</span> <span class="pre">name=&quot;test-demo&quot;)</span></code></p></li>
+</ul>
+</section>
+</section>
+
+
+           </div>
+          </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="features.html" class="btn btn-neutral float-left" title="JBrowse Jupyter vs Other tools" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="faq.html" class="btn btn-neutral float-right" title="FAQ" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2021, Teresa De Jesus Martinez, JBrowse Team.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/docs/html/modules.html b/docs/docs/html/modules.html
index 1e0a9ae..6dd864c 100644
--- a/docs/docs/html/modules.html
+++ b/docs/docs/html/modules.html
@@ -48,6 +48,8 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
diff --git a/docs/docs/html/objects.inv b/docs/docs/html/objects.inv
index 4de0054..2f49e45 100644
--- a/docs/docs/html/objects.inv
+++ b/docs/docs/html/objects.inv
@@ -2,6 +2,6 @@
 # Project: JBrowse Jupyter
 # Version: 
 # The remainder of this file is compressed using zlib.
-xڵTMo� ��+���Z�5�t�J�Ti�T��ba�������o��{�%c��v�U��d�x�f�7���d!߹�C0��}n���ж�l�p�g:�Y���7V����T��O�)��XkE/�P:%1��VE]�
-9���f.��|��0��Z_�I�̘�(r4�?�eVZ��<�3�d�W9���ȴ�)H@XL�L���֋{�@���B�
-�dxckC�,�Ej�p9y�����vX�Y��l��$n�a��i��G�gzSA2O���ό�#�(.��tuA������,I�i�>���+�A�	��8)�cᗑ��ꖔ�j%�'H�(#y��L�A'a܃��5^��ċx��b�p���#��E&et�Lp���r|�i�);��t��\��'�v�q#~�^�ǎ.�i���P�Ł$:gl:oc5���j��Okf^��y{X�8��"�wq�J �P���Tz�"�簲�)�M�hK��I"Υ���*�=���7uN�#
\ No newline at end of file
+xڵU�n�0��+X�W�5��E�)�4z4hr%ˡH�\�ѭ���뗔�U�F��ds8;�\�R���?,�w��L!`��`�`h�]6Z8	�=�b��|�6���U(�O�)��XkE/�R:%qXs�ʺ�
+�R�U�K7�ry�Y��:����b-�5�bـ[-^U�	}���5����f�4�)H@�M��uŭ���f#������p�ֆ��'��L�Rs���[h�e�k�=&8��D7�0TմZ��ɣ6=� ��o��ό�#�(.��tqA{(r��w����{�ҏ���&|qR��q�_&ꧫ;R�3:6#�Xb��Ao�����/�BE��%�Z	x��m@��$��_2��<#�w����5��~��e�p�D�do��E&e�\&8���2��q�)?���q��&��r�ľ�{e�]f]�j��;�Do�nq�H���7S��+���D�
+%P�H�L�U��F�y]�|sL�M�w�5Iߟ<S��>��XjS�:`���_Yʔ�m�%qVG�I��0����8��h���@8
\ No newline at end of file
diff --git a/docs/docs/html/py-modindex.html b/docs/docs/html/py-modindex.html
index 1e04223..2699684 100644
--- a/docs/docs/html/py-modindex.html
+++ b/docs/docs/html/py-modindex.html
@@ -43,6 +43,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
diff --git a/docs/docs/html/quickstart.html b/docs/docs/html/quickstart.html
index 35e61ef..fadae94 100644
--- a/docs/docs/html/quickstart.html
+++ b/docs/docs/html/quickstart.html
@@ -47,6 +47,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
diff --git a/docs/docs/html/search.html b/docs/docs/html/search.html
index cdcac48..3ac8ef1 100644
--- a/docs/docs/html/search.html
+++ b/docs/docs/html/search.html
@@ -43,6 +43,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
diff --git a/docs/docs/html/searchindex.js b/docs/docs/html/searchindex.js
index 9d4bf59..7a605be 100644
--- a/docs/docs/html/searchindex.js
+++ b/docs/docs/html/searchindex.js
@@ -1,1 +1,1 @@
-Search.setIndex({docnames:["contact","dev_server","faq","index","installation","jbrowse_jupyter","modules","quickstart","tutorial","util"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"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","dev_server.rst","faq.md","index.rst","installation.md","jbrowse_jupyter.rst","modules.rst","quickstart.md","tutorial.md","util.rst"],objects:{"jbrowse_jupyter.dev_server":[[1,1,1,"","serve"]],"jbrowse_jupyter.jbrowse_config":[[5,2,1,"","JBrowseConfig"]],"jbrowse_jupyter.jbrowse_config.JBrowseConfig":[[5,3,1,"","add_df_track"],[5,3,1,"","add_text_search_adapter"],[5,3,1,"","add_track"],[5,3,1,"","delete_track"],[5,3,1,"","get_config"],[5,3,1,"","set_assembly"],[5,3,1,"","set_default_session"],[5,3,1,"","set_location"],[5,3,1,"","set_theme"]],"jbrowse_jupyter.util":[[9,1,1,"","create_component"],[9,1,1,"","launch"]],jbrowse_jupyter:[[1,0,0,"-","dev_server"],[5,0,0,"-","jbrowse_config"],[9,0,0,"-","util"]]},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0097a7":5,"1":5,"2":7,"3":8,"311b92":5,"4":5,"400":9,"8002":9,"8080":1,"8081":7,"90":5,"boolean":5,"class":5,"default":[1,2,5,7,9],"do":2,"function":[2,7],"import":7,"int":[1,5,9],"new":0,"return":[5,9],"true":[5,7],For:[2,4,5,7],If:5,In:2,It:[1,7],The:7,Then:2,There:2,To:4,Will:5,__main__:7,__name__:7,about:[4,7],accept:5,activ:4,adapt:[2,5],adapter_id:5,add:[2,5],add_df_track:5,add_text_search_adapt:5,add_track:5,aggreg:5,ajax:0,alias:5,alignmentstrack:2,alreadi:5,also:[5,7],an:[0,2,5,9],ani:0,api:[2,3,6,7],aplic:4,app:[7,9],applic:[2,3,4,8],ar:[0,2,5],articl:4,assembl:[5,7],assembly_data:5,assum:5,avail:5,bai:5,bam:[2,5],bed:2,been:5,below:[2,4,7],bgzip:5,big:2,binder:2,bit:2,br:8,browser:[4,5,8],bug:0,build:[0,4],can:[2,4,5,7],cd:4,cell:[4,7],cgv:[2,4,5,8,9],cgv_exampl:4,chat:0,check:[2,4,5,7],checkout:7,chr1:5,circular:[2,4,5,7],circulargenomeview:4,clone:4,colab:2,color:[2,5],column:5,com:0,compon:[2,3,4,5,6,7],conda:3,conf:[5,9],config:[2,4,5,7],config_guid:5,configur:[2,4,5,7,9],contact:3,cor:2,coupl:2,cram:2,creat:[2,3,4,5,6,7],create_compon:[5,7,9],current:[1,2,5,7,9],custom:[2,5,7],custum:4,d50000:5,dash:[3,4,5,8,9],dash_comp:9,dash_html_compon:7,dashjbrows:4,dashjupyt:4,data:[1,2,5,7],data_path:1,datafram:5,debug:7,delet:5,delete_track:5,delte_track:5,demo:3,dependeci:4,dev:1,develop:[0,2,3,6],df:5,dir:1,directori:[1,4,5,7],displai:5,display_assembl:5,div:7,doc:[2,4,5],doe:5,e:[1,5,9],els:5,email:0,emb:[4,7],embed:4,embedd:7,empti:9,enabl:[2,4],end:5,envirn:4,environ:[2,4],exampl:[4,7,8],except:5,exist:5,f57c00:5,facilit:7,fai:5,fals:5,faq:3,fasta:[2,5],featur:[0,2,5],file:[1,2,5,8],filenam:5,find:4,first:[2,5,7],fit:2,flag:5,follow:[2,4],found:[2,4,5],from:[2,5,7,9],further:7,futur:2,g:[1,5,9],gener:5,genom:[2,4,5,7,9],get:4,get_config:[5,7,9],gff3:2,github:0,gitter:0,given:[5,9],gmod:[0,4],googl:2,guid:4,gz:5,gzi:5,gzip:2,ha:5,have:[0,4,5],height:9,help:[4,9],here:[2,7],hexadecim:5,hg19:[5,7,9],hg38:[7,9],hope:2,host:1,how:[2,4],html:[4,7],http:[0,1,2,5],i:2,id:[5,7,9],im:0,imag:2,index:[2,3,5],inform:[2,4,7],initi:5,instal:[3,7],instanc:[5,9],interfac:7,invalid:5,ipynb:[2,4],issu:0,ix:5,ix_path:5,ixx:5,ixx_path:5,jb2:5,jbrows:[0,2,4,5,7,8,9],jbrowse2:0,jbrowse_conf:7,jbrowse_jupyt:7,jbrowseconfig:[2,3,6,7,9],jbrowseconfigur:9,join:0,json:5,jupyt:[0,2,4],jupyterdash:[4,9],jupyterlab:4,k:9,kwarg:[1,5,7,9],launch:[1,2,5,7,9],layout:[4,7],lgv:[2,4,5,7,8,9],librari:4,linear:[2,4,5,7],lineargenomeview:[4,7,9],list:[0,5],load:5,local:[2,5,8],local_support:2,localhost:1,locat:5,love:0,mail:0,main:5,make:[2,4],meta:5,meta_path:5,method:7,more:[2,4,7],must:2,my:2,myenv:4,n:4,name:5,net:0,none:5,note:2,notebook:[2,3,4,8],obj:[5,9],object:[5,7,9],onc:4,one:7,onli:[2,5],option:[1,5,9],order:2,org:5,other:7,our:[0,5,7],out:[0,2,4,5],overwrit:5,own:2,packag:[4,7],page:3,palett:[2,5],panda:5,paramet:[1,5,9],pass:[5,9],path:[1,5],pip:[4,7],pleas:0,port:[1,7,9],present:5,primari:5,product:[1,2],provid:[5,7],py:4,pypi:3,python:[3,4,8],quantit:5,quantitativetrack:2,quaternari:5,quickstart:3,r:4,rais:[5,9],reach:0,react:[5,7],realli:0,recogn:5,recommend:[1,2],refer:[3,5],referencesequencetrack:2,refnam:5,refname_alias:5,render:2,repo:7,report:0,repositori:4,request:0,requir:[4,5],resourc:3,root:4,run:[1,4,9],run_serv:7,s:[2,7],same:5,score:5,search:[2,3,5],secondari:5,send:0,sequenc:5,serv:1,server:[2,3,6,9],session:[2,5],set:[2,5],set_assembl:5,set_default_sess:[2,5],set_loc:5,set_them:[2,5],show:2,shown:2,sk:8,solut:2,sourceforg:0,specif:[2,4],specifi:9,start:[4,5],state:7,step:[2,4],storybook:5,str:[1,5,9],subconfigur:5,suit:4,support:[2,5,9],sure:4,syntax:5,tabix:2,talk:0,tertiari:5,test:[7,9],test_track_id:5,text:[2,5],them:7,theme:[2,5],thi:[2,4,5],thought:0,through:2,track:[2,5],track_data:5,track_id2:5,track_id:5,track_nam:5,track_typ:5,trackid:5,tracks_id:5,trix:5,tutori:3,two:2,txt:4,type:[2,5,9],typeerror:[5,9],up:[2,5],url:5,us:[2,3,4,5,7,8,9],user:0,util:[1,7,9],v:9,variant:2,varianttrack:2,vcf:2,via:2,view:[2,4,5,7,9],view_typ:[7,9],w:9,wai:2,we:[0,2,7],wether:5,what:[0,2],when:[1,2,5,9],where:9,which:2,wig:2,within:4,work:1,you:[0,2,4,7],your:2},titles:["Contact us","Development Server","FAQ","Welcome to JBrowse Jupyter\u2019s documentation!","Installation","JBrowseConfig API","Reference","Quickstart","Tutorials and Demos","Creating Components"],titleterms:{api:5,applic:7,compon:9,conda:4,contact:0,creat:9,dash:7,demo:8,develop:1,document:3,faq:2,indic:3,instal:4,jbrows:3,jbrowseconfig:5,jupyt:[3,7],notebook:7,pypi:4,python:7,quickstart:7,refer:6,resourc:4,s:3,server:1,tabl:3,tutori:8,us:0,welcom:3}})
\ No newline at end of file
+Search.setIndex({docnames:["contact","dev_server","faq","features","index","installation","jbrowse_jupyter","local","modules","quickstart","tutorial","util"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"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","dev_server.rst","faq.md","features.md","index.rst","installation.md","jbrowse_jupyter.rst","local.md","modules.rst","quickstart.md","tutorial.md","util.rst"],objects:{"jbrowse_jupyter.dev_server":[[1,1,1,"","serve"]],"jbrowse_jupyter.jbrowse_config":[[6,2,1,"","JBrowseConfig"]],"jbrowse_jupyter.jbrowse_config.JBrowseConfig":[[6,3,1,"","add_df_track"],[6,3,1,"","add_text_search_adapter"],[6,3,1,"","add_track"],[6,3,1,"","delete_track"],[6,3,1,"","get_config"],[6,3,1,"","set_assembly"],[6,3,1,"","set_default_session"],[6,3,1,"","set_env"],[6,3,1,"","set_location"],[6,3,1,"","set_theme"]],"jbrowse_jupyter.util":[[11,1,1,"","create_component"],[11,1,1,"","launch"]],jbrowse_jupyter:[[1,0,0,"-","dev_server"],[6,0,0,"-","jbrowse_config"],[11,0,0,"-","util"]]},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0097a7":6,"1":6,"2":9,"3":10,"311b92":6,"4":6,"400":11,"8002":11,"8080":[1,7],"8081":9,"8888":[6,7],"8989":6,"90":6,"9999":7,"boolean":6,"class":6,"default":[1,2,6,7,9,11],"do":[2,7],"export":3,"function":[2,9],"import":[7,9],"int":[1,6,11],"new":0,"return":[6,11],"true":[6,9],A:7,For:[2,3,5,6,7,9],If:[2,6,7],In:[2,7],It:[1,7,9],Or:7,The:[6,7,9],Then:2,These:[2,7],To:[5,7],Will:6,__main__:[7,9],__name__:[7,9],abil:3,abl:[6,7],about:[5,9],accept:6,access:[3,6],activ:5,adapt:[2,6],adapter_id:6,add:[2,3,6,7],add_df_track:6,add_text_search_adapt:6,add_track:[6,7],addition:2,after:6,aggreg:6,ajax:0,alia:2,alias:6,alignmentstrack:2,all:7,allow:7,alreadi:6,also:[2,6,7,9],am:2,an:[0,2,6,7,11],ani:0,anyth:2,api:[2,3,4,7,8,9],aplic:5,app:[9,11],applic:[2,4,5,10],ar:[0,2,6,7],articl:5,assembl:[2,6,9],assembly_data:6,assum:[6,7],avail:[3,6],bai:6,bam:[2,6],bed:2,been:6,below:[2,5,7,9],bgzip:6,big:2,binder:[2,3,7],bit:2,br:10,browser:[5,6,7,10],bug:0,build:[0,5],can:[2,5,6,7,9],cd:[5,7],cell:[5,9],cgv:[2,5,6,10,11],cgv_exampl:5,chang:[2,6,7],chat:0,check:[2,5,6,9],checkout:[2,3,9],choos:7,chr1:6,circular:[2,3,5,6,9],circulargenomeview:5,clone:[5,7],code:7,colab:[2,3,7],color:[2,3,6],column:6,com:0,compon:[2,3,4,5,6,8,9],conda:4,conf:[6,11],config:[2,5,6,7,9],config_guid:6,configur:[2,5,6,7,9,11],contact:4,cor:[2,7],correct:[2,7],correctli:2,could:[2,7],coupl:2,cram:2,creat:[2,3,4,5,6,7,8,9],create_compon:[6,9,11],current:[1,2,6,7,9,11],custom:[2,3,6,9],custum:5,d3gb:3,d50000:6,dash:[4,5,6,10,11],dash_comp:11,dash_html_compon:9,dashjbrows:5,dashjupyt:5,data1:7,data2:7,data:[1,2,3,6,7,9],data_path:1,datafram:[3,6],debug:9,delet:[3,6],delete_track:6,delte_track:6,demo:[4,7],dependeci:5,dev:[1,2,3,4],dev_serv:7,develop:[0,2,4,7,8],df:6,differ:[2,7],dir:1,directori:[1,5,6,7,9],displai:[2,6],display_assembl:6,div:9,doc:[2,5,6],document:3,documentaiton:3,doe:[2,6],e:[1,6,7,11],els:6,email:0,emb:[5,9],embed:[3,5],embedd:9,empti:11,enabl:[2,3,5,7],end:6,ensur:7,enter:7,entir:7,env:2,envirn:5,environ:[2,5,7],error:2,exampl:[5,7,9,10],example_dir:7,except:6,exist:6,f57c00:6,facilit:9,fai:6,fals:6,faq:4,fasta:[2,6],featur:[0,2,3,6],fetch:2,file:[1,2,3,4,6,10],filenam:6,find:5,first:[2,6,9],fit:2,flag:6,follow:[2,5],form:7,format:[2,7],found:[2,5,6,7],from:[2,3,6,7,9,11],further:9,futur:2,g:[1,6,7,11],gener:6,genom:[2,3,5,6,9,11],get:[5,7],get_config:[6,9,11],getcwd:7,gff3:2,gff:7,git:7,github:0,gitter:0,given:[6,11],gmod:[0,5],go:3,gosl:3,guid:5,gz:[6,7],gzi:6,gzip:2,ha:[2,6],have:[0,5,6,7],height:11,help:[5,11],here:[2,7,9],hexadecim:6,hg19:[6,9,11],hg38:[9,11],hope:2,host:[1,2,3,6,7],how:[2,5,7],html:[5,9],http:[0,1,2,6,7],i:2,id:[6,7,9,11],igv:3,im:0,imag:2,implement:7,index:[2,3,4,6,7],indic:2,inform:[2,5,9],initi:6,instal:[4,7,9],instanc:[6,11],instead:7,intend:2,interest:3,interfac:9,invalid:6,ipyigv:3,ipynb:[2,5,7],issu:0,ix:6,ixx:6,jb2:6,jbrows:[0,2,5,6,9,10,11],jbrowse2:0,jbrowse_conf:[7,9],jbrowse_jupyt:[7,9],jbrowseconfig:[2,4,8,9,11],jbrowseconfigur:11,join:0,js:3,json:6,jupyt:[0,2,5,6],jupyterdash:[5,11],jupyterlab:5,k:11,kwarg:[1,6,9,11],lab:[2,3,6,7],launch:[1,2,6,9,11],layout:[5,9],leverag:7,lgv:[2,5,6,7,9,10,11],librari:5,like:7,linear:[2,5,6,9],lineargenomeview:[5,9,11],link:6,list:[0,6],load:[2,6],local:[2,3,4,6,10],local_support:[2,7],localhost:[1,6,7],locat:6,look:7,love:0,machin:7,mail:0,main:6,make:[2,5,7],mango:3,match:[2,6],meta:6,method:9,more:[2,3,5,9],must:2,my:2,myenv:5,n:5,name:[6,7],navig:7,need:7,net:0,never:2,none:6,note:[2,7],notebook:[2,3,4,5,6,7,10],notebook_host:[2,6,7],notebook_port:[2,6,7],now:7,obj:[6,11],object:[6,9,11],onc:[5,7],one:9,ones:2,onli:[2,3,6,7],open:7,option:[1,6,11],order:2,org:6,os:7,other:[4,9],our:[0,2,3,6,7,9],out:[0,2,5,6],overwrit:6,own:[2,7],packag:[5,9],page:4,palett:[2,6],panda:6,paramet:[1,6,11],pass:[3,6,7,11],path:[1,2,3,6],pip:[5,9],place:7,pleas:0,port:[1,2,6,7,9,11],present:6,press:7,previou:7,primari:6,product:[1,2,7],project:7,provid:[6,7,9],py:[2,5,7],pygbrows:3,pypi:4,python:[4,5,7,10],quantit:6,quantitativetrack:2,quaternari:6,quickstart:4,r:5,rais:[6,11],reach:0,react:[6,9],readm:2,realli:0,recogn:6,recommend:[1,2,7],refer:[4,6],referencesequencetrack:2,refnam:6,refname_alias:6,region:3,rel:7,render:2,repeat:7,repo:[7,9],report:0,repositori:[5,7],request:0,requir:[5,6],resourc:[4,7],root:[5,7],run:[1,2,3,5,7,11],run_serv:9,s:[2,3,9],sai:2,same:[6,7],score:6,search:[2,3,4,6],secondari:6,section:[2,7],see:7,send:0,sequenc:6,serv:[1,2,7],server:[2,3,4,8,11],session:[2,6],set:[2,6],set_assembl:6,set_default_sess:[2,6],set_env:[2,6,7],set_loc:6,set_them:[2,6],should:[6,7],show:2,simpl:7,sk:10,solut:[2,7],sourceforg:0,specif:[2,5],specifi:[7,11],spin:7,start:[5,6,7],state:9,step:[2,5,7],storybook:6,str:[1,6,11],structur:7,subconfigur:6,suit:5,support:[2,3,4,6,11],sure:[2,5,7],svg:3,syntax:6,tabix:2,take:7,talk:0,tbi:7,termin:7,tertiari:6,test:[7,9,11],test_track_id:6,text:[2,3,6],thei:2,them:9,theme:[2,3,6],thi:[2,5,6,7],those:[2,6,7],thought:0,through:2,thse:7,tool:4,top:7,track:[2,3,6,7],track_data:6,track_id2:6,track_id:[6,7],track_nam:6,track_typ:6,trackid:6,tracks_id:6,tree:[6,7],trix:6,tutori:[2,4,7],two:[2,7],txt:5,type:[2,6,11],typeerror:[6,11],ui:3,up:[2,6,7],url:[3,6],us:[2,4,5,6,9,10,11],user:[0,7],util:[1,9,11],v:11,variant:2,varianttrack:2,vcf:2,venv:7,verifi:7,via:[2,3],view:[2,3,5,6,7,9,11],view_typ:[9,11],vs:4,w:11,wai:[2,7],want:6,we:[0,2,6,7,9],wether:6,what:[0,2],when:[1,2,3,6,11],where:[2,7,11],which:[2,7],wig:2,wish:[2,7],within:[5,6,7],work:[1,2,7],would:7,ye:2,you:[0,2,5,6,7,9],your:[2,3,6,7],your_file_nam:7,yourself:7,zoom:3},titles:["Contact us","Development Server","FAQ","JBrowse Jupyter vs Other tools","Welcome to JBrowse Jupyter\u2019s documentation!","Installation","JBrowseConfig API","Local file support","Reference","Quickstart","Tutorials and Demos","Creating Components"],titleterms:{api:6,applic:9,compon:11,conda:5,contact:0,creat:11,dash:9,demo:10,dev:7,develop:1,document:4,faq:2,file:7,indic:4,instal:5,jbrows:[3,4,7],jbrowseconfig:6,jupyt:[3,4,7,9],local:7,notebook:9,other:3,path:7,pypi:5,python:9,quickstart:9,refer:8,resourc:5,s:4,server:[1,7],support:7,tabl:4,tool:3,tutori:10,url:7,us:[0,7],vs:3,welcom:4}})
\ No newline at end of file
diff --git a/docs/docs/html/tutorial.html b/docs/docs/html/tutorial.html
index 300d959..95b13e5 100644
--- a/docs/docs/html/tutorial.html
+++ b/docs/docs/html/tutorial.html
@@ -43,6 +43,8 @@
 <li class="toctree-l1"><a class="reference internal" href="modules.html">Reference</a></li>
 <li class="toctree-l1 current"><a class="current reference internal" href="#">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
@@ -76,9 +78,9 @@ <h1>Tutorials and Demos<a class="headerlink" href="#tutorials-and-demos" title="
 <li><p><a class="reference external" href="https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/skbr3.ipynb">SK-BR-3 demo</a></p></li>
 <li><p><a class="reference external" href="https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/browser.ipynb">Browser Notebook demo</a></p></li>
 <li><p><a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/browser.py">Python Dash Application with LGV</a></p></li>
-<li><p><a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/cgv_examples.py">Python Dash Application with CGV</a></p></li>
+<li><p><a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/examples/cgv_examples.py">Python Dash Application with CGV</a></p></li>
 <li><p><a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/browser.ipynb">Notebook Examples LGV</a></p></li>
-<li><p><a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/cgv_examples.py">Notebook Examples CGV</a></p></li>
+<li><p><a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/examples/cgv_examples.py">Notebook Examples CGV</a></p></li>
 <li><p><a class="reference external" href="https://github.com/GMOD/jbrowse-jupyter/blob/main/local_support.ipynb">Using Local Files in Jbrowse LGV</a></p></li>
 </ul>
 </section>
diff --git a/docs/docs/html/util.html b/docs/docs/html/util.html
index c6c9ccb..c7e69db 100644
--- a/docs/docs/html/util.html
+++ b/docs/docs/html/util.html
@@ -48,6 +48,8 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorials and Demos</a></li>
 <li class="toctree-l1"><a class="reference internal" href="contact.html">Contact us</a></li>
+<li class="toctree-l1"><a class="reference internal" href="features.html">JBrowse Jupyter vs Other tools</a></li>
+<li class="toctree-l1"><a class="reference internal" href="local.html">Local file support</a></li>
 <li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ</a></li>
 </ul>
 
diff --git a/docs/source/conf.py b/docs/source/conf.py
index b668215..d9bb6b1 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -26,7 +26,7 @@
 author = 'Teresa De Jesus Martinez, JBrowse Team'
 
 # The full version, including alpha/beta/rc tags
-release = '1.3.0'
+release = '1.3.6'
 
 
 # -- General configuration ---------------------------------------------------
diff --git a/docs/source/faq.md b/docs/source/faq.md
index f17ea50..2e8523f 100644
--- a/docs/source/faq.md
+++ b/docs/source/faq.md
@@ -32,8 +32,20 @@
 ![Custom Palette](https://github.com/GMOD/jbrowse-jupyter/raw/main/images/custom_palette.png)
 
 * Can I use local files/my own data?
-    - There are a couple of ways in which you can configure and use your own data from your local environment in jbrowse views. 
-        1.  make use of the jupyter notebook server as shown in the local_support.ipynb 
-        2. launch your own http server with CORS which will enable you to use local files in Google Colab notebooks and binder notebooks
+    - Yes, there are a couple of ways in which you can configure and use your own data from your local environment in jbrowse views. 
+        1. Make use of the jupyter notebook/lab server. Intended for those running their notebooks with jupyter lab or jupyter notebook.
+        2. Launch your own http server with CORS which will enable you to use local files. You can run our serve.py to launch our dev server. 
+    (Checkout our local_support.ipynb for tutorials on how to use your own data)
 
-    **_Note_:** that these solutions are recommended for your development environments and not supported in production.
+> **Note**: These solutions are recommended for your development environments and not supported in production.
+* I am running a colab notebook/binder notebook and wish to use my local data, how can I do this? 
+    - You can run JBrowse dev server to serve local files to use in your JBrowse views. More information on the dev server can be found in the local file support section of this readme.
+
+* My paths are not working?
+    - If you are using paths, make sure you are in a jupyter environment (Jupyter lab or jupyter notebook). Additionally, make sure that the port and host match the ones in your config. If they are different, use the set_env(notebook_host, notebook_port) to change the default port and host used by JBrowse to configure paths in jupyter.
+
+* My data says it's is loading and never loads?
+    - If your view shows that it is loading and never loads, it could be a fetch error or CORS.
+        - the JBrowse Dev Server has CORS enabled.
+    - Make sure that your alias is correctly configured. Data that never loads could also indicate that the format is correct, but will not display anything for it if the assembly does not match.
+    - Data that never loads could also indicate that the port and host do not match where your data is hosted when using paths in jupyter envs
diff --git a/docs/source/features.md b/docs/source/features.md
new file mode 100644
index 0000000..761c1d3
--- /dev/null
+++ b/docs/source/features.md
@@ -0,0 +1,28 @@
+## JBrowse Jupyter vs Other tools
+
+| Features        | JBrowse/ JBrowse Jupyter | IGV.js /igv-notebook | ipyIgv | Gosling/Gos | D3GB | PygBrowse | Mango |
+| --------------- | ----------------   | ------------------   |  ----  | ----------- | ---- | --------- | ----  |
+| Binder support            | &#x2611; | &#x2611;   | &#x2611; | &#x2611; | &#x2612;  | &#x2612; | &#x2612; |
+| Colab  support            | &#x2611; | &#x2611;   | &#x2612; | &#x2611; | &#x2612; | &#x2612; | &#x2612; |
+| Custom Color Theming      | &#x2611; | &#x2612; | &#x2612; | &#x2611; | &#x2612; | &#x2612; | &#x2612; |
+| Deletion of tracks        | &#x2611; | &#x2612; | &#x2611; | &#x2612; | &#x2612;| &#x2612; | &#x2612; |
+| Export view as SVG        | &#x2611; &ast; | &#x2611;   | &#x2611;| &#x2612; | &#x2612; | &#x2612; | &#x2611;|
+| Local file support        | &#x2611; &ast;&ast; | &#x2611;   | &#x2611; | &#x2611;| &#x2611; | &#x2611; | &#x2611; |
+| Supports Circular Genome View | &#x2611; | &#x2612; | &#x2612; | &#x2611; | &#x2612; | &#x2612; | &#x2612; |
+| Ability to enable text searching from indexed files | &#x2611; | &#x2612; | &#x2612; | &#x2612; | &#x2612; | &#x2612; | &#x2612; |
+| Ability to add tracks from Dataframes  | &#x2611; | &#x2612; | &#x2612; | &#x2612; | &#x2612; | &#x2611; | &#x2612;| 
+| Zooming in on regions of interest | &#x2611; &ast; | &#x2611;  | &#x2611; &ast;| &#x2611; &ast; | &#x2611; &ast;| &#x2612; | &#x2611; &ast; |
+
+&ast; Feature is accessible via the component's UI and not by API.
+&ast;&ast; Path support for local files is only available when running notebook in Jupyter lab and Jupyter notebook. Local file support in colab and binder is available by running the JBrowse dev server to host your data and creating urls to pass to the JBrowse view.
+
+* For more features of the JBrowse and JBrowse embedded components checkout 
+[our documentation](https://jbrowse.org/jb2/docs/embedded_components/)
+* Igv.js [documentation](https://github.com/igvteam/igv.js/wiki/) 
+* igv-notebook [documentation](https://github.com/igvteam/igv-notebook)
+* ipyIgv [documentation](https://github.com/QuantStack/ipyigv)
+* D3GB [documentation](http://d3gb.usal.es/index.html)
+* PygBrowse [documentation](https://github.com/phageghost/python-genome-browser)
+* Gosling [documentaiton](https://github.com/gosling-lang/gosling.js)
+* Gos [documentation](https://gosling-lang.github.io/gos/)
+* Mango [documentation](https://bdg-mango.readthedocs.io/en/latest/jupyterWidgets/usage.html)
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 79f4d47..6bd4016 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -14,6 +14,8 @@ Welcome to JBrowse Jupyter's documentation!
    modules
    tutorial
    contact
+   features
+   local 
    faq
 
 Indices and tables
diff --git a/docs/source/local.md b/docs/source/local.md
new file mode 100644
index 0000000..65d9b41
--- /dev/null
+++ b/docs/source/local.md
@@ -0,0 +1,136 @@
+## Local file support
+We currently support two ways of passing your local data to JBrowse Views.
+
+For our **Jupyter lab and Jupyter notebook** users, you can create urls by leveraging the Jupyter server where your notebook is running or you can provide paths relative to root of the file tree. You can also provide paths relative to the root of the Jupyter file tree. Examples of these can be found below or in the
+local_support.ipynb.
+
+For those using **colab notebooks and binder** (will also work in Jupyter) you can use the JBrowse dev server. An example of how to use the JBrowse dev server can be found below.
+
+> **Note**: These solutions are recommended for your development environments and not supported in production.
+
+A tutorial can be found in the root of the directory named [local_support.ipynb](https://github.com/GMOD/jbrowse-jupyter/blob/main/local_support.ipynb)
+### Jupyter Server
+
+Jupyter Lab and Jupyter Notebook users can leverage the Jupyter server to create urls or paths to pass to JBrowse Jupyter view configs. 
+
+Once you have the data within the file tree where the notebook is running, then you will be able to format the urls or paths to pass to the API. (Note: you will need to serve your entire project where the notebook is running.)
+
+To verify that your data is in the correct place, you can navigate to *http://your-host:your-port/tree* . Make sure that you use the same port and host that is used in your jupyter configuration. 
+
+e.g http://localhost:8888/tree is the url your should navigate to if you are running your jupyter notebook in localhost in port 8888
+
+If you have a different port or host, you can change the port and host used by JBrowse with the use of the set_env(notebook_host, notebook_port). 
+
+Example:
+config = create("LGV)
+config.set_env("host", 9999).
+
+#### Using Jupyter URLS
+
+In this example, the notebook is configured to run in localhost in port 8888. It is assumed that you have Jupyter lab installed in your venv.
+
+File tree of the project: 
+```
+- example_dir/
+    - example.ipynb
+    - data1.gff.gz
+    - data2.gff.gz.tbi
+```
+Running Jupyter
+```
+(venv)$ cd example_dir
+(venv)$ jupyter lab
+```
+
+This will be the url that you should see at the top of your browser if you opened the example.ipynb
+http://localhost:8888/lab/tree/example.ipynb
+
+Urls for file `data1.gff.gz` and `data2.gff.gz.tbi`
+would be in the form `http://localhost:8888/files/<your_file_name>`.
+* `http://localhost:8888/files/data1.gff.gz`
+* `http://localhost:8888/files/data2.gff.gz.tbi`
+Note that you do not need to add lab or tree to this url.
+
+You can use these urls. For example, you could add a track with thse urls like this:
+```python
+
+config.add_track(
+    "http://localhost:8888/files/data1.gff.gz", # track data
+    index="http://localhost:8888/files/data2.gff.gz.tbi", # track index
+    track_id="example-track", # track id
+    name="track-name" # track name
+)
+```
+
+Resources:
+* [Configuring the Jupyter Notebook server](https://jupyter-notebook.readthedocs.io/en/stable/config_overview.html#notebook-server)
+* [Getting started with Jupyter Lab](https://jupyterlab.readthedocs.io/en/stable/getting_started/starting.html)
+
+#### Using Jupyter paths
+JBrowse also supports paths to files are within the Jupyter file tree (this only works if you are running your notebook in Jupyter lab or Jupyter notebook).
+
+You can repeat the steps in the previous section to ensure that your files are in the correct place. Instead of formatting the urls yourself, you can pass paths **relative to the root of the Jupyter file tree** .
+
+Using the same structure of the previous example...
+
+File tree of the project: 
+```
+- example_dir/
+    - example.ipynb
+    - data1.gff.gz
+    - data2.gff.gz.tbi
+```
+Running Jupyter
+```
+(venv)$ cd example_dir
+(venv)$ jupyter lab
+```
+A user could then specify paths to data1 and data2 like this
+```python
+
+config.add_track(
+    "/data1.gff.gz", # track data
+    index="/data2.gff.gz.tbi", # track index
+    track_id="example-track", # track id
+    name="track-name" # track name
+)
+```
+
+### JBrowse dev server
+We also provide a simple http server configured with CORS that will allow you to serve your local files from a specified directory within your machine.
+
+> **Note** The use of local files or the dev server provided is not recommended for production environments. 
+
+You can spin the dev server in two ways.
+1. Git clone this repo
+2. From the root of this repository, you will be able to run the python file named `serve.py`
+```$ python serve.py```
+3. You can choose your own port, host, and directory from which to serve your files. You can also press enter to choose all the defaults. 
+  - Default PORT: 8080
+  - Default host: localhost
+  - Default directory: the current working directory -> os.getcwd() is used
+
+4. Now that the dev server is running you can use the url provided in the terminal to pass to your views. 
+- For example: the url to the data you wish to pass to the JBrowse view config for the local dev server running on port 8080 on local host will look like this "http://localhost:8080/<your-file-name>"
+e.g `jbrowse_conf.add_track("http://localhost:8080/<your-file-name>", name="test-demo")`
+
+Or you can make your own python file and run it to start the server.
+
+1. create a python file named dev_server.py and add the code below
+
+```
+import os
+from jbrowse_jupyter import serve
+
+
+if __name__ == "__main__":
+    serve(os.getcwd(), port=8080, host='localhost')
+```
+2. Run the python file
+`$ python dev_server.py`
+
+3. This will spin up a python simple http server with cors enabled. You can take a look at our implementation of our dev server here: `jbrowse_jupyter/dev_server.py`
+
+4. Now that the dev server is running you can use the url provided in the terminal to pass to your views. 
+- For example: the url to the data you wish to pass to the JBrowse view config for the local dev server running on port 8080 on local host will look like this "http://localhost:8080/<your-file-name>"
+e.g `jbrowse_conf.add_track("http://localhost:8080/<your-file-name>", name="test-demo")`
diff --git a/docs/source/tutorial.md b/docs/source/tutorial.md
index f65ce68..c7f78b2 100644
--- a/docs/source/tutorial.md
+++ b/docs/source/tutorial.md
@@ -3,7 +3,7 @@
 * [SK-BR-3 demo](https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/skbr3.ipynb)
 * [Browser Notebook demo](https://colab.research.google.com/github/GMOD/jbrowse-jupyter/blob/main/browser.ipynb)
 * [Python Dash Application with LGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/browser.py)
-* [Python Dash Application with CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/cgv_examples.py)
+* [Python Dash Application with CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/examples/cgv_examples.py)
 * [Notebook Examples LGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/browser.ipynb)
-* [Notebook Examples CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/cgv_examples.py)
+* [Notebook Examples CGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/examples/cgv_examples.py)
 * [Using Local Files in Jbrowse LGV](https://github.com/GMOD/jbrowse-jupyter/blob/main/local_support.ipynb)
diff --git a/cgv_examples.ipynb b/examples/basic_cgv.ipynb
similarity index 51%
rename from cgv_examples.ipynb
rename to examples/basic_cgv.ipynb
index 8abc650..4dff837 100644
--- a/cgv_examples.ipynb
+++ b/examples/basic_cgv.ipynb
@@ -1,30 +1,4 @@
 {
- "metadata": {
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.8.12-final"
-  },
-  "orig_nbformat": 2,
-  "kernelspec": {
-   "name": "python3",
-   "display_name": "Python 3.8.12 64-bit ('jbrowse-jupyter': conda)",
-   "metadata": {
-    "interpreter": {
-     "hash": "dc9fc419d624b95bc9cc0bd84733299ab39c72ed5f2a2912fba5b902d66850aa"
-    }
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2,
  "cells": [
   {
    "cell_type": "code",
@@ -41,7 +15,6 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# creates an empty CircularGenome View JBrowseConfig\n",
     "browser = create(\"CGV\")"
    ]
   },
@@ -51,39 +24,93 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "browser.set_assembly(\"https://jbrowse.org/genomes/hg19/fasta/hg19.fa.gz\",aliases=[\"GRCh37\"])\n",
-    "browser.add_track(\"https://s3.amazonaws.com/jbrowse.org/genomes/hg19/pacbio/hs37d5.HG002-SequelII-CCS.bnd-only.sv.vcf.gz\", track_id=\"variantTest\",overwrite=True)\n",
-    "browser.set_default_session([\"variantTest\"], False)\n",
-    "cgv_conf = browser.get_config()"
+    "browser.set_assembly(\"https://jbrowse.org/genomes/hg19/fasta/hg19.fa.gz\",aliases=[\"GRCh37\"])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "browser.add_track(\"https://s3.amazonaws.com/jbrowse.org/genomes/hg19/pacbio/hs37d5.HG002-SequelII-CCS.bnd-only.sv.vcf.gz\", track_id=\"variantTest\",overwrite=True)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 5,
    "metadata": {},
+   "outputs": [],
+   "source": [
+    "browser.set_default_session([\"variantTest\"], False)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "cgv_conf = browser.get_config()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
    "outputs": [
     {
-     "output_type": "display_data",
      "data": {
-      "text/plain": "<IPython.lib.display.IFrame at 0x7fa55856a040>",
-      "text/html": "\n        <iframe\n            width=\"100%\"\n            height=\"400\"\n            src=\"http://127.0.0.1:8002/\"\n            frameborder=\"0\"\n            allowfullscreen\n            \n        ></iframe>\n        "
+      "text/html": [
+       "\n",
+       "        <iframe\n",
+       "            width=\"100%\"\n",
+       "            height=\"400\"\n",
+       "            src=\"http://127.0.0.1:8002/\"\n",
+       "            frameborder=\"0\"\n",
+       "            allowfullscreen\n",
+       "            \n",
+       "        ></iframe>\n",
+       "        "
+      ],
+      "text/plain": [
+       "<IPython.lib.display.IFrame at 0x7f84408aaa60>"
+      ]
      },
-     "metadata": {}
+     "metadata": {},
+     "output_type": "display_data"
     }
    ],
    "source": [
     "launch(cgv_conf,dash_comp=\"CGV\",height=400, port=8002)"
    ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3.8.13 ('jbrowse-jupyter')",
+   "language": "python",
+   "name": "python3"
   },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "browser2 = create(\"CGV\", genome=\"hg38\")\n",
-    "launch(browser2.get_config(), dash_comp=\"CGV\")"
-   ]
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  },
+  "orig_nbformat": 4,
+  "vscode": {
+   "interpreter": {
+    "hash": "aaf81c8f28912d07c45359b3a81eb2244c23c90e1b370733684a5666e4e4597e"
+   }
   }
- ]
-}
\ No newline at end of file
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/basic_lgv.ipynb b/examples/basic_lgv.ipynb
new file mode 100644
index 0000000..4efcc99
--- /dev/null
+++ b/examples/basic_lgv.ipynb
@@ -0,0 +1,102 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from jbrowse_jupyter import launch, create"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "hg38 = create('LGV', genome='hg38')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tracks = [\n",
+    "    (\"https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/ncbi_refseq/GCA_000001405.15_GRCh38_full_analysis_set.refseq_annotation.sorted.gff.gz\", \"gff-demo\"),\n",
+    "    (\"https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/skbr3/SKBR3_Feb17_GRCh38.sorted.bam\", \"bam-demo\"),\n",
+    "    (\"https://hgdownload.cse.ucsc.edu/goldenpath/hg38/phyloP100way/hg38.phyloP100way.bw\", \"bigwig-demo\"),\n",
+    "    (\"https://ftp.ncbi.nlm.nih.gov/pub/clinvar/vcf_GRCh38/clinvar.vcf.gz\", \"vcf-demo\"),\n",
+    "    (\"https://jbrowse.org/genomes/GRCh38/repeats.bb\", \"bigbed\")\n",
+    "]\n",
+    "for track in tracks:\n",
+    "    data = track[0]\n",
+    "    track_id = track[1]\n",
+    "    hg38.add_track(data, track_id=track_id)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "        <iframe\n",
+       "            width=\"100%\"\n",
+       "            height=\"800\"\n",
+       "            src=\"http://127.0.0.1:8000/\"\n",
+       "            frameborder=\"0\"\n",
+       "            allowfullscreen\n",
+       "            \n",
+       "        ></iframe>\n",
+       "        "
+      ],
+      "text/plain": [
+       "<IPython.lib.display.IFrame at 0x7fb7e1a34ee0>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "hg38.set_default_session(['gff-demo'],False)\n",
+    "hg38.set_location(\"1:110654228..110936130\")\n",
+    "new_conf2 = hg38.get_config()\n",
+    "launch(new_conf2, id=\"test-2\",height=800, dash_comp=\"LGV\", port=8000)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3.8.13 ('jupyter-jbrowse')",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  },
+  "orig_nbformat": 4,
+  "vscode": {
+   "interpreter": {
+    "hash": "e9d6c669645dba2a1dcc8c977d22bcec174bc9259f7f131cb6979c1ac9478589"
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/cgv_examples.ipynb b/examples/cgv_examples.ipynb
new file mode 100644
index 0000000..17b3148
--- /dev/null
+++ b/examples/cgv_examples.ipynb
@@ -0,0 +1,154 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from jbrowse_jupyter import launch, create"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "IN COLAB:  False\n",
+      "IN JUPYTER:  True\n",
+      "NOTEBOOK_PORT:  8888\n",
+      "NOTEBOOK_HOST:  localhost\n"
+     ]
+    }
+   ],
+   "source": [
+    "# creates an empty CircularGenome View JBrowseConfig\n",
+    "browser = create(\"CGV\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "browser.set_assembly(\"https://jbrowse.org/genomes/hg19/fasta/hg19.fa.gz\",aliases=[\"GRCh37\"])\n",
+    "browser.add_track(\"https://s3.amazonaws.com/jbrowse.org/genomes/hg19/pacbio/hs37d5.HG002-SequelII-CCS.bnd-only.sv.vcf.gz\", track_id=\"variantTest\",overwrite=True)\n",
+    "browser.set_default_session([\"variantTest\"], False)\n",
+    "cgv_conf = browser.get_config()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "        <iframe\n",
+       "            width=\"100%\"\n",
+       "            height=\"400\"\n",
+       "            src=\"http://127.0.0.1:8002/\"\n",
+       "            frameborder=\"0\"\n",
+       "            allowfullscreen\n",
+       "            \n",
+       "        ></iframe>\n",
+       "        "
+      ],
+      "text/plain": [
+       "<IPython.lib.display.IFrame at 0x7fc5a9094b50>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "launch(cgv_conf,dash_comp=\"CGV\",height=400, port=8002)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "IN COLAB:  False\n",
+      "IN JUPYTER:  True\n",
+      "NOTEBOOK_PORT:  8888\n",
+      "NOTEBOOK_HOST:  localhost\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "        <iframe\n",
+       "            width=\"100%\"\n",
+       "            height=\"300\"\n",
+       "            src=\"http://127.0.0.1:8050/\"\n",
+       "            frameborder=\"0\"\n",
+       "            allowfullscreen\n",
+       "            \n",
+       "        ></iframe>\n",
+       "        "
+      ],
+      "text/plain": [
+       "<IPython.lib.display.IFrame at 0x7fc5d0a16e20>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "ename": "",
+     "evalue": "",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[1;31mThe Kernel crashed while executing code in the the current cell or a previous cell. Please review the code in the cell(s) to identify a possible cause of the failure. Click <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a> for more info. View Jupyter <a href='command:jupyter.viewOutput'>log</a> for further details."
+     ]
+    }
+   ],
+   "source": [
+    "browser2 = create(\"CGV\", genome=\"hg19\")\n",
+    "launch(browser2.get_config(), dash_comp=\"CGV\")"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3.8.13 ('jbrowse-jupyter')",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  },
+  "orig_nbformat": 2,
+  "vscode": {
+   "interpreter": {
+    "hash": "aaf81c8f28912d07c45359b3a81eb2244c23c90e1b370733684a5666e4e4597e"
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/cgv_examples.py b/examples/cgv_examples.py
similarity index 100%
rename from cgv_examples.py
rename to examples/cgv_examples.py
diff --git a/example.ipynb b/examples/dash_callbacks.ipynb
similarity index 53%
rename from example.ipynb
rename to examples/dash_callbacks.ipynb
index d63ba52..537e61e 100644
--- a/example.ipynb
+++ b/examples/dash_callbacks.ipynb
@@ -1,34 +1,15 @@
 {
- "metadata": {
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.8.12-final"
-  },
-  "orig_nbformat": 2,
-  "kernelspec": {
-   "name": "python3",
-   "display_name": "Python 3.8.12 64-bit ('jbrowse-jupyter': conda)",
-   "metadata": {
-    "interpreter": {
-     "hash": "dc9fc419d624b95bc9cc0bd84733299ab39c72ed5f2a2912fba5b902d66850aa"
-    }
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2,
  "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Using dash callbacks to control the state of a JBrowse 2 Linear Genome View"
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -41,12 +22,24 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
-    " app = JupyterDash(__name__)\n",
-    " server = app.server"
+    "# Create a Jupyter dash app\n",
+    "app = JupyterDash(__name__)\n",
+    "server = app.server\n",
+    "\n",
+    "# Docs: https://github.com/plotly/jupyter-dash"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We want to create a small jupyter dash application that uses a drop down to change the location of the JBrowse Linear Genome View.\n",
+    "\n",
+    "More info on dash callbacks here: https://dash.plotly.com/basic-callbacks"
    ]
   },
   {
@@ -56,32 +49,46 @@
    "outputs": [],
    "source": [
     "locations = [\n",
-    "    {\"value\": \"17:41,196,332..41,277,401\", \"label\": \"BRCA1\"\n",
+    "    {\"value\": \"17:41,196,332..41,277,401\", \"label\": \"location 1: 17:41,196,332..41,277,40\"\n",
     "    },\n",
-    "    {\"value\": \"13:32,889,615..32,974,375\", \"label\": \"BRCA2\"},\n",
+    "    {\"value\": \"13:32,889,615..32,974,375\", \"label\": \"location 2: 13:32,889,615..32,974,375\"},\n",
     "]"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Using a dash call back, we will use the jbrowse jupyter api to change the location of the hg19 config when we choose a location from the dropdown\n"
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Return the component with a specific location.\n",
+    "# Return the component with a specific location. \n",
     "@app.callback(\n",
     "    Output(\"default-container\", \"children\"), Input(\"location-to-view\", \"value\")\n",
     ")\n",
     "def return_jbrowse(location):\n",
-    "    print(location)\n",
     "    conf = create(\"view\", genome=\"hg19\")\n",
     "    conf.set_location(location)\n",
+    "    conf.set_default_session(['repeats_hg19'])\n",
     "    return create_component(conf.get_config())"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Create teh layout of the dash python application "
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -90,7 +97,7 @@
     "    [\n",
     "        html.P(\"Select a location to view.\"),\n",
     "        dcc.Dropdown(\n",
-    "            id=\"location-to-view\", options=locations, value=\"1:1..90\"\n",
+    "            id=\"location-to-view\", options=locations, value=\"13:32,941,561..32,941,588\"\n",
     "        ),\n",
     "        html.Hr(),\n",
     "        dcc.Loading(id=\"default-container\"),\n",
@@ -100,28 +107,47 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
-     "output_type": "display_data",
-     "data": {
-      "text/plain": "<IPython.lib.display.IFrame at 0x7f9d58f6db50>",
-      "text/html": "\n        <iframe\n            width=\"100%\"\n            height=\"650\"\n            src=\"http://127.0.0.1:3039/\"\n            frameborder=\"0\"\n            allowfullscreen\n            \n        ></iframe>\n        "
-     },
-     "metadata": {}
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Dash app running on http://127.0.0.1:3039/\n"
+     ]
     }
    ],
    "source": [
-    "app.run_server(mode=\"inline\", use_reloader=False, debug=True, port=3039)"
+    "app.run_server(mode=\"external\", use_reloader=False, debug=True, port=3039)"
    ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3.8.13 ('jbrowse-jupyter')",
+   "language": "python",
+   "name": "python3"
   },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  },
+  "orig_nbformat": 2,
+  "vscode": {
+   "interpreter": {
+    "hash": "aaf81c8f28912d07c45359b3a81eb2244c23c90e1b370733684a5666e4e4597e"
+   }
   }
- ]
-}
\ No newline at end of file
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/jbrowse_jupyter/dev_server.py b/jbrowse_jupyter/dev_server.py
index bf78818..de6ad91 100644
--- a/jbrowse_jupyter/dev_server.py
+++ b/jbrowse_jupyter/dev_server.py
@@ -111,7 +111,7 @@ def end_headers(self):
         self.send_header('Access-Control-Allow-Methods', 'GET, OPTIONS')
         self.send_header('Access-Control-Expose-Headers', '*')
         self.send_header('Accept-Ranges', 'bytes')
-        # self.send_header('Content-Type', 'application/octet-stream')
+        self.send_header('Content-Type', 'application/octet-stream')
         SimpleHTTPRequestHandler.end_headers(self)
 
     def translate_path(self, path):
diff --git a/jbrowse_jupyter/jbrowse_config.py b/jbrowse_jupyter/jbrowse_config.py
index ac40e0e..01ffe7b 100644
--- a/jbrowse_jupyter/jbrowse_config.py
+++ b/jbrowse_jupyter/jbrowse_config.py
@@ -1,10 +1,16 @@
-from jbrowse_jupyter.util import is_url, get_default, guess_file_name, get_name
+import IPython
+from jbrowse_jupyter.util import (
+    is_url, get_default,
+    guess_file_name,
+    get_name,
+)
 from jbrowse_jupyter.tracks import (
     guess_adapter_type,
     guess_track_type,
     check_track_data,
     get_from_config_adapter,
-    guess_display_type
+    guess_display_type,
+    make_url_colab_jupyter
 )
 
 
@@ -73,6 +79,22 @@ def __init__(self, view="LGV", conf=None):
             defaults to LGV
         :param obj conf: optional conf obj
         """
+        in_colab_notebook = False
+        in_jupyter_notebook = False
+        try:
+            import google.colab.output # noqa
+            in_colab_notebook = True
+        except: # noqa
+            in_colab_notebook = False
+        try:
+            shell = IPython.get_ipython().__class__.__name__ # noqa
+            if shell == 'ZMQInteractiveShell': # noqa
+                in_jupyter_notebook = True
+            else:
+                in_jupyter_notebook = False
+        except: # noqa
+            in_jupyter_notebook = False
+        # =====================
         view_default = {
             "id": 'linearGenomeView',
             "type": 'LinearGenomeView',
@@ -95,7 +117,7 @@ def __init__(self, view="LGV", conf=None):
             "location": "",
             "configuration": {
                 "theme": {}
-            }
+            },
         }
         if conf is not None:
             for r in default.keys():
@@ -107,6 +129,11 @@ def __init__(self, view="LGV", conf=None):
             self.tracks_ids_map = ids
         self.tracks_ids_map = {}
         self.view = view
+        # environment
+        self.nb_port = 8888
+        self.nb_host = "localhost"
+        self.colab = in_colab_notebook
+        self.jupyter = not in_colab_notebook and in_jupyter_notebook
 
     def get_config(self):
         """
@@ -122,8 +149,40 @@ def get_config(self):
         """
         return self.config
 
-    # ========== Assembly ===========
+    def get_colab(self):
+        return self.colab
+
+    def get_jupyter(self):
+        return self.jupyter
+
+    def get_env(self):
+        print("notebook port: ", self.nb_port)
+        print("notebook host: ", self.nb_host)
+        return self.nb_host, self.nb_port
+
+    def set_env(self, notebook_host="localhost", notebook_port=8888):
+        """
+        Changes the port and the host for creating links to files
+        found within the file tree of jupyter.
+
+        We want to be able to use paths to local files that can be
+        accessed within the file tree of jupyter notebook and jupyter
+        lab. The port and host should match those configured in your
+        jupyter config.
+
+        You can set_env after creating your view.
+        browser = create("LGV")
+        browser.set_env("localhost", 8989)
+
+        :param str notebook_host: host used in jupyter config for
+            for using paths to local files. (Defaults to "localhost")
+        :param str notebook_port: port used in jupyter config for
+            for using paths to local files. (Defaults to 8888)
+        """
+        self.nb_port = notebook_port
+        self.nb_host = notebook_host
 
+    # ========== Assembly ===========
     def get_assembly(self):
         # Returns the JBrowseConfig assembly subconfiguration object
         return self.config["assembly"]
@@ -155,14 +214,14 @@ def set_assembly(self, assembly_data, **kwargs):
         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 assembly_data: url/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 path
+        :raises TypeError: Paths are only supported in jupyter.
         :raises TypeError: adapter used for file type is not supported or
             recognized
         """
@@ -173,13 +232,21 @@ def set_assembly(self, assembly_data, **kwargs):
             raise TypeError(err)
         aliases = kwargs.get('aliases', [])
         refname_aliases = kwargs.get('refname_aliases', {})
-        if (is_url(assembly_data)):
-            if (indx != 'defaultIndex'):
-                if not is_url(indx):
-                    raise TypeError("Provide a url for your index file."
-                                    "Checkout our local file support docs.")
+        if is_url(assembly_data):
+            if indx != 'defaultIndex':
+                if not is_url(indx) and not self.jupyter:
+                    raise TypeError(f'Path for {assembly_data} '
+                                    "is used in an unsupported environment."
+                                    "Paths are supported in Jupyter"
+                                    " notebooks and Jupyter lab."
+                                    "Please use a url for your assembly "
+                                    "data. You can check out our local "
+                                    "file support docs for more information")
+            assembly_adapter = guess_adapter_type(assembly_data,
+                                                  'uri',
+                                                  indx,
+                                                  **kwargs)
             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"):
@@ -196,8 +263,46 @@ def set_assembly(self, assembly_data, **kwargs):
             }
             self.config["assembly"] = assembly_config
         else:
-            raise TypeError("Provide a url for your index file."
-                            "Checkout our local file support docs.")
+            if not self.jupyter:
+                raise TypeError(f'Path {assembly_data} for assembly data '
+                                "is used in an unsupported environment."
+                                "Paths are supported in Jupyter notebooks"
+                                " and Jupyter lab.Please use a url for "
+                                "your assembly data. You can check out "
+                                "our local file support docs for more "
+                                "information")
+            if indx != 'defaultIndex' and not is_url(indx):
+                if not self.jupyter:
+                    raise TypeError("Paths are used in an "
+                                    "unsupported environment."
+                                    "Paths are supported in Jupyter"
+                                    " notebooks and Jupyter lab."
+                                    "Please use a urls for your assembly"
+                                    " and index data. You can check out "
+                                    "our local file support docs for more"
+                                    " information")
+            assembly_adapter = guess_adapter_type(assembly_data,
+                                                  'localPath',
+                                                  indx,
+                                                  colab=self.colab,
+                                                  nb_port=self.nb_port,
+                                                  nb_host=self.nb_host)
+            name = kwargs.get('name', get_name(assembly_data))
+            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": {
+                    "type": "ReferenceSequenceTrack",
+                    "trackId": f'{name}-ReferenceSequenceTrack',
+                    "adapter": assembly_adapter
+                },
+                "aliases": aliases,
+                "refNameAliases": refname_aliases,
+            }
+            self.config["assembly"] = assembly_config
 
     # ============ Tracks =============
 
@@ -258,7 +363,7 @@ def add_df_track(self, track_data, name, **kwargs):
         e.g:
         add_df_track(df, "track_name")
 
-        :param df: panda DataFrame with the track data.
+        :param track_data: panda DataFrame with the track data.
         :param str name: name for the track.
         :param str track_id: (optional) trackId for the track
         :param str overwrite: flag wether or not to overwrite existing track.
@@ -319,23 +424,21 @@ def add_track(self, data, **kwargs):
         add_track("url.bam")
         assumes "url.bam.bai" also exists
 
-        :param str data: track file or url
-            (currently only supporting url)
+        :param str data: track file url/path
         :param str name: (optional) name for the track
             (defaults to data filename)
         :param str track_id: (optional) trackId for the track
-        :param str index: (optional) index file for the track
+        :param str index: (optional) file url/path for the track
         :param str track_type: (optional) track type
         :param boolean overwrite: (optional) defaults to False
         :raises Exception: if assembly has not been configured
         :raises TypeError: if track data is not provided
         :raises TypeError: if track type is not supported
+        :raises TypeError: Paths are only supported in jupyter.
         """
-        # TODO: get effective/working locations for track data
-        # and track index when
         if not data:
             raise TypeError(
-                "A path to the track data is required. None was provided.")
+                "Track data is required. None was provided.")
         if not self.get_assembly():
             raise Exception("Please set the assembly before adding a track.")
 
@@ -346,10 +449,23 @@ def add_track(self, data, **kwargs):
         current_tracks = self.get_tracks()
         if is_url(data):
             # default to uri protocol until local files enabled
-            if not is_url(index) and index != "defaultIndex":
-                raise TypeError("Provide a url for your index file."
-                                "Checkout our local file support docs.")
-            adapter = guess_adapter_type(data, 'uri', index)
+            if not is_url(index) and index != 'defaultIndex':
+                if not self.jupyter:
+                    raise TypeError(f'Path {index} for index is used in an '
+                                    "unsupported environment. Paths are "
+                                    "supported in Jupyter notebooks and Jupy"
+                                    "ter lab.Please use a url for your "
+                                    "assembly data. You can check out "
+                                    "our local file support docs for more "
+                                    "information")
+                else:
+                    adapter = guess_adapter_type(data, 'localPath', index,
+                                                 colab=self.colab,
+                                                 nb_port=self.nb_port,
+                                                 nb_host=self.nb_host)
+            else:
+                adapter = guess_adapter_type(data, 'uri', index)
+            # adapter = guess_adapter_type(data, 'uri', index)
             if (adapter["type"] == "UNKNOWN"):
                 raise TypeError("Adapter type is not recognized")
             if (adapter["type"] == "UNSUPPORTED"):
@@ -392,8 +508,69 @@ def add_track(self, data, **kwargs):
             self.config["tracks"] = current_tracks
             self.tracks_ids_map[track_id] = track_config
         else:
-            raise TypeError("Provide a url for your index file."
-                            "Checkout our local file support docs.")
+            if not self.jupyter:
+                raise TypeError(f'Path {data} for track data '
+                                "is used in an unsupported environment."
+                                "Paths are supported in Jupyter notebooks"
+                                " and Jupyter lab.Please use a url for "
+                                "your assembly data. You can check out "
+                                "our local file support docs for more "
+                                "information")
+            if not is_url(index) and index != 'defaultIndex':
+                if not self.jupyter:
+                    raise TypeError(f'Path {index} for index is used in an '
+                                    "unsupported environment.Paths are "
+                                    "supported in Jupyter notebooks and Jupyte"
+                                    "r lab.Please use a url for your assembly "
+                                    "data. You can check out our local file "
+                                    "support docs for more information")
+            adapter = guess_adapter_type(data, 'localPath',
+                                         index,
+                                         colab=self.colab,
+                                         nb_port=self.nb_port,
+                                         nb_host=self.nb_host
+                                         )
+            if (adapter["type"] == "UNKNOWN"):
+                raise TypeError("Adapter type is not recognized")
+            if (adapter["type"] == "UNSUPPORTED"):
+                raise TypeError("Adapter type is not supported")
+            # get sequence adapter for cram adapter track
+            if adapter["type"] == "CramAdapter":
+                extra_config = self.get_assembly()["sequence"]["adapter"]
+                adapter["sequenceAdapter"] = extra_config
+            t_type = kwargs.get('track_type',
+                                guess_track_type(adapter["type"]))
+            supported_track_types = set({
+                'AlignmentsTrack',
+                'QuantitativeTrack',
+                'VariantTrack',
+                'FeatureTrack',
+                'ReferenceSequenceTrack'
+            })
+            if t_type not in supported_track_types:
+                raise TypeError(f'Track type: "{t_type}" is not supported.')
+            default_track_id = f'{self.get_assembly_name()}-{name}'
+            track_id = kwargs.get('track_id', default_track_id)
+            track_config = {
+                "type": t_type,
+                "trackId": track_id,
+                "name": name,
+                "assemblyNames": assembly_names,
+                "adapter": adapter
+            }
+            if track_id in self.tracks_ids_map.keys() and not overwrite:
+                raise TypeError(
+                    (
+                        f'track with trackId: "{track_id}" already exists in'
+                        f'config. Set overwrite to True to overwrite it.')
+                    )
+            if track_id in self.tracks_ids_map.keys() and overwrite:
+                current_tracks = [
+                    t for t in current_tracks if t["trackId"] != track_id]
+
+            current_tracks.append(track_config)
+            self.config["tracks"] = current_tracks
+            self.tracks_ids_map[track_id] = track_config
 
     def delete_track(self, track_id):
         """
@@ -514,8 +691,8 @@ def get_text_search_adapters(self):
         # Returns the aggregateTextSearchAdapters in the config
         return self.config["aggregateTextSearchAdapters"]
 
-    def add_text_search_adapter(self, ix_path,
-                                ixx_path, meta_path, adapter_id=None):
+    def add_text_search_adapter(self, ix,
+                                ixx, meta, adapter_id=None):
         """
         Adds an aggregate trix text search adapter.
         Currently not available for Circular Genome View
@@ -524,41 +701,61 @@ def add_text_search_adapter(self, ix_path,
         add_text_search_adapter("url/file.ix", url/file.ixx",
         "url/meta.json")
 
-        :param str ix_path: path to ix file
-        :param str ixx_path: path to ixx file
-        :param str meta_path: path to meta.json file
+        :param str ix: url/path to ix file
+        :param str ixx: url/path to ixx file
+        :param str meta: url/path to meta.json file
         :param str adapter_id: optional adapter_id
         :raises Exception: if assembly has not been configured
         :raises TypeError: if adapter with same adapter id
                 is already configured
-        :raises TypeError: local paths are not supported
+        :raises TypeError: Paths are only supported in jupyter.
         :raises TypeError: if view is CGV
         """
         err = "Please set the assembly before adding a text search adapter."
         if not self.get_assembly():
             raise Exception(err)
-        if (not (is_url(ix_path) and is_url(ixx_path) and is_url(meta_path))):
-            raise TypeError("Provide a url for your index file."
-                            "Checkout our local file support docs.")
+        local = is_url(ix) and is_url(ixx) and is_url(meta)
+        if (local and not self.jupyter):
+            TypeError(f'Paths for "{ix},{ixx},and {meta}"'
+                      " are used in an unsupported environment. Paths are "
+                      "supported in Jupyter notebooks and Jupyter lab.Please"
+                      " use a url for your assembly data. You can check out"
+                      " our local file support docs for more information")
+
         if self.view == "CGV":
             raise TypeError("Text Searching not currently available in CGV")
         assembly_name = self.get_assembly_name()
-        default_id = f'{assembly_name}-{guess_file_name(ix_path)}-index'
+        default_id = f'{assembly_name}-{guess_file_name(ix)}-index'
         text_id = default_id if adapter_id is None else adapter_id
         text_search_adapter = {
             "type": "TrixTextSearchAdapter",
             "textSearchAdapterId": text_id,
             "ixFilePath": {
-                "uri": ix_path,
-                "locationType": "UriLocation"
+                "uri":  make_url_colab_jupyter(
+                    ix,
+                    colab=self.colab,
+                    nb_host=self.nb_host,
+                    nb_port=self.nb_port
+                ),
+                "locationType": "UriLocation",
             },
             "ixxFilePath": {
-                "uri": ixx_path,
-                "locationType": "UriLocation"
+                "uri": make_url_colab_jupyter(
+                    ixx,
+                    colab=self.colab,
+                    nb_host=self.nb_host,
+                    nb_port=self.nb_port
+                ),
+                "locationType": "UriLocation",
             },
             "metaFilePath": {
-                "uri": meta_path,
-                "locationType": "UriLocation"
+                "uri": make_url_colab_jupyter(
+                    meta,
+                    colab=self.colab,
+                    nb_host=self.nb_host,
+                    nb_port=self.nb_port
+                ),
+                "locationType": "UriLocation",
             },
             "assemblyNames": [assembly_name]
         }
diff --git a/jbrowse_jupyter/tracks.py b/jbrowse_jupyter/tracks.py
index 0ab00d0..fc58a7c 100644
--- a/jbrowse_jupyter/tracks.py
+++ b/jbrowse_jupyter/tracks.py
@@ -3,24 +3,43 @@
 import pandas as pd
 
 
-def make_location(location, protocol):
+def make_location(location, protocol, **kwargs):
     """
     Creates location object given a location and a protocol.
-    :param str location: file path
+    :param str location: file path/url
     :param str protocol: protocol, for now only accepting `uri`
     :return: the location subconfiguration
     :rtype: obj
     :raises ValueError: if a protocol other than `uri` is used.
 
     """
-    # elif protocol == "localPath":
-    # return { "uri": location, "locationType": "LocalPathLocation"}
+    in_colab = kwargs.get('colab', False)
+    notebook_host = kwargs.get('nb_host', 8888)
+    notebook_port = kwargs.get('nb_port', "localhost")
     if protocol == "uri":
         return {"uri": location, "locationType": "UriLocation"}
+    elif protocol == "localPath":
+        return {
+            "uri": make_url_colab_jupyter(location,
+                                          colab=in_colab,
+                                          nb_port=notebook_port,
+                                          nb_host=notebook_host),
+            "locationType": "UriLocation"
+        }
     else:
         raise TypeError(f"invalid protocol {protocol}")
 
 
+def make_url_colab_jupyter(location, **kwargs):
+    """Generates url from path based on env colab or jupyter"""
+    in_colab = kwargs.get('colab', False)
+    notebook_host = kwargs.get('nb_host', 8888)
+    notebook_port = kwargs.get('nb_port', "localhost")
+    if in_colab:
+        return location
+    return f'http://{notebook_host}:{notebook_port}/files' + location
+
+
 def supported_track_type(track_type):
     """Checks wether or not the given track type is supported."""
     return track_type in {
@@ -84,16 +103,20 @@ def guess_track_type(adapter_type):
         return "FeatureTrack"
 
 
-def guess_adapter_type(file_location, protocol, index="defaultIndex"):
+def guess_adapter_type(file_location,
+                       protocol, index="defaultIndex", **kwargs):
     """
     Creates location object given a location and a protocol.
 
-    :param str file_location: file path
+    :param str file_location: file path/url
     :param str protocol: protocol, for now only accepting `uri`
     :param str index: (optional) path to index
     :return: the adapter track subconfiguration
     :rtype: obj
     """
+    notebook_host = kwargs.get('nb_host', 8888)
+    notebook_port = kwargs.get('nb_port', "localhost")
+    in_colab = kwargs.get('colab', False)
     bam = re.compile(r"\.bam$", re.IGNORECASE)
     bed = re.compile(r"\.bed$", re.IGNORECASE)
     bed_tabix = re.compile(r"\.bed\.b?gz$", re.IGNORECASE)
@@ -119,9 +142,17 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(bam, file_location)):
         return {
             "type": "BamAdapter",
-            "bamLocation": make_location(file_location, protocol),
+            "bamLocation": make_location(file_location,
+                                         protocol,
+                                         colab=in_colab,
+                                         nb_host=notebook_host,
+                                         nb_port=notebook_port),
             "index": {
-                "location": make_location(f"{file_location}.bai", protocol),
+                "location": make_location(f"{file_location}.bai",
+                                          protocol,
+                                          colab=in_colab,
+                                          nb_host=notebook_host,
+                                          nb_port=notebook_port),
                 "indexType": "CSI"
                 if (index != "defaultIndex" and index.upper().endswith("CSI"))
                 else "BAI",
@@ -131,8 +162,16 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(cram, file_location)):
         return {
             "type": "CramAdapter",
-            "cramLocation": make_location(file_location, protocol),
-            "craiLocation": make_location(f"{file_location}.crai", protocol),
+            "cramLocation": make_location(file_location,
+                                          protocol,
+                                          colab=in_colab,
+                                          nb_host=notebook_host,
+                                          nb_port=notebook_port),
+            "craiLocation": make_location(f"{file_location}.crai",
+                                          protocol,
+                                          colab=in_colab,
+                                          nb_host=notebook_host,
+                                          nb_port=notebook_port),
         }
 
     # gff3
@@ -151,9 +190,17 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(gff3_tabix, file_location)):
         return {
             "type": "Gff3TabixAdapter",
-            "gffGzLocation": make_location(file_location, protocol),
+            "gffGzLocation": make_location(file_location,
+                                           protocol,
+                                           colab=in_colab,
+                                           nb_host=notebook_host,
+                                           nb_port=notebook_port),
             "index": {
-                "location": make_location(f"{file_location}.tbi", protocol),
+                "location": make_location(f"{file_location}.tbi",
+                                          protocol,
+                                          colab=in_colab,
+                                          nb_host=notebook_host,
+                                          nb_port=notebook_port),
                 "indexType": "TBI",
             },
         }
@@ -162,7 +209,11 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(vcf, file_location)):
         return {
             "type": "VcfAdapter",
-            "vcfLocation": make_location(file_location, protocol),
+            "vcfLocation": make_location(file_location,
+                                         protocol,
+                                         colab=in_colab,
+                                         nb_host=notebook_host,
+                                         nb_port=notebook_port),
         }
 
     # vcf idx
@@ -175,9 +226,17 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(vcf_gzp, file_location)):
         return {
             "type": "VcfTabixAdapter",
-            "vcfGzLocation": make_location(file_location, protocol),
+            "vcfGzLocation": make_location(file_location,
+                                           protocol,
+                                           colab=in_colab,
+                                           nb_host=notebook_host,
+                                           nb_port=notebook_port),
             "index": {
-                "location": make_location(f"{file_location}.tbi", protocol),
+                "location": make_location(f"{file_location}.tbi",
+                                          protocol,
+                                          colab=in_colab,
+                                          nb_host=notebook_host,
+                                          nb_port=notebook_port),
                 "indexType": "CSI"
                 if (index != "defaultIndex" and index.upper().endswith("CSI"))
                 else "TBI",
@@ -188,7 +247,11 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(big_wig, file_location)):
         return {
             "type": "BigWigAdapter",
-            "bigWigLocation": make_location(file_location, protocol),
+            "bigWigLocation": make_location(file_location,
+                                            protocol,
+                                            colab=in_colab,
+                                            nb_host=notebook_host,
+                                            nb_port=notebook_port),
         }
     # bed
     if bool(re.search(bed, file_location)):
@@ -200,9 +263,17 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(bed_tabix, file_location)):
         return {
             "type": "BedTabixAdapter",
-            "bedGzLocation": make_location(file_location, protocol),
+            "bedGzLocation": make_location(file_location,
+                                           protocol,
+                                           colab=in_colab,
+                                           nb_host=notebook_host,
+                                           nb_port=notebook_port),
             "index": {
-                "location": make_location(f"{file_location}.tbi", protocol),
+                "location": make_location(f"{file_location}.tbi",
+                                          protocol,
+                                          colab=in_colab,
+                                          nb_host=notebook_host,
+                                          nb_port=notebook_port),
                 "indexType": "CSI"
                 if (index != "defaultIndex" and index.upper().endswith("CSI"))
                 else "TBI",
@@ -213,7 +284,11 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(big_bed, file_location)):
         return {
             "type": "BigBedAdapter",
-            "bigBedLocation": make_location(file_location, protocol),
+            "bigBedLocation": make_location(file_location,
+                                            protocol,
+                                            colab=in_colab,
+                                            nb_host=notebook_host,
+                                            nb_port=notebook_port),
         }
 
     # fasta indexed
@@ -221,24 +296,47 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
         fai = index if index != "defaultIndex" else f"{file_location}.fai"
         return {
             "type": "IndexedFastaAdapter",
-            "fastaLocation": make_location(file_location, protocol),
-            "faiLocation": make_location(fai, protocol),
+            "fastaLocation": make_location(file_location,
+                                           protocol,
+                                           colab=in_colab,
+                                           nb_host=notebook_host,
+                                           nb_port=notebook_port),
+            "faiLocation": make_location(fai, protocol,
+                                         colab=in_colab,
+                                         nb_host=notebook_host,
+                                         nb_port=notebook_port),
         }
 
     # Bgzipped fasta
     if bool(re.search(fasta_gz, file_location)):
         return {
             "type": "BgzipFastaAdapter",
-            "fastaLocation": make_location(file_location, protocol),
-            "faiLocation": make_location(f"{file_location}.fai", protocol),
-            "gziLocation": make_location(f"{file_location}.gzi", protocol),
+            "fastaLocation": make_location(file_location,
+                                           protocol,
+                                           colab=in_colab,
+                                           nb_host=notebook_host,
+                                           nb_port=notebook_port),
+            "faiLocation": make_location(f"{file_location}.fai",
+                                         protocol,
+                                         colab=in_colab,
+                                         nb_host=notebook_host,
+                                         nb_port=notebook_port),
+            "gziLocation": make_location(f"{file_location}.gzi",
+                                         protocol,
+                                         colab=in_colab,
+                                         nb_host=notebook_host,
+                                         nb_port=notebook_port),
         }
 
     # twobit
     if bool(re.search(twobit, file_location)):
         return {
             "type": "TwoBitAdapter",
-            "twoBitLocation": make_location(file_location, protocol),
+            "twoBitLocation": make_location(file_location,
+                                            protocol,
+                                            colab=in_colab,
+                                            nb_host=notebook_host,
+                                            nb_port=notebook_port),
         }
     # sizes
     if bool(re.search(sizes, file_location)):
@@ -249,27 +347,43 @@ def guess_adapter_type(file_location, protocol, index="defaultIndex"):
     if bool(re.search(nclist, file_location)):
         return {
             "type": "NCListAdapter",
-            "rootUrlTemplate": make_location(file_location, protocol),
+            "rootUrlTemplate": make_location(file_location,
+                                             protocol,
+                                             colab=in_colab,
+                                             nb_host=notebook_host,
+                                             nb_port=notebook_port),
         }
 
     # sparql
     if bool(re.search(sparql, file_location)):
         return {
             "type": "SPARQLAdapter",
-            "endpoint": make_location(file_location, protocol),
+            "endpoint": make_location(file_location,
+                                      protocol,
+                                      colab=in_colab,
+                                      nb_host=notebook_host,
+                                      nb_port=notebook_port),
         }
     # hic
     if bool(re.search(hic, file_location)):
         return {
             "type": "HicAdapter",
-            "hicLocation": make_location(file_location, protocol),
+            "hicLocation": make_location(file_location,
+                                         protocol,
+                                         colab=in_colab,
+                                         nb_host=notebook_host,
+                                         nb_port=notebook_port),
         }
 
     # paf
     if bool(re.search(paf, file_location)):
         return {
             "type": "PAFAdapter",
-            "pafLocation": make_location(file_location, protocol),
+            "pafLocation": make_location(file_location,
+                                         protocol,
+                                         colab=in_colab,
+                                         nb_host=notebook_host,
+                                         nb_port=notebook_port),
         }
 
     return {
diff --git a/jbrowse_jupyter/util.py b/jbrowse_jupyter/util.py
index aeec98e..e3b7a9f 100644
--- a/jbrowse_jupyter/util.py
+++ b/jbrowse_jupyter/util.py
@@ -12,7 +12,7 @@ def is_url(filePath):
     """
     Checks wether or not the file path
     is a valid url.
-    :param str filePath: file path
+    :param str filePath: file path/url
     :return: returns true if path matches pattern starting with
     http:// or https://
     :rtype: boolean
diff --git a/local_support.ipynb b/local_support.ipynb
index 6d25a3f..443841f 100644
--- a/local_support.ipynb
+++ b/local_support.ipynb
@@ -6,7 +6,19 @@
    "source": [
     "# Use local data to configure a Linear Genome View\n",
     "\n",
-    "This Jupyter notebook will show you how to add tracks using your local data. We are able to leverage Jupyter's server to serve local files that exist within the notebook's file tree, but we also provide a separate dev server for additional support in other environments (binder, colab, etc)\n",
+    "This Jupyter notebook will show you how to add tracks using your local data. We are able to leverage Jupyter's server to serve local files that exist within the notebook's file tree, but we also provide a separate dev server for additional support in other environments (binder, colab, etc).\n",
+    "\n",
+    "You can run this notebook completely with jupyterlab or jupyter notebook.\n",
+    "\n",
+    "```\n",
+    "$ jupyter lab\n",
+    "```\n",
+    "or\n",
+    "```\n",
+    "$ jupyter notebook\n",
+    "```\n",
+    "\n",
+    "If you decide to run this in colab, you can skip the first part of adding tracks (Using the Jupyter server) and go straight to (Using the JBrowse Jupyter dev server)\n",
     "\n",
     "## Overview:\n",
     "1. Create an hg19 config\n",
@@ -34,73 +46,73 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Requirement already satisfied: jbrowse-jupyter in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (1.2.5)\n",
-      "Requirement already satisfied: jupyter-dash>=0.4.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter) (0.4.2)\n",
-      "Requirement already satisfied: Werkzeug==2.0.3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter) (2.0.3)\n",
-      "Requirement already satisfied: pytest>=6.2.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter) (7.1.1)\n",
-      "Requirement already satisfied: dash==2.3.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter) (2.3.0)\n",
-      "Requirement already satisfied: dash-jbrowse>=1.0.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter) (1.1.0)\n",
-      "Requirement already satisfied: pandas>=1.1.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter) (1.4.2)\n",
-      "Requirement already satisfied: plotly>=5.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (5.7.0)\n",
-      "Requirement already satisfied: dash-html-components==2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (2.0.0)\n",
-      "Requirement already satisfied: dash-table==5.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (5.0.0)\n",
-      "Requirement already satisfied: flask-compress in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (1.11)\n",
-      "Requirement already satisfied: Flask>=1.0.4 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (2.1.1)\n",
-      "Requirement already satisfied: dash-core-components==2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter) (2.0.0)\n",
-      "Requirement already satisfied: Jinja2>=3.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (3.1.1)\n",
-      "Requirement already satisfied: importlib-metadata>=3.6.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (4.11.3)\n",
-      "Requirement already satisfied: click>=8.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (8.1.2)\n",
-      "Requirement already satisfied: itsdangerous>=2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (2.1.2)\n",
-      "Requirement already satisfied: zipp>=0.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from importlib-metadata>=3.6.0->Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (3.8.0)\n",
-      "Requirement already satisfied: MarkupSafe>=2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Jinja2>=3.0->Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter) (2.1.1)\n",
-      "Requirement already satisfied: retrying in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (1.3.3)\n",
-      "Requirement already satisfied: ipykernel in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (6.12.1)\n",
-      "Requirement already satisfied: ipython in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (8.2.0)\n",
-      "Requirement already satisfied: requests in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (2.27.1)\n",
-      "Requirement already satisfied: ansi2html in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (1.7.0)\n",
-      "Requirement already satisfied: nest-asyncio in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-dash>=0.4.2->jbrowse-jupyter) (1.5.5)\n",
-      "Requirement already satisfied: numpy>=1.18.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter) (1.22.3)\n",
-      "Requirement already satisfied: pytz>=2020.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter) (2022.1)\n",
-      "Requirement already satisfied: python-dateutil>=2.8.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter) (2.8.2)\n",
-      "Requirement already satisfied: tenacity>=6.2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from plotly>=5.0.0->dash==2.3.0->jbrowse-jupyter) (8.0.1)\n",
-      "Requirement already satisfied: six in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from plotly>=5.0.0->dash==2.3.0->jbrowse-jupyter) (1.16.0)\n",
-      "Requirement already satisfied: attrs>=19.2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (21.4.0)\n",
-      "Requirement already satisfied: pluggy<2.0,>=0.12 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (1.0.0)\n",
-      "Requirement already satisfied: packaging in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (21.3)\n",
-      "Requirement already satisfied: tomli>=1.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (2.0.1)\n",
-      "Requirement already satisfied: py>=1.8.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (1.11.0)\n",
-      "Requirement already satisfied: iniconfig in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pytest>=6.2.5->jbrowse-jupyter) (1.1.1)\n",
-      "Requirement already satisfied: brotli in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from flask-compress->dash==2.3.0->jbrowse-jupyter) (1.0.9)\n",
-      "Requirement already satisfied: tornado>=6.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (6.1)\n",
-      "Requirement already satisfied: psutil in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (5.9.0)\n",
-      "Requirement already satisfied: debugpy>=1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (1.6.0)\n",
-      "Requirement already satisfied: traitlets>=5.1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (5.1.1)\n",
-      "Requirement already satisfied: matplotlib-inline>=0.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.1.3)\n",
-      "Requirement already satisfied: appnope in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.1.3)\n",
-      "Requirement already satisfied: jupyter-client>=6.1.12 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (7.2.2)\n",
-      "Requirement already satisfied: stack-data in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.2.0)\n",
-      "Requirement already satisfied: backcall in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.2.0)\n",
-      "Requirement already satisfied: decorator in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (5.1.1)\n",
-      "Requirement already satisfied: setuptools>=18.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (58.0.4)\n",
-      "Requirement already satisfied: pygments>=2.4.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (2.11.2)\n",
-      "Requirement already satisfied: jedi>=0.16 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.18.1)\n",
-      "Requirement already satisfied: pickleshare in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.7.5)\n",
-      "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (3.0.29)\n",
-      "Requirement already satisfied: pexpect>4.3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (4.8.0)\n",
-      "Requirement already satisfied: parso<0.9.0,>=0.8.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jedi>=0.16->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.8.3)\n",
-      "Requirement already satisfied: jupyter-core>=4.9.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (4.9.2)\n",
-      "Requirement already satisfied: pyzmq>=22.3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (22.3.0)\n",
-      "Requirement already satisfied: entrypoints in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->ipykernel->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.4)\n",
-      "Requirement already satisfied: ptyprocess>=0.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pexpect>4.3->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.7.0)\n",
-      "Requirement already satisfied: wcwidth in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.2.5)\n",
-      "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from packaging->pytest>=6.2.5->jbrowse-jupyter) (3.0.7)\n",
-      "Requirement already satisfied: charset-normalizer~=2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (2.0.12)\n",
-      "Requirement already satisfied: certifi>=2017.4.17 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (2021.10.8)\n",
-      "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (1.26.9)\n",
-      "Requirement already satisfied: idna<4,>=2.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter-dash>=0.4.2->jbrowse-jupyter) (3.3)\n",
-      "Requirement already satisfied: asttokens in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from stack-data->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (2.0.5)\n",
-      "Requirement already satisfied: executing in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from stack-data->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.8.3)\n",
-      "Requirement already satisfied: pure-eval in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from stack-data->ipython->jupyter-dash>=0.4.2->jbrowse-jupyter) (0.2.2)\n"
+      "Collecting git+https://github.com/GMOD/jbrowse-jupyter.git@path_support_two\n",
+      "  Cloning https://github.com/GMOD/jbrowse-jupyter.git (to revision path_support_two) to /private/var/folders/96/hq94_1qd3c9_q87bwqhg05s80000gn/T/pip-req-build-2d1iovvr\n",
+      "  Running command git clone -q https://github.com/GMOD/jbrowse-jupyter.git /private/var/folders/96/hq94_1qd3c9_q87bwqhg05s80000gn/T/pip-req-build-2d1iovvr\n",
+      "  Running command git checkout -b path_support_two --track origin/path_support_two\n",
+      "  Switched to a new branch 'path_support_two'\n",
+      "  Branch 'path_support_two' set up to track remote branch 'path_support_two' from 'origin'.\n",
+      "  Resolved https://github.com/GMOD/jbrowse-jupyter.git to commit 55b815a085f1bfbc8c8b9d3627b708b3c47ebf30\n",
+      "Requirement already satisfied: dash==2.3.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter==1.3.5) (2.3.0)\n",
+      "Requirement already satisfied: dash-jbrowse==1.1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter==1.3.5) (1.1.0)\n",
+      "Requirement already satisfied: jupyter_dash>=0.4.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter==1.3.5) (0.4.2)\n",
+      "Requirement already satisfied: Werkzeug==2.0.3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter==1.3.5) (2.0.3)\n",
+      "Requirement already satisfied: pandas>=1.1.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jbrowse-jupyter==1.3.5) (1.4.2)\n",
+      "Requirement already satisfied: Flask>=1.0.4 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter==1.3.5) (2.1.3)\n",
+      "Requirement already satisfied: flask-compress in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter==1.3.5) (1.11)\n",
+      "Requirement already satisfied: dash-table==5.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter==1.3.5) (5.0.0)\n",
+      "Requirement already satisfied: dash-html-components==2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter==1.3.5) (2.0.0)\n",
+      "Requirement already satisfied: plotly>=5.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter==1.3.5) (5.7.0)\n",
+      "Requirement already satisfied: dash-core-components==2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from dash==2.3.0->jbrowse-jupyter==1.3.5) (2.0.0)\n",
+      "Requirement already satisfied: Jinja2>=3.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter==1.3.5) (3.1.2)\n",
+      "Requirement already satisfied: importlib-metadata>=3.6.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter==1.3.5) (4.11.3)\n",
+      "Requirement already satisfied: click>=8.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter==1.3.5) (8.1.3)\n",
+      "Requirement already satisfied: itsdangerous>=2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter==1.3.5) (2.1.2)\n",
+      "Requirement already satisfied: zipp>=0.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from importlib-metadata>=3.6.0->Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter==1.3.5) (3.8.0)\n",
+      "Requirement already satisfied: MarkupSafe>=2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from Jinja2>=3.0->Flask>=1.0.4->dash==2.3.0->jbrowse-jupyter==1.3.5) (2.0.1)\n",
+      "Requirement already satisfied: requests in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (2.27.1)\n",
+      "Requirement already satisfied: retrying in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (1.3.3)\n",
+      "Requirement already satisfied: ipython in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (8.2.0)\n",
+      "Requirement already satisfied: ansi2html in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (1.7.0)\n",
+      "Requirement already satisfied: ipykernel in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (6.12.1)\n",
+      "Requirement already satisfied: nest-asyncio in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (1.5.5)\n",
+      "Requirement already satisfied: numpy>=1.18.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter==1.3.5) (1.22.3)\n",
+      "Requirement already satisfied: python-dateutil>=2.8.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter==1.3.5) (2.8.2)\n",
+      "Requirement already satisfied: pytz>=2020.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pandas>=1.1.5->jbrowse-jupyter==1.3.5) (2022.1)\n",
+      "Requirement already satisfied: tenacity>=6.2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from plotly>=5.0.0->dash==2.3.0->jbrowse-jupyter==1.3.5) (8.0.1)\n",
+      "Requirement already satisfied: six in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from plotly>=5.0.0->dash==2.3.0->jbrowse-jupyter==1.3.5) (1.16.0)\n",
+      "Requirement already satisfied: brotli in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from flask-compress->dash==2.3.0->jbrowse-jupyter==1.3.5) (1.0.9)\n",
+      "Requirement already satisfied: matplotlib-inline>=0.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.1.3)\n",
+      "Requirement already satisfied: jupyter-client>=6.1.12 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (7.2.2)\n",
+      "Requirement already satisfied: debugpy>=1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (1.6.0)\n",
+      "Requirement already satisfied: tornado>=6.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (6.1)\n",
+      "Requirement already satisfied: packaging in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (21.3)\n",
+      "Requirement already satisfied: traitlets>=5.1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (5.1.1)\n",
+      "Requirement already satisfied: appnope in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.1.3)\n",
+      "Requirement already satisfied: psutil in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (5.9.0)\n",
+      "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (3.0.29)\n",
+      "Requirement already satisfied: pygments>=2.4.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (2.11.2)\n",
+      "Requirement already satisfied: pexpect>4.3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (4.8.0)\n",
+      "Requirement already satisfied: backcall in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.2.0)\n",
+      "Requirement already satisfied: decorator in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (5.1.1)\n",
+      "Requirement already satisfied: pickleshare in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.7.5)\n",
+      "Requirement already satisfied: stack-data in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.2.0)\n",
+      "Requirement already satisfied: setuptools>=18.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (58.0.4)\n",
+      "Requirement already satisfied: jedi>=0.16 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.18.1)\n",
+      "Requirement already satisfied: parso<0.9.0,>=0.8.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jedi>=0.16->ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.8.3)\n",
+      "Requirement already satisfied: entrypoints in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.4)\n",
+      "Requirement already satisfied: jupyter-core>=4.9.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (4.9.2)\n",
+      "Requirement already satisfied: pyzmq>=22.3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (22.3.0)\n",
+      "Requirement already satisfied: ptyprocess>=0.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from pexpect>4.3->ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.7.0)\n",
+      "Requirement already satisfied: wcwidth in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.2.5)\n",
+      "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from packaging->ipykernel->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (3.0.7)\n",
+      "Requirement already satisfied: certifi>=2017.4.17 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (2021.10.8)\n",
+      "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (1.26.9)\n",
+      "Requirement already satisfied: charset-normalizer~=2.0.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (2.0.12)\n",
+      "Requirement already satisfied: idna<4,>=2.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from requests->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (3.3)\n",
+      "Requirement already satisfied: pure-eval in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from stack-data->ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.2.2)\n",
+      "Requirement already satisfied: executing in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from stack-data->ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (0.8.3)\n",
+      "Requirement already satisfied: asttokens in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from stack-data->ipython->jupyter_dash>=0.4.2->jbrowse-jupyter==1.3.5) (2.0.5)\n"
      ]
     }
    ],
@@ -121,30 +133,90 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 3,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Requirement already satisfied: jupyter_server_proxy in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (3.2.1)\n",
+      "Requirement already satisfied: aiohttp in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_server_proxy) (3.8.1)\n",
+      "Requirement already satisfied: simpervisor>=0.4 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_server_proxy) (0.4)\n",
+      "Requirement already satisfied: jupyter-server>=1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter_server_proxy) (1.16.0)\n",
+      "Requirement already satisfied: jupyter-core>=4.7.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (4.9.2)\n",
+      "Requirement already satisfied: Send2Trash in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (1.8.0)\n",
+      "Requirement already satisfied: nbconvert>=6.4.4 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (6.4.5)\n",
+      "Requirement already satisfied: terminado>=0.8.3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (0.13.3)\n",
+      "Requirement already satisfied: anyio>=3.1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (3.5.0)\n",
+      "Requirement already satisfied: traitlets>=5.1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (5.1.1)\n",
+      "Requirement already satisfied: jupyter-client>=6.1.12 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (7.2.2)\n",
+      "Requirement already satisfied: websocket-client in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (1.3.2)\n",
+      "Requirement already satisfied: packaging in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (21.3)\n",
+      "Requirement already satisfied: nbformat>=5.2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (5.3.0)\n",
+      "Requirement already satisfied: prometheus-client in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (0.14.1)\n",
+      "Requirement already satisfied: pyzmq>=17 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (22.3.0)\n",
+      "Requirement already satisfied: tornado>=6.1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (6.1)\n",
+      "Requirement already satisfied: argon2-cffi in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (21.3.0)\n",
+      "Requirement already satisfied: jinja2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-server>=1.0->jupyter_server_proxy) (3.1.2)\n",
+      "Requirement already satisfied: sniffio>=1.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from anyio>=3.1.0->jupyter-server>=1.0->jupyter_server_proxy) (1.2.0)\n",
+      "Requirement already satisfied: idna>=2.8 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from anyio>=3.1.0->jupyter-server>=1.0->jupyter_server_proxy) (3.3)\n",
+      "Requirement already satisfied: python-dateutil>=2.8.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->jupyter-server>=1.0->jupyter_server_proxy) (2.8.2)\n",
+      "Requirement already satisfied: entrypoints in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->jupyter-server>=1.0->jupyter_server_proxy) (0.4)\n",
+      "Requirement already satisfied: nest-asyncio>=1.5.4 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jupyter-client>=6.1.12->jupyter-server>=1.0->jupyter_server_proxy) (1.5.5)\n",
+      "Requirement already satisfied: beautifulsoup4 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (4.11.1)\n",
+      "Requirement already satisfied: MarkupSafe>=2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (2.0.1)\n",
+      "Requirement already satisfied: defusedxml in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (0.7.1)\n",
+      "Requirement already satisfied: pygments>=2.4.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (2.11.2)\n",
+      "Requirement already satisfied: bleach in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (5.0.0)\n",
+      "Requirement already satisfied: pandocfilters>=1.4.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (1.5.0)\n",
+      "Requirement already satisfied: nbclient<0.6.0,>=0.5.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (0.5.13)\n",
+      "Requirement already satisfied: mistune<2,>=0.8.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (0.8.4)\n",
+      "Requirement already satisfied: testpath in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (0.6.0)\n",
+      "Requirement already satisfied: jupyterlab-pygments in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (0.2.0)\n",
+      "Requirement already satisfied: jsonschema>=2.6 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbformat>=5.2.0->jupyter-server>=1.0->jupyter_server_proxy) (3.2.0)\n",
+      "Requirement already satisfied: fastjsonschema in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from nbformat>=5.2.0->jupyter-server>=1.0->jupyter_server_proxy) (2.15.3)\n",
+      "Requirement already satisfied: attrs>=17.4.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jsonschema>=2.6->nbformat>=5.2.0->jupyter-server>=1.0->jupyter_server_proxy) (21.4.0)\n",
+      "Requirement already satisfied: setuptools in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jsonschema>=2.6->nbformat>=5.2.0->jupyter-server>=1.0->jupyter_server_proxy) (58.0.4)\n",
+      "Requirement already satisfied: six>=1.11.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jsonschema>=2.6->nbformat>=5.2.0->jupyter-server>=1.0->jupyter_server_proxy) (1.16.0)\n",
+      "Requirement already satisfied: pyrsistent>=0.14.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from jsonschema>=2.6->nbformat>=5.2.0->jupyter-server>=1.0->jupyter_server_proxy) (0.18.1)\n",
+      "Requirement already satisfied: ptyprocess in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from terminado>=0.8.3->jupyter-server>=1.0->jupyter_server_proxy) (0.7.0)\n",
+      "Requirement already satisfied: charset-normalizer<3.0,>=2.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from aiohttp->jupyter_server_proxy) (2.0.12)\n",
+      "Requirement already satisfied: frozenlist>=1.1.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from aiohttp->jupyter_server_proxy) (1.3.0)\n",
+      "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from aiohttp->jupyter_server_proxy) (4.0.2)\n",
+      "Requirement already satisfied: yarl<2.0,>=1.0 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from aiohttp->jupyter_server_proxy) (1.7.2)\n",
+      "Requirement already satisfied: aiosignal>=1.1.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from aiohttp->jupyter_server_proxy) (1.2.0)\n",
+      "Requirement already satisfied: multidict<7.0,>=4.5 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from aiohttp->jupyter_server_proxy) (6.0.2)\n",
+      "Requirement already satisfied: argon2-cffi-bindings in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from argon2-cffi->jupyter-server>=1.0->jupyter_server_proxy) (21.2.0)\n",
+      "Requirement already satisfied: cffi>=1.0.1 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from argon2-cffi-bindings->argon2-cffi->jupyter-server>=1.0->jupyter_server_proxy) (1.15.0)\n",
+      "Requirement already satisfied: pycparser in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->jupyter-server>=1.0->jupyter_server_proxy) (2.21)\n",
+      "Requirement already satisfied: soupsieve>1.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from beautifulsoup4->nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (2.3.2)\n",
+      "Requirement already satisfied: webencodings in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from bleach->nbconvert>=6.4.4->jupyter-server>=1.0->jupyter_server_proxy) (0.5.1)\n",
+      "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /Users/teresamartinez/opt/anaconda3/envs/jbrowse-jupyter/lib/python3.8/site-packages (from packaging->jupyter-server>=1.0->jupyter_server_proxy) (3.0.7)\n"
+     ]
+    }
+   ],
    "source": [
     "# Uncomment and run the next line if you are running this in jupyterlab/jupyternotebook\n",
     "\n",
-    "# !pip install jupyter_server_proxy"
+    "!pip install jupyter_server_proxy"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 52,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
     "# Uncomment and run the next line if you are running this in jupyterlab/jupyternotebook\n",
     "\n",
-    "# import jupyter_server_proxy\n",
-    "# JupyterDash.infer_jupyter_proxy_config() "
+    "import jupyter_server_proxy\n",
+    "JupyterDash.infer_jupyter_proxy_config() "
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -166,7 +238,7 @@
    "source": [
     "The following two sections\n",
     "1. Using the Jupyter server and\n",
-    "2. Using the Jupyter dev server\n",
+    "2. Using the JBrowse dev server\n",
     "are the two ways in which JBrowse Jupyter supports using local data to configure JBrowse views in the development environment."
    ]
   },
@@ -179,7 +251,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
@@ -188,7 +260,7 @@
        "227612"
       ]
      },
-     "execution_count": 4,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -233,22 +305,6 @@
     "**1.** Run Jupyter."
    ]
   },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "\n",
-    "```\n",
-    "$ jupyter lab\n",
-    "```\n",
-    "or\n",
-    "```\n",
-    "$ jupyter notebook\n",
-    "```\n",
-    "\n",
-    "Ignore this step if you are already running this notebook with jupyter lab or jupyter notebook."
-   ]
-  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -266,24 +322,76 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "**3.** Format the Jupyter URLs of your local data to pass to your JBrowse view. \n",
-    "\n",
+    "**3.** Create Paths for your files. Paths should be **relative to the root of the Jupyter file tree**. \n",
     "\n",
-    "* To format your urls: `http://localhost:8888/files/<your_file_name>`\n",
-    "* e.g 'http://localhost:8888/files/' + 'GRCh37_latest_genomic.sort.gff.gz' = 'http://localhost:8888/files/GRCh37_latest_genomic.sort.gff.gz'\n",
+    "Example:\n",
     "\n",
-    "You do not need to add tree or lab to this url."
+    "jbrowse-jupyter/\n",
+    "    local_support.ipynb\n",
+    "    GRCh37_latest_genomic.sort.gff.gz\n",
+    "    GRCh37_latest_genomic.sort.gff.gz.tbi\n",
+    "    \n",
+    "Path relative to the root of the Jupyter file tree since we ran jupyter lab/jupyter notebook from the root of the repo. Path to the gff files would be e.g /GRCh37_latest_genomic.sort.gff.gz"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 55,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
     "# With the gff files that we just downloaded to our directory, we will add a track.\n",
-    "track_data = 'http://localhost:8888/files/GRCh37_latest_genomic.sort.gff.gz'\n",
-    "track_data_index = 'http://localhost:8888/files/GRCh37_latest_genomic.sort.gff.gz.tbi'\n",
+    "track_data = '/GRCh37_latest_genomic.sort.gff.gz'\n",
+    "track_data_index = '/GRCh37_latest_genomic.sort.gff.gz.tbi'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "notebook port:  8888\n",
+      "notebook host:  localhost\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "('localhost', 8888)"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# you can check your jupyter host and port match that used by JBrowse by running\n",
+    "hg19.get_env()\n",
+    "# if they do not match, you can change it using the command below "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# uncomment the line below and modify according to your Jupyter config.\n",
+    "# hg19.set_env(\"localhost\", 8889)\n",
+    "# The command above is changing the port to 8889 since my jupyter config is set to port 8889 and localhost"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [],
+   "source": [
     "hg19.add_track(track_data, index=track_data_index, track_id='jupyter_server_demo', name='jupyter_server_demo')\n",
     "hg19.set_default_session(['jupyter_server_demo'],False)"
    ]
@@ -357,7 +465,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -379,21 +487,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [],
    "source": [
     "# Uncomment the next line if you wish to see the tracks from both turtorials \n",
-    "# hg19.set_default_session(['jupyter_server_demo', 'jbrowse_dev_server_demo'],False)\n",
+    "hg19.set_default_session(['jupyter_server_demo', 'jbrowse_dev_server_demo'],False)\n",
     "config = hg19.get_config()"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {
-    "scrolled": true
-   },
+   "execution_count": 14,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -402,7 +508,7 @@
        "        <iframe\n",
        "            width=\"100%\"\n",
        "            height=\"300\"\n",
-       "            src=\"http://127.0.0.1:3000/\"\n",
+       "            src=\"http://localhost:8888/proxy/3232/\"\n",
        "            frameborder=\"0\"\n",
        "            allowfullscreen\n",
        "            \n",
@@ -410,7 +516,7 @@
        "        "
       ],
       "text/plain": [
-       "<IPython.lib.display.IFrame at 0x7fa471436ac0>"
+       "<IPython.lib.display.IFrame at 0x7ff550bc4820>"
       ]
      },
      "metadata": {},
@@ -418,7 +524,7 @@
     }
    ],
    "source": [
-    "launch(config, port=3000)"
+    "launch(config, port=3232)"
    ]
   },
   {
@@ -450,6 +556,13 @@
     "Send an email to our mailing list at gmod-ajax@lists.sourceforge.net\n",
     "\n"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
diff --git a/requirements.txt b/requirements.txt
index 13e015a..b41514b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,5 @@
 dash==2.3.0
-dash-jbrowse>=1.1.0
+dash-jbrowse==1.1.0
 jupyter_dash>=0.4.2
 Werkzeug==2.0.3
 pandas>=1.1.5
-pytest>=6.2.5
diff --git a/setup.py b/setup.py
index 8c4ccf0..93631d3 100644
--- a/setup.py
+++ b/setup.py
@@ -9,7 +9,7 @@
 
 setuptools.setup(
     name="jbrowse-jupyter",
-    version="1.3.0",
+    version="1.3.6",
     author="Teresa De Jesus Martinez",
     author_email="tere486martinez@gmail.com",
     maintainer="Teresa De Jesus Martinez; JBrowse Team",
@@ -26,6 +26,7 @@
     },
     packages=['jbrowse_jupyter'],
     python_requires=">=3.6",
+    tests_require=['pytest'],
     classifiers=[
         "Programming Language :: Python :: 3",
         "Topic :: Scientific/Engineering",


Test patch:
diff --git a/tests/test_jbrowse_config.py b/tests/test_jbrowse_config.py
index 206c3fa..54387f5 100644
--- a/tests/test_jbrowse_config.py
+++ b/tests/test_jbrowse_config.py
@@ -50,12 +50,15 @@ def test_set_assembly():
             name="test-demo",
         )
     assert "Please set the assembly before adding a track." in str(excinfo)
-    # raises an error, there is no local file support yet
+    # raises an error, there is no local path support in non jupyter envs
     with pytest.raises(TypeError) as excinfo:
-        conf.set_assembly("./path/to/local/file")
-    err = "Provide a url for your index file." \
-        "Checkout our local file support docs."
-    assert err in str(excinfo)
+        conf.set_assembly("/hi/there")
+    err = (f'Path {"/hi/there"} for assembly data is used'
+           ' in an unsupported environment.'
+           'Paths are supported in Jupyter notebooks and Jupyter lab.'
+           'Please use a url for your assembly data. You can check out '
+           'our local file support docs for more information')
+    assert err == excinfo.value.args[0]
     aliases = ["hg38"]
     uri = "https://s3.amazonaws.com/jbrowse.org/genomes/" \
         "GRCh38/hg38_aliases.txt"
@@ -200,16 +203,6 @@ def test_create_view_from_conf():
     # can delete a track
     hg19_from_config.delete_track("delete-test")
     assert len(hg19_from_config.get_tracks()) == 0
-    # can set text search adapter
-    index_error = "Provide a url for your index file."\
-        "Checkout our local file support docs."
-    with pytest.raises(TypeError) as excinfo:
-        hg19_from_config.add_text_search_adapter(
-            './path/to/ixname.ix',
-            "https://path/to/ixxname.ixx",
-            "https://path/to/meta.json"
-        )
-    assert index_error in str(excinfo)
     hg19_from_config.add_text_search_adapter(ix, ixx, meta)
 
     adapter_list = hg19_from_config.get_text_search_adapters()
@@ -234,6 +227,9 @@ def test_empty_config_lgv():
     with pytest.raises(Exception) as excinfo:
         empty_conf.get_assembly_name()
     assert assembly_error in str(excinfo)
+    empty_conf.set_env("localhost", 9999)
+    current_env = empty_conf.get_env()
+    assert current_env[1] == 9999
 
 
 def test_empty_cgv():
@@ -257,6 +253,8 @@ def test_create_view_cgv():
     # creates JBrowseConfig from default hg19 or hg38
     hg19 = create("CGV", genome="hg19")
     hg38 = create("CGV", genome="hg38")
+    in_colab = hg19.colab
+    assert not in_colab
     assert hg19.get_assembly_name() == "hg19"
     assert len(hg19.get_tracks()) > 0
     assert hg19.get_default_session()
diff --git a/tests/test_tracks.py b/tests/test_tracks.py
index ca5ad58..1d0e5d4 100644
--- a/tests/test_tracks.py
+++ b/tests/test_tracks.py
@@ -25,8 +25,8 @@
 
 def test_make_location():
     with pytest.raises(TypeError) as excinfo:
-        make_location("./local/file/path", "local")
-    assert "invalid protocol local" in str(excinfo)
+        make_location("./local/file/path", "invalidProtocol")
+    assert "invalid protocol invalidProtocol" in str(excinfo)
 
 
 def test_add_track_fail():
@@ -141,6 +141,7 @@ def test_data_frame_track():
 
 
 def test_check_track_data():
+    # Test track from dataframe
     df_error = "Track data must be a DataFrame"
     invalid_df = {
         "refName": "1",
@@ -175,7 +176,6 @@ def test_check_columns():
 
 
 def test_get_df_features():
-    # TODO: test adding correct values types for dataframe
     data_frame = {
         "refName": ["1", "1"],
         "start": [123, 456],