Est. 2014 Intermediate

Solidity

A statically typed, contract-oriented language for writing Ethereum smart contracts that compile to EVM bytecode, and the dominant language of DeFi, NFTs, and DAOs.

Created by Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, and Ethereum contributors

Paradigm Object-oriented, contract-oriented, imperative
Typing Static, Strong
First Appeared 2014
Latest Version Solidity 0.8.35 (2026)

Solidity is the dominant programming language for writing smart contracts — self-executing programs that run on a blockchain. Statically typed and contract-oriented, it was designed specifically to target the Ethereum Virtual Machine (EVM), compiling human-readable source into the low-level bytecode that Ethereum and every EVM-compatible chain executes. Since its introduction in 2014, Solidity has become the foundational language of decentralized finance (DeFi), non-fungible tokens (NFTs), and decentralized autonomous organizations (DAOs), making it one of the most consequential domain-specific languages of the blockchain era.

History & Origins

Solidity was proposed in August 2014 by Gavin Wood, a co-founder of Ethereum, as a way to make writing smart contracts approachable for developers coming from mainstream backgrounds. Its initial implementation was led by Christian Reitwiessner, working with Alex Beregszaszi and other early Ethereum contributors under what would become the Ethereum Foundation.

When the Ethereum mainnet launched in 2015 (the Frontier network, in mid-2015), Solidity shipped as its primary contract language. The design goal was pragmatic: give web and application developers a familiar-looking language — with curly braces, familiar control flow, and object-like abstractions — so they could program a fundamentally new kind of computer, a globally shared, deterministic virtual machine whose state is agreed upon by a decentralized network.

The compiler, solc, has been developed in the open ever since, with a steady cadence of releases that have progressively tightened the language’s safety guarantees.

Design Philosophy

Solidity’s design reflects the unusual environment it targets. Programs are deployed once to an immutable ledger, execute in a trustless setting where anyone can call them, and directly control valuable assets. Several principles follow from this:

  • Contracts as the core abstraction. The contract is Solidity’s central unit, analogous to a class in object-oriented languages. Contracts bundle persistent state variables with the functions that operate on them, and they can inherit from one another using multiple inheritance resolved by C3 linearization.
  • Determinism and the gas model. Every operation on the EVM consumes gas, a unit that meters computation and storage so that execution is bounded and paid for. This makes efficiency a first-class concern: unbounded loops or expensive storage writes translate directly into cost and can hit block limits.
  • Explicitness over convenience. Because bugs can be catastrophic and contracts are hard to change once deployed, the language has evolved toward requiring developers to be explicit about visibility, inheritance overrides, and unsafe arithmetic.

Key Features

  • Static, strong typing with value types (integers, booleans, addresses, fixed-size bytes) and reference types (arrays, structs, and mapping key-value stores).
  • Function modifiers — reusable guards such as an onlyOwner check that wrap functions with shared pre- and post-conditions.
  • Events and logs that contracts emit so off-chain applications can efficiently index on-chain activity.
  • The Application Binary Interface (ABI) — a type-safe encoding scheme that defines how external callers invoke contract functions.
  • Inheritance, libraries, and interfaces for structuring and reusing code, including stateless libraries that can be linked or embedded.
  • Yul, a low-level intermediate language within the Solidity toolchain, and inline assembly for fine-grained control when needed.

A short example of a minimal contract:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Greeter {
    string public greeting;

    constructor(string memory _greeting) {
        greeting = _greeting;
    }

    function setGreeting(string calldata _greeting) external {
        greeting = _greeting;
    }
}

Evolution

Solidity’s release history is largely a story of hardening the language against real-world exploits and footguns:

  • 0.4.x (from 2016) established the language for early Ethereum development. In this era, integer overflow was unchecked, so the community relied on the SafeMath library to guard arithmetic.
  • 0.5.0 (2018) introduced stricter type checking and demanded more explicit code.
  • 0.6.0 (2019) added explicit virtual/override keywords, try/catch for external calls, and a clean split between receive and fallback functions.
  • 0.8.0 (2020) was a landmark: arithmetic overflow and underflow became checked by default, reverting the transaction on failure and largely retiring the SafeMath pattern, with unchecked { } blocks available to opt out where gas savings matter.

Notably, Solidity has remained on the 0.8.x line for over five years; as of the 0.8.35 release in April 2026, no 0.9 or 1.0 version has shipped. Development continues incrementally rather than through sweeping major-version rewrites.

Current Relevance

Solidity remains the default language for smart-contract development across Ethereum and the broad ecosystem of EVM-compatible chains, including networks such as Polygon, BNB Chain, Arbitrum, Optimism, and Avalanche. The overwhelming majority of ERC-20 tokens, ERC-721 and ERC-1155 NFTs, DeFi protocols, and DAO governance systems are written in it.

Its ecosystem is mature: development frameworks (such as Foundry and Hardhat), audited component libraries like OpenZeppelin Contracts, and a large body of security tooling and auditing practice have grown up around the language. Alternatives exist — most notably Vyper, a Python-influenced language that targets the same EVM with a deliberately more restrictive feature set — but Solidity’s network effects, tooling, and installed base keep it firmly in the lead.

Why It Matters

Solidity demonstrated that a purpose-built high-level language could make an entirely new computing platform — a decentralized, adversarial, value-bearing virtual machine — accessible to ordinary developers. In doing so it enabled an entire industry: billions of dollars in value are managed today by Solidity contracts, and the language established the programming model against which every subsequent smart-contract language is measured. Its evolution also became a widely studied case study in language safety, showing how a language shaped by high-stakes bugs can push safety checks from optional libraries into built-in, default behavior.

Timeline

2014
Solidity is proposed in August 2014 by Gavin Wood as a high-level language for the Ethereum Virtual Machine. Initial development is led by Christian Reitwiessner, with Alex Beregszaszi and other early Ethereum contributors.
2015
Ethereum launches its mainnet (the Frontier network) in July/August 2015, with Solidity shipping as the primary language for writing and deploying smart contracts.
2016
Version 0.4.0 is released on September 8, 2016, marking a maturation of the language. Throughout the long-lived 0.4.x era, using the SafeMath library to guard against integer overflow becomes standard defensive practice.
2018
Version 0.5.0 is released on November 13, 2018, introducing stricter type checking and requiring more explicit code to reduce a class of common mistakes.
2019
Version 0.6.0 is released on December 17, 2019, adding explicit 'virtual' and 'override' keywords for inheritance, try/catch for external calls, and separate 'receive' and 'fallback' functions.
2020
Version 0.7.0 (July 28, 2020) tightens the language further, and version 0.8.0 (December 16, 2020) makes arithmetic overflow and underflow checked by default, reverting on failure, which largely retires the SafeMath pattern; 'unchecked' blocks let developers opt out where needed.
2026
Version 0.8.35 is released on April 29, 2026. More than five years after 0.8.0, Solidity remains on the 0.8.x line and has not shipped a 0.9 or 1.0 release.

Notable Uses & Legacy

Uniswap

One of the largest decentralized exchanges (DEXs). Its automated market maker (AMM) contracts, which let users swap tokens from on-chain liquidity pools, are written in Solidity.

Aave

A decentralized lending and borrowing protocol whose money-market smart contracts, written in Solidity, let users supply assets to earn yield and borrow against collateral.

MakerDAO

The protocol behind the DAI stablecoin, using Solidity contracts to manage collateralized debt positions and maintain DAI's peg through on-chain governance and liquidation mechanisms.

Compound

An algorithmic money-market protocol built in Solidity that sets interest rates programmatically based on supply and demand for each supported asset.

OpenZeppelin Contracts

The industry-standard open-source Solidity library of audited, reusable building blocks for token standards such as ERC-20 and ERC-721 and for common security patterns like access control, widely used by DeFi protocols.

Language Influence

Influenced By

Influenced

Yul

Running Today

Run examples using the official Docker image:

docker pull ethereum/solc:stable

Example usage:

docker run --rm -v $(pwd):/sources ethereum/solc:stable --bin /sources/Contract.sol
Last updated: