AN EXECUTION CLIENT
FOR THE EVM ECOSYSTEM

LinuxmacOSWindowsDocker
Runtime stack

Every library, and how each is tracked

The complete manifest of what Fukuii depends on at runtime, by layer and by release track. Nothing here is a transitive surprise: the list is short because a dependency has to earn its place, and each one is followed on a track chosen deliberately rather than taken at whatever version happens to be newest.

docker run ghcr.io/fukuii-project/fukuii-cli
Scala 3PekkoJVMRocksDB
Stack

The stack

A current stack, on purpose. Scala 3 LTS, current JDK LTS, RocksDB, maintained to the latest stable across the board. Production infrastructure runs on supported foundations, not frozen ones. This is what active engineering looks like in a dependency manifest.

Runtime dependencies and why each was chosen
ComponentWhat it isWhy it matters
Scala 3 LTS · current JDK LTSLanguage and runtimeA current, maintained foundation, not a frozen one.
Apache PekkoActor runtimeOpen Apache license; no commercial subscription, no vendor lock.
RocksDBStorage engineThe same proven embedded store the EVM client world relies on.
Cats Effect 3 · fs2ConcurrencyPure-functional effects; correctness extended into the runtime.
Bouncy Castle · BLS12-381 · KZGCryptographyThe same primitives used across the wider Ethereum ecosystem.
Netty · Micrometer · PrometheusNetworking and observabilityThe JVM operational toolchain, the part that matters at 3 a.m.
Full dependency manifest by layer, library and release track
LayerLibraryTrack
LanguageScala 3 LTSCurrent LTS patch
JDKOpenJDKCurrent LTS
Actor systemApache Pekko (actor + typed + streams)Latest stable
HTTP / WebSocket / GraphQLApache Pekko HTTPLatest stable
GraphQL engineSangria (EIP-1767)Latest stable
StorageRocksDB JNILatest stable
In-memory cacheCaffeine / ScaffeineLatest stable
CryptoBouncy CastleLatest stable
BLS12-381Hyperledger Besu BLSLatest stable
KZG / EIP-4844jc-kzg-4844Latest stable
EffectsCats Effect 3Latest stable
Streamingfs2Latest stable
FP coreCatsLatest stable
Codec / RLPscodec-core / scodec-bitsLatest stable
NetworkingNettyLatest stable
Network discoveryUPnP via JUPnPLatest stable
Serializationjson4s / circeLatest stable
MetricsPrometheus Java clientLatest stable
MetricsMicrometer (JMX + Prometheus)Latest stable
ObservabilityKamonLatest stable
LoggingLogback / scala-logging / log4catsLatest stable
Compressionsnappy-javaLatest stable
Update policy
  • RocksDB: tracked to the latest stable release, not pinned to an old baseline.
  • Apache Pekko: the actor system, under Apache Software Foundation governance and Apache 2.0 throughout. It forked from Akka before that project moved to the Business Source License, so nothing here carries a source-available or commercial-use restriction.
  • BouncyCastle: cryptography from a library with a long audit history, rather than a reimplementation.
  • Scala 3 LTS: kept current with each LTS patch release.
  • JDK: tracked to the LTS line, upgraded as each LTS is published.
  • Cats Effect 3 + fs2: the effect system, tracked on its stable line.
The cost of a line

Why the list is short

Every library above is a version to track, an advisory feed to watch, and code that runs with the node's privileges. That makes the length of this list a decision rather than an accumulation. A dependency earns its place by doing something that would otherwise have to be written and maintained here, and something that does not clear that bar is left out even when it would save an afternoon.

The release track column says how each one is followed. A library held to a stable line takes the latest patch on that line and goes no further; one tracked to latest moves with upstream. The distinction earns itself the day a fix and a breaking change arrive in the same release, which is when a track chosen in advance stops being an opinion and starts doing work.

How a change to this list happens

A dependency change is reviewed on its own terms rather than as part of whatever needed it. That is deliberate. A bump riding inside a feature branch gets the attention the feature gets, which is not the attention the bump needs, so adds, removals and version changes travel separately and are read on their own.

Automated update proposals are also held for a cooldown before they are raised at all, so a release withdrawn or superseded within its first week never becomes a pull request anyone has to evaluate. Security advisories are exempt from that hold and arrive immediately, which is the one case where waiting is the more expensive option.