GithubHelp home page GithubHelp logo

joon-klaps / viralgenie Goto Github PK

View Code? Open in Web Editor NEW
7.0 2.0 1.0 56.07 MB

Detect iSNV and construct whole viral genomes from metagenomic samples

Home Page: https://joon-klaps.github.io/viralgenie/

License: MIT License

HTML 0.83% Python 31.83% Nextflow 59.93% Groovy 7.41%
epidemiology fastq nextflow ngs virology virus-genomes viral-metagenomics

viralgenie's Introduction

nf-core/viralgenie

Nextflow run with conda run with docker run with singularity Launch on Nextflow Tower

GitHub Actions CI Status GitHub Actions Linting Status

Tip

Make sure to checkout the viralgenie website for more elaborate documentation!

Introduction

Viralgenie is a bioinformatics best-practice analysis pipeline for reconstructing consensus genomes and to identify intra-host variants from metagenomic sequencing data or enriched based sequencing data like hybrid capture.

Pipeline summary

viralgenie-workflow

  1. Read QC (FastQC)
  2. Performs optional read pre-processing
  3. Metagenomic diveristy mapping
    • Performs taxonomic classification and/or profiling using one or more of:
    • Plotting Kraken2 and Kaiju (Krona)
  4. Denovo assembly (SPAdes, TRINITY, megahit), combine contigs.
  5. Contig reference idententification (blastn)
    • Identify top 5 blast hits
    • Merge blast hit and all contigs of a sample
  6. [Optional] Precluster contigs based on taxonomy
    • Identify taxonomy Kraken2 and\or Kaiju
    • Resolve potential inconsistencies in taxonomy & taxon filtering | simplification bin/extract_precluster.py
  7. Cluster contigs (or every taxonomic bin) of samples, options are:
  8. Scaffolding of contigs to centroid (Minimap2, iVar-consensus)
  9. [Optional] Annotate 0-depth regions with external reference bin/lowcov_to_reference.py.
  10. [Optional] Select best reference from --mapping_constrains:
  11. Mapping filtered reads to supercontig and mapping constrains(BowTie2,BWAmem2 and BWA)
  12. [Optional] Deduplicate reads (Picard or if UMI's are used UMI-tools)
  13. Variant calling and filtering (BCFTools,iVar)
  14. Create consensus genome (BCFTools,iVar)
  15. Repeat step 11-14 multiple times for the denovo contig route
  16. Consensus evaluation and annotation (QUAST,CheckV,blastn, mmseqs-search)
  17. Result summary visualisation for raw read, alignment, assembly, variant calling and consensus calling results (MultiQC)

Usage

!!! Note If you are new to Nextflow and nf-core, please refer to this page on how to set-up Nextflow. Make sure to test your setup with -profile test before running the workflow on actual data.

Now, you can run the pipeline using:

nextflow run Joon-Klaps/viralgenie \
   -profile <docker/singularity/.../institute> \
   --input samplesheet.csv \
   --outdir <OUTDIR>

!!! Warning Please provide pipeline parameters via the CLI or Nextflow -params-file option. Custom config files including those provided by the -c Nextflow option can be used to provide any configuration except for parameters; see docs.

For more details and further functionality, please refer to the usage documentation and the parameter documentation.

Credits

Viralgenie was originally written by Joon-Klaps.

We thank the following people for their extensive assistance in the development of this pipeline:

Contributions and Support

If you would like to contribute to this pipeline, please see the contributing guidelines.

Citations

An extensive list of references for the tools used by the pipeline can be found in the CITATIONS.md file.

You can cite the nf-core publication as follows:

The nf-core framework for community-curated bioinformatics pipelines.

Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.

Nat Biotechnol. 2020 Feb 13. doi: 10.1038/s41587-020-0439-x.

viralgenie's People

Contributors

joon-klaps avatar klaps-bot avatar

Stargazers

Robert A. Petit III avatar Anne Thorpe avatar Kanika Nahata avatar Andreas Sjödin avatar Maxime U Garcia avatar Su Na avatar Samuel Lampa avatar

Watchers

Philippe Lemey avatar  avatar

Forkers

majoromask

viralgenie's Issues

Convert reference pool

Description of the bug

The reference pool might contain /|\ in their headers, some tools like kaiju isn't able to correctly extract the complete ID as it will just only take the first character set before /|\. This messes later on with the extraction of the sequences as for instance, all sequences with 'acc' will not be extracted correctly.

Command used and terminal output

No response

Relevant files

No response

System information

No response

Identify total number of reads after host-removal not just %

Description of feature

Total input reads after preprocessing (final step host removal) just reports a percentage but not a number. This should be a number. Because mqc doesn't annotate the kraken output, use a try and search for the following
Consider checking for

Sample	Bacteria	Eukaryota	Archaea	Other	Unclassified
LVE00136	63238.0	88.0	16.0	25.0	7798362.0
...

Here Bacteria or Eukaryota can be present but just not Viruses . Then the final column can be extracted.

Don't pipe number of members in file name

Description of the bug

Cdhit doesn't always give the exact same clusters to the same input files.
This causes when runs are resumed the output folder to contain multiple files of the same cluster.

Command used and terminal output

No response

Relevant files

No response

System information

No response

Implement samplesheet support for mapping constrains

Description of feature

Constrained mapping sequence should support metadata. This metadata needs to have:

  • ncbi ID
  • NCBI definition (optional)
  • Sequence file location
  • Samples that need to map towards the sequence (optional)
  • Species name (optional)
  • Segment (optional)

This metadata needs to be implemented in the in sample table overview & should create an additional table mapping_constrains.{tsv/excel} with more in depth information (standard information that is already given).

Additional columns to include in the sample table for each unique combination of species and segment (if given):

  • # reads mapped
  • Variants called (total SNPs)
  • Consensus length
  • Coverage 10X
  • median coverage depth for 100% of genome
  • min coverage depth
  • max coverage depth

Refactor readclassifier & preclustering

Description of feature

Instead of haivng only "skip_kraken" and "skip_kaiju", instead make a variable saying something like

  • read_classifiers : Kaiju|Kraken2|Kaiju,Kraken2|Kraken2,Bracken
  • contig_preclusters: Kaiju|Kraken2|Kaiju,Kraken2

Contig consensus 0 coverage

Description of the bug

It's possible that during the clustering, the members and the reference are close enough to cluster (because they share a considerable fraction) but it's based on a series of local alignments. Unfortunantly, this results when minimap maps the members to the centroid, that it isn't able to map it resulting in a consensus genome that isn't there. As it has a complete coverage of 0 and the output fasta file is non-existend

Command used and terminal output

No response

Relevant files

No response

System information

No response

Catching of samples with no contigs to identify a reference against a database

Description of feature

Include a catch way for those that don't have any contigs & map, not kmer based but alignment to all viral species and idenfity the construct that has the most hits.

The reads that map & are then used in iterative refinement against that reference and are resend for contig construction.

Simplify preclustering of contigs up to a certain level

Description of feature

From this kraken report, there shouldn't be 3 clusters but instead 1. So we need to give the opportunity to simplify up to a species level instead of subspecies level or turn it of.

0.07	54	2	S	1678905	                  Leishmania RNA virus 1
  0.06	49	49	S1	12530	                    Leishmania RNA virus 1 - 4
  0.00	3	3	S1	58103	                    Leishmania RNA virus 1 - 1

Update Member and centroid extraction

Description of feature

Members and centroids are pulled one by one, this is very intense for large metagenomic samples which can and should be done more efficiently

Include coverage plot in MQC

Description of feature

Coverage plots per species & segment for final variant calling step (or the latest iteration if else not available).
They must be visualised in the MQC report, think best approach would be to have facet wrap for each species & then every sample. So one plot of species (& segment?) but then for all samples.

Kraken2 for host & contamination removal

Description of feature

Various studies have published that bowtie2 doesn't cut it anymore for host read removal.

2 Strategies:

  • all classified viral reads are used with a viral reference database
  • all non-classified reads as human/mouse/contaminants are used

Steps to include

  • run kraken2
  • run kraken's extract reads (optional, maybe)
  • run fastqc again.

Out-of-memory during NETWORK_CLUSTER process on unclassified taxa

Description of the bug

Hi,

I encountered an error (exit code 137 : out-of-memory) during the fasta_contig_clust proces of the unclassified taxa (sample_taxidU). This is probably due to the tremendous size of the sample_taxidU.txt matrix (12G). I posted the error message from the std.out and the content of the .command.err and .command.log down below.

Description of the error from the std.out:
...
[f9/033c87] Submitted process > VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)
[f9/033c87] NOTE: Process `VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)` terminated with an error exit status (137) -- Execution is retried (1)
[fb/040342] Re-submitted process > VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)
[fb/040342] NOTE: Process `VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)` terminated with an error exit status (137) -- Execution is retried (2)
[5a/80fc5c] Re-submitted process > VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)
[5a/80fc5c] NOTE: Process `VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)` terminated with an error exit status (137) -- Execution is retried (3)
[f1/6bd387] Re-submitted process > VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)
ERROR ~ Error executing process > 'VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)'

Caused by:
  Process `VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER (010-2023_taxidU)` terminated with an error exit status (137)

Command executed:

  network_cluster.py \
      --score 0.6 \
      --method mash \
      --cluster-algorithm connected_components \
      --prefix 010-2023_taxidU_mash \
      010-2023_taxidU.txt \
  
  cat <<-END_VERSIONS > versions.yml
  "VIRALGENIE:FASTA_CONTIG_CLUST:FASTA_FASTQ_CLUST:NETWORK_CLUSTER":
      python: $(python --version | sed 's/Python //g')
      pandas: $(pip show pandas | grep Version | sed 's/Version: //g')
      matplotlib: $(pip show matplotlib | grep Version | sed 's/Version: //g')
      igraph: $(pip show igraph | grep Version | sed 's/Version: //g')
      leidenalg: $(pip show leidenalg | grep Version | sed 's/Version: //g')
  END_VERSIONS


Command exit status:
  137

Command output:
  (empty)

Command error:
  INFO:    Environment variable SINGULARITYENV_TMPDIR is set, but APPTAINERENV_TMPDIR is preferred
  INFO:    Environment variable SINGULARITYENV_NXF_DEBUG is set, but APPTAINERENV_NXF_DEBUG is preferred
  /scratch/antwerpen/207/vsc20717/Software/viralgenie/bin/network_cluster.py:70: SyntaxWarning: invalid escape sequence '\d'
    default="^(TRINITY)|(NODE)|(k\d+)",  # Default pattern matches Trinity, SPADes and MEGAHIT assembly names
  .command.sh: line 8:    37 Killed                  network_cluster.py --score 0.6 --method mash --cluster-algorithm connected_components --prefix 010-2023_taxidU_mash 010-2023_taxidU.txt

Work dir:
  /scratch/antwerpen/207/vsc20717/work/f1/6bd387972a78634a13fdc21d3bf846

Tip: you can try to figure out what's wrong by changing to the process work dir and showing the script file named `.command.sh`

 -- Check '.nextflow.log' file for details
-ESC[0;35m[Joon-Klaps/viralgenie]ESC[0;31m Pipeline completed with errorsESC[0m-

***************
*** ABORTED ***
***************

An error occurred. Exiting...
Content .command.err:
INFO:    Environment variable SINGULARITYENV_TMPDIR is set, but APPTAINERENV_TMPDIR is preferred
INFO:    Environment variable SINGULARITYENV_NXF_DEBUG is set, but APPTAINERENV_NXF_DEBUG is preferred
/scratch/antwerpen/207/vsc20717/Software/viralgenie/bin/network_cluster.py:70: SyntaxWarning: invalid escape sequence '\d'
  default="^(TRINITY)|(NODE)|(k\d+)",  # Default pattern matches Trinity, SPADes and MEGAHIT assembly names
/scratch/antwerpen/207/vsc20717/work/f1/6bd387972a78634a13fdc21d3bf846/.command.sh: line 8:    37 Killed    network_cluster.py --score 0.6 --method mash --cluster-algorithm connected_components --prefix 010-2023_taxidU_mash 010-2023_taxidU.txt
Content .command.log:
INFO:    Environment variable SINGULARITYENV_TMPDIR is set, but APPTAINERENV_TMPDIR is preferred
INFO:    Environment variable SINGULARITYENV_NXF_DEBUG is set, but APPTAINERENV_NXF_DEBUG is preferred
/scratch/antwerpen/207/vsc20717/Software/viralgenie/bin/network_cluster.py:70: SyntaxWarning: invalid escape sequence '\d'
  default="^(TRINITY)|(NODE)|(k\d+)",  # Default pattern matches Trinity, SPADes and MEGAHIT assembly names
/scratch/antwerpen/207/vsc20717/work/f1/6bd387972a78634a13fdc21d3bf846/.command.sh: line 8:    37 Killed            network_cluster.py --score 0.6 --method mash --cluster-algorithm connected_components --prefix 010-2023_taxidU_mash 010-2023_taxidU.txt
slurmstepd: error: Detected 1 oom_kill event in StepId=1457149.batch. Some of the step tasks have been OOM Killed.

Now attempted to overcome the issue by skipping the clustering of the unclassified taxa by changing the following in the params.json file:

"keep_unclassified": false

This worked.

However, the issue may still be interesting to inspect when users would like to cluster these unclassified taxa or when the preclustering step has been skipped.

Command used and terminal output

No response

Relevant files

No response

System information

No response

Implement nf-validation

Description of feature

Implement the nice plugin of nf-validation to easier handle samplesheet inputs

Refactor splitting up parts for cleaner code

Description of feature

Do like this:

ch_input_for_kaiju2krona = ch_input_classifications.kaiju
        .map{ meta, profiles -> [[meta['tool'], meta['db_name']], meta, profiles] }
        .combine( databases.map{ meta, db -> [[meta['tool'], meta['db_name']], db] }, by: 0 )
        .multiMap{
            it ->
                profiles: [it[1], it[2]]
                db: it[3]
        }

Not this:

 // run stats on all variants not only those that pass the filter
        vcf_fasta = ch_vcf.join(meta_fasta, by: [0])
        vcf       = vcf_fasta.map{ meta, vcf, fasta -> [ meta, vcf ] }
        fasta     = vcf_fasta.map{ meta, vcf, fasta -> [ meta, fasta ] }

Interpretabilty output

Description of feature

  • Change multiqc report 'input' reads|... to 'raw'
  • Change default number of reads reported from Milions to normal
  • Make a 'final results' directory where the consensus, depth, vcf, krona, ... is reported for each sample's final cluster iteration.

Kaiju identifying the species but not reporting the species

Description of the bug

Kaiju has within their large classification file the correct assignment of the species but it doesn't get reported. up to the species level.

Command used and terminal output

No response

Relevant files

No response

System information

No response

Kraken2 contig annotation

Description of feature

Write a subworkflow where the a kraken2 database is constructed based upon the input sequence file.

Ideal case we first cluster on species then segment.

It will need to have an kraken2_taxid:IDNUMBER within the header?

1. Building the new db

should be done y the user

  • kraken2-build -add
  • kraken2-build -build

2. searching the DB

  • read search
  • contig search
  • contig binning

3. contig clustering

Tools are already implmented

Report creation

Description of feature

Create an overall report

  • Multiqc
    • Option to include own sample metadata file
  • Summary table/excel for downstream analysis
    • Checkv results
    • Quast results
    • Samtools flagstat results
    • Variants, check if we can report more info in addition to the number of variants (# SNPs & # Indels)
    • Blast results (also add first word after)
    • UMI results
    • Coverage (% at X coverage & median )
    • Add a tag to indicate if the contig passed filters

Trinity fails when dealing with very few reads

Description of the bug

Trinity fails when dealing with very few reads and is unable to reconstruct a consensus genome.

Error that get's created:

Tuesday, September 26, 2023: 15:11:54	CMD: touch /scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/partitioned_reads.files.list.ok
Tuesday, September 26, 2023: 15:11:54	CMD: /usr/local/opt/trinity-2.13.2/util/support_scripts/write_partitioned_trinity_cmds.pl --reads_list_file /scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/partitioned_reads.files.list --CPU 1 --max_memory 1G  --run_as_paired  --seqType fa --trinity_complete --full_cleanup  --min_contig_length  200  --NO_SEQTK  --no_salmon  > recursive_trinity.cmds
Error, reads file listing: /scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/partitioned_reads.files.list is empty.  This tends to happen when there were too few reads to assemble.  at /usr/local/opt/trinity-2.13.2/util/support_scripts/write_partitioned_trinity_cmds.pl line 51.
Error, cmd: /usr/local/opt/trinity-2.13.2/util/support_scripts/write_partitioned_trinity_cmds.pl --reads_list_file /scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/partitioned_reads.files.list --CPU 1 --max_memory 1G  --run_as_paired  --seqType fa --trinity_complete --full_cleanup  --min_contig_length  200  --NO_SEQTK  --no_salmon  > recursive_trinity.cmds died with ret 65280 at /usr/local/bin/Trinity line 2863.
	main::process_cmd("/usr/local/opt/trinity-2.13.2/util/support_scripts/write_part"...) called at /usr/local/bin/Trinity line 3672
	main::write_trinity_partitioned_cmds("/scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/"..., "recursive_trinity.cmds", "GENOME-FREE_MODE") called at /usr/local/bin/Trinity line 2456
	main::run_recursive_trinity("/scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/"...) called at /usr/local/bin/Trinity line 2215
	main::run_chrysalis("/scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/"..., "/scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/"..., 200, 500, undef, "/scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/"..., "/scratch/leuven/344/vsc34477/nxf.GZeAyNhvBP/LVE00083_trinity/"...) called at /usr/local/bin/Trinity line 1839
	main::run_Trinity() called at /usr/local/bin/Trinity line 1444
	eval {...} called at /usr/local/bin/Trinity line 1443

Trinity run failed. Must investigate error above.

Command used and terminal output

No response

Relevant files

No response

System information

No response

Difference in depth bcftools mpileup vs samtools mpileup

Description of the bug

There is a difference in variant & read depth using the default settings of bcftools mpileup and samtools mpileup. This results in different consensus called where bcftools is much more likely to carry the same variants across iterations when they should have been added to the consensus.

It needs to be understood where this difference is coming from.

config:

withName: IVAR_CONTIG_CONSENSUS {
                ext.args = [
                    '-t 0.51',  // frequency to call consensus: 0.51 just the majority rule
                    '-q 0',     // minimum quality score : 0 (no quality is provided)
                    '-m 1',     // minimum depth to call consensus
                    '-n N'      // Characters to print in regions with less coverage
                ].join(' ').trim()
                ext.args2 = '--count-orphans --max-depth 0 --min-BQ 0 --no-BAQ -aa'
                }
withName: BCFTOOLS_MPILEUP {
            ext.args = '--ignore-overlaps --count-orphans --max-depth 0 --min-BQ 20 --annotate FORMAT/AD,FORMAT/ADF,FORMAT/ADR,FORMAT/DP,FORMAT/SP,INFO/AD,INFO/ADF,INFO/ADR'
            ext.args2 = '--ploidy 1 --keep-alts --keep-masked-ref --multiallelic-caller --variants-only'
            ext.args3 = "--include 'INFO/DP>=10'"
}

Command used and terminal output

No response

Relevant files

No response

System information

No response

nf-test

Description of feature

nf-test

Maskbed fasta incorrect input

Description of the bug

Mask bed fasta contains bad input channels that aren't linked to each other, so important to keep them linked.

Command used and terminal output

No response

Relevant files

No response

System information

No response

Report contigs with less then minimum X

Description of feature

Display within multiqc report the sample/contig names that have less then a certain criteria.
The criteria's being:

  • Not enough mapped reads
  • Not large enough
  • To many ambiguous bases

Explore capabalities of COMEBin

Description of feature

COMEbin seems to be a promising new contig binning tool, not based on marker genes but instead based on contrastive multi-view representation learning: 'add noice to contigs and recalculate similarity and coverage -> create network -> detect community with leidenalg'.

Include contig alignment and scoring to final consensus

Description of feature

Add a subworkflow that takes the final created consensus and compares them to the contigs members of the cluster to identify how similar they are. Through an alignment or using sourmash sketch in combination with dendorgrams or heatmaps.

Incude used tools in sample table

Description of feature

It can be unclear to some people which tools were used to get the values reported, include toolnames in table

Constrained sequence header edit

Description of the bug

Similar to the reference pool containing characters that mess up the internal processing, contstrain sequence should also be passed down the same process and have those characters replaced by '-'.
'|/_'

Command used and terminal output

No response

Relevant files

No response

System information

No response

Consensus calling without reference bias if contig is constructed

Description of feature

Currently the consensus is considered when creating cluster consensus ones. This is not good, It can only be used when there are no contigs align to that specific region of the consensus. So this needs to be included as an additional option.

Check Why singletons are no longer supported

Description of the bug

Singleton clusters are no longer processed, only one cluster seems to be processed.

Command used and terminal output

No response

Relevant files

No response

System information

No response

Update docs & make release

Description of feature

Docs are getting outdated again, need for:

  • Input tutorial
  • Output walktrough
  • Citations & also in multiqc
  • Readme

Sanity check failed

Description of the bug

Sanity checks of the reference sequence differs sometimes both ivar and BCFtools have different reference sequences when calling variants and when calculating summary statistics.

Command executed:

  bcftools stats \
       \
       \
       \
       \
      --fasta-ref SRR11140748_cl0_consensus.fa \
       \
      SRR11140748_cl0_consensus.vcf.gz > SRR11140748_cl0_consensus.bcftools_stats.txt
  
  cat <<-END_VERSIONS > versions.yml
  "VIRALGENIE:FASTQ_FASTA_ITERATIVE_CONSENSUS:ITERATION_1:BAM_CALL_VARIANTS:VCF_TABIX_STATS:BCFTOOLS_STATS":
      bcftools: $(bcftools --version 2>&1 | head -n1 | sed 's/^.*bcftools //; s/ .*$//')
  END_VERSIONS

Command exit status:
  255

Command output:
  (empty)

Command error:
  
  Sanity check failed, the reference sequence differs: SRR11140748_cl0_consensus:20455+1 .. N vs A

Work dir:
  /home/runner/work/viralgenie/viralgenie/work/72/7f3a70f7525613b5e1df5e026e052c

Command used and terminal output

No response

Relevant files

No response

System information

No response

Global prefix for results

Description of feature

Include a global prefix for all results so we can be sure that they all come from the same specific run.
Format:
[RUNID]_[DATE]_[PIPELINEVERSION]_[NEXTFLOWRUNNAME]

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.