Build, Deploy or Embed Your Code
Julia makes it possible to build complete applications. Write web UIs with
Dash.jl
and
Genie.jl
or native UIs with
GTK.jl
. Pull data from
a variety of databases
. Build shared libraries and executables with
PackageCompiler
. Deploy on a webserver with
HTTP.jl
or embedded devices. Powerful shell integration make it easy to
managing other processes
.
Julia has foreign function interfaces for
C, Fortran
,
C++
,
Python
,
Java
,
Mathematica
,
Matlab
,
and many other languages. Julia can also be embedded in other programs through its
embedding API
. Julia's
PackageCompiler
makes it possible to build binaries from Julia programs that can be integrated into larger projects. Python programs can call Julia using
PyJulia
. R programs can do the same with
R's JuliaCall
, which is demonstrated by
calling MixedModels.jl from R
. Mathematica supports
calling Julia through its External Evaluation System
.
Julia is designed for parallelism, and provides built-in primitives for parallel computing at every level:
instruction level parallelism
,
multi-threading
,
GPU computing
, and
distributed computing
.
The
Celeste.jl
project
achieved 1.5 PetaFLOP/s
on the
Cori supercomputer at NERSC
using 650,000 cores.
The Julia compiler can also generate native code for
GPUs
. Packages such as
DistributedArrays.jl
and
Dagger.jl
provide higher levels of abstraction for parallelism.
Distributed Linear Algebra is provided by packages like
Elemental.jl
and
TSVD.jl
. MPI style parallelism is also available through
MPI.jl
.
The
MLJ.jl
package provides a unified interface to common machine learning algorithms, which include
generalized linear models
,
decision trees
, and
clustering
.
Flux.jl
and
Knet.jl
are powerful packages for Deep Learning.
Packages such as
Metalhead
,
ObjectDetector
, and
TextAnalysis.jl
provide ready to use pre-trained models for common tasks.
AlphaZero.jl
provides a high performance implementation of the reinforcement learning algorithms from AlphaZero.
Turing.jl
is a best in class package for probabilistic programming.
Rich Ecosystem for Scientific Computing
Julia is designed from the ground up to be very good at numerical and scientific computing.
This can be seen in the abundance of scientific tooling written in Julia, such as the state-of-the-art differential equations ecosystem
(DifferentialEquations.jl)
, optimization tools (
JuMP.jl
and
Optim.jl
), iterative linear solvers
(IterativeSolvers.jl)
, Fast Fourier transforms
(AbstractFFTs.jl)
, and much more. General purpose simulation frameworks are available for
Scientific Machine Learning
,
Quantum computing
and much more.
Julia also offers a number of domain-specific ecosystems, such as in biology
(BioJulia)
, operations research
(JuMP Dev)
, image processing
(JuliaImages)
, quantum physics
(QuantumBFS)
, nonlinear dynamics
(JuliaDynamics)
, quantitative economics
(QuantEcon)
, astronomy
(JuliaAstro)
and ecology
(EcoJulia)
. With a set of highly enthusiastic developers and maintainers, the scientific ecosystem in Julia continues to grow rapidly.
Interact with your Data
The Julia data ecosystem provides
DataFrames.jl
to work with datasets, and perform common data manipulations.
CSV.jl
is a fast multi-threaded package to read CSV files and integration with the Arrow ecosystem is in the works with
Arrow.jl
. Online computations on streaming data can be performed with
OnlineStats.jl
.
The
Queryverse
provides query, file IO and visualization functionality. In addition to working with tabular data, the
JuliaGraphs
packages make it easy to work with combinatorial data.
Julia can work with almost all databases using
JDBC.jl
and
ODBC.jl
drivers. In addition, it also integrates with the Spark ecosystem through
Spark.jl
.
Data Visualization and Plotting
Data visualization has a complicated history. Plotting software makes trade-offs between features and simplicity, speed and beauty, and a static and dynamic interface. Some packages make a display and never change it, while others make updates in real-time.
Plots.jl
is a visualization interface and toolset. It provides a common API across various
backends
, like
GR.jl
,
PyPlot.jl
, and
PlotlyJS.jl
.
Makie.jl
is a sophisticated package for complex graphics and animations. Users who are used to "grammar of graphics" plotting APIs should take a look at
Gadfly.jl
.
VegaLite.jl
provides the
Vega-Lite
grammar of interactive graphics interface as a Julia package. For those who do not wish to leave the comfort of the terminal, there is also
UnicodePlots.jl
.
Julia has been downloaded over 45 million times and the Julia community has registered
over 10,000 Julia packages
for community use.
These include various mathematical libraries, data manipulation tools, and packages for general purpose computing. In addition to these, you can easily use libraries from
Python
,
R
,
C/Fortran
,
C++
, and
Java
.
If you do not find what you are looking for, ask on
Discourse
, or even better,
contribute one
!
2023-07-06
PSA: Thread-local state is no longer recommended; Common misconceptions about threadid() and nthreads()
2023-04-09
Highlights of the Julia 1.9 release.
This site is powered by
Netlify
,
Franklin.jl
, and the
Julia Programming Language
. We thank
Fastly
for their generous infrastructure support.
©2023 JuliaLang.org
contributors
. The content on this website is made available under the
MIT license
.
Sponsor