Skip to main content

Manage multiple Solidity compiler versions.

Project description

solc-select

A tool to quickly switch between Solidity compiler versions.

The tool is split into two CLI utilities:

  • solc-select: manages installing and setting different solc compiler versions
  • solc: wrapper around solc which picks the right version according to what was set via solc-select

The solc binaries are downloaded from https://binaries.soliditylang.org/ which contains official artifacts for many historial and modern solc versions for Linux and macOS.

The versioned binaries are stored in ~/.solc-select/artifacts/.

Installation

Using pip

pip3 install solc-select

Using uv (recommended for development)

uv tool install solc-select

To automatically install and use a version, run solc-select use <version> --always-install.

Running on ARM (Mac M1/M2)

solc-select provides native ARM64 support for versions 0.8.5-0.8.23, and universal binary support for 0.8.24+. For versions older than 0.8.5, Rosetta is required. See the FAQ on how to install Rosetta.

Usage

Quick Start

# Install and set a specific Solidity version
solc-select use 0.8.19 --always-install

# Check the current version
solc --version

Managing Versions

The global version of solc will automatically be set to the latest version. You can change this with the solc-select use <version> command:

$ solc --version
solc, the solidity compiler commandline interface
Version: 0.5.2+commit.1df8f40c.Linux.g++
$ solc-select use 0.4.24
Switched global version to 0.4.24
$ solc --version
solc, the solidity compiler commandline interface
Version: 0.4.24+commit.e67f0147.Linux.g++

Use SOLC_VERSION environment variable to override the global version:

$ solc --version
solc, the solidity compiler commandline interface
Version: 0.4.24+commit.e67f0147.Linux.g++
$ SOLC_VERSION=0.5.2 solc --version
solc, the solidity compiler commandline interface
Version: 0.5.2+commit.1df8f40c.Linux.g++

By default, solc-select will halt if you try to use a version that you do not have installed already. Use the --always-install flags to bypass this.

$ solc-select use 0.8.1 --always-install
Installing '0.8.1'...
Version '0.8.1' installed.

Available Commands

# List all available versions
solc-select install

# Install a specific version
solc-select install 0.8.19

# Switch to an installed version
solc-select use 0.8.19

# List installed versions
solc-select versions

# Install and switch to a version in one command
solc-select use 0.8.19 --always-install

Getting Help

Feel free to stop by our Slack channel for help on using or extending solc-select.

FAQ

OSError: [Errno 86] Bad CPU type in executable

On newer solc-select versions, this might show as solc binaries for macOS are Intel-only. Please install Rosetta on your Mac to continue. or solc binaries previous to 0.8.5 for macOS are Intel-only. Please install Rosetta on your Mac to continue.

solc releases earlier than 0.8.5 require Rosetta to be installed. Versions 0.8.5-0.8.23 run natively on ARM64, and 0.8.24+ use universal binaries. To see whether you have Rosetta installed on your Mac, run

pgrep -q oahd && echo Rosetta is installed || echo Rosetta is NOT installed

If it is not installed, it can be installed with the command

/usr/sbin/softwareupdate --install-rosetta --agree-to-license

solc-version not changing after running solc-select use [version] or setting SOLC_VERSION

Uninstall other installations of solc on your machine. solc-select re-installs solc binaries for your operating system and acts as a wrapper for solc. With duplicate solc installations, this may result in your solc version not being up to date.

"Unsupported Platform" on Windows

You might be using an old version of solc-select or Python if you are seeing this error message. The current stable release supports Windows; try upgrading your solc-select installation with the following command.

pip install --upgrade solc-select

Known Issues

SSL: CERTIFICATE_VERIFY_FAILED on running solc-select commands [investigation ongoing]

OS X: Python distributions on OS X has no certificates and cannot validate SSL connections, a breaking change introduced in Python 3.6. See StackOverflow post for additional details.

The following commands may resolve the issue; adjust the Python version to the one installed on your system:

pip3 install certifi
/Applications/Python\ 3.8/Install\ Certificates.command

Connection refused [investigation ongoing]

Our 0.2.1 version of solc-select pulls older Linux binaries from crytic/solc which seems to have introduced unexpected behavior in certain instances. Apparently, certain ISPs such as Jio may be blocking access to certain GitHub domains. If possible, try using a different Internet provider to see if it resolves the problem.

Alternatively, try downgrading to solc-select version 0.2.0.

pip3 uninstall solc-select
pip3 install solc-select==0.2.0
solc-select install

solc-select version changes, but solc --version does not match

Users seem to be experiencing situations in which the following command is successful:

solc-select use <version>

However, when running the following command, it points to an older version of Solidity.

solc --version

solc-select is intended to work with custom binaries. This means that Solidity installed through other means (i.e: brew install solidity) will not work!.

Uninstall other versions Solidity from your computer.

License

solc-select is licensed and distributed under the AGPLv3 license. Contact us if you’re looking for an exception to the terms.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

solc_select-1.2.0.tar.gz (52.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

solc_select-1.2.0-py3-none-any.whl (36.3 kB view details)

Uploaded Python 3

File details

Details for the file solc_select-1.2.0.tar.gz.

File metadata

  • Download URL: solc_select-1.2.0.tar.gz
  • Upload date:
  • Size: 52.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for solc_select-1.2.0.tar.gz
Algorithm Hash digest
SHA256 ad0a7afcae05061ce5e7632950b1fa0193ba9eaf05e4956f86effee024c6fb07
MD5 12a8ad97a444807a514891f91a51a67e
BLAKE2b-256 628951e614fdbf26f47268c18f8a3b6cf1cb67c9a8b48b7b7231c948cae97814

See more details on using hashes here.

Provenance

The following attestation bundles were made for solc_select-1.2.0.tar.gz:

Publisher: release.yml on crytic/solc-select

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file solc_select-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: solc_select-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 36.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for solc_select-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dd00cab29229570c4399058852a4052f2120d87c7e341e35f04794a13cfdd1de
MD5 9a6e243a030e57e7ae18917bff0daf33
BLAKE2b-256 68ec0d653030e519fa308e01978698289deb3e0a08adbed5df20a8b8a4884fcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for solc_select-1.2.0-py3-none-any.whl:

Publisher: release.yml on crytic/solc-select

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page