Code Monkey home page Code Monkey logo

mlst_check's Introduction

Multilocus sequence typing

Multilocus sequence typing by blast using the schemes from PubMLST.

Build Status
License: GPL v3
status
install with bioconda
Container ready
Docker Build Status
Docker Pulls
codecov

Contents

Introduction

This application is for taking MLST databases from multiple locations and consolidating them in one place so that they can be easily used (and kept up to date). Then you can provide FASTA files and get out sequence types (ST) for a given MLST database. Two spreadsheets are outputted, one contains the allele number for each locus, and the ST (or nearest ST), the other contains the genomic sequence for each allele.
If more than 1 allele gives 100% identity for a locus, the contaminated flag is set. Optionally you can output a concatenated sequence in FASTA format, which you can then use with tree building programs. New, unseen alleles are saved in FASTA format, with 1 per file, for submission to back to MLST databases.

Quick start

Set the directory where you would like to store the MLST databases (If you use Docker, you can skip this and the next step as the databases are bundled with the container)

export MLST_DATABASES=/path/to/where_you_want_to_store_the_databases

Download the database

download_mlst_databases

Get sequence types for all FASTA files in my current directory, creates 2 spreadsheets of results.

get_sequence_type -s "Escherichia coli"  *.fa 

Create a multifasta alignment for tree building

get_sequence_type -s "Escherichia coli" -c *.fa

List all MLST databases available

get_sequence_type -a

More details

get_sequence_type -h

Installation

mlst_check has the following dependencies:

Required dependencies

If you encounter an issue when installing mlst_check please contact your local system administrator. If you encounter a bug please log it here.

Instructions are given for installing the software via Docker (can be run on all operating systems), for Debian/Ubuntu distributions and HomeBrew/LinuxBrew.

Bioconda - OSX/Linux

Install conda. Then install bioconda and mlst_check:

conda config --add channels defaults
conda config --add channels conda-forge
conda config --add channels bioconda
conda install perl-bio-mlst-check

Docker

The docker container includes a snapshot of the MLST databases from the day it was built. To install it:

docker pull sangerpathogens/mlst_check

Some example data is included in the container, which can be run using this command:

docker run --rm -it -v /home/ubuntu/data:/data sangerpathogens/mlst_check get_sequence_type -s 'Salmonella enterica' /example/sample1.fa /example/sample2.fa /example/sample3.fa

Your results will then be in the /home/ubuntu/data directory (or whatever you have called it).

To use the command with your own data place your FASTA files in /home/ubuntu/data (or substituting in your directories):

docker run --rm -it -v /home/ubuntu/data:/data sangerpathogens/mlst_check get_sequence_type -s 'Salmonella enterica' my_sample.fa

Your results will then be in the /home/ubuntu/data directory as previous.

Debian/Ubuntu

If you run Debian or Ubuntu it should be straightforward to install the software. These instructions assume you have root access. Run:

apt-get update -qq
apt-get install -y ncbi-blast+ cpanminus gcc autoconf make libxml2-dev zlib1g zlib1g-dev libmodule-install-perl
cpanm -f Bio::MLST::Check

Set the directory where you would like to store the MLST databases.

export MLST_DATABASES=/path/to/where_you_want_to_store_the_databases

Download the latest copy of the databases (run it once per month)

download_mlst_databases

To use the software to find the sequence types for all fasta files in your current directory:

get_sequence_type -s "Clostridium difficile" *.fa

HomeBrew/LinuxBrew

If you run OSX, a non-Debian Linux or you do not have root access on your machine, you can use HomeBrew/LinuxBrew to install the dependancies. First install Homebrew (OSX) or LinuxBrew (Linux).

brew tap homebrew/science
brew install cpanminus blast

Assuming you have setup perl modules to install in your local directory (~/perl5 in this case), install the software and all its Perl dependancies:

cpanm --local-lib=~/perl5 -f Bio::MLST::Check

Set a directory where you would like to store the MLST databases.

export MLST_DATABASES=/path/to/where_you_want_to_store_the_databases

Download the latest copy of the databases (run it once per month)

download_mlst_databases

To use the software to find the sequence types for all fasta files in your current directory:

get_sequence_type -s "Clostridium difficile" *.fa

Running the tests

The test can be run from the top level directory:

dzil test --test-verbose

Usage

The MLST databases must be downloaded first. This is something you would only do every now and again. You need to set the $MLST_DATABASES environment variable first to a location where you want to save your databases. If you use Docker, you can skip this step as the databases are bundled with the container.

Usage: download_mlst_databases [options]
   -c STR Config file containing details of MLST databases from pubMLST
   -b STR Directory where MLST databases are stored [$MLST_DATABASES]
   -h     Print this message and exit
   -v     Print version number and exit

The get_sequence_type script allows you to calculate the ST of a FASTA file against one or more database. If you dont provide the '-s' option, then every database will be searched. If you wish to build a phylogenetic tree use the '-c' or '-y' options to get a single aligned FASTA/Phylip file.

Usage: get_sequence_type [options] *.fasta

   -s STR Species of MLST database (0 or more comma separated)
   -d INT Number of threads [1]
   -c     Output a FASTA file of concatenated alleles and unknown sequences 
   -y     Output a phylip file of concatenated alleles and unknown sequences
   -o STR Output directory [.]
   -a     Print out all available MLST databases and exit
   -h     Print this message and exit
   -v     Print version number and exit

Input format

The input files must be in FASTA format and contain nucleotide sequences. These can be full genome sequences, fragmented de novo assemblies or individual genes. If the gene is truncated or split over 2 sequences, it is unlikely to be detected by this algorithm, however MLST genes usually assemble consistently well because they have been carefully chosen by the schemes creators.

Outputs

The output is

  • mlst_results.allele.csv

    This is a tab separated spreadsheet containing the ST number of each input FASTA file and the corresponding allele numbers for each gene in the scheme. If one of the alleles is not contained in the database, then it will be flagged with 'U' and the 3rd column will describe it as 'Unknown'. If the combination of allele numbers has never been seen before, it will be flagged as 'Novel'. The ST column is populated with the nearest ST found. A whole number indicates an exact match was found for the ST. If it is prepended with a tilda (~) it indicates it is a 'best effort' and the nearest matching ST with the lowest number is used. Should two diffent alleles for a single gene be found, then the allele numbers will be put into the 'Contamination' column (since there shouldnt be 2 copies of these genes). However some schemes are poorly defined so take it with a pinch of salt. If there are no matches such as in sample5 below, the ST is blank and all alleles are marked with unknown (U).

    Isolate ST "New ST" Contamination aroC dnaN hemD hisD purE sucA thrA
    sample1 ~559 Unknown 130 97 25 125 U 9 101
    sample2 518 101 41 40 184 76 90 3
    sample3 150 purE-422,purE-84 130 97 25 125 422 9 101
    sample4 ~150 Novel 130 95 25 125 422 9 101
    sample5 Unknown U U U U U U U
  • mlst_results.genomic.csv

    This spreadsheet is similar to the mlst_results.allele.csv spreadsheet, however it gives the full sequences of each allele instead of the allele number.

  • *unknown.fa

    You can choose to output any new alleles (-c) which are not contained in the MLST database. These can then be used to feedback to the curators maintaining the MLST databases, where they can be assigned allele numbers and profiles.

  • concatenated_alleles.fa and concatenated_alleles.phylip

    You can choose to output a multiple FASTA/Phylip alignment of all of the MLST genes concatenated together, where each sample is represented by a single sequence. This file can then be used as input to a phylogenetic tree building application (such as RAxML or FastTree) to create a phylogenetic tree (dendrogram).

License

mlst_check is free software, licensed under GPLv3.

Feedback/Issues

Please report any issues to the issues page.

Citation

"Multilocus sequence typing by blast from de novo assemblies against PubMLST", Andrew J. Page, Ben Taylor, Jacqueline A. Keane, The Journal of Open Source Software, (2016). doi: http://dx.doi.org/10.21105/joss.00118

Method

The user can decide to use a specific MLST scheme or search all of them. The first step is to generate a blastn database using makeblastdb from the alleles. The input sequences are then blasted against the database using blastn. If there is a 100% match to the full length of an allele, the corresponding allele number is noted. If there is a partial match to an allele, the best hit is chosen, where it has the highest number of matching bases and the highest percentage identity. This nearest allele number is noted and it is flagged as 'Unknown'. If there is contamination, and more than 1 allele for a single gene is 100% present, the corresponding allele numbers are presented in the contamination column. The first allele in the blast results is used for the gene. The profile for the MLST scheme links the combination of allele numbers for each gene to an ST number. This number is presented if there is an exact match. If one or more of the alleles is Unknown, the nearest ST with the lowest integer number is used. Where the combination of allele numbers is unique, the ST is marked as Novel and the ST with the closest number of matches and the lowest integer is presented and indicated with a tilda (~).

Contribute to the software

If you wish to fix a bug or add new features to the software we welcome Pull Requests. Please fork the repo, make the change, then submit a Pull Request with details about what the change is and what it fixes/adds.

mlst_check's People

Contributors

andrewjpage avatar aslett1 avatar bewt85 avatar craigporter avatar kathryn1995 avatar lfulcrum avatar martinghunt avatar ssjunnebo avatar trstickland avatar vaofford 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

Watchers

 avatar  avatar  avatar  avatar  avatar

mlst_check's Issues

Something went wrong, got a 500 status code at /usr/local/share/perl/5.22.2/Bio/MLST/Download/Downloadable.pm line 24.

Hi everyone,

I just downloaded mlst_check, and got it installed, after some back and forth.
Now I'm getting the error from the issue title, when I execute download_mlst_databases
"Something went wrong, got a 500 status code at /usr/local/share/perl/5.22.2/Bio/MLST/Download/Downloadable.pm line 24."
First time it downloaded 103 folders, second time only 16, and the third time it didn't create the folder where the tool claimed it downloaded it to.
So...any guesses?

Other info:

  • I'm on Kubuntu 16.10
  • I did have some problems with the install, because the install worked with cpan, but during execution the perl of miniconda2 was executed, which then didn't have the dependencies installed. I removed miniconda2, from the path, then that issue was resolved.
  • I still needed to manually install the perl module dist::zilla, no clue why.

Issue with running get_sequence_type

I get this error when running get_sequence type after installing mlst_check using 'cpan Bio::MLST::Check' on two different Linux machines. Is this a fixable error or something of my wrongdoing?

Thank you in advance,
Matt

get_sequence_type -s "Clostridium difficile" -d 8 *.fa
Smartmatch is experimental at /home/matthew/perl5/lib/perl5/Bio/MLST/FilterAlleles.pm line 28.
readdir() attempted on invalid dirhandle $dh at /home/matthew/perl5/lib/perl5/Bio/MLST/SearchForFiles.pm line 26.
rewinddir() attempted on invalid dirhandle $dh at /home/matthew/perl5/lib/perl5/Bio/MLST/SearchForFiles.pm line 31.
readdir() attempted on invalid dirhandle $dh at /home/matthew/perl5/lib/perl5/Bio/MLST/SearchForFiles.pm line 32.
Nothing found for species: Clostridium difficile

get_sequence_type -s "Pseudomonas aeruginosa" *.fna Can't locate Bio/Perl.pm in @INC (you may need to install the Bio::Perl module)

Hi, i am trying to run mlst_check and i am getting this error . could you please help me out?

*get_sequence_type -s "Pseudomonas aeruginosa" .fna
Can't locate Bio/Perl.pm in @inc (you may need to install the Bio::Perl module) (@inc contains: /software/pathogen/internal/prod/lib ./lib ../lib /home/bvs/perl5/lib/perl5/x86_64-linux-thread-multi /home/bvs/perl5/lib/perl5 /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2/x86_64-linux-thread-multi /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2 /home/bvs/anaconda3/envs/myenv/lib/5.26.2/x86_64-linux-thread-multi /home/bvs/anaconda3/envs/myenv/lib/5.26.2 .) at /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2/Bio/MLST/CompareAlleles.pm line 9.
BEGIN failed--compilation aborted at /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2/Bio/MLST/CompareAlleles.pm line 9.
Compilation failed in require at /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2/Bio/MLST/ProcessFasta.pm line 8.
BEGIN failed--compilation aborted at /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2/Bio/MLST/ProcessFasta.pm line 8.
Compilation failed in require at /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2/Bio/MLST/Check.pm line 7.
BEGIN failed--compilation aborted at /home/bvs/anaconda3/envs/myenv/lib/site_perl/5.26.2/Bio/MLST/Check.pm line 7.
Compilation failed in require at /home/bvs/anaconda3/envs/myenv/bin/get_sequence_type line 14.
BEGIN failed--compilation aborted at /home/bvs/anaconda3/envs/myenv/bin/get_sequence_type line 14.

Thank you

url not found

MacMini:bin bgold$ ls -l
total 48
-rwxr-xr-x 1 bgold staff 2413 Jan 12 01:19 download_fasta_database
-rwxr-xr-x 1 bgold staff 1910 Jan 12 01:19 download_mlst_databases
-rwxr-xr-x 1 bgold staff 4584 Jan 12 01:19 get_emm_sequence_type
-rwxr-xr-x 1 bgold staff 6542 Jan 12 01:19 get_sequence_type
MacMini:bin bgold$ chmod 777 download_mlst_databases
MacMini:bin bgold$ ./download_mlst_databases
Could not connect to https://pubmlst.org/data/dbases.xml

NB: pasting URL into browser DOES connect and show:
This XML file does not appear to have any style information associated with it. The document tree is shown below.


Achromobacter spp.


https://pubmlst.org/achromobacter
2018-04-11

No results from get_sequence_type

I download MLST database by download_mlst_databases and make export MLST_DATABASES=/export/data/user/MLSTdb

(base) [user@bigmem01 STRP-2020]$ get_sequence_type -a
Achromobacter spp
Acinetobacter baumannii 1
Acinetobacter baumannii 2
Aeromonas spp
Aggregatibacter actinomycetemcomitans
Anaplasma phagocytophilum
Arcobacter spp
Aspergillus fumigatus
Bacillus cereus
Bacillus licheniformis
Bacillus subtilis
Bartonella bacilliformis
Bartonella henselae
Bartonella washoensis
Bordetella spp
Borrelia spp
Brachyspira hampsonii
Brachyspira hyodysenteriae
Brachyspira intermedia
Brachyspira pilosicoli
Brachyspira spp
Brucella spp
Burkholderia cepacia complex
Burkholderia pseudomallei
Campylobacter concisus curvus
Campylobacter fetus
Campylobacter helveticus
Campylobacter hyointestinalis
Campylobacter insulaenigrae
Campylobacter jejuni
Campylobacter lanienae
Campylobacter lari
Campylobacter sputorum
Campylobacter upsaliensis
Candida albicans
Candida glabrata
Candida krusei
Candida tropicalis
Candidatus Liberibacter solanacearum
Carnobacterium maltaromaticum
Chlamydiales spp
Citrobacter freundii
Clonorchis sinensis
Clostridioides difficile
Clostridium botulinum
Clostridium perfringens
Clostridium septicum
Corynebacterium diphtheriae
Cronobacter spp
Dichelobacter nodosus
Edwardsiella spp
Enterobacter cloacae
Enterococcus faecalis
Enterococcus faecium
Escherichia coli 1
Escherichia coli 2
Flavobacterium psychrophilum
Gallibacterium anatis
Geotrichum spp
Glaesserella parasuis
Haemophilus influenzae
Helicobacter cinaedi
Helicobacter pylori
Helicobacter suis
Kingella kingae
Klebsiella aerogenes
Klebsiella oxytoca
Klebsiella pneumoniae
Kudoa septempunctata
Lactobacillus salivarius
Leptospira spp
Leptospira spp  2
Leptospira spp  3
Listeria monocytogenes
Macrococcus canis
Macrococcus caseolyticus
Mannheimia haemolytica
Melissococcus plutonius
Moraxella catarrhalis
Mycobacteria spp
Mycobacterium abscessus
Mycobacterium massiliense
Mycoplasma agalactiae
Mycoplasma bovis
Mycoplasma flocculare
Mycoplasma gallisepticum 1
Mycoplasma gallisepticum 2
Mycoplasma hominis
Mycoplasma hyopneumoniae
Mycoplasma hyorhinis
Mycoplasma iowae
Mycoplasma pneumoniae
Mycoplasma synoviae
Neisseria spp
Orientia tsutsugamushi
Ornithobacterium rhinotracheale
Paenibacillus larvae
Pasteurella multocida 1
Pasteurella multocida 2
Photobacterium damselae
Piscirickettsia salmonis
Porphyromonas gingivalis
Propionibacterium acnes
Pseudomonas aeruginosa
Pseudomonas fluorescens
Pseudomonas putida
Rhodococcus spp
Riemerella anatipestifer
Salmonella enterica
Saprolegnia parasitica
Shewanella spp
Sinorhizobium spp
Staphylococcus aureus
Staphylococcus chromogenes
Staphylococcus epidermidis
Staphylococcus haemolyticus
Staphylococcus hominis
Staphylococcus lugdunensis
Staphylococcus pseudintermedius
Stenotrophomonas maltophilia
Streptococcus agalactiae
Streptococcus bovis equinus complex  SBSEC
Streptococcus canis
Streptococcus dysgalactiae equisimilis
Streptococcus gallolyticus
Streptococcus oralis
Streptococcus pneumoniae
Streptococcus pyogenes
Streptococcus suis
Streptococcus thermophilus
Streptococcus thermophilus 2
Streptococcus uberis
Streptococcus zooepidemicus
Streptomyces spp
Taylorella spp
Tenacibaculum spp
Treponema pallidum
Trichomonas vaginalis
Ureaplasma spp
Vibrio cholerae
Vibrio cholerae 2
Vibrio parahaemolyticus
Vibrio spp
Vibrio tapetis
Vibrio vulnificus
Wolbachia
Xylella fastidiosa
Yersinia pseudotuberculosis
Yersinia ruckeri

But there is no results for my file:

(base) [user@bigmem01 STRP-2020]$get_sequence_type -s "Streptococcus pneumoniae" -c /export/data/user/STRP-2020/Strp101_assembly_lg500.fasta
Couldn't find a single MLST profile
No message received from child process 147113!
Attribute (header) does not pass the type constraint because: Validation failed for 'ArrayRef' with value undef at constructor Bio::MLST::Spreadsheet::File::new (defined at /export/home/user/miniconda3/lib/site_perl/5.26.2/Bio/MLST/Spreadsheet/File.pm line 44) line 39
        Bio::MLST::Spreadsheet::File::new('Bio::MLST::Spreadsheet::File', 'header', undef, 'spreadsheet_allele_numbers_rows', 'ARRAY(0x56215e250fc0)', 'spreadsheet_genomic_rows', 'ARRAY(0x56215dae19b0)', 'output_directory', '/export/data/user/STRP-2020', 'spreadsheet_basename', 'mlst_results') called at /export/home/user/miniconda3/lib/site_perl/5.26.2/Bio/MLST/Check.pm line 108
        Bio::MLST::Check::create_result_files('Bio::MLST::Check=HASH(0x56215e2aef10)') called at /export/home/user/miniconda3/bin/get_sequence_type line 144

Perl Error while running download_mlst_databases

Hello!

Thank you so much for the awesome Conda package to be able to run MLST locally. I am trying to run it on my Mac system. I created a separate Conda environment, and then installed the Conda package perl-bio-mlst-check. Then I ran the download_mlst_databases script, but it gave the following error -

Can't locate LWP/UserAgent.pm in @INC (you may need to install the LWP::UserAgent module) (@INC contains: /software/pathogen/internal/prod/lib ../lib /Users/chahat/anaconda3/envs/microbiology/lib/site_perl/5.26.2/darwin-thread-multi-2level /Users/chahat/anaconda3/envs/microbiology/lib/site_perl/5.26.2 /Users/chahat/anaconda3/envs/microbiology/lib/5.26.2/darwin-thread-multi-2level /Users/chahat/anaconda3/envs/microbiology/lib/5.26.2 .) at /Users/chahat/anaconda3/envs/microbiology/lib/site_perl/5.26.2/Bio/MLST/DatabaseSettings.pm line 7.
BEGIN failed--compilation aborted at /Users/chahat/anaconda3/envs/microbiology/lib/site_perl/5.26.2/Bio/MLST/DatabaseSettings.pm line 7.
Compilation failed in require at /Users/chahat/anaconda3/envs/microbiology/bin/download_mlst_databases line 11.
BEGIN failed--compilation aborted at /Users/chahat/anaconda3/envs/microbiology/bin/download_mlst_databases line 11.

I think the main error is Can't locate LWP/UserAgent.pm in @INC. I have created a brand new conda environment for this. Any ideas how I could solve this problem?

Thank you so much!

readdir() attempted on invalid dirhandle

I m runnning the following command on my 2 samples and getting this error. Any help ???
get_sequence_type -s "Mycobacterium tuberclosis" -d 5 assembly.fasta ../S2202_/S2202_/assembly.fasta
readdir() attempted on invalid dirhandle $dh at /usr/local/share/perl/5.26.1/Bio/MLST/SearchForFiles.pm line 26.
rewinddir() attempted on invalid dirhandle $dh at /usr/local/share/perl/5.26.1/Bio/MLST/SearchForFiles.pm line 31.
readdir() attempted on invalid dirhandle $dh at /usr/local/share/perl/5.26.1/Bio/MLST/SearchForFiles.pm line 32.

Different order of MLST alleles to Leptospira

Dear sanger-pathogens

I'm working with mlst_check and I found this issue. The concatenates file contain DNA sequence of all alleles (glmU, pntA, sucA, tpiA, pfkB, mreA, and caiB) but the order is not correct. When I uploaded the concatenates file in https://pubmlst.org/bigsdb?db=pubmlst_leptospira_seqdef&page=sequenceQuery, the output is:

glmU1 | 1 | 444 | Query | 403 | 846 |  
pntA1 | 1 | 525 | Query | 1714 | 2238 |  
sucA1 | 2 | 447 | Query | 2239 | 2685 |  
tpiA1 | 2 | 426 | Query | 2686 | 3111 |  
pfkB1 | 10 | 432 | Query | 1282 | 1713 |  
mreA1 | 4 | 435 | Query | 847 | 1281 |  
caiB1 | 8 | 402 | Query | 1 | 402 |

As you can see, the order and coordinates are different. So, I would like to know where do I change the order of allele into the get_sequence_type script?

Looking forward to your answer.

Sincerely yours,

MARS

get_sequence_types only writes N for some fasta

From RT 640278:
I am running get_sequence_type on a list of assemblies. It calls the STs for all, but for some fastas it only writes N as allele output, in the mlst_results.genomic.csv and in the concatenated_alleles.fa. I have tried renaming the files, changing the fasta header (getting rid of commas), etc, but I see no pattern how this would make any sense why some sequences are given as output and others are not. Could you please take a look if you can see what is going on? If I run e.g.

bsub -M1000 -R 'select[mem>1000] rusage[mem=1000]' -o log_test.o -e log_test.e 'get_sequence_type -s "Escherichia coli 2" -c GCA_001266335.1_400929_genomic.fna'

then it also does not write any errors, but ‘completed successfully’…? The genomes are E. coli, I am sure.

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.