Skip to main content

Data Hosting

Vitessce is a "serverless" tool, and can read data hosted in object stores or static web servers, such as AWS S3. In fact, this means that both the Vitessce viewer static web app and your data resources can be hosted in this way.


When using AWS S3, you will need to ensure that your bucket objects are readable by the outside world. Configure the following in your bucket's Permissions tab.

Block public access (bucket settings)

  • Block all public access: off

Bucket Policy

For a bucket named foo-bar, you will need to add the following in Permissions > Bucket policy:

"Version": "2012-10-17",
"Id": "Policy12345",
"Statement": [
"Sid": "Stmt6789",
"Effect": "Allow",
"Principal": "*",
"Action": [
"Resource": [

Remember to change foo-bar to your bucket name in the "Resource" field.

Cross-origin resource sharing (CORS)

Add the following CORS configuration to the bucket to allow files to be read from other domains.

"AllowedHeaders": ["*"],
"AllowedMethods": ["GET"],
"AllowedOrigins": ["*"],
"ExposeHeaders": ["Content-Range"],
"MaxAgeSeconds": 3000

Google Cloud

First ensure that your bucket has fully public permissions for reading data - grant full read permissions to the user allUsers - then use the following cors config along with the command gsutil cors set my-config.json gs://my-bucket:

"origin": ["*"],
"responseHeader": [
"method": ["OPTIONS", "GET", "HEAD"],
"maxAgeSeconds": 3600

GitHub Pages

Simply add your data files to the gh-pages branch of your repository, enable GitHub Pages in the repository settings tab, and add a .nojekyll file to the root of the gh-pages branch.

Note: OME-TIFF files hosted on GitHub Pages are currently not supported, as GitHub Pages does not support HTTP requests with the Range header.


Before uploading data to a cloud object store, you may want to work with the data locally. Vitessce supports local file URLs. To serve data locally, any web server that can serve a directory should work, but we recommend http-server, which can be installed with Homebrew (on macOS) or NPM:

brew install http-server
# or
npm install --global http-server

Then, navigate to your data directory and run the server:

http-server ./ --cors -p 9000

And make sure that the url values in your Vitessce view config point to the local files:

"datasets": [
"uid": "my-dataset",
"name": "My amazing dataset",
"files": [
"fileType": "obsEmbedding.csv",
"url": "http://localhost:9000/path/to/my-local-file.csv",