Skip to main content

What Is Solidity? Ethereum's Programming Language

Solidity is the statically typed, curly-bracket language for EVM smart contracts. How it compiles to bytecode, a minimal contract, versioning and Solidity vs Vyper.

Written by Eco
What Is Solidity? Ethereum's Programming Language

Solidity is an object-oriented, high-level programming language for writing smart contracts that run on the Ethereum Virtual Machine (EVM), per the Solidity documentation. It is statically typed, uses curly brackets like C++ and JavaScript, and supports inheritance, libraries and user-defined types. As of October 2026 the current release is Solidity v0.8.37, announced on September 10, 2026, per the Solidity blog.
​

Solidity contracts run on Ethereum and on other EVM chains such as Base. Base describes itself as a standard EVM chain where any Ethereum tool works unchanged, per Base docs. This page explains how Solidity code becomes a running contract, what a minimal contract looks like, how the language is versioned and how it compares with Vyper and Yul. Sources were fetched on October 13, 2026.
​

What is Solidity used for?

Solidity is used to write the programs, called smart contracts, that hold and move assets and data on EVM blockchains. Tokens, lending pools, exchanges, multisig wallets and governance systems are typical examples. A contract's code and state live at an address on the chain, and anyone can call its public functions.
​

The Solidity documentation lists voting, crowdfunding, blind auctions and multi-signature wallets as example uses. It defines a contract as a collection of code, its functions, and data, its state, that resides at a specific address on the Ethereum blockchain, per the introduction to smart contracts. Token contracts follow shared interfaces covered in Essential ERC standards, and the broader concept is explained in What Is a Smart Contract?
​

How does Solidity work?

Solidity source code is compiled by the solc compiler into EVM bytecode plus an ABI, a JSON description of the contract's functions. Deploying the bytecode creates a contract account. Each call to the contract then runs that bytecode in the EVM on every node, which charges gas for each operation.
​

Solidity to running contract  Counter.sol  --solc-->  EVM bytecode  +  ABI (function signatures)
                               |                    |
                     deploy transaction        used by wallets and
                               |               libraries to encode calls
                               v
                  contract account at an address
                               |
               call -> EVM executes opcodes, charges gas,
                       reads and writes contract storage

Per ethereum.org's EVM page, contract creation produces a contract account containing compiled bytecode, and the EVM executes as a stack machine with a depth of 1024 items, each a 256-bit word chosen for ease of use with 256-bit cryptography such as Keccak-256. The Solidity documentation covers the ABI specification and compiler usage in its own sections. Some operations call built-in contracts instead of bytecode, covered in What Is a Precompile?
​

What does a Solidity contract look like?

A Solidity file starts with a license identifier and a pragma that pins the compiler versions it accepts, then declares one or more contracts. Each contract holds state variables, which persist on the chain, and functions that read or change them. The short example below stores a counter.
​

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract Counter {
    uint256 public count;          // state variable stored onchain    function increment() external {
        count += 1;                // reverts on overflow in 0.8.x
    }
}

The pragma follows the pattern the Solidity introduction explains: it stops the file from compiling on a future breaking compiler version, where it could behave differently. The overflow comment reflects a 0.8.0 change: arithmetic operations revert on underflow and overflow, and unchecked { ... } restores the old wrapping behavior, per the 0.8.0 breaking changes page. Ethereum.org notes that the in-browser Remix IDE supports writing and testing both Solidity and Vyper, and Foundry runs tests written in Solidity, per the Foundry docs.
​

Which Solidity version should you use?

Use the latest release. Solidity is still on 0.y.z version numbers to signal a fast pace of change, and apart from exceptional cases only the latest version receives security fixes. New features and breaking changes arrive regularly, so pinning an old compiler means missing bug fixes.
​

The Solidity documentation says to deploy with the latest released version and that only the latest receives security fixes. The Solidity homepage says the team aims for a regular non-breaking release every month and roughly one breaking release per year. The v0.8.37 release fixed three important bugs, two rated low/medium severity and one very low, and added support for the SLOTNUM opcode of the Amsterdam EVM version, per its release announcement.
​

Solidity vs Vyper vs Yul: what is the difference?

Solidity is the general-purpose choice, with inheritance, libraries and the largest ecosystem. Vyper is a Python-like language that leaves out features on purpose to make contracts easier to audit. Yul is a lower-level intermediate language for developers who need fine control over the EVM.
​

Language

Style

Key trait

Source

Solidity

Curly-bracket, object-oriented, statically typed

Inheritance, libraries, complex user-defined types

Vyper

Pythonic, strongly typed

No modifiers, inheritance, inline assembly or recursive calls, to ease auditing

Yul

Intermediate language for the EVM

Recommended only after learning Solidity or Vyper

Fe

Emerging language

Still in its infancy, per ethereum.org

Ethereum.org recommends beginners start with Solidity or Vyper and look at Yul only once they are familiar with smart contract security best practices and the specifics of the EVM, per its languages page. Vyper has supported a module system since v0.4.0, reusing code through composition rather than class inheritance, per the same page.
​

Where Solidity falls short

Solidity is the default for EVM work, but its speed of change, its permissive feature set and the permanence of deployed code all create risk. The language makes it easy to write a contract that compiles cleanly and still loses funds, so tooling and review carry real weight.

  • Breaking changes. The 0.8.x release introduced many breaking changes, per the Solidity docs, and the team plans about one breaking release per year, per the Solidity homepage.

  • Compiler bugs exist. v0.8.37 fixed a bug where deleting an element of a memory bytes array overwrote up to 31 following bytes, per the release announcement.

  • Deployed code is hard to fix. Code at a contract address cannot be changed after deployment, per ethereum.org's security page; review options are covered in Smart Contract Audits.

Frequently asked questions

Is Solidity like JavaScript?

Partly. The Solidity docs say it is influenced by C++, Python and JavaScript, and it is statically typed, unlike JavaScript.
​

Is Solidity only for Ethereum?

No. It targets the EVM, so EVM chains such as Base run Solidity contracts; Base calls itself a standard EVM chain, per Base docs.
​

What is the latest Solidity version?

v0.8.37 as of October 2026, released September 10, 2026, per the Solidity blog.
​

Where can I deploy a Solidity contract for free?

On a testnet such as Sepolia, using free test ETH; see Best Sepolia faucets.
​

Related reading

Methodology and sources

Language facts come from the Solidity documentation, soliditylang.org and ethereum.org, fetched October 13, 2026. The Counter example is written for this page to illustrate syntax and has not been audited.

Did this answer your question?