Raw dependency graph data (JSON)
Lunatic
Author: Ludovic HENRY ludovic.henry@qti.qualcomm.com
Date: 2026-09-10
Readiness: orange
Scope: RISC-V (riscv64/linux) support status for Lunatic
Audience: Technical leadership, resource allocation strategy
Verification policy: Every claim is cross-referenced to a primary upstream source. Items that could not be verified against a second source are marked [NEEDS VERIFICATION].
1. Project Overview
Lunatic is a Rust-implemented, Erlang-inspired actor-model runtime for WebAssembly. It executes guest WASM modules as lightweight, isolated, preemptively-scheduled processes (“actors”), using Wasmtime and its Cranelift backend as the embedded JIT/AOT compilation engine for guest code. Source: lunatic-solutions/lunatic, homepage lunatic.solutions.
Governance. There is no foundation backing Lunatic and it is not a RISE Project member (checked against riseproject.dev/members: Lunatic appears in neither the Premier nor General member lists). Governance is informal: CONTRIBUTING.md describes a plain issue-then-PR flow reviewed by an undefined “Lunatic team member” - no named maintainer tiers, no MAINTAINERS/CODEOWNERS/PLATFORMS.md file exists in the repository. The project is dual-licensed Apache-2.0/MIT, with the MIT copyright line held personally by the founder (Copyright (c) Bernard Kolobara <me@kolobara.com>). The website states the project is maintained by “Lunatic Inc.,” with no disclosed corporate sponsors.
Top contributors (full commit history, no declared corporate affiliation beyond the founder’s own company):
| Contributor | Commits |
|---|---|
| Bernard Kolobara (founder, Lunatic Inc.) | 345 |
| Hrvoje Bandov | 80 |
| Marin Kostic | 28 |
| Ari Seyhun | 13 |
| Kai Jellinghaus | 12 |
| Ante Kegalj | 10 |
This is effectively a single-founder/small-team project rather than a multi-corporate-sponsor effort.
Community culture on new ports. No document states a position for or against new architecture ports. RISC-V has never been raised in any issue, PR, commit, or discussion in the repository’s history - the topic appears simply never to have come up, which is distinct from an explicit refusal.
2. Port History and Upstreaming Timeline
Data not available: no RISC-V port history exists. git log --all -i --grep="riscv" against the full commit history (554 commits on main) returns zero matches, and GitHub commit/issue/PR search for riscv/riscv64 scoped to lunatic-solutions/lunatic returns zero results across every query variant tried. There is no first RISC-V commit, no tracking issue, and no milestone to report. The port has not been started.
3. Upstream Support Tier
No formal tier policy exists for any platform. README.md lists prebuilt binaries only for Windows, Linux, and macOS, with no architecture-level breakdown beyond that (i.e., no distinction is drawn even between amd64/arm64, let alone riscv64). There is no PLATFORMS.md, SUPPORT.md, or docs/platforms/ file.
| Axis | amd64 | arm64 | riscv64 |
|---|---|---|---|
| CI builds | yes (ubuntu-latest, windows-latest) |
yes (macOS, via aarch64-apple-darwin) |
no |
| CI runs tests | yes | yes | no (no CI target exists) |
| Official release binary | yes (lunatic-linux-amd64.tar.gz, lunatic-windows-amd64.zip) |
yes (folded into lunatic-macos-universal.tar.gz via lipo) |
no |
Source: .github/workflows/ci.yml, release assets for v0.13.2.
4. Technical Architecture and RISC-V-Specific Subsystems
Lunatic itself contains no hand-written, architecture-specific source code for any CPU architecture, including the ones it ships today. Repository-wide code search for target_arch returns exactly 6 hits, all in crates/lunatic-sqlite-api/, and all of them are cfg(target_arch = "wasm32") guest-vs-host splits (does this code compile into the WASM guest module or the native host runtime), which has nothing to do with host CPU ISA. Searches for x86_64 (4 hits) and aarch64 (3 hits) resolve entirely to the macOS lipo build step in CI and to transitive Cargo.lock crate names (winapi-x86_64-*, windows_aarch64_*) - not to hand-written machine code.
Concretely: Lunatic’s “support” for x86_64 and aarch64 today consists entirely of cargo build --target <triple>, i.e. ordinary Rust cross-compilation with codegen delegated to rustc/LLVM for the host runtime, and to the embedded Wasmtime/Cranelift dependency for JIT-compiling guest WASM modules. There is no arch/riscv/ directory, no .S assembly, no RVV/Zba/Zbb intrinsics, and no riscv64 target_arch value anywhere in the repository.
| Component | amd64 | arm64 | riscv64 |
|---|---|---|---|
| Host runtime codegen | via rustc/LLVM (no hand-written arch code) | via rustc/LLVM (no hand-written arch code) | not built (would also be via rustc/LLVM if it were) |
| Guest WASM JIT (delegated to Wasmtime/Cranelift) | supported | supported | Wasmtime ships official riscv64gc-linux artifacts and Cranelift has a riscv64 backend (Wasmtime’s own Tier 3), but Lunatic never invokes or tests this target - see wasmtime.md if present |
TLS/crypto (ring 0.16.20 via rustls 0.21.7) |
supported | supported | not supported - ring 0.16.x has no riscv64 asm/fallback path; riscv64 assembly landed only in ring >=0.17 |
Because this is a general-purpose actor runtime, not a project whose stated value proposition is beating a reference implementation on speed, Step 2 of the color model’s optimization-purpose modifier does not apply here (see Section 13).
5. Build System, Cross-Compilation, and Toolchain
Lunatic is a pure Cargo/Rust workspace (Cargo.toml, crates/* members) - there is no CMake, no Dockerfile, and no .gitlab-ci.yml/Jenkinsfile/.cirrus.yml anywhere in the repository. Confirmed by cloning lunatic-solutions/lunatic (HEAD 28a2f387ebf6a64ce4b87e2638812e2c032d5049) and grepping the full tree.
Build commands (from README/CONTRIBUTING):
cargo install lunatic-runtimeorcargo build/cargo build --release/cargo test- No documented cross-compilation section (
BUILDING.md,docs/cross-compilation.mddo not exist) - Only stated host requirement: a Rust toolchain (rustup, stable channel, per CI)
QEMU usage: none found anywhere in the repository.
Known build failure for riscv64: the pinned ring 0.16.20 (via rustls 0.21.7, consumed by lunatic-distributed and lunatic-networking-api for cluster TLS and the guest-facing lunatic::net TLS socket API) will not compile on riscv64 targets, since ring’s build.rs in the 0.16 line gates supported target_arch values and has no riscv64 asm or portable-C fallback in that release line. This is corroborated by upstream ring issue titles: #2745 “Doesn’t compile for riscv64a23-unknown-linux-gnu”, #2468 “RISC-V Support in ring version 0.16.20”, #2148 “Problem building for riscv64gc. Are there plans to support it?” - all closed without landing riscv64 support in the 0.16 branch. ring >=0.17 has riscv64 asm support, so upgrading rustls/ring (or switching TLS backend) is the concrete unblock. This inference is based on issue titles only, since issue_read access was restricted in this research session; a manual read of ring#2468 is recommended before treating this as load-bearing for a go/no-go decision [NEEDS VERIFICATION].
6. Feature Coverage and Gap Analysis vs arm64 and amd64
Since no riscv64 build of Lunatic exists in any form (no CI, no release, no package), there is no partial-functionality state to describe - the gap is total: nothing currently runs.
| Feature | amd64/arm64 | riscv64 |
|---|---|---|
| Core actor runtime (spawn, message-pass, supervise) | works | not built/not testable |
| Guest WASM JIT execution (Wasmtime/Cranelift) | works | would depend on Wasmtime’s riscv64gc backend (Tier 3 upstream) if built - untested by Lunatic |
Distributed clustering / TLS (lunatic-distributed) |
works | blocked at build time by ring 0.16.20 (see Section 5) |
Guest lunatic::net TLS sockets |
works | blocked at build time, same cause |
Embedded SQLite (lunatic-sqlite-api) |
works | plain C, builds via cc; no known blocker, but never CI-tested on riscv64 (see Section 9) |
Data not available on NaN/floating-point semantics differences or security-hardening deltas specific to riscv64: no such analysis exists anywhere in the project’s issues, docs, or CI, because no riscv64 build has ever been attempted.
7. CI/CD Infrastructure
No riscv64 CI exists. Verified by reading the complete content of all three workflow files in .github/workflows/ (the entire CI surface of the repository):
ci.yml(“Test & (release)”) - triggers on everypush/pull_request, plus a tag-triggered release path. Runner matrix (3 entries, all read):ubuntu-latest->lunatic-linux-amd64.tar.gz;macos-11->lunatic-macos-universal.tar.gz(viacargo build --target x86_64-apple-darwin+--target aarch64-apple-darwin+lipo);windows-latest->lunatic-windows-amd64.zip. No riscv64 entry, no QEMU step, no cross toolchain setup.homebrew.yml- triggers onrelease: published; dispatches a Homebrew formula update viacurl, runs onubuntu-latest, no architecture logic at all.cargo-deny-pr.yml- triggers onCargo.tomlchanges, runscargo-deny(advisories/bans/licenses/sources, not a build) onubuntu-latestonly.
A case-insensitive grep for riscv/riscv64 across .github/workflows/ returns zero matches. No .gitlab-ci.yml, Jenkinsfile, or .cirrus.yml exists anywhere in the repository. There is no evidence of RISE RISC-V runner usage (no reference to riseproject-dev or RISE runner labels anywhere in the CI configuration).
| Axis | amd64 | arm64 | riscv64 |
|---|---|---|---|
| Build job exists | yes (ubuntu-latest, windows-latest) |
yes (macos-11) |
no |
| Tests run | yes | yes | no |
| Release-blocking | yes (tag-triggered release path) | yes | N/A |
| Runner type | GitHub-hosted | GitHub-hosted | none |
8. Distribution and Release Status
No riscv64 binaries exist through any channel checked:
- GitHub releases - last three releases (v0.13.2, v0.12.0, v0.10.1) each ship only
lunatic-linux-amd64.tar.gz,lunatic-macos-universal.tar.gz,lunatic-windows-amd64.zip, plus source archives. Source: releases/expanded_assets/v0.13.2. - PyPI - pypi.org/pypi/lunatic/json lists a package named
lunatic, but it is an unrelated PostgreSQL Python utility (homepagegithub.com/agile4you/lunatic) - not the WASM runtime. Only a source tarball is published, with no riscv64 relevance either way. - RISE Python wheel builder - gitlab.com/…/packages/pypi/simple/lunatic/ redirects (HTTP 302) to the plain PyPI index, meaning RISE has no
lunaticpackage of its own. Confirmed also by the RISE wheel builder’s full 88-package listing at riseproject.gitlab.io/python/wheel_builder, which does not include Lunatic. - Ubuntu 26.04 (resolute) - packages.ubuntu.com search returns “Sorry, your search gave no results” - no
lunaticpackage exists in this suite on any architecture, not just riscv64. - Arch Linux RISC-V port - archriscv.felixc.at/?q=lunatic - no package listed.
What a user must do today to get a working riscv64 binary: build from source with cargo build --target riscv64gc-unknown-linux-gnu, and first resolve the ring 0.16.20 build failure described in Section 5 (e.g. by patching Cargo.toml to a rustls/ring pairing with riscv64 support, or disabling the TLS-dependent crates). No prior art for this exists publicly.
9. Dependencies
Manifest: Cargo.toml (Rust/Cargo workspace, root crate lunatic-runtime v0.13.2) - no CMakeLists.txt/setup.py/go.mod/package.json.
| Dependency | Role | riscv64 build | riscv64 test | riscv64 release | Notes |
|---|---|---|---|---|---|
| Wasmtime (8.0.1, incl. in-tree Cranelift 0.95.1) | Core WASM JIT/AOT engine, compiles every guest actor’s wasm32 module; build-dependency, critical | builds on riscv64gc-unknown-linux-gnu (upstream ships official riscv64gc tarballs); Lunatic’s 8.0.1 pin is late-2022 era, predating several later riscv64 codegen fixes |
upstream QEMU matrix exercises riscv64 but only at Tier 3 (no continuous fuzzing) | Wasmtime ships official riscv64gc-linux release artifacts upstream | Open upstream issues referenced in research: #12195, #13959, #13078, #11050, #7186, #5882 [NEEDS VERIFICATION - issue numbers from a single research pass, not independently re-checked in this report] |
| Rust (rustc/Cargo toolchain) | Build-dependency, critical - sole compiler/toolchain for the entire project | Rust has an official riscv64gc-unknown-linux-gnu target | N/A (toolchain, not a tested artifact of Lunatic’s own CI) | Official Rust riscv64gc target ships from rust-lang | RISE-funded work exists on this exact axis: RP004 “Support for a 64-bit RISC-V Linux port of Rust to Tier-1” - this is upstream Rust/RISE infrastructure work, not Lunatic-specific, but directly relevant to closing this dependency’s gap |
SQLite (bundled via sqlite3-src/sqlite3-sys, lunatic-sqlite-api) |
Runtime-dependency, optional - embedded SQL engine exposed to guest actors | Portable C, builds via cc; a __uint128_t guard bug affecting 128/160-bit multiply helpers (riscv32/riscv64 conflated) was fixed 2026-04, now resolved for riscv64 per prior research [NEEDS VERIFICATION - single source] |
no upstream CI for riscv64 (“best-effort community-reported”) | distro packages ship SQLite for riscv64 broadly | This is the upstream sqlite/sqlite C library vendored by the crate, not a distinct Rust crate |
ring 0.16.20 (pinned via rustls 0.21.7) |
Crypto primitives (AES/SHA/ECDSA/RSA) underlying TLS for lunatic-distributed clustering and the guest lunatic::net TLS API |
fails to build on riscv64 - no asm/fallback path in the 0.16 line | N/A - does not compile | N/A | See Section 5; riscv64 asm landed only in ring >=0.17 |
rustls 0.21.7 |
TLS handshake/session layer | blocked transitively by ring 0.16.20 |
N/A | N/A | No riscv64-specific issues found in rustls itself - the blocker is entirely the pinned ring version |
native-tls/openssl 0.2.11 (via reqwest, CLI binaries only) |
HTTPS client for package-manager operations in the lunatic/cargo-lunatic CLI |
builds fine - OpenSSL has mature riscv64 support across major distros | N/A | ships broadly as a system package on riscv64 | Not part of the guest-facing runtime |
zstd 0.11.2 / zstd-sys 2.0.9 (via zip, used for cargo-lunatic package archives) |
Compression codec | builds via vendored C, riscv64 supported with community-only (non-CI) coverage | no upstream RISC-V CI runner | Debian/Ubuntu ship riscv64 zstd | Two stalled community PRs on riscv64 codepaths (facebook/zstd #4557, #4622), unreviewed as of the research date [NEEDS VERIFICATION] |
bzip2/bzip2-sys 0.1.11+1.0.8 (via zip) |
Compression codec | trivial - pure C89, no arch-specific code | distro build farms only | Debian sid and Ubuntu 24.04 ship riscv64 bzip2 | No riscv64-specific issues |
flate2 1.0.28 / miniz_oxide 0.7.1 / crc32fast 1.3.2 (via zip) |
DEFLATE compression | pure Rust, arch-independent (SIMD CRC paths exist only for x86/aarch64, portable scalar fallback elsewhere) | N/A | N/A | No riscv64-specific issues |
cap-std 1.0.15 / wasi-common 8.0.1 / wiggle 8.0.1 |
WASI syscall layer wasmtime uses for host FS/net exposure to guests | pure Rust + rustix syscalls, arch-independent |
inherits Wasmtime’s Tier 3 riscv64 coverage | ships with Wasmtime | No riscv64-specific issues |
regalloc2 0.6.1 |
Register allocator used internally by Cranelift | pure Rust, arch-independent algorithm | inherits Cranelift’s coverage | ships with Wasmtime | No riscv64-specific issues |
Headline dependency finding: the single most consequential blocker is ring 0.16.20, pulled in via rustls 0.21.7 for Lunatic’s inter-node clustering TLS and its guest-exposed lunatic::net TLS socket API - this is not an incidental transitive dependency. As currently pinned, Lunatic’s networking/clustering crates cannot build at all on riscv64, independent of Wasmtime/Cranelift’s own (functional-but-Tier-3) riscv64 support.
10. Ecosystem Status
Not applicable. Lunatic is a standalone language runtime distributed as native binaries and a Cargo crate; it has no significant dependent package ecosystem (no plugin registry, no package-manager-hosted extension surface analogous to PyPI/npm/Maven modules) that would need separate riscv64 enablement.
11. Known Bugs and Active Issues
| ID | Title | Status | Severity | Notes |
|---|---|---|---|---|
| - | (none found) | N/A | N/A | Zero open or closed issues/PRs mention riscv64/RISC-V in lunatic-solutions/lunatic, confirmed via repeated GitHub issue/PR/code/commit searches across multiple query variants, all returning total_count: 0 |
No riscv64-specific correctness bugs exist for Lunatic itself, because no riscv64 build has ever been produced to surface them. The one concrete, load-bearing bug affecting a riscv64 port is in a dependency, not Lunatic’s own code: ring’s lack of riscv64 support in the 0.16 branch (Section 5, Section 9).
12. Objections and Upstream Blockers
Stated objections: none - RISC-V has never been discussed in the project’s issue tracker, PRs, commits, or documentation.
Technical blockers:
ring 0.16.20(viarustls 0.21.7) does not build on riscv64 - blocks the networking/distributed-clustering crates outright (Section 5, Section 9).- No riscv64 CI target exists to validate a build even if the
ringblocker were resolved. - Wasmtime 8.0.1 (the pinned version) predates later riscv64 Cranelift codegen fixes; the current pin’s riscv64 maturity relative to upstream’s present-day Tier 3 status is unverified [NEEDS VERIFICATION].
Organizational blockers: Lunatic is maintained by a small, single-founder team (Lunatic Inc.) with informal governance and no named platform-support tiering. There is no evidence of engineering capacity dedicated to new-architecture ports, and no RISE or foundation relationship that would supply such capacity externally.
Acceptance probability: No data exists to estimate this - there is no precedent of the maintainers accepting or rejecting an architecture-port PR of any kind (the project’s only architecture work to date has been ordinary Cargo cross-compilation targets set up by the founder, not community-contributed ports). Data not available: no comparable PR history to gauge maintainer receptiveness.
13. Readiness Assessment
- Color: orange
- Release provider: none
- Justification: Lunatic has no upstream riscv64 CI of any kind - all three CI workflow files (ci.yml, homebrew.yml, cargo-deny-pr.yml) were read in full and contain zero riscv64 references, and the runner matrix covers only amd64 Linux/Windows and macOS (x86_64+aarch64 via
lipo). The distribution floor does not raise this: no Linux distribution ships alunaticpackage for riscv64 or, in fact, for any architecture - Ubuntu 26.04 (resolute) has nolunaticpackage at all and Arch Linux’s RISC-V port does not list it either, so there is no clean or patched distro build to float the grade to yellow. This is not a case of confirmed breakage (red) - no riscv64 build has ever been attempted, so nothing has been shown to fail at runtime - and it is not grey, since the CI/release/packaging evidence is unambiguous and complete rather than absent. This is a general-purpose actor-model runtime, not an optimization-purpose project (removing architecture-specific code would not remove its core value proposition), so the Step 2 optimization modifier of the color model does not apply andoptimization_gapis N/A. - Pending work that could change the grade: none identified. No open PR, no tracking issue, and no RISE Project involvement exists for Lunatic (checked against riseproject.dev/blog - all 34 posts via sitemap, riseproject.dev/members, the RISE wheel builder, and the
riseproject-devGitHub org). The only place “Lunatic” appears in any RISE-adjacent data is an unresearched backlog entry in this report repository’s own internalproject-reports/.queue.ymlfile, which is not a RISE-published statement of involvement. Any movement on this grade would have to originate from a fresh third-party or community-initiated port effort; none is currently visible.
14. Investment Analysis
RISE has not funded or otherwise touched Lunatic directly (Section 13). The only RISE work relevant here is indirect, at the dependency layer: RP004, RISE-funded work to bring the 64-bit RISC-V Linux port of Rust to Tier-1, which benefits Lunatic’s toolchain dependency but does nothing to unblock Lunatic’s own CI, its ring-blocked TLS crates, or its release pipeline. All work items below are therefore unclaimed.
14.1 Functional Enablement
- Replace or upgrade the
ring/rustlspairing (targetrustls>=0.22 withring>=0.17, or anaws-lc-rs/native-tls-backed alternative) solunatic-distributedandlunatic-networking-apican build on riscv64 at all (Section 5, Section 9). - Add
riscv64gc-unknown-linux-gnuas acargo build --targetinci.ymland confirm the resulting binary starts and can spawn/schedule actors. - Validate the bundled SQLite build (
lunatic-sqlite-api) on riscv64 given the previously-fixed__uint128_tguard bug [NEEDS VERIFICATION - single-source finding].
14.2 Performance Optimization
Not a primary concern for a functional-enablement-stage project, but worth tracking: Lunatic’s guest-WASM execution speed on riscv64 is entirely inherited from Wasmtime/Cranelift’s riscv64 backend, which sits at Wasmtime’s own Tier 3 with several referenced open correctness/codegen issues in SIMD/vector lowering [NEEDS VERIFICATION - issue list from a single research pass]. No Lunatic-specific optimization work is warranted until functional enablement (14.1) lands.
14.3 CI/CD Infrastructure
- Add a riscv64 job to
ci.yml’s runner matrix, running the existingcargo testsuite (not build-only), to reach at minimum the “blue” tier of the color model. - Consider RISE’s newly-announced free native RISC-V GitHub CI runners (riseproject.dev, “Announcing the RISE RISC-V Runners”) as the concrete mechanism, since Lunatic already uses GitHub Actions exclusively and has no existing riscv64 runner relationship to replace.
- Add riscv64 release-asset publishing (
lunatic-linux-riscv64.tar.gz) to the tag-triggered release path once CI is green, to reach “green” (upstream-provided release).
14.4 Ecosystem Enablement
Not applicable - Lunatic has no dependent package ecosystem to enable (Section 10).
14.5 Summary Table
| Area | Work Item | Effort (person-weeks) | Owner | Priority |
|---|---|---|---|---|
| Functional | Replace/upgrade ring/rustls to unblock riscv64 TLS build |
1-2 | Lunatic maintainers or external contributor | Critical |
| Functional | Add riscv64 Cargo target build and smoke-test actor spawn/scheduling | 1-2 | Lunatic maintainers or external contributor | Critical |
| Functional | Validate bundled SQLite build/runtime on riscv64 | 0.5-1 | Lunatic maintainers or external contributor | Medium |
| CI/CD | Add riscv64 job to ci.yml running full test suite (not build-only) |
1 | Lunatic maintainers | High |
| CI/CD | Adopt RISE RISC-V GitHub runners for the new job | 0.5 | Lunatic maintainers | High |
| Distribution | Add riscv64 release-asset publishing to tag-triggered release path | 0.5 | Lunatic maintainers | Medium |
| Performance | Track Wasmtime/Cranelift riscv64 backend maturity (Tier 3, open SIMD-lowering issues) as a monitored dependency, not direct Lunatic work | ongoing (monitoring only) | N/A | Low |
15. Updates
(No updates yet - initial report dated 2026-09-10.)
16. References
- lunatic-solutions/lunatic (repository)
- lunatic.solutions (homepage)
- .github/workflows/ci.yml
- .github/workflows/homebrew.yml
- .github/workflows/cargo-deny-pr.yml
- Release v0.13.2 assets
- Release v0.12.0 assets
- Release v0.10.1 assets
- PyPI lunatic package (unrelated project)
- RISE Python wheel builder - simple index for lunatic
- RISE Python wheel builder - full package list
- Ubuntu 26.04 (resolute) package search: Lunatic
- Arch Linux RISC-V port search: lunatic
- RISE Project members
- RISE Project blog index
- RISE Project RP004: Support for a 64-bit RISC-V Linux port of Rust to Tier-1
- RISE Project: Announcing the RISE RISC-V Runners
- ring issue #2745: Doesn’t compile for riscv64a23-unknown-linux-gnu
- ring issue #2468: RISC-V Support in ring version 0.16.20
- ring issue #2148: Problem building for riscv64gc
- CONTRIBUTING.md
- LICENSE-MIT
- CHANGELOG.md