Scilab
Scilab is a free and open-source software package for numerical computation, providing a high-level programming language and a powerful environment for engineering and scientific applications.[1] It includes hundreds of mathematical functions, advanced data structures (such as lists, polynomials, and sparse matrices), and capabilities for 2D and 3D graphics, simulation, optimization, statistics, control systems, signal processing, and application development.[1] Scilab supports cross-platform operation on Windows, macOS, and Linux, and is licensed under the GNU General Public License version 2.0, allowing users to freely use, modify, and distribute it.[2]
The origins of Scilab trace back to the 1980s at the French National Institute for Research in Computer Science and Automation (INRIA), where it evolved from Blaise, a computer-aided control system design software developed by François Delebecque and Serge Steer.[3] By 1984, it had become Basile, distributed by the INRIA startup Simulog, before being renamed Scilab in the early 1990s and released as open-source software on January 2, 1994, with version 1.1.[3] Development continued under INRIA's Scilab Group until 2002, reaching version 2.7, after which the INRIA-formed Scilab Consortium (2003) and later organizations like Digiteo (2008), Scilab Enterprises (2010), ESI Group (2017), and Dassault Systèmes (2022) took over stewardship.[3] As of November 2025, the latest stable release is Scilab 2026.0.0, released on October 16, 2025.[4]
Scilab's core strengths lie in its rich ecosystem of toolboxes and modules, including Xcos for modeling and simulating dynamic systems, and its interoperability with languages like C, C++, Fortran, Java, and Python.[1] It serves diverse domains such as aeronautics, automotive, energy, defense, finance, and transport, supporting tasks from data analysis and algorithm prototyping to industrial simulations.[1] Maintained by a dedicated team at Dassault Systèmes with contributions from a global community, Scilab sees approximately 100,000 downloads per month and is hosted on GitLab for collaborative development, including rigorous testing with over 1,300 unit tests and 1,900 non-regression tests.[2]
Fundamentals
Definition and Purpose
Scilab is a free and open-source software package designed for numerical computation, data analysis, and scientific visualization, providing a powerful computing environment for engineering and scientific applications.[1] It functions as an alternative to proprietary tools like MATLAB, offering similar capabilities in a cost-free format.[5]
The primary purposes of Scilab include facilitating engineering simulations, supporting academic research, and enabling industrial applications across fields such as aeronautics, energy, and finance.[1] These uses encompass mathematical modeling, simulation, visualization, and data analysis tasks essential to these domains.[1]
At its core, Scilab features a high-level programming language with interpreted execution, emphasizing matrix-oriented operations where matrices serve as the central data structure.[6][7] It includes hundreds of built-in mathematical functions to handle a wide range of numerical tasks efficiently.[8]
Scilab targets students, researchers, engineers, and scientists who require accessible, cross-platform solutions for computational needs without licensing costs.[8] Its availability on Windows, Linux, and macOS ensures broad usability in educational, research, and professional settings.[1]
Licensing and Availability
Scilab is released under the GNU General Public License version 2.0 (GPL v2.0), a copyleft license that grants users the freedom to run the software for any purpose, study and modify its source code, and redistribute it either in original or modified form, provided that derivatives are licensed under compatible terms. This licensing model supports both academic and commercial applications, enabling integration into proprietary projects as long as the Scilab core remains open. Previously distributed under the CeCILL license—which is explicitly compatible with the GPL—the shift to GPL v2.0 in version 6.0.0 aligned Scilab more closely with international open-source standards while preserving its permissive yet reciprocal nature.[2][9][10]
As an open-source initiative, Scilab's complete source code is hosted on GitLab, facilitating inspection, customization, and collaborative development by a worldwide community of contributors, including engineers, scientists, and volunteers who enhance its functionality through pull requests and issue tracking. This model promotes transparency and ongoing improvement without restricting access.[2][11]
Scilab offers broad cross-platform compatibility, running natively on Windows, Linux, and macOS systems, with explicit support for Apple Silicon (ARM64) processors on macOS to ensure performance on modern Apple hardware. Pre-compiled binaries for these platforms are freely downloadable from the official Scilab website, while the source code allows users to build custom versions tailored to specific environments or architectures.[4][12]
Distribution occurs primarily through official releases on Scilab.org, where stable versions are made available at no cost to individuals and organizations alike, alongside integration with system package managers such as APT for Debian- and Ubuntu-based Linux distributions and Homebrew for macOS, streamlining installation without additional fees or subscriptions.[4][13]
Language and Programming
Syntax Basics
Scilab is an interpreted high-level programming language, allowing users to execute code directly without compilation. It supports execution through an interactive console for real-time command input and output, a command-line interface for batch processing, and script files saved with extensions such as .sce for executable scripts or .sci for function libraries, which can be loaded using the exec command.[14]
Variables in Scilab are assigned using the equals sign (=), with no explicit type declarations required due to its dynamic typing system. Identifiers are case-sensitive, meaning x and X are treated as distinct variables; valid names begin with a letter or certain special characters like %, _, #, !, ?, $, or ., followed by letters, digits, or underscores. For example:
x = 5; // Assigns [integer](/page/Integer) 5 to x
pi_val = %pi; // Assigns pi [constant](/page/Constant) to pi_val
x = 5; // Assigns [integer](/page/Integer) 5 to x
pi_val = %pi; // Assigns pi [constant](/page/Constant) to pi_val
This assignment syntax supports a range of data, from scalars to matrices, emphasizing Scilab's focus on numerical computations.[15][16]
Control structures in Scilab enable conditional execution and looping, following a syntax that uses keywords like if, then, else, end for conditionals, and for, while for iterations. The if-then-else construct evaluates a logical expression and executes statements accordingly:
if x > 0 then
disp("Positive value");
else
disp("Non-positive value");
end
if x > 0 then
disp("Positive value");
else
disp("Non-positive value");
end
For loops iterate over a specified range or array columns:
for i = 1:5
disp(i);
end
for i = 1:5
disp(i);
end
While loops continue execution while a condition holds true:
count = 0;
while count < 3
count = count + 1;
disp(count);
end
count = 0;
while count < 3
count = count + 1;
disp(count);
end
Switch-like branching uses the select statement for multi-case decisions:
select day
case 1 then disp("[Monday](/page/Monday)");
case 7 then disp("[Sunday](/page/Sunday)");
else disp("Weekday");
end
select day
case 1 then disp("[Monday](/page/Monday)");
case 7 then disp("[Sunday](/page/Sunday)");
else disp("Weekday");
end
These structures promote straightforward conditional and repetitive programming, similar to other matrix-oriented languages.[17][18][19]
Functions are defined using the function keyword, specifying input and output parameters in the header, with the body enclosed by endfunction. A basic example defines a function to compute the square of an input:
function y = [square](/page/Function)(x)
y = x^2;
endfunction
function y = [square](/page/Function)(x)
y = x^2;
endfunction
It can be called as result = [square](/page/Function)(4), returning 16; multiple outputs use brackets like function [y1, y2] = [func](/page/Function)(x1, x2). Parameters are passed by value, and functions can be defined inline, in scripts, or as library files.[20][21]
Error handling in Scilab employs try-catch blocks to manage runtime errors gracefully, executing alternative code if an exception occurs. The syntax is:
try
risky_operation();
catch
disp("An error occurred");
end
try
risky_operation();
catch
disp("An error occurred");
end
For debugging, the who command lists all variables in the current workspace, aiding inspection:
This outputs variable names, types, and sizes, facilitating code verification without halting execution.[22][23]
Data Types and Structures
Scilab supports a range of primitive data types designed for numerical and scientific computing, including real and complex scalars (type 1), which are stored as double-precision floating-point numbers by default.[24] Booleans (type 4) represent true (%T) or false (%F) values, while strings (type 10) handle text data enclosed in double quotes.[24] Integer types (type 8) include int8, int16, int32, and int64 for fixed-precision arithmetic.[24] Scilab is dynamically typed, enabling automatic type promotion during operations, such as converting integers to doubles in mixed arithmetic expressions.[25]
The primary data structure in Scilab is the n-dimensional matrix, or hypermatrix, which forms the foundation for vectorized computations and supports real or complex entries.[25] Matrices are created using bracket notation, as in A = [1 2; 3 4] for a 2x2 array, or via specialized functions like zeros(m, n) for an m-by-n matrix of zeros and eye(m) for an m-by-m identity matrix.[25] These structures are homogeneous, meaning all elements share the same type, and they enable efficient storage of multidimensional data without explicit dimension declarations.[25]
Advanced structures extend Scilab's capabilities for specialized applications. Polynomials (type 2) represent univariate expressions with real or complex coefficients, created using poly([coefficients], "variable"), such as p = poly([1 -2 1], "z") for z^2 - 2z + 1. Rationals, quotients of polynomials, are implemented as typed lists (tlist) with numerator, denominator, and time domain fields, formed via r = 1 / poly([1 2], "s").[26] Lists (type 15) store heterogeneous objects in an ordered sequence, initialized with list(item1, item2), allowing nested collections like L = list(1, "text", [1 2]).[27] Cells provide multi-indexed heterogeneous storage similar to MATLAB, created as c = cell(2, 3) and accessed via c(1,1).value = 42. Matrix-oriented lists (mlists, type 17) and typed lists (tlists, type 16) support user-defined behaviors through overloading.[24] Sparse matrices (type 5 for real/complex, type 6 for boolean) efficiently store non-zero elements, constructed with sp = sparse(i, j, v) where i and j are row/column indices and v are values.
Common operations on these structures include concatenation via cat(dim, A, B) or bracket notation like [A B] for horizontal joining and [A; B] for vertical, enabling flexible assembly of larger arrays.[25] Slicing extracts subsets, such as A(2:4, 1) for rows 2 to 4 of column 1, or A(:) to flatten into a vector.[25] Type conversion functions like int32(A) for integer casting, double(p) for polynomials to coefficients, and string(x) for textual representation facilitate interoperability.[25] These operations underpin numerical computations by organizing data for efficient processing.[25]
Memory management in Scilab relies on automatic garbage collection to reclaim unused objects, with no user-exposed controls for the process.[25] Variables reside in a dynamic workspace stack, adjustable via stacksize(n) to allocate more memory (default around 40 MB, up to system limits).[25] The clear command removes variables to free space explicitly, while save(filename, varlist) persists data to files in .sav or .sod format, and load(filename) restores them.[25]
Core Features
Numerical Computation
Scilab provides robust built-in support for numerical computations, enabling efficient handling of mathematical operations on scalars, vectors, and matrices. These capabilities form the foundation of its role in scientific and engineering applications, leveraging vectorized operations for performance on arrays without explicit loops. Core numerical features include linear algebra routines, elementary mathematical functions, basic optimization and statistical tools, solvers for differential equations, and specialized algorithms for signal processing and data generation.[8]
Linear Algebra
Scilab's linear algebra module supports essential matrix operations, such as multiplication using the * operator, which computes the product of two matrices A and B where the number of columns in A matches the number of rows in B, resulting in a matrix of dimensions rows(A) by columns(B). For example, C = A * B performs standard matrix multiplication. Matrix inversion is handled by the inv() function, which computes the inverse of a square matrix X, issuing a warning if X is ill-conditioned or nearly singular; it uses LU factorization internally for numerical stability.[28][29]
Eigenvalue computation is available via the spec() function, which returns the eigenvalues of a square matrix A as a vector; an optional second output provides the diagonal matrix of eigenvalues, and a third output yields the eigenvectors through right multiplication. For solving linear systems, linsolve() addresses the equation A*x + b = 0, returning a particular solution x0 and the nullspace kernel of A, allowing general solutions as x = x0 + kernel * w for arbitrary w; it handles underdetermined, overdetermined, and singular systems efficiently. These functions support real and complex matrices, with sparse matrix compatibility in many cases.[30][31]
Elementary Functions
Scilab includes a comprehensive set of elementary functions that operate element-wise on arrays, promoting vectorized computations for efficiency. Functions such as exp(X) compute the exponential e^X for each element in X, whether scalar, vector, or matrix, supporting both real and complex inputs; similarly, log(X) yields the natural logarithm, and sin(X) the sine, all applying broadcast rules for array compatibility. This vectorization allows seamless application to multidimensional data, as in exp([1 2; 3 4]) producing a matrix of individual exponentials. Such operations underpin numerical simulations and data transformations in Scilab scripts.[32]
Optimization and Statistics
Basic optimization in Scilab is facilitated by functions like fminsearch(), which minimizes an unconstrained multivariable function using the Nelder-Mead simplex algorithm, requiring no derivatives; it starts from an initial guess x0 and iterates until convergence based on tolerances for function value and step size, with defaults of 1e-4. Statistical computations include mean(X) for the arithmetic mean along specified dimensions or overall, handling real/complex data and returning NaN for invalid inputs, and stdev(X) for the standard deviation, computed as the square root of variance. For data visualization in statistics, histplot() generates histograms from a data vector, dividing into n classes or user-specified bins, with optional normalization to integrate to 1 and support for frequency polygons. These tools enable quick analysis of datasets without external libraries.[33][34][35][36]
Differential Equations
Scilab solves ordinary differential equations (ODEs) primarily through the ode() function, which integrates dy/dt = f(t, y) from initial time t0 with y(t0) = y0 to output times t, using interfaces to robust solvers like ODEPACK. It supports explicit systems with variable-step methods, including Runge-Kutta orders 4 ("rk") or 4-5 ("rkf" for embedded error control), Adams for non-stiff problems, and BDF for stiff ones; the default "lsoda" switches adaptively. Tolerances (relative rtol=1e-5, absolute atol=1e-7) and optional Jacobians enhance accuracy for nonlinear or stiff equations, with matrix ODEs handled via vectorization. For instance:
y = ode(y0, t0, t, f)
y = ode(y0, t0, t, f)
where f is a user-defined function, computes solutions at specified t points.[37]
Specific Algorithms
Specialized numerical algorithms in Scilab include the Fast Fourier Transform via fft(A), which computes the discrete Fourier transform along specified dimensions for vectors, matrices, or hypermatrices, using the FFTW3 library for optimized performance; the inverse is obtained with ifft() or by setting the sign to +1. Interpolation is supported by interp(), which evaluates cubic splines fitted to data points (x, y) at new points xp, returning the function value and up to third derivatives, with options for boundary conditions like natural or periodic extrapolation. Random number generation uses grand(m, n, "dist", params), producing m-by-n arrays from distributions such as uniform, normal (e.g., "nor", [mean](/page/Mean), std), Poisson, or gamma, with generator options like Mersenne-Twister for reproducibility via state control. These algorithms facilitate signal processing, data fitting, and stochastic modeling in computational workflows.[38][39][40]
Graphics and Visualization
Scilab provides a comprehensive graphics subsystem for creating 2D and 3D visualizations of numerical data, enabling users to represent computational results through plots, surfaces, and interactive elements.[41] This system supports both basic and advanced plotting functions, allowing customization of axes, colors, and layouts to facilitate data analysis and presentation.[42]
Basic 2D plotting is achieved using the plot2d() function, which draws piecewise linear curves from vector or matrix inputs, handling NaN values and infinite points appropriately.[42] For instance, plot2d(x, y) plots ordinates y against abscissae x, where x defaults to 1:length(y) if omitted, and multiple curves can be displayed simultaneously by providing matrix y.[42] In 3D, plot3d(x, y, z) generates surface plots from matrices representing parametric data or facets, with default observation angles of 45° azimuth and 35° elevation.[43] Customization options include setting plot bounds via the rect argument in plot2d() or ebox in plot3d(), and adjusting scales with logflag for logarithmic axes.[42][43]
Titles, axis labels, and legends enhance readability; xtitle(title, x_label, y_label, z_label) adds these elements to plots, supporting LaTeX or MathML for complex expressions since Scilab 5.2.[44] Legends are created post-plotting with legend(strings, pos), where strings is a vector of curve labels and pos specifies placement such as "in_upper_right".[45] Axis controls like tick intervals are managed through the nax argument in plot2d() or properties of the axes handle obtained via gca().[42]
Advanced graphics include contour(x, y, z, nz) for level curves on 3D surfaces, where nz defines the number or values of contours, displayed in modes such as on the surface or a projection plane.[46] Parametric curves are plotted in 3D using param3d(x, y, z), tracing points defined by equal-length vectors with customizable viewing angles and line styles via the returned polyline handle.[47] For 3D histograms, hist3d() represents 2D histograms as surfaces, associating values to intervals in x and y bins, though noted as obsolete in versions after Scilab 6.1 with planned redefinition.
Handle-based graphics allow interactive manipulation; figures are created with figure(num), returning a handle for setting properties like docking or toolbars, and enabling additions such as text uicontrols at specified positions. As of Scilab 2025.1.0, the new "Browser" uicontrol allows embedding web content (HTML/JS) for advanced interactive GUIs.[48][49] Color maps are visualized using Matplot(a), which renders matrix a as a 2D color plot based on the current colormap, mapping integer values to indices for RGB or RGBA displays.[50] Export options include xs2bmp(win_num, file_name) to save figures as BMP files, with similar functions like xs2gif() for GIF format.[51]
Animations and interactivity are supported through comet3d(x, y, z), which traces 3D trajectories with a comet-like head, body, and tail, using a leading fraction Lf (default 0.1) to control the visible trace length.[52] Dynamic plots integrate with GUIs via uicontrol() objects, such as sliders or buttons in a figure, whose callbacks update plot parameters like scaling in real-time.[53]
Data for visualization is imported from CSV files using read(file, m, n), which parses comma-separated numerical values into matrices assuming free format, or directly from existing matrices generated by computations.[54] Scaling and axis adjustments ensure accurate representation, often combined with numerical outputs for immediate plotting.[41]
Modeling and Simulation
Xcos serves as Scilab's primary tool for graphical modeling and simulation, providing a block-diagram environment akin to Simulink for constructing and analyzing hybrid dynamical systems that combine continuous and discrete time domains.[55] This capability allows users to design models visually, compile them, and simulate behaviors without writing extensive code, making it suitable for engineering applications requiring dynamic system analysis.[56]
At its core, Xcos features palettes that organize blocks into categories such as sources (e.g., constant or step inputs), sinks (e.g., output displays), and mathematical operations (e.g., summation or gain functions), which users drag and drop onto a canvas.[56] These blocks are interconnected via graphical links to form data flow diagrams, while solvers—either fixed-step for uniform time increments or variable-step for adaptive precision—handle the numerical integration during simulation.[55] The system integrates with Scilab's numerical solvers to process these models efficiently.[56]
The simulation workflow in Xcos begins with building the model by assembling blocks and configuring their parameters, such as initial conditions or transfer functions, through intuitive dialog interfaces.[57] Once set, users initiate the simulation via a run command, monitoring progress in real-time, and subsequently analyze results using built-in scopes that plot variables like time-series data for validation and insight.[57] This process supports iterative refinement, enabling quick adjustments to model parameters for testing scenarios.
Xcos excels in domains including control systems for feedback loop design, signal processing for filter and transformation modeling, and physical systems like mechanics or hydraulics through specialized block libraries.[55] It accommodates event handling for discrete events within continuous simulations and state-space representations for linear system analysis, facilitating comprehensive hybrid modeling.[56]
For deployment beyond simulation, Xcos enables export and code generation, particularly producing C code from models to implement simulations on embedded systems, often via integrated modules like the Xcos Code Generator.[58] This feature requires a compatible C compiler and supports real-time execution on hardware, bridging graphical design with practical engineering implementation.[59]
Scilab features a collection of built-in modules that extend its core numerical computing capabilities to specialized domains such as signal processing, optimization, statistics, and control systems design. These modules are integral components of every official Scilab installation, automatically available upon startup, and can be verified using the getmodules() function, which returns a list of installed modules including the essential "core" module and domain-specific ones like "signal_processing," "optimization," "statistics," and "cacsd."[60][61]
The ATOMS (Automatic TOolboxes Management for Scilab) module serves as the built-in package manager, enabling users to discover, install, and load external extensions while ensuring compatibility with Scilab's ecosystem; for instance, external toolboxes can be installed via atomsInstall("toolbox_name") and loaded with atomsLoad("toolbox_name"). Although primarily for external packages, ATOMS integrates seamlessly with built-in modules by handling dependencies during Scilab updates. Documentation for all modules, including usage examples, is accessible directly in the interactive environment using the help() command, such as help(atomsInstall).
The signal_processing module provides comprehensive tools for analyzing and manipulating signals, including fast Fourier transforms via the integrated fftw module and classical filtering techniques. For example, the iir() function designs infinite impulse response filters, while Butterworth low-pass filters can be created using zpbutt(n, omegac) to compute poles and zeros, followed by application with filter(). A practical use case involves filtering noise from a signal: generate a noisy sine wave, design a second-order Butterworth filter with cutoff frequency 0.3π, and apply it to recover the original waveform, demonstrating the module's utility in time-domain processing.
In the optimization module, users can solve unconstrained and constrained problems using algorithms like the Nelder-Mead simplex method via optim() or direct search with fminsearch(). These functions minimize objective functions defined as Scilab scripts or expressions, supporting gradient-free approaches suitable for nonlinear problems; for instance, minimizing Rosenbrock's valley function illustrates convergence to the global minimum (1,1) over iterations. The module emphasizes robust, derivative-free methods, with options configurable via optimset() for tolerance and iteration limits.
The statistics module offers a suite of probability distribution functions, including cumulative distribution functions (CDFs) for common distributions such as normal (cdfnor()), gamma (cdfgam()), and chi-square (cdfchi()). These enable statistical modeling, hypothesis testing, and random variate generation; a representative example computes the CDF of a standard normal distribution at z=1.96 to find the probability P(Z ≤ 1.96) ≈ 0.975, useful for confidence intervals in data analysis. Integration tools like integrate(expr, v, x0, x1) complement statistical computations by evaluating definite integrals numerically, such as approximating the normalization constant for a probability density.
For control systems, the cacsd (Computer-Aided Control Systems Design) module facilitates analysis and design, featuring functions like evans() for plotting root loci of feedback systems. Users can compute and visualize pole migration as gain varies, aiding stability assessment; for example, applying evans(sys) to a transfer function reveals crossover points for controller tuning. All built-in modules receive regular updates in official Scilab releases, ensuring compatibility and bug fixes, with comprehensive help pages providing syntax, examples, and references to underlying algorithms.
Custom Development and Modules
Scilab supports extensive customization through user-contributed modules and toolboxes, primarily managed via the ATOMS (Automatic TOolboxes Management for Scilab) system, which serves as the official repository for these extensions.[62] ATOMS enables users to discover, install, and update modules directly within Scilab using the atomsInstall("toolbox_name") command or the graphical interface launched by atomsGui().[63] This system hosts over 200 toolboxes covering areas such as signal processing, optimization, and data analysis, fostering a collaborative ecosystem for extending Scilab's functionality.[62]
Creating custom toolboxes involves organizing code into a standardized directory structure, including macros/ for Scilab script functions (e.g., .sci files), src/ for C or Fortran source code, and help/ for documentation files.[64] The builder.sce script at the toolbox root compiles the components: it invokes buildmacros.sce to generate binary .bin files from macros and uses tools like ilib_build to compile C/Fortran interfaces into shared libraries.[64] Once built, the toolbox folder is zipped and installed via ATOMS, with automatic loading on Scilab startup after restart.[64]
Scilab's interface capabilities allow seamless integration with external code through dynamic linking of compiled libraries, achieved via functions like addinter to load shared objects at runtime or ilib_build for building interfaces to C/Fortran code using the Scilab API.[65] For higher-level languages, dedicated modules enable interoperability; for instance, the Scithon toolbox embeds Python, permitting calls to Python functions, objects, and libraries (including NumPy and SciPy) directly from Scilab.[66] Similarly, Java integration is supported through modules that allow bidirectional data exchange and function calls.[67]
Extensions in Scilab benefit from flexible licensing, as the core software is distributed under the GPL v2.0, but toolboxes operate as separate modules where developers can apply their own licenses, including proprietary ones, without affecting the open-source base.[2] This approach enables commercial applications built atop Scilab while preserving the core's openness.[2]
Representative examples illustrate practical custom development. A simple module for custom algorithms might involve writing a macro in macros/ to implement a specialized numerical solver, compiling it with builder.sce, and distributing via ATOMS for community use.[64] Community-contributed toolboxes, such as maple2scilab, demonstrate advanced integrations by converting Scilab arrays and expressions into Maple-compatible instructions, facilitating symbolic computation workflows between the two environments.[68]
History and Development
Origins and Early Versions
The origins of Scilab trace back to the 1980s at the Institut de Recherche en Informatique et en Automatique (IRIA), now known as Inria, where researchers developed Blaise, a computer-aided control system design (CACSD) software package. Blaise was created by François Delebecque and Serge Steer to support automatic control research, drawing inspiration from the Fortran implementation of MATLAB for numerical computations and system modeling. In 1984, Blaise evolved into Basile, which was distributed commercially for several years by Simulog, Inria's first technology transfer company, targeting engineers and scientists working on control systems.[3]
Initial development of Scilab began in the early 1990s when Simulog ceased distribution of Basile, prompting Inria to rename and expand the software under the leadership of Claude Gomez and a dedicated team including Jean-Philippe Chancelier from École Nationale des Ponts et Chaussées (ENPC), François Delebecque, Maurice Goursat, Ramine Nikoukhah, and Serge Steer. This effort, starting around 1990, aimed to create a free, open-source alternative to proprietary tools like MATLAB, emphasizing a high-level matrix-oriented programming language for numerical computing, graphics, and simulation in scientific and engineering applications. The project was funded by Inria and other French public institutions, reflecting national support for open research software in computational sciences. The first public release, Scilab 1.1, occurred on January 2, 1994, made available via anonymous FTP as freely distributable open-source software to encourage widespread adoption among researchers.[3][69]
Technically, early Scilab versions were built on the foundations of Blaise and Basile, with core components implemented in C and interfaces to Fortran libraries for performance-critical numerical routines, such as linear algebra and control system functions. These initial releases were designed exclusively for Unix platforms, including systems like SunOS and HP-UX, limiting accessibility to users in academic and research environments with Unix-based workstations. Key early contributors from Inria focused on enhancing matrix operations, plotting capabilities, and scripting to provide a robust, cost-free platform for numerical analysis, setting the stage for broader community involvement in subsequent years.[3][70]
Major Milestones and Organizations
In 2003, the Scilab Consortium was established by the French National Institute for Research in Digital Science and Technology (Inria) along with academic and industrial partners to coordinate the software's development, broaden contributions, and promote it as a global reference for numerical computing. In 2008, Scilab joined the Digiteo research network, which further supported its development and distribution under the CeCILL license.[71][3]
A significant advancement came with the release of Scilab 5.0 in September 2008, which introduced a complete graphical user interface (GUI) overhaul based on Java, enabling integrated editing, execution, and visualization capabilities, alongside enhancements in 3D graphics with hardware acceleration support.[72] Nearly a decade later, Scilab 6.0.0 arrived in February 2017, featuring a rewritten core leveraging modern C++ standards for improved memory management and native 64-bit integer support, while Xcos—the block diagram modeling tool—saw major enhancements including optimized data structures for handling large models, a new implicit ODE solver (Crank-Nicolson), and an advanced palette browser with search and drag-and-drop functionality.[73]
Organizationally, Scilab Enterprises was founded in June 2010 as a spin-off from the Consortium to provide professional support, training, and services while maintaining the open-source nature of the software.[71] In February 2017, ESI Group—a leader in virtual prototyping—acquired Scilab Enterprises to integrate it into its simulation ecosystem, enhancing commercial offerings without altering the free core distribution. In mid-2022, the Scilab operational team joined Dassault Systèmes, continuing development under its umbrella while maintaining open-source principles.[71][3]
Recent development has focused on platform compatibility and efficiency, with Scilab 2024.0.0 (released October 2024) introducing native support for Apple Silicon (ARM64) processors on macOS—at least twice as fast as emulated Intel builds—the subsequent Scilab 2024.1.0 (May 2024) included performance boosts in sparse matrix operations and new utilities like uiimport() for data ingestion and bezier() for curve computation.[74][75] The subsequent Scilab 2025.1.0 (May 22, 2025) further improved stability by fixing crashes in optimization routines and Xcos saving, optimized I/O functions like writetable(), and added matrix generators such as hadamard() and hankel(). Scilab 2026.0.0, released on October 16, 2025, introduced new language features including classdef for object-oriented programming, enumeration types, and enhancements to data structures like table and timeseries, along with several new functions such as dbscan() for clustering and gradient() for numerical differentiation.[76][77][78] The next release, 2026.1.0, is planned for May 2026.[77]
The Scilab community has grown through open-source integrations, including GitLab for collaborative development and Discourse forums for user support, alongside annual events like the ScilabTec conference to foster contributions and adoption in engineering and scientific domains.[79]
Deployment and Cloud Services
Desktop and Installation Options
Scilab requires a 64-bit operating system for optimal performance, with supported platforms including Windows 10 and 11 (64-bit), Ubuntu 22.04 LTS, 24.04 LTS, and 25.04, Debian 13, Fedora 42 on Linux, and macOS from High Sierra (10.13) to Tahoe (26) on Intel or ARM processors.[12] An internet connection is recommended for installing ATOMS modules, and a Java runtime environment (Java 17) is embedded in Scilab for GUI functionality.[80] Compilers such as Visual Studio 2022 for Windows or gcc/clang and gfortran for Linux and macOS are optional but necessary for building C/C++ or Fortran extensions and Modelica models in Xcos.[12]
Installation methods include official binary installers tailored to each platform: .exe files for Windows, .tar.xz archives for Linux (which can be extracted and run without full installation for portability), and .dmg files for macOS (both Intel and ARM variants).[4] Portable versions are not officially provided but can be created by extracting the Linux binary archive or copying an installed directory on Windows, allowing execution from removable media without system-wide changes.[81] For advanced users, source code compilation is supported via downloads from the official GitLab repository in formats like .zip or .tar.gz, using CMake as the build system on Unix-like systems or Visual Studio on Windows to customize the build.[11]
The setup process begins by downloading the appropriate installer from the official website and running it: on Windows, execute the .exe and follow the wizard to select installation directory and components; on Linux, extract the .tar.xz to a preferred location and set environment variables like SCI if needed; on macOS, open the .dmg and drag Scilab to the Applications folder.[4] After installation, launch Scilab via the desktop shortcut (scilab.exe on Windows), Applications menu on macOS, or terminal command ./bin/scilab on Linux, which initializes the default workspace with a console for command execution and variable storage.[82] Initial configuration may involve verifying the SCI path environment variable points to the installation root for script execution and module loading.[83]
For updates and maintenance, Scilab follows a release cycle with major versions annually in October and minor updates approximately every six to seven months in May, ensuring compatibility and new features; as of November 2025, the latest stable release is Scilab 2026.0.0. Users should download the latest stable release from the official site for upgrades.[77] Installed modules managed via ATOMS can be updated using the atomsUpdate() function in the Scilab console, which checks for and applies updates to all or specific modules across user or all-users sections, requiring write access to the SCI directory.[84]
Common troubleshooting issues include Java conflicts, where the embedded JVM fails to load due to classpath or library path misconfigurations, resolved by ensuring the java.library.path includes the Scilab bin directory or reinstalling to avoid version mismatches.[85] Path errors, such as the SCI variable not being set, can prevent launch or module detection; verify and set it manually in system environment variables or the startup script, consulting the official help documentation for platform-specific fixes.[85] For detailed guidance, refer to the Scilab online help and community forums linked from the official documentation.
Scilab Cloud App and API
The Scilab Cloud App provides a web-based integrated development environment (IDE) for executing Scilab scripts, generating plots, and performing simulations directly within a web browser, eliminating the need for local software installation.[86] A community-hosted version is accessible via cloud.scilab.in (FOSSEE project), supporting users in writing or selecting code examples and verifying results online, making it suitable for educational and exploratory purposes.[87] Key features include file upload and download for managing scripts and data, basic collaboration through shared execution environments, and access to core Scilab mathematical functions along with selected toolboxes, all without requiring Java or other plugins.[87] The app is free for basic use and requires a user account for access, aligning with Scilab's open-source ethos.[8]
The official Scilab Cloud API, previously offering a RESTful web service interface for programmatic integration, appears to be deprecated as the base URL https://scilab.cloud/rest/ no longer resolves as of 2025. For current integration options, consult the official documentation.[88]
Common use cases for the cloud app include creating educational demonstrations, enabling remote computing on low-specification devices, and integrating Scilab capabilities with platforms like Jupyter notebooks or Google Sheets for enhanced workflow automation.[86] For instance, it supports embedding simulations such as FFT analysis on datasets directly in web interfaces.[86] Since Scilab Enterprises was acquired by ESI Group in 2017 and subsequently by Dassault Systèmes in 2022, data handling in these services adheres to Dassault Systèmes' privacy policies, ensuring secure access for engineering and simulation applications.[89] While a free tier is available with account-based access, advanced professional services may involve premium support through Dassault Systèmes.[90]