NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #3680 most downloaded on crates.io
Solang Solidity Parser
Last release 1 years ago
22 Jun 2025
Release timing varies
gaps range from 3 weeks to 13 months
Most releases are documented
notes for 14 of 23 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
23 releases · first in 2021
One column per quarter.
Cuts the v0.3.5 "Luxor" release.
Release 0.3.5 Luxor (#1930)
Cuts the **v0.3.5 "Luxor"** release.
## Contents
- Bump `solang` to 0.3.5 (`Cargo.toml`), the VS Code extension to 0.3.5,
and the version references in `docs/installing.rst` /
`docs/extension.rst`.
- New `## v0.3.5 Luxor` section in `CHANGELOG.md` and
`vscode/CHANGELOG.md`.
- Refreshed `Cargo.lock`.
`solang-parser` intentionally **stays at 0.3.5**: its only change since
v0.3.4 is an inert clippy allow, 0.3.5 is already published, and
`solang` consumes the published `solang-forge-fmt 0.2.0` (which depends
on registry `solang-parser 0.3.5`) — so no parser republish is needed
and the lock keeps its validated structure.
## Depends on / includes the CI reproducibility fixes (#1929)
The release build only succeeds with the dependency fix, so this branch
is built on top of it. The first two commits are the same ones in #1929:
- `ci: commit Cargo.lock to pin ed25519-dalek and unbreak main` — a
newly-released `ed25519-dalek 3.0.0` broke `soroban-env-host`
compilation; committing `Cargo.lock` (un-ignored in `.gitignore` and
`.dockerignore`) pins it to 2.2.0 and makes CI/release builds
reproducible.
- `fix(vscode): exclude node_modules from test-suite glob` — the
extension test runner was collecting stray `*.test.js` files from
`node_modules` and aborting.
If #1929 is merged first, only the `Release 0.3.5 Luxor` commit remains
in this diff.
## Highlights since v0.3.4
- **Soroban**: `string`/`bytes`/`bytesN`, structs, (u)int256, dynamic
memory arrays, vectors-as-`VecObject`s in storage, integer width
rounding, `contract_event`-based events, and a `pause` example.
- **codegen**: large internal refactor introducing a `TargetCodegen`
trait and relocating the Solana/Polkadot/Soroban backends under
`src/codegen/targets/` (plus an `EvmTarget` scaffold).
- Toolchain moved to Rust 1.90; inkwell bumped to 0.5.0.
See `CHANGELOG.md` for the full, attributed list.
Signed-off-by: salaheldinsoliman <salaheldin_sameh@aucegypt.edu>
string, bytes and bytesN types. Islam-ImadVecObjects. salaheldinsolimancontract_event host function. 0xullpause example. Amit SinghmarTargetCodegen trait and moved
the Solana, Polkadot and Soroban backends under src/codegen/targets/, threading the
target through the lowering call graph and routing target-specific hooks (abi
encode/decode, storage arrays, events, builtins, load/store) through the trait. Added
an EvmTarget scaffold. Islam-ImadCargo.lock (pinning ed25519-dalek to 2.2.0) so CI and release builds are
reproducible and no longer break on semver-compatible upstream dependency drift; the
lock is un-ignored in both .gitignore and .dockerignore. salaheldinsoliman*.test.js files from
node_modules. salaheldinsolimanstrict_soroban_types and re-enable the Soroban testcases. Pratyksh Guptamismatched_lifetime_syntaxes lint. Samuel MoeliusThis release brings out the Soroban target support, updates llvm to version 16, and fixes many smaller bugs.
This release brings out the Soroban target support, updates llvm to version 16, and fixes many smaller bugs.
string.concat() and bytes.concat() builtin functions are supported. seanyoung+ operatorstring.concat() instead. seanyoung--no-log-api-return-codes compile flag as this is now done by the runtime xermicusFull Changelog: v0.3.3...v0.3.4
This release improves the Solana developer experience, since now required accounts can be specified using annotations. For Polkadot, compatibility wit
This release improves the Solana developer experience, since now required
accounts can be specified using annotations. For Polkadot, compatibility with
Ethereum Solidity has been increased further, it is now possible to write
EIP-1967 compatible proxy contracts.
There are many fixes all over the code base.
contract Foo {
@account(oneAccount)
@signer(mySigner)
@mutableAccount(otherAccount)
@mutableSigner(otherSigner)
function bar() external returns (uint64) {}
}
forge-fmt crate. chioni16Panic errors can now be caught in try-catch statementsaddress.code builtinreturn a = b. xermicusstorage location. xermicusThe language server is much improved, and many fixes all over.
The language server is much improved, and many fixes all over.
./foo or ../foo.lamports and data fields of tx.accounts can be- now checks for overflow at runtime, and otherassert() and require() is now implemented as aThe language server is much improved, and many fixes all over.
polkadot-v1.0.0./foo or ../foo. seanyounglamports and data fields of tx.accounts can be modified again. LucasSteaddress.transfer() and address.send() functions no longer change any balances
in the error case if there was an overflow (e.g. not enough balance).
LucasSte- now checks for overflow at runtime, and other math overflow fixes.
seanyoungread when they were called by the semantic analyzer, which could lead to the external function call being eliminated spuriously. xermicustry-catch where a failed transfer trapped the contract instead of handling it in a catch all block. xermicusassert() and require() is now implemented as a transaction revert, rather
than a trap. The error data is returned, and encoded the same as on Ethereum. Error data is now
passed to the calling contract, all the way up the call stack. xermicusaddress or bytesN, in addition to bytes. seanyoungWrite environment configuration into Substrate metadata. xermicus
is_contract runtime API is available as a builtin for Substrate. xermicuswasm-opt optimizer now optimizes the Wasm bytecode on the Substrate target. xermicus@payer(my_account) can be accessed with thetx.accounts.my_account. LucasStedelegatecall() builtin has been added for Substrate. xermicusget_contents_of_file_no for Solang parser. BenTheKushset_code_hash() builtin has been aded for Substrate. xermicusrequire(i < 2**255). seanyoung.wrap() and .unwrap() user defined type methods in constants. xermicus@inheritdoc now works with bases of bases. seanyoungbytes32. seanyoungcall and deploy dispatches on Substrate. xermicus1.68.@payer annotation declares an account in a constructor. LucasSte.call() functions in functions declared as view. seanyoungcontract MyContract {
@payer(acc) // Declares account acc
@space(2+3) // Only literals or constant expressions allowed
@seed(myseed) // NOT ALLOWED
constructor(bytes myseed) {}
}
contract MyContract {
@payer(acc) // Declares account acc
@space(2+3) // Only literals or constant expressions allowed
constructor(@seed bytes myseed) {}
// When an annotations refers to a parameter, the former must appear right before the latter.
}
The parser and semantic analysis stage of Solang have gone through a security audit . All security issues have been fixed.
The parser and semantic analysis stage of Solang have gone through
a security audit. All security issues have been fixed.
--release option, which disables printing of errors. salaheldinsolimancargo test. seanyoungstorage reference, then not returning a value explicitly is an error, sinceNothing published for this version
The Solana units sol and lamports are now supported, e.g. 10 sol and 100 lamports. seanyoung
sol and lamports are now supported, e.g. 10 sol and 100 lamports.
seanyoungSystemAccount, ClockAccount, or other standard builtin
accounts, then this is automatically added to the IDL. LucasStebytesN xermicusunchecked { .. } block.
The --math-overflow command line option has been removed. seanyounginstantiation_nonce runtime API. xermicus1.65.0Solidity mappings can now have named key and named value types. seanyoung
@solana/solidity.js
Typescript library is no longer compatible with Solidity.bytesN type, the hex literal may use leading zeros to match the size
with the according bytesN, which aligns solang with solc. xermicusThe Anchor IDL data structure is now generated for every Solana contract, although the actual IDL json file is not yet saved. LucasSte
@selector([1, 2, 3, 4])selector=hex"12345678" has been removed.msg.sender was not implemented correctly on Solana, andSubstrate / breaking: Remove the deprecated random builtin. xermicus
We are happy to release solang v0.2.0 codenamed Berlin today. Aside from containing many small fixes and improvements, this release marks a milestone towards maturing our Substrate compilation target: Any regressions building up since ink! v3.0 are fixed, most notably the metadata format (shoutout and many thanks to external contributor extraymond) and event topics. Furthermore, we are leaving ink! version 3 behind us, in favor of introducing compatibility with the recent ink! 4 beta release and the latest substrate contract node v0.22.1.
solang idl which can be used for generatingHash type from ink! is the first ink! specific type made available for Solidity--log-api-return-codes CLI flag, which changes theseal API calls into the debug buffer.v0.22.1.random builtin.ink! version 4 (beta).ink! crates, which fixes allink!.ink!.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Introduce sub-commands to the CLI. Now we have dedicated sub-commands for compile, doc, shell-completion and the language-server, which makes for a cl
compile, doc, shell-completion and the language-server, which makes
for a cleaner CLI.
seanyoungink!.
xermicus.push() and .pop() on
dynamic arrays in memory.
seanyoungselector=hex"abcd0123"
syntax.
seanyoungsolang shell-completion subcommand.
xermicuscreate_program_address() and try_find_program_address()
system call on Solana
seanyoungprint() builtin is now supported and will write to the debug
buffer. Additionally, error messages from the require statements will now be
written to the debug buffer as well. The Substrate contracts pallet prints the
contents of the debug buffer to the console for RPC ("dry-run") calls in case
the runtime::contracts=debug log level is configured.
xermicusAdded spl-token integration for Solana
git submodule update --init --recursive to fetch the test files, and
then run the test with cargo test --workspace.Added support for Solidity user types
using syntax on file scopeusing--import and --importmap argumentsaccounts: call argument.On Solana, the accounts that were passed into the transactions are listed in the tx.accounts builtin. There is also a builtin struct AccountInfo
tx.accounts builtin. There is also a builtin struct AccountInfo--emit ast-dotsolang-parser.Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →