README.md
April 25, 2026 ยท View on GitHub
SCS (splitting conic solver) is a numerical optimization package for solving
large-scale convex cone problems. The current version is 3.2.11.
The full documentation is available here.
If you wish to cite SCS please cite the papers listed here.
Overview
SCS solves convex cone programs of the form:
minimize (1/2) x'Px + c'x
subject to Ax + s = b, s in K
where K is a product of convex cones. It uses an operator-splitting method
(ADMM) with Anderson acceleration to achieve fast convergence.
Supported cones: linear (LP), second-order (SOCP), semidefinite (SDP), exponential, power, complex semidefinite, and spectral cones (log-determinant, nuclear norm, sum-of-largest eigenvalues).
Features
- Multiple linear solver backends: sparse direct (QDLDL), dense direct (LAPACK), iterative (CG), Intel MKL Pardiso, Apple Accelerate (macOS), NVIDIA cuDSS, GPU
- Anderson acceleration for faster convergence, including solve diagnostics
- Problem data normalization/equilibration for numerical stability
- Warm-starting and incremental
b/cupdates viascs_update - Ctrl-C signal handling for graceful interruption
- Configurable precision (
float/double) and index type (int/long long) - MIT licensed
Building from Source
Make (default)
make # Build direct + indirect solvers with BLAS/LAPACK
make test # Build test binaries
./out/run_tests_direct # Run direct solver tests
./out/run_tests_indirect
CMake
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DUSE_LAPACK=ON ..
cmake --build .
ctest
Common Build Flags
| Flag | Default | Description |
|---|---|---|
USE_LAPACK | 1 | Enable BLAS/LAPACK (required for SDP support) |
DLONG | 0 | Use 64-bit integer indexing |
SFLOAT | 0 | Use single-precision floats |
USE_SPECTRAL_CONES | 0 | Enable spectral cone support (requires LAPACK) |
USE_OPENMP | 0 | Enable OpenMP parallelization |
Example: make DLONG=1 USE_LAPACK=1
Language Interfaces
SCS has interfaces for several languages:
- Python:
pip install scs(PyPI) - Julia: SCS.jl
- R: scs
- MATLAB: See the documentation
- Ruby: scs-ruby
SCS is the default solver in CVXPY.
Project Structure
include/ Public API and internal headers
src/ Core solver implementation
linsys/ Linear solver backends (pluggable architecture)
cpu/direct/ Sparse Cholesky (QDLDL, default)
cpu/indirect/ Conjugate gradient
cpu/dense/ Dense LU (LAPACK dgetrf, for small problems)
mkl/direct/ Intel MKL Pardiso
accelerate/direct/ Apple Accelerate sparse LDLt (macOS)
cudss/direct/ NVIDIA cuDSS
gpu/indirect/ GPU iterative solver
external/ Vendored dependencies (AMD, QDLDL)
test/ Test suite (minunit framework)
docs/src/ Sphinx documentation source
License
MIT License. See LICENSE.txt.