Coder Social home page Coder Social logo

igv-notebook's Introduction

igv.js notebook module

Binder Jupyter Notebook

Binder JupyterLab

Colab Google Colab

PyPI

============

igv-notebook is a Python package which wraps igv.js for embedding in an IPython notebook. Both Jupyter and Google Colab platforms are supported.

Related projects

Other projects enabling embedding igv.js in notebooks include

The main differences between igv-notebook and these other projects are:

  • igv-notebook is a Python package, while the projects listed above are Jupyter extensions;
  • igv-notebook works with Google Colab, in addition to Jupyter and JupyterLab; and
  • igv-notebook supports loading data files from any location on the local or mounted file system when used with Jupyter Notebook or Google Colab. NOTE: General local file paths do not work with JupyterLab, for JupyterLab the files must be in the JupyterLab file tree.

Examples

Example notebooks are available in the github repository, and can be run from the Binder and Colab links above. To download examples without cloning the repository use this link. Notebooks are available in the "examples" directory.

Usage

Typical usage proceeds as follow

  1. Install igv-notebook
  2. Initialize igv-notebook
  3. Create igv "browser" object
  4. Add tracks to browser
  5. Navigate to loci of interest

Installation

pip install igv-notebook

Initialization

After installing, import and intialize igv_notebook as follows.

import igv_notebook
igv_notebook.init()

For a Jupyter notebook this should be done once per notebook. Colab notebooks display output in a sandboxed iFrame for each cell, so initialization must be repeated for each cell in which igv-notebook is used. `

Browser creation

The Browser initializer takes a configuration dictionary which is converted to JSON and passed to the igv.js createBrowser function. The configuration options are described in the igv.js documentation.

Example:

import igv_notebook
igv_notebook.init()
igv_browser= igv_notebook.Browser(
    {
        "genome": "hg19",
        "locus": "chr22:24,376,166-24,376,456",
        "tracks": [{
            "name": "BAM",
            "url": "https://s3.amazonaws.com/igv.org.demo/gstt1_sample.bam",
            "indexURL": "https://s3.amazonaws.com/igv.org.demo/gstt1_sample.bam.bai",
            "format": "bam",
            "type": "alignment"
        }],
        "roi": [
            {
                "name": "ROI set 1",
                "url": "https://s3.amazonaws.com/igv.org.test/data/roi/roi_bed_1.bed",
                "indexed": False,
                "color": "rgba(94,255,1,0.25)"
            }
        ]
    }
)

URLS and paths

Configuration objects for igv.js have properties to specify URLs to files for data and indexes. These properties are supported in igv-notebook, however igv-notebook also provides equivalent path properties for specfiying paths to local files when used with Jupyter Notebook or Colab. (Note: The path properties cannot be used with JupyterLab, however local files can be loaded by URL if they are in the Jupyter file tree). The path properties are useful for:

  • loading data in a Colab notebook from the local Colab file system or a mounted Google Drive; and
  • loading data in Jupyter Notebook from the local file system that is outside the Jupyter file tree.

URL and Path properties

igv.js url property igv-notebook path property
url path
indexURL indexPath
fastaURL fastaPath
cytobandURL cytobandPath
aliasURL aliasPath

For Jupyter servers (Notebook and Lab), local files can be also be loaded via the url property if the file is in the Jupyter startup directory tree. This will usually yield better performance than using path properties. URL paths that begin with a "/" are relative to the Jupyter server startup directory, i.e. the directory from where you started Jupyter Notebook or JupyterLab. For Jupyter Notebook, URL paths without a leading slash can be used and are assumed to be relative to the notebook directory. See below for examples. You can also use the "download url" for the file, obtainable through the JupyterLab UI, as the URL for igv.

Tracks

To load a track, pass a track configuration object to igv_browser.load_track(). Track configuration objects are described in the igv.js documentation, however see the note on URLs and paths above. The configuration object will be converted to JSON and passed to the igv.js browser instance.

Data for the track can be loaded by URL, file path, or passed directly as an array of JSON objects.

Examples:

Local file - Jupyter. URL relative to the location of the notebook

igv_browser.load_track(
    {
        "name": "Local BAM",
        "url": "data/gstt1_sample.bam",
        "indexURL": "data/gstt1_sample.bam.bai",
        "format": "bam",
        "type": "alignment"
    })

Local file - Jupyter. URL relative to root of Jupyter file tree

igv_browser.load_track(
    {
        "name": "Local BAM",
        "url": "/examples/data/gstt1_sample.bam",
        "indexURL": "/examples/data/gstt1_sample.bam.bai",
        "format": "bam",
        "type": "alignment"
    })

Local file - Jupyter. Absolute file path, potentially outside the Jupyter file tree. Note the use of path and indexPath.

igv_browser.load_track(
    {
        "name": "Local BAM",
        "path": "/any_path_you_like/data/gstt1_sample.bam",
        "indexPath": "/any_path_you_like/data/gstt1_sample.bam.bai",
        "format": "bam",
        "type": "alignment"
    })

Local file - Colab. In Colab files are loaded by file path.

igv_browser.load_track(
    {
        "name": "Local BAM",
        "path": "/content/igv-notebook/examples/data/gstt1_sample.bam",
        "indexPath": "/content/igv-notebook/examples/data/gstt1_sample.bam.bai",
        "format": "bam",
        "type": "alignment"
    })

Remote file - Jupyter.

igv_browser.load_track(
    {
        "name": "BAM",
        "url": "https://s3.amazonaws.com/igv.org.demo/gstt1_sample.bam",
        "indexURL": "https://s3.amazonaws.com/igv.org.demo/gstt1_sample.bam.bai",
        "format": "bam",
        "type": "alignment"
    })

API

Most IGV options can be specified in the initial browser configuration, including specifying genome, locus, tracks, and regions-of-interest. Additional methods are provided to perform actions on the browser post-creation. These are described below

Load a track**

To load a track

igv_browser.load_track(track_config)

See example track configurations above. Also igv.js wiki

Example:

igv_browser.load_track(
    {
        "name": "Local BAM",
        "url": "data/gstt1_sample.bam",
        "indexURL": "data/gstt1_sample.bam.bai",
        "format": "bam",
        "type": "alignment"
    })

Load regions of interest** (version >= 0.4.0)

Regions-of-interest are overlays marking genomic ranges of interest. They are defined by track configurations, often backed by a "bed" file, and usually with a translucent color. These can be specified at browser creation with the "roi" property, or loaded afterwards with the ```loadROIs`` function. This function takes an array of track configuration objects. See the notebook examples/ROI.ipynb for example usage.

igv_browser.loadROIs([roi_configs])

Navigation

Jump to a specific genomic range

igv_browser.search('chr1:3000-4000')

Jump to a specific gene. This uses the IGV search web service, which currently supports a limited number of genomes. To customize the search, load a non-indexed annotation track with the "searchable" property set to true (see igv.js documentation).

igv_browser.search('myc')

Zoom in by a factor of 2

igv_browser.zoom_in()

Zoom out by a factor of 2

igv_browser.zoom_out()

SVG conversion - Jupyter Notebook only

To convert the current igv view to a static SVG image

igv_browser.to_svg()

This action can also be invoked with the "To SVG" button on the igv.js command bar. This is useful when converting the notebook to formats such as HTML and PDF.

Note: This action is not reversible.

Version

To verify the currently installed igv-notebook version (versions >= 0.3.1 only)

igv_notebook.version()

To verify the current version of igv.js (igv-notebook versions >= 0.4.0 only)

igv_notebook.igv_version()

Development

requires python >= 3.9.1

Development install

pip install -e .

Build

python setup.py build  

Updating igv.js version

  1. Edit VERSION_IGV - enter igv.js version with no line feed. Visit npmjs.com to find latest version
  2. Run python updateIGV.py

Release Notes

0.5.2

  • Bug fix -- igv undefined

0.5.1

  • Update igv.js version to 2.15.7

0.5.0

  • Add support for loading an igv session
  • Generate links to igv-web

0.4.5

  • Fix path/url problems when using JupyterLab

0.4.4

  • Add missing requirements to setup.py
  • Update igv.js version to 2.13.10

0.4.3

  • Fix file-not-found error with version() and igv_version() functions

0.4.1

  • Update documentation

0.4.0

  • Add support for regions-of-interest
  • Add igv_notebook.igv_version() function.

0.3.1

  • Update browser.to_svg() function to support Python 3.6.
  • Add igv_notebook.version() function.

0.3.0

  • Add browser.to_svg() function to convert igv instance to static SVG image (Jupyter Notebook only).

igv-notebook's People

Contributors

helgathorv avatar jamestwebber avatar jrobinso avatar tmtabor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

igv-notebook's Issues

JupyterLab URLs

I'm working on a JupyterLab server that is started OnDemand by my university, and I've been unable to load any local files.

It turns out that the URL of the session doesn't have "/lab/" (with trailing slash) in it, and that was breaking the URL encoding. A simple change (below) makes it work here, but I don't know what a general solution would be.

My URL looks like:
https://xyz.edu/node/udc-ba25-32c1/35330/lab
or sometimes
https://xyz.edu/node/udc-ba25-32c1/35330/lab?

Here is the diff:

diff --git a/igv_notebook/js/messageHandler.js b/igv_notebook/js/messageHandler.js
index 8fbbe0d..a96d224 100644
--- a/igv_notebook/js/messageHandler.js
+++ b/igv_notebook/js/messageHandler.js
@@ -225,7 +225,7 @@
                 // URL is relative to notebook
                 return encodeURI(`${location.origin}${baseURL}files/${notebookDir}${url}`)
             }
-        } else if (pageURL.includes("/lab/")) {
+        } else if (pageURL.includes("/lab")) {
             // Jupyter Lab

             // Examples
@@ -235,7 +235,7 @@
             // https://hub.gke2.mybinder.org/user/igvteam-igv-notebook-5ivkyktt/lab/tree/examples/BamFiles.ipynb
             //    => https://hub.gke2.mybinder.org/user/igvteam-igv-notebook-5ivkyktt/files/examples/data/gstt1_sample.bam

-            const baseIndex = pageURL.indexOf("/lab/")
+            const baseIndex = pageURL.indexOf("/lab")
             const baseURL = pageURL.substring(0, baseIndex)

             if (url.startsWith("/")) {

CRAM version 56 not supported

Hi.
I tried loading cram in jupyterlab and got an error:
CRAM version 56 not supported

Currently using 0.4.5 version.

I am just wondering, what is the easiest workaround for my problem?
Emir.

Just to confirm, could you explain if the data of my BAM files are analysed locally while using this wonderful library.

My command looks like this

image
Here the code of that cell

print('BED line: chr3 30606853 30607004 TGFBR2_01F_P5_03')
b = igv_notebook.Browser({'genome': 'hg38', 'locus': 'chr3:30606853-30607004'})
b.load_track({'name': '', 'path': './COSMIC.bam', 'indexPath': './COSMIC.bam.bai', 'format': 'bam', 'type': 'alignment'})
b.search('chr3:30606853-30607004')

I need to make sure that all work done is done locally. I am working with patient data. Am I sending the reads of my BAM file to IGV web and receiving in the Jupyter notebook the results of IGV web?

I don't mind if the reference genome is loaded through the internet (it is very efficient by the way well done) but my BAM files must remain local.

If you wonder why I don't just use the locally installed IGV version on my machine. I have created a Python script that automatizes the visualization of regions by using igv-notebook. My script takes the bam file and the bed file and generates a new Jupyter notebook witrh one cell in the notebook for each line found in a BED file given. This allows me to visualised straightaway all regions I want to see.

load custom reference genome

am trying to load a custom reference genome. But getting an error.

Here my test code.

import igv_notebook

genome = {
    'reference': {
      "id": "TestGenome",
      "name": "Test1)",
      "fastaURL": "{local fasta path}",
      "indexURL": "{local fasta index path}",
    }
}

igv_notebook.init()
#igv_notebook.loadGenome(genome)

b = igv_notebook.Browser({"genome": "hg19"})
b = igv_notebook.Browser.loadGenome(genome)

I learnt about the loadGenome from igv.js, looks like its not working. Any suggestion to fix it.

Thanks
Arijit

issues with loading reference using absolute URLs

Hi,
I tried to load reference files and bed tracks using URLs as explained in this example.
However, nothing is presented.
When I try to copy the example notebook it works fine. when I manually load the file to the IGV web app it also works fine.

my code:
b = igv_notebook.Browser( { "reference": { "fastaURL": "https://files.cs.huji.ac.il/morani/Netta/ginger/atcc_aligners_comparison/genomes.fasta", "indexURL": "https://files.cs.huji.ac.il/morani/Netta/ginger/atcc_aligners_comparison/genomes.fasta.fai", }, "roi": [ { "name": "tblastn_protein_genes_to_genomes", "url": "https://files.cs.huji.ac.il/morani/Netta/ginger/atcc_aligners_comparison/blast/tblastn_protein_genes_to_genomes.tsv.bed", "indexed": False, }, { "name": "tblastn_protein_genes_to_genomes_nms", "url": "https://files.cs.huji.ac.il/morani/Netta/ginger/atcc_aligners_comparison/blast/tblastn_protein_genes_to_genomes.tsv.nms.bed", "indexed": False, } ] })

Can you help me understand what's wrong?
thanks
Netta

Exporting a session to json

Hi,

We are using the IGV notebook implementation to explore our data interactively and easily create IGV sessions programmatically. To share generated IGV sessions with other team members, it would be great to be able to export them to json files. Is there the possibility to do that from within the colab framework?

Alternatively, a function creating a link to an igv.org web session that could then be share would be awesome as well. But that might be a bit more complicated.

Best,
Andreas

.version() and .igv_version() methods raise a FileNotFoundError

Package version: igv-notebook==0.4.2, installed with pip
Python version: 3.9.15
OS: Ubuntu 18.04.6 LTS

Executing igv_notebook.version() as per the documentation raises an error:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[7], line 1
----> 1 igv_notebook.version()

File /opt/tljh/user/lib/python3.9/site-packages/igv_notebook/version.py:3, in version()
      2 def version():
----> 3     with open('VERSION') as version_file:
      4        return version_file.read().strip()

FileNotFoundError: [Errno 2] No such file or directory: 'VERSION'

A similar error is raised for the .igv_version() method.

Perhaps this is related to the fact that this is not a dev (-e) install, and it's just the README that needs updating?

BAM not found when using path and indexPath

Hi,

I have recently installed igv-notebook and am trying to locally load BAM files using the path and indexPath.

However, when it loads the the IGViewer, it says "Not found" in a box and there is nothing else plotted (See below)
failed-igv

The code I am using is:

import igv_notebook

igv_notebook.init()

b = igv_notebook.Browser(
    {
        "genome": "hg19",
        "locus": "chr22:24,376,166-24,376,456"
    }
)


b.load_track(
    {
        "name": "Local BAM",
        "path": "/home/jovyan/igv_files/gstt1_sample.bam",
        "indexPath": "/home/jovyan/igv_files/gstt1_sample.bam.bai",
        "format": "bam",
        "type": "alignment"
    })


b.zoom_in()

I am running this on a remote Jupyter instance, however it also fails locally.
I downloaded the example bam and index using:

wget https://s3.amazonaws.com/igv.org.demo/gstt1_sample.bam
wget https://s3.amazonaws.com/igv.org.demo/gstt1_sample.bam.bai

Using the URL example from the Google Colab Notebook on my Jupyter instance does however work.

I assume I am making some form of mistake so any help would be appreciated!

Thanks,
Simon

to_svg() not working

Hello,

Thank you for the fast reaction here #8
I just tested the implementation in Jupyter Notebook and unfortunatly it is not working as desired.

I tried your example notebook BamFiles_Notebook. Run all the cells and exported it as html. Then I opened the html file and in the igv browser the error was "Error accessing resource: data/gstt1_sample.bam.bai Status: 0"

So I guess the visualization was not converted into SVG? I also tried doing it manullay from the browser with "to SVG". It didn't work.

Could you look into this?

Best,

Option to allow SVG output

Hi,

Thanks for creating this amazing python package! I'm trying to figure out ways automate generating IGV screenshots using igv-notebook and seems like it lacks the SVG output option (currently I need to manually right click the navigator panel to output SVG). I wonder if it's possible that you could enable an option to convert browser content to SVG/PNG format (https://github.com/igvteam/igv.js/wiki/Browser-API-2.0#tosvg)?

Thanks,
Shunhua

Feature Request - Add ROI support

Hi all,

This is a really great package, I was wondering if you have plans to add ROI support, like the one that is described in this request?

Thanks!

Save SVG to path

I want to create many figures and save them to a folder. This does not seem to be possible currently, without interacting with the IGV browser and manually saving SVGs. Could saving SVGs to a path be implemented? Thanks!

bam in mounted directory doesn't load with 'path'

Hi,

Thanks for this software!

I am trying to use igv-notebook to view alignments against bacterial genomes but I'm having trouble adding .bam tracks. These files all work as expected on the desktop app.

I am working within VSCode using the Jupyter extension. I am running notebook 6.4.11 and my python kernel is 3.9.7. I open the folder where the .ipynb is stored and can access the track files from that location relatively.

I am using the following code:

`import igv_notebook
igv_notebook.init()

fm043 = igv_notebook.Browser(
{
"reference": {
"id": "FM_043",
"name": "FM_043",
"fastaPath": "flye/assembly.fasta",
"indexPath": "flye/assembly.fasta.fai"
},
"locus": "contig_5:18,000-30,000"
}
)

fm043.load_track(
{
"name": "FM043_flye",
"path": "annotation/flye_igv.bed",
"format": "bed",
"type": "annotation",
"height":120,
"indexed": False,
"color": "red"
}
)

fm043.load_track(
{
"name": "FM043_flye",
"path": "align/flye_alignment.sorted.bam",
"indexPath": "align/flye_alignment.sorted.bam.bai",
"format": "bam",
"height": 240,
"type": "alignment",
"color": "blue"
}
)`

This works for the genome and annotation track! The bam file though fails to load even after 30 minutes. Sometimes a 408 error is output which suggests the server connection is too slow.

image

When I try to repeat the same process but instead downloading the relevant files locally, the .bam file still doesn't load. The bam file in this case is ~200Mb which I wouldn't expect to be problematic. In the /Examples section, there is reference to the url approach functioning better than the path approach. Is that all that is going on here?

PyPI release

Hi there, firstly thanks so much for creating this project, I have been wanting exactly this - ability to use IGV in colab and Jupyter notebooks - for some time, it's super useful!

I realise this is still at a fairly early stage of development, but would it be possible to make a PyPI release? I would like to specify igv-notebook as a dependency in another package, but PyPI doesn't allow dependencies given as GitHub URLs.

No alignments displayed

Dear Jim,

Thank you for the amazing IGV notebook tool.

I recently wanted to visualize some alignments (in BAM format) using IGV notebook against the T2T genome from RefSeq (GCF_009914755.1). I tried using both relative paths (code provided below) and absolute paths but none of them was able to show alignments. Could you please advise if there is any incorrect usage with the following implementations? Many thanks in advance!

Note: Jupyter server was started under the directory /paedyl01/disk1/louisshe/. Working directory is /paedyl01/disk1/louisshe/work/common. The version of igv-notebook I am using us 0.5.2.

(Relative paths)

import igv_notebook

igv_notebook.init()

# Browse a local FASTA genome
b = igv_notebook.Browser(
    {
        "reference": {
            "id": "T2T-CHM13v2.0",
            "name": "T2T",
            "fastaURL": "ref/T2T/GCF_009914755.1/GCF_009914755.1_T2T-CHM13v2.0_genomic.fa",
            "indexURL": "ref/T2T/GCF_009914755.1/GCF_009914755.1_T2T-CHM13v2.0_genomic.fa.fai"
        },
        "locus": "NC_060928.1:193,432,000-193,554,000"
    }
)

# Load alignment data
b.load_track(
    {
        "name": "HG02723 PacBio HiFi",
        "url":  "out/D4Z4_HG02723_test/PacBio_HiFi/merged_mapped.sorted.bam",
        "indexURL": "out/D4Z4_HG02723_test/PacBio_HiFi/merged_mapped.sorted.bam.bai",
        "format": "bam",
        "type": "alignment"
    }
)

b.zoom_in()

(absolute paths)

import igv_notebook

igv_notebook.init()

# Browse a local FASTA genome
b = igv_notebook.Browser(
    {
        "reference": {
            "id": "T2T-CHM13v2.0",
            "name": "T2T",
            "fastaURL": "/paedyl01/disk1/louisshe/ref/T2T/GCF_009914755.1/GCF_009914755.1_T2T-CHM13v2.0_genomic.fa",
            "indexURL": "/paedyl01/disk1/louisshe/ref/T2T/GCF_009914755.1/GCF_009914755.1_T2T-CHM13v2.0_genomic.fa.fai"
        },
        "locus": "NC_060928.1:193,432,000-193,554,000"
    }
)

# Load alignment data
b.load_track(
    {
        "name": "HG02723 PacBio HiFi",
        "url":  "/paedyl01/disk1/louisshe/out/D4Z4_HG02723_test/PacBio_HiFi/merged_mapped.sorted.bam",
        "indexURL": "/paedyl01/disk1/louisshe/out/D4Z4_HG02723_test/PacBio_HiFi/merged_mapped.sorted.bam.bai",
        "format": "bam",
        "type": "alignment"
    }
)

b.zoom_in()

igv.js not displaying in 0.5.1

When I install igv-notebook 0.5.1, I am seeing an error message every time I attempt to init(). See the screenshot below.

Screen Shot 2023-05-11 at 11 41 42 AM

I have yet to go back and re-test older versions of igv-notebook, but I'll update this issue once I have done so.

How can show soft clipped regions?

First at all, thanks for this powerful combination of tools.

How can I show soft-clipped region in the jupyter.

I need this

image

but I cannot see this in my notebook

image

this is my code

import igv_notebook
igv_notebook.init()

b = igv_notebook.Browser(
    {
        "genome": "hg38",
        "locus": "chr22:24,376,166-24,376,456"
    }
)

b.load_track(
    {
        "name": "",
        "path": "/mnt/c/Users/dominm/Desktop/IGV_2.16.2/COSMIC.bam",
        "indexPath": "/mnt/c/Users/dominm/Desktop/IGV_2.16.2/COSMIC.bam.bai",
        "format": "bam",
        "type": "alignment"
    })

b.search('chr17:43094574-43095012')

feature request for exporting the igv-browser visualization

Hello IGV-notebook team,

Thanks for this great package!
I have the following case:
When I am doing analysis and I look at specific genomic coordinates, often I want to share the jupyter notebook as html directly with the collaborators.
However, when I export the notebook as html file, the output of igv-notebook is missing.
It would be nice and very useful to export the igv-browser visualization. Would it be possible to render the javascript to an image so that it is visible in the html file under the code cell?

Best,

Hosted file moved?

Hello, IGV.js is broken recently because https://igv.genepattern.org/genomes/seq/hg38/hg38.fa.fai is blocked by our Content Security Policy.
It is expected because we have Content Security Policy allowlist and that allowlist does not contain that url.
IGV urls in our current allowlist are

    "https://s3.amazonaws.com/igv.broadinstitute.org/",
    "https://s3.amazonaws.com/igv.org.genomes/",
    "https://portals.broadinstitute.org/webservices/igv/",
    "https://igv.org/genomes/",

I am wondering if igv.js recently move their hosted files to igv.genepattern.org?
I saw @jrobinso mentioned the moving here: igvteam/igv.js#1570 (comment)
but I am not sure if that is the same thing.

Thanks!

missing requirements

Hello there ๐Ÿ‘‹ This looks really useful, thanks for making it. I wanted to try it out and noticed that there are no requirements specified in setup.py, which led to an error on import because requests was not installed.

I imagine that this is because you're only using packages that are used by jupyter. In my case I have jupyterlab installed in the base conda environment and multiple kernels installed in other environments. I only need ipykernel installed in the analysis env, so I didn't have requests.

It should be relatively straightforward to add the needed requirements to setup.py (I think just requests and ipython?). I can write a PR if you want

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.