# solar [![Crates.io](https://img.shields.io/crates/v/solar-compiler.svg)](https://crates.io/crates/solar-compiler) [![Downloads](https://img.shields.io/crates/d/solar-compiler)](https://crates.io/crates/solar-compiler) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE-MIT) [![Apache-2.0 License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](/LICENSE-APACHE) [![Actions Status](https://github.com/paradigmxyz/solar/workflows/CI/badge.svg)](https://github.com/paradigmxyz/solar/actions) [![Telegram Chat](https://img.shields.io/endpoint?color=neon&logo=telegram&label=chat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fparadigm%5Fsolar)][tg-url] Blazingly fast, modular and contributor friendly Solidity compiler, written in Rust.

Solar cover

## Features and Goals > [!WARNING] > Solar is under active development and is not yet feature complete. > Use it to speed up your development workflows and tooling. > Please do not use it in production environments. - ⚡ Instant compiles and low memory usage ([benchmarks](./benches)) - 🔍 Expressive and useful diagnostics - 🧩 Modular, library-based architecture - 💻 Simple and hackable code base - 🔄 Compatibility with the latest Solidity language breaking version (0.8.*) ### Performance On six real-world projects, builds were **about 100× faster on average** than solc's via-IR pipeline, reaching **159×** on Morpho Blue. ![Whole-project build times with solc forced to via-IR: 76–159× faster across six projects](assets/build-time.png) We forced via-IR on every project for solc, though most of these projects build without it by default. We picked six of the ten whole-project cases in our benchmark suite: v4-core has no solc result, and Seaport, Solmate and Solarray are not shown. With each project's own settings, from the same CI run, we were **44× faster on average** over the six and **34×** over all nine. We measured on `main` at [commit `0303bb7d`](https://github.com/paradigmxyz/solar/commit/0303bb7d606a50ef158e34669b5851f47a1e054e) against solc 0.8.38, targeting Cancun. [Build from source](#binary-usage) to match it. Build times are the median of five runs on an AMD EPYC 9254 (24 cores), using our default eight threads; solc is single-threaded. Across the 15 real-world contracts in our runtime corpus (via-IR at 200 runs, unless a case pins its project's settings), the generated contracts used **5% less gas**, cost **26% less gas to deploy** and had **29% smaller bytecode** than those compiled with solc, as geometric means. See the [results](https://www.getfoundry.sh/perf/solar/?head=0303bb7d606a50ef158e34669b5851f47a1e054e#benchmarks) and [benchmark instructions](benches/runtime/README.md) for inputs, settings and how to reproduce them. ### How it works ![Compiler pipeline: Solidity → AST → HIR → MIR → EVM IR → bytecode, with optimization passes on MIR and EVM IR](assets/pipeline.png) MIR keeps Solidity types and operations, so passes can remove redundant checks, inline functions and avoid repeated storage and memory accesses. EVM IR handles stack operations, block layout, tail merging and peephole rewrites before assembly. See the [MIR reference](docs/MIR.md) and [codegen guide](docs/CODEGEN.md) to work on the compiler. ## Getting started Solar is available through a command-line interface, or as a Rust library. ### Library usage You can add Solar to your Rust project by adding the following to your `Cargo.toml`: ```toml [dependencies] solar = { version = "=0.2.0", package = "solar-compiler", default-features = false } ``` Or through the CLI: ```bash cargo add "solar-compiler@=0.2.0" --rename solar --no-default-features ``` You can see examples of how to use Solar as a library in the [examples](/examples) directory. ### Binary usage Install [Foundry](https://getfoundry.sh/introduction/installation/), then choose the compiler with `--use solar`: ```bash foundryup forge build --use solar forge test --use solar ``` Pre-built binaries are available for macOS, Linux and Windows on the [releases page](https://github.com/paradigmxyz/solar/releases) and can be installed with the following commands: - On macOS and Linux: ```bash curl -LsSf https://paradigm.xyz/solar/install.sh | sh ``` - On Windows: ```powershell powershell -c "irm https://paradigm.xyz/solar/install.ps1 | iex" ``` - For a specific version: ```bash curl -LsSf https://paradigm.xyz/solar/v0.2.0/install.sh | sh powershell -c "irm https://paradigm.xyz/solar/v0.2.0/install.ps1 | iex" ``` You can also use [`cargo binstall`](https://github.com/cargo-bins/cargo-binstall): - Latest version: ```bash cargo binstall solar-compiler ``` - For a specific version: ```bash cargo binstall solar-compiler@0.2.0 ``` Or build Solar from source: - From crates.io: ```bash cargo install solar-compiler --locked ``` - From GitHub: ```bash cargo install --git https://github.com/paradigmxyz/solar --locked ``` - From a Git checkout: ```bash git clone https://github.com/paradigmxyz/solar cd solar cargo install --locked --path crates/solar ``` Once installed, check out the available options: ```bash solar -h ``` Here's a few examples: ```bash # Compile a single file and emit ABI to stdout. solar Counter.sol --emit abi # Compile a contract through standard input (`-` file). echo "contract C {}" | solar - solar - < Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in these crates by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.