Hyperledger Solang
A Solidity compiler for Stellar
| Category | Developer Experience |
| Website | https://solang.io/ |
| Repository | https://github.com/hyperledger-solang/solang |
| First Released | November 2025 |
| Intake | https://github.com/SCF-Public-Goods-Maintenance/scf-public-goods-maintenance.github.io/issues/24 |
| Budget Requested | $25,000 |
Project Description
Solang is a Solidity compiler for Stellar which lives under LFDT. We aim to have the following impact on Stellar ecosystem.
Long-term impact
- Enable a production-ready compiler for Stellar.
- Lower the barrier for Solidity developers to build on Stellar.
Short-term impact
- Build an open-source contributor community with deep knowledge of both Solidity and the Soroban VM architecture through yearly LFDT mentorships.
- Provide a practical onboarding path for EVM developers who want to experiment with Soroban.
- Produce comparative research between Solang and the Soroban Rust SDK, generating insights about where each approach performs best and for which use cases.
- Gather early feedback on Solang tooling, developer experience, and developer pain points.
Team & Experience
@salaheldinsoliman: A compiler engineer working on Solang to support the Soroban target.
@mohamedbasuony: A software engineer in the university of Göttingen, with an interest in developer tooling.
@abdallah-abdelnaby: A software engineer in the university of Göttingen, with an interest in compiler engineering.
@Islam-Imad: A software engineer with an interest in compilers and low-level systems programming
Retroactive Impact
-
Since soft launching Solang and its Playground, we’ve had ~20 monthly active users, from which we are receiving feedback to improve the compiler and its tooling.
-
LFDT accepted a Solang Mentorship in it’s Mentorship program; we’ve selected @aryanbaranwal001 who will be working on comparing Solang to the Stellar Rust SDK in terms of behavior, performance and binary size.
Past Deliverables
2026 Q2
The deliverables of Q2 were categorized as follows:
Codebase maintenance
Deliverable: A current issue of the codebase is the entangled target logic incodegen. As Solang supports multiple compilation targets, some target-specific logic and conditionals are scattered in codegen (Solang’s IR emission stage). Detangling here means that each target should have its own implementation ofcodegen, rather than injecting target-specific logic.Proof of completion: This PR introduces aTargetCodegentrait, relocates the Solana / Polkadot / Soroban backends undersrc/codegen/targets/, threads the target through the lowering call graph, and routes target-specific hooks (abi encode/decode, storage arrays, events, builtins, load/store) through the trait. This separates target concerns and detangles target-specific logic in codegen, reducing the amount of code that needs auditing.
Developer Experience
Deliverables:
- Make Solang docs up to date: clearly state what is currently supported and what is not.
- Improve compiler error reporting: As of now, for the currently unsupported Solidity syntax or Soroban-specific features, Solang most often fails with a vague error message. We aim to fix this in this quarter.
- More useful error reporting in Solang Playground.
Proof of Completion:
- Docs: the Soroban documentation was reorganized to clearly separate supported vs. unsupported features and state the current support status: #1883.
- Compiler error reporting: unsupported Soroban ABI types are now rejected before codegen with a clear diagnostic instead of a vague, late failure: #1903 (fixes #1897).
- Playground error reporting: full Solang compiler diagnostics (warnings, multi-line source spans, and fallback output) are now propagated end-to-end through the Playground compile flow to the UI, instead of being truncated to a single stripped
error:line: solang-playground#35 (merged todevelop).
Feature Completion
Deliverable:
- Support the remaining Soroban-examples.
Proof of Completion:
- The upstream Soroban
eventsexample — previously unsupported (Solang panicked onemitfor Soroban) — is now compiled and tested, enabled by implementing event emission via thecontract_eventhost function (#1893). Covered bytests/soroban_testcases/events.rs. - The new
string/bytes/bytesNsupport (#1927) together with struct and vector support now makes several previously-blocked upstream examples expressible in Solidity (tracked in #1901) — e.g.custom_types(struct-backed values returned from public APIs),atomic_multiswap(aSwapSpecstruct + vectors),single_offer(token + cross-contract trading), andother_custom_types(structs/enums/vectors/events). - A reusable
pauseexample was added (#1907), withincrement_with_pausein progress (#1911). - Coverage continues to expand via in-flight work: dynamic
bytesin the ABI/codec (#1904),bytesNparameters/returns (#1908), storage vectors (#1848), andsha256/keccak256builtins (#1919) — which unlock bytes-heavy and hash-based examples such aseth_abiandmerkle_distribution. - All of the above build on the already-supported set (token, atomic_swap, liquidity_pool, timelock, auth, TTL, cross-contract calls,
printlogging, storage/arrays) and were shipped in Solang v0.3.5 “Luxor” (#1930 · crates.io). - Status (2026-07-26): per-example coverage is now tracked in #1901 with the calculation shown openly: 40% merged (10 of the 25 upstream examples that are language features), 60% when open PRs are included —
mint-lock(#1985),other_custom_types(#1983), the idiomaticatomic_multiswapvia arrays-of-structs support (#1986),single_offer(#1968) andincrement_with_pause(#1977). The remaining work is explicitly carried into this proposal as Deliverable 4 below.
Fuzzer
Deliverable:
- Plan and start a fuzzer that compares a corpus of Solidity contracts’ behavior on
solc+ethereumvssolang+Stellar. At the end of this quarter, the fuzzer should be able to take a corpus of Solidity contracts and report Solang compilation errors.
Proof of Completion:
- The fuzzing harness
solang-fuzz— originally authored by @jubnzv (jubnzv/solang-fuzz, built on theirmultifuzz,afl-tsandtsgentooling) — is an AFL++ harness with atree-sitter-soliditymutator that targets Solang’scodegenandsemapasses across the Solana, Polkadot and Soroban targets. - The fuzzer took a corpus of Solidity contracts and surfaced 25 distinct, reproducible compiler crashes, each triaged and reported as an issue on Solang by @jubnzv, some of them are:
Proposed Impact
-
Expand Solidity support via fuzzing. Keep running and improving the Solang fuzzer to harden the compiler and widen Solidity coverage — triaging and fixing the crashes it surfaces.
-
Announce the new “Luxor” release. Publish and announce Solang v0.3.5 “Luxor”, which adds new Soroban examples (e.g.
events) and a batch of Solidity/compiler fixes, so the Stellar ecosystem can build on the latest compiler. -
Gather another round of feedback. Put the new release, the Playground, and the language server in front of users and collect feedback on the compiler and its tooling to prioritize the next round of work.
-
Complete the LFDT mentorship. Finish the ongoing mentorship, growing an open-source contributor with deep Solang and Soroban knowledge.
-
Make Stellar easier to onboard via Solang. Lower the barrier for Solidity/EVM developers to build on Stellar.
Proposed Deliverables
Proposed Deliverables (next three months)
1. Extend Solidity support via fuzzing — harden the compiler
Continue running and improving the Solang fuzzer, triaging and fixing the compiler crashes it surfaces. Robustness is the gating requirement to bring Solang to production, so fewer compiler crashes directly de-risk deploying Solidity contracts on Soroban.
- SMART alignment: specific and measurable — fix ≥ 20 of the ~25 open fuzzer-found crashes (plus any new ones), keep the fuzzer running continuously with triaged issue reports, and extend its coverage (mutators / target passes) to reach different compiler paths; achievable, as the fuzzer already exists and a wave of fixes is already in flight (e.g. #1884–#1894, #1915, #1924); relevant to bringing Solang to production; and time-bound to the next three months.
2. Differential tester — first working version (via the LFDT mentorship)
Through the LFDT mentorship, build a differential tester — a separate tool from the fuzzer — that compiles and runs the same Solidity contract on solc+EVM and solang+Soroban and compares observable behavior to surface miscompiles (semantic divergences), not just crashes. This catches correctness bugs a crash-fuzzer cannot, the next level of production-readiness assurance for Solidity on Stellar.
- SMART alignment: specific and measurable — deliver a first working version that runs a set of Solidity contracts through both toolchains and reports behavioral divergences; achievable, as the mentorship is already underway (#74); relevant to compiler correctness for Stellar; and time-bound to the next three months, when the mentorship concludes.
3. Grow developer reach and run a structured feedback round
Produce Solidity-on-Stellar developer content — blog posts, a video walkthrough, and a live workshop — centered on the new Luxor (v0.3.5) release and the Playground, then collect and triage feedback. This lowers the onboarding barrier for Solidity/EVM developers to Stellar, grows adoption, and creates a prioritized feedback loop that steers future work.
- SMART alignment: specific and measurable — publish ≥ 2 blog posts and ≥ 1 video, run ≥ 1 workshop/live session, gather feedback from ≥ 25 developers, and convert it into ≥ 15 prioritized GitHub issues; achievable given our ~20 monthly active users and prior launch reach; relevant to adoption and onboarding; and time-bound to the next three months.
4. Support the remaining Soroban examples (carried over from Q2)
Complete the remaining feasible upstream soroban-examples, fixing the compiler gaps they expose along the way — this quarter showed that most “example” work is really compiler work (array allocation, ABI returns, arrays of structs as parameters). Progress is tracked per example, with coverage percentages and the calculation shown, in #1901.
- SMART alignment: specific and measurable — raise merged coverage from 40% (10/25) to ≥ 68% (17/25) by landing the five examples currently in open PRs (#1983, #1985, #1986, #1968, #1977) and adding
eth_abiandmerkle_distribution; the 8 examples requiring new host-function support (custom accounts, deploy/upgrade, BLS/ZK) are explicitly out of scope for this quarter and tracked separately in #1901; achievable, as the blocking compiler fixes are already in review; relevant to Solidity-on-Stellar parity; and time-bound to the next three months.
Metrics loaded from PG Atlas
Legal Acknowledgements
- As the project representative, I agree to the Legal Acknowledgements.