cvxgrp/scs

Splitting Conic Solver

C

638

1,055 commits

updated Oct 19, 2026

See the code

README

Intersection of a cone and a polyhedron

Build Status Documentation PyPI Downloads Conda Downloads

SCS (splitting conic solver) is a numerical optimization package for solving large-scale convex cone problems. The current version is 3.3.1.

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: zero/linear (LP), box, second-order (SOCP), semidefinite (SDP), complex semidefinite, exponential, power, and spectral cones (log-determinant, nuclear norm, ell1-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
  • Adaptive dual scaling, with per-row diagonal rescaling driven by residual profiles (adaptive_diag_scale, on by default)
  • Warm-starting and incremental b/c updates via scs_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

Note that the spectral-cone tests are skipped unless SCS is built with USE_SPECTRAL_CONES=1 (see the flag table below); a default make test run reports them as skipped.

CMake

mkdir build && cd build
cmake -DBUILD_TESTING=ON -DUSE_LAPACK=ON ..
cmake --build .
ctest

Common Build Flags

FlagDefaultDescription
USE_LAPACK1Enable BLAS/LAPACK (required for SDP support)
DLONG0Use 64-bit integer indexing
SFLOAT0Use single-precision floats
USE_SPECTRAL_CONES0Enable spectral cone support (requires LAPACK)
USE_OPENMP0Enable OpenMP parallelization

Example: make DLONG=1 USE_LAPACK=1

Language Interfaces

SCS has interfaces for several languages:

In CVXPY, SCS is the default solver for semidefinite, exponential-cone and power-cone problems (Clarabel handles LPs and SOCPs, OSQP handles QPs).

Project Structure

include/        Public API and internal headers
src/            Core solver implementation
linsys/         Linear solver backends (pluggable architecture)
  cpu/direct/     Sparse LDLt (AMD ordering + QDLDL, default)
  cpu/indirect/   Conjugate gradient
  cpu/dense/      Dense Cholesky on the Gram reduction (LAPACK dpotrf)
  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.

cone-programming
convex-optimization
first-order-methods
linear-programming
numerical-optimization
optimization
optimization-algorithms
quadratic-programming
semidefinite-programming
solver

cvxgrp/scs

Splitting Conic Solver

C

638

1,055 commits

updated Oct 19, 2026

See the code

README

Intersection of a cone and a polyhedron

Build Status Documentation PyPI Downloads Conda Downloads

SCS (splitting conic solver) is a numerical optimization package for solving large-scale convex cone problems. The current version is 3.3.1.

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: zero/linear (LP), box, second-order (SOCP), semidefinite (SDP), complex semidefinite, exponential, power, and spectral cones (log-determinant, nuclear norm, ell1-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
  • Adaptive dual scaling, with per-row diagonal rescaling driven by residual profiles (adaptive_diag_scale, on by default)
  • Warm-starting and incremental b/c updates via scs_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

Note that the spectral-cone tests are skipped unless SCS is built with USE_SPECTRAL_CONES=1 (see the flag table below); a default make test run reports them as skipped.

CMake

mkdir build && cd build
cmake -DBUILD_TESTING=ON -DUSE_LAPACK=ON ..
cmake --build .
ctest

Common Build Flags

FlagDefaultDescription
USE_LAPACK1Enable BLAS/LAPACK (required for SDP support)
DLONG0Use 64-bit integer indexing
SFLOAT0Use single-precision floats
USE_SPECTRAL_CONES0Enable spectral cone support (requires LAPACK)
USE_OPENMP0Enable OpenMP parallelization

Example: make DLONG=1 USE_LAPACK=1

Language Interfaces

SCS has interfaces for several languages:

In CVXPY, SCS is the default solver for semidefinite, exponential-cone and power-cone problems (Clarabel handles LPs and SOCPs, OSQP handles QPs).

Project Structure

include/        Public API and internal headers
src/            Core solver implementation
linsys/         Linear solver backends (pluggable architecture)
  cpu/direct/     Sparse LDLt (AMD ordering + QDLDL, default)
  cpu/indirect/   Conjugate gradient
  cpu/dense/      Dense Cholesky on the Gram reduction (LAPACK dpotrf)
  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.

cone-programming
convex-optimization
first-order-methods
linear-programming
numerical-optimization
optimization
optimization-algorithms
quadratic-programming
semidefinite-programming
solver

Project health

Overall

5.0/10

Maintained

10/10

Code review

6/10
OpenSSF Scorecard

PyPI

Latest release

3.3.1 · Sep 5, 2026

Releases this year

4

Significant stargazers

Dima Pasechnik

82 followers · starred Feb 2019

Ian McInerney

69 followers · starred Feb 2020

stonebig

86 followers · starred Sep 2025

Fabien Péan

19 followers · starred Mar 2024