go-xrpl

module
v0.0.0-...-2e235a1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 2, 2026 License: ISC

README

go-xrpl

Go implementation of the XRP Ledger protocol.

API Reference Go Report Card CI

go-xrpl is an XRPL client written in Go. It provides the goxrpl node daemon, an importable set of protocol libraries, and developer tools for working with ledger data. The client can participate in the peer network, process transactions, maintain ledger state, take part in consensus, and expose JSON-RPC, WebSocket, and optional gRPC services.

The release branch targets private rippled v3.4.1. Release sign-off remains open until the merged candidate passes every required evidence gate. go-xrpl has its own architecture and software version policy.

[!IMPORTANT] go-xrpl is under active development. Review the operator guide and current generated capability catalogs before deploying it in production.

Building from source

Building goxrpl requires Go 1.24 or later, a C compiler, OpenSSL 3, libsecp256k1, and pkg-config. The examples use just as the task runner, with a raw Go command shown for environments where it is not installed.

On macOS:

brew install openssl@3 secp256k1 pkg-config just
export PKG_CONFIG_PATH="$(brew --prefix openssl@3)/lib/pkgconfig:$(brew --prefix secp256k1)/lib/pkgconfig"

On Debian or Ubuntu:

sudo apt install -y build-essential libssl-dev libsecp256k1-dev pkg-config

Build the node from the repository root:

just build

# Without just
go build -o ../tmp/goxrpl ./cmd/goxrpl

The binary is written to ../tmp/goxrpl. To compile every package without producing the node binary, run just build-all.

The daemon requires CGO. Its peer TLS handshake uses the OpenSSL C shim, and all secp256k1 operations — key derivation, signing, public-key operations, and verification — use the libsecp256k1 C shim. There is no supported pure-Go secp256k1 backend. CGO_ENABLED=0 remains useful only for leaves whose production and test dependency graph avoids addresscodec, including Ed25519, SHA-512Half, RFC 1751, drops, protocol, amendments, SHAMap, the key-value/node stores, and binarycodec definitions, serdes, and decimal internals. Binarycodec, relational storage, keylet, and ledger packages reach the native shim transitively.

Executable

The repository builds one executable, goxrpl, with the following primary commands:

Command Description
goxrpl server Run an XRPL node. This is also the default command.
goxrpl generate-config Generate a complete configuration for Mainnet, Testnet, or Devnet.
goxrpl rpc Send JSON-RPC requests to a running node.
goxrpl replay Replay ledger fixtures for deterministic state comparison.
goxrpl replay-range Replay a range of ledgers.
goxrpl compare Compare two ledger-state dumps.
goxrpl version Print version and build information.

Run ../tmp/goxrpl --help or ../tmp/goxrpl <command> --help for the complete command-line reference.

Running a node

Generate a configuration first:

../tmp/goxrpl generate-config --network main --output goxrpl.toml

Start a networked node and acquire its initial ledger from peers:

../tmp/goxrpl server --conf goxrpl.toml --net

For a local standalone node instead:

../tmp/goxrpl server --conf goxrpl.toml --standalone --start

The configuration controls peer discovery, validation, storage, logging, and the listening addresses for JSON-RPC, WebSocket, gRPC, and peer traffic. See the operator guide for startup modes, endpoint security, storage backends, validator configuration, and the full configuration reference.

Accurate host time is required for peer connections. Run a synchronized system time service before joining a network.

Go packages

go-xrpl also exposes reusable Go packages for applications and tooling:

  • amendment — amendment registry and rules
  • codec — XRPL address and binary encoding
  • crypto — Ed25519, secp256k1, and protocol hashing
  • drops — XRP amount handling
  • keylet — ledger key derivation
  • ledger/entry — serialized ledger entry types
  • protocol — protocol constants and primitives
  • shamap — authenticated ledger state maps
  • storage — node and relational storage backends

Internal node services include transaction execution, the transaction queue, ledger acquisition and lifecycle, consensus, peer networking, JSON-RPC, WebSocket subscriptions, and gRPC. API documentation for public packages is available on pkg.go.dev.

Testing

The justfile groups local checks in the same way as CI:

just test             # all Go tests
just test-integration # transaction conformance suites
just test-tx          # transaction engine and handlers
just test-core        # ledger, consensus, RPC, queue, and peer subsystems
just test-libs        # public libraries and storage
just vet
just lint

To inspect the required private 3.4.1 corpus:

just conformance --corpus internal/testing/conformance/testdata/rippled-3.4.1-v4
just conformance --corpus internal/testing/conformance/testdata/rippled-3.4.1-v4 --failing

The committed signed corpus pins private rippled 3.4.1 source and recorder provenance. Missing, stale, mixed, empty, or zero-executed corpora fail closed. See the corpus coverage limits and the release evidence matrix before interpreting a pass as a release claim.

Documentation

Document Audience
Architecture Client design, transaction flow, ledger lifecycle, consensus, and storage
Operating a node Build, configuration, startup, networking, validation, and security
Conformance Protocol compatibility methodology and test suite
RPC methods Implemented RPC API catalog
Transactions Supported transaction types
Amendments Amendment support and voting defaults
Ledger entries Supported ledger object types
Contributing Development workflow and project conventions

Contributing

Contributions are welcome. Changes to protocol-visible behavior must preserve XRPL compatibility, while implementation choices should remain idiomatic Go. Read CONTRIBUTING.md for the development workflow, test layout, and review requirements.

License

go-xrpl is licensed under the ISC License.

Directories

Path Synopsis
Package amendment implements the XRPL amendment system for managing protocol feature activation.
Package amendment implements the XRPL amendment system for managing protocol feature activation.
cmd
goxrpl command
codec
addresscodec
Package addresscodec provides base58 encoding and decoding functionality for XRPL addresses and keys.
Package addresscodec provides base58 encoding and decoding functionality for XRPL addresses and keys.
binarycodec
Package binarycodec implements binary serialization and deserialization of XRPL objects using the canonical field ordering defined by the XRPL protocol.
Package binarycodec implements binary serialization and deserialization of XRPL objects using the canonical field ordering defined by the XRPL protocol.
binarycodec/definitions
Package definitions contains XRPL binary codec field and type definitions.
Package definitions contains XRPL binary codec field and type definitions.
binarycodec/internal/decimal
Package decimal parses and formats exact decimal values used by the binary codec.
Package decimal parses and formats exact decimal values used by the binary codec.
binarycodec/serdes
Package serdes provides utilities to parse and serialize XRPL binary data fields.
Package serdes provides utilities to parse and serialize XRPL binary data fields.
binarycodec/types
Package types contains data structures for binary codec operations.
Package types contains data structures for binary codec operations.
Package config defines and loads the goxrpl node configuration.
Package config defines and loads the goxrpl node configuration.
Package crypto provides cryptographic operations for the XRPL protocol.
Package crypto provides cryptographic operations for the XRPL protocol.
ed25519
Package ed25519 implements the Ed25519 signing algorithm for the XRP Ledger.
Package ed25519 implements the Ed25519 signing algorithm for the XRP Ledger.
mptcrypto
Package mptcrypto provides confidential MPT cryptographic operations.
Package mptcrypto provides confidential MPT cryptographic operations.
rfc1751
Package rfc1751 implements RFC 1751 (S/KEY) encoding/decoding of binary data as human-readable English words.
Package rfc1751 implements RFC 1751 (S/KEY) encoding/decoding of binary data as human-readable English words.
secp256k1
Package secp256k1 implements the secp256k1 ECDSA signing algorithm for the XRP Ledger.
Package secp256k1 implements the secp256k1 ECDSA signing algorithm for the XRP Ledger.
secp256k1/shim
Package shim binds the secp256k1 operations used by the XRPL secp256k1 implementation to libsecp256k1.
Package shim binds the secp256k1 operations used by the XRPL secp256k1 implementation to libsecp256k1.
sha512half
Package sha512half provides SHA-512Half, the fundamental hashing primitive of the XRP Ledger.
Package sha512half provides SHA-512Half, the fundamental hashing primitive of the XRP Ledger.
Package drops provides type-safe XRP amount arithmetic.
Package drops provides type-safe XRP amount arithmetic.
internal
cli
cmdexit
Package cmdexit defines the sentinel error a CLI command returns to request a non-zero process exit without an additional error line.
Package cmdexit defines the sentinel error a CLI command returns to request a non-zero process exit without an additional error line.
consensus
Package consensus defines the interface and types for XRPL consensus algorithms.
Package consensus defines the interface and types for XRPL consensus algorithms.
consensus/adaptor
Package adaptor provides the concrete implementation of the consensus.Adaptor interface, bridging the consensus engine to the ledger service, P2P overlay, and transaction queue.
Package adaptor provides the concrete implementation of the consensus.Adaptor interface, bridging the consensus engine to the ledger service, P2P overlay, and transaction queue.
consensus/amendmentvote
Package amendmentvote decides whether to inject EnableAmendment pseudo-txs into the consensus tx set at a flag-ledger boundary.
Package amendmentvote decides whether to inject EnableAmendment pseudo-txs into the consensus tx set at a flag-ledger boundary.
consensus/archive
Package archive persists validations evicted from the in-memory tracker.
Package archive persists validations evicted from the in-memory tracker.
consensus/common
Package common holds helpers shared by the consensus vote producers (feevote, amendmentvote, negativeunlvote) that assemble pseudo-txs for injection into the flag-ledger tx set.
Package common holds helpers shared by the consensus vote producers (feevote, amendmentvote, negativeunlvote) that assemble pseudo-txs for injection into the flag-ledger tx set.
consensus/csf
Package csf provides a Consensus Simulation Framework: a deterministic discrete-event scheduler, a simulated peer-to-peer network, a trust graph and a ledger oracle for exercising the production consensus engine without real time or sockets.
Package csf provides a Consensus Simulation Framework: a deterministic discrete-event scheduler, a simulated peer-to-peer network, a trust graph and a ledger oracle for exercising the production consensus engine without real time or sockets.
consensus/feevote
Package feevote decides whether to inject a SetFee pseudo-tx into the consensus tx set at a flag-ledger boundary, tallying trusted validators' fee votes from the prior voting ledger.
Package feevote decides whether to inject a SetFee pseudo-tx into the consensus tx set at a flag-ledger boundary, tallying trusted validators' fee votes from the prior voting ledger.
consensus/ledgertrie
Package ledgertrie implements branchSupport-based preferred-ledger selection over a compressed ancestry trie, porting rippled's LedgerTrie (LedgerTrie.h).
Package ledgertrie implements branchSupport-based preferred-ledger selection over a compressed ancestry trie, porting rippled's LedgerTrie (LedgerTrie.h).
consensus/negativeunlvote
Package negativeunlvote produces UNLModify pseudo-transactions for flag ledgers.
Package negativeunlvote produces UNLModify pseudo-transactions for flag ledgers.
consensus/rcl
Package rcl implements the Ripple Consensus Ledger algorithm.
Package rcl implements the Ripple Consensus Ledger algorithm.
feetrack
Package feetrack implements the local-node load-fee tracker, mirroring the behaviour of rippled's LoadFeeTrack.
Package feetrack implements the local-node load-fee tracker, mirroring the behaviour of rippled's LoadFeeTrack.
grpc
Package grpc implements the XRPLedgerAPIService gRPC surface mirroring rippled's binary-only ledger RPCs (the API surface consumed by Clio): GetLedger, GetLedgerEntry, GetLedgerData and GetLedgerDiff.
Package grpc implements the XRPLedgerAPIService gRPC surface mirroring rippled's binary-only ledger RPCs (the API surface consumed by Clio): GetLedger, GetLedgerEntry, GetLedgerData and GetLedgerDiff.
ledger/cleaner
Package cleaner implements a background ledger-integrity verifier, the go-xrpl analog of rippled's LedgerCleaner.
Package cleaner implements a background ledger-integrity verifier, the go-xrpl analog of rippled's LedgerCleaner.
ledger/inbound
Package inbound provides lightweight ledger acquisition from peers.
Package inbound provides lightweight ledger acquisition from peers.
ledger/inbound/inboundtest
Package inboundtest provides shared test utilities for the internal/ledger/inbound package and its sibling-package consumers.
Package inboundtest provides shared test utilities for the internal/ledger/inbound package and its sibling-package consumers.
ledger/localtxs
Package localtxs is goxrpl's port of rippled's app/ledger/LocalTxs.
Package localtxs is goxrpl's port of rippled's app/ledger/LocalTxs.
ledger/negativeunl
Package negativeunl applies flag-ledger NegativeUNL transitions (pending ValidatorToDisable / ValidatorToReEnable → DisabledValidators) on a state map.
Package negativeunl applies flag-ledger NegativeUNL transitions (pending ValidatorToDisable / ValidatorToReEnable → DisabledValidators) on a state map.
ledger/openledger
Package openledger implements rippled's OpenLedger semantics for go-xrpl.
Package openledger implements rippled's OpenLedger semantics for go-xrpl.
ledger/replayfault
Package replayfault records replay failures that must stop signing and proposal publication until the affected state has been independently verified.
Package replayfault records replay failures that must stop signing and proposal publication until the affected state has been independently verified.
ledger/service/svcerr
Package svcerr defines the typed sentinel errors returned by the ledger service.
Package svcerr defines the typed sentinel errors returned by the ledger service.
ledger/shamapstore
Package shamapstore implements go-xrpl's online-delete subsystem — the go-xrpl equivalent of rippled's SHAMapStore (src/xrpld/app/misc/SHAMapStore.h).
Package shamapstore implements go-xrpl's online-delete subsystem — the go-xrpl equivalent of rippled's SHAMapStore (src/xrpld/app/misc/SHAMapStore.h).
ledger/skiplist
Package skiplist manages the LedgerHashes skip-list SLEs that let a single ledger resolve the hashes of its ancestors.
Package skiplist manages the LedgerHashes skip-list SLEs that let a single ledger resolve the hashes of its ancestors.
manifest
Package manifest implements validator manifest parsing, verification, caching, and persistence.
Package manifest implements validator manifest parsing, verification, caching, and persistence.
observability
Package observability hosts process-level metrics surfaced to RPC.
Package observability hosts process-level metrics surfaced to RPC.
peermanagement
Package peermanagement implements XRPL peer-to-peer networking.
Package peermanagement implements XRPL peer-to-peer networking.
peermanagement/cluster
Package cluster maintains the registry of cluster-trusted node identities — operators run a small set of nodes that they configure to know about each other via [cluster_nodes].
Package cluster maintains the registry of cluster-trusted node identities — operators run a small set of nodes that they configure to know about each other via [cluster_nodes].
peermanagement/message
Package message implements XRPL peer protocol message types and serialization.
Package message implements XRPL peer protocol message types and serialization.
peermanagement/peertls
Package peertls provides the TLS 1.2-or-newer transport used by XRPL peers.
Package peertls provides the TLS 1.2-or-newer transport used by XRPL peers.
peermanagement/peertls/shim
Package shim is the cgo binding for the OpenSSL TLS engine used by peertls.
Package shim is the cgo binding for the OpenSSL TLS engine used by peertls.
peermanagement/resource
Package resource implements bounded per-endpoint peer load tracking.
Package resource implements bounded per-endpoint peer load tracking.
replaytool
Package replaytool implements the offline mainnet-replay and fixture-replay developer commands (`replay`, `replay-range`).
Package replaytool implements the offline mainnet-replay and fixture-replay developer commands (`replay`, `replay-range`).
rpc
rpc/txprojection
Package txprojection contains the API-version-specific transaction JSON shaping shared by RPC handlers and WebSocket publishers.
Package txprojection contains the API-version-specific transaction JSON shaping shared by RPC handlers and WebSocket publishers.
statecompare
Package statecompare reads replay manifests and immutable pack objects from the xrpl-state-compare data plane.
Package statecompare reads replay manifests and immutable pack objects from the xrpl-state-compare data plane.
testing
Package jtx provides test infrastructure for XRPL transaction testing.
Package jtx provides test infrastructure for XRPL transaction testing.
testing/amm
Package amm provides test builders for AMM transactions.
Package amm provides test builders for AMM transactions.
testing/batch
Package batch provides test builder helpers for Batch transactions.
Package batch provides test builder helpers for Batch transactions.
testing/conformance
Package conformance provides a test runner for xrpl-fixtures test vectors.
Package conformance provides a test runner for xrpl-fixtures test vectors.
testing/consensus
Package consensus provides integration test utilities for multi-node consensus testing.
Package consensus provides integration test utilities for multi-node consensus testing.
testing/depositpreauth
Package depositpreauth provides fluent transaction builder helpers for DepositPreauth testing, plus integration tests matching rippled's DepositAuth_test.cpp and DepositPreauth_test sections.
Package depositpreauth provides fluent transaction builder helpers for DepositPreauth testing, plus integration tests matching rippled's DepositAuth_test.cpp and DepositPreauth_test sections.
testing/enginefuzz
Package enginefuzz hosts a stateful, property-based fuzz harness over the goXRPL transaction engine.
Package enginefuzz hosts a stateful, property-based fuzz harness over the goXRPL transaction engine.
testing/marketfixtures
Package marketfixtures supplies shared MPT book and amount vectors for flow and RPC tests.
Package marketfixtures supplies shared MPT book and amount vectors for flow and RPC tests.
testing/metadata
Package metadata provides test helpers for validating transaction metadata.
Package metadata provides test helpers for validating transaction metadata.
testing/mpt
Package mpt provides test helpers for MPT (Multi-Purpose Token) transaction testing.
Package mpt provides test helpers for MPT (Multi-Purpose Token) transaction testing.
testing/pathfuzz
Package pathfuzz hosts generative, property-based fuzz harnesses over the goXRPL payment engine: cross-currency flow (RippleCalc) and path discovery (the Pathfinder).
Package pathfuzz hosts generative, property-based fuzz harnesses over the goXRPL payment engine: cross-currency flow (RippleCalc) and path discovery (the Pathfinder).
testing/payment
Package builders provides fluent transaction builder helpers for testing.
Package builders provides fluent transaction builder helpers for testing.
testing/permissioneddex
Package permissioneddex provides test helpers for PermissionedDEX tests.
Package permissioneddex provides test helpers for PermissionedDEX tests.
testing/rpcenv
Package rpcenv wires the in-memory test ledger built by internal/testing into the same RPC handler registry the production server uses, so handlers can be exercised end-to-end against real ledger state.
Package rpcenv wires the in-memory test ledger built by internal/testing into the same RPC handler registry the production server uses, so handlers can be exercised end-to-end against real ledger state.
testing/ticket
Package ticket provides test helpers for Ticket transaction testing.
Package ticket provides test helpers for Ticket transaction testing.
testutil/rippled
Package rippled locates pinned protocol source files for inventory tests.
Package rippled locates pinned protocol source files for inventory tests.
tx
tx/all
Package all aggregates all transaction sub-packages and exposes a single RegisterAll() entry point that registers every transaction type with the tx registry.
Package all aggregates all transaction sub-packages and exposes a single RegisterAll() entry point that registers every transaction type with the tx registry.
tx/escrow
Package escrow implements EscrowCreate, EscrowFinish, and EscrowCancel transactions.
Package escrow implements EscrowCreate, EscrowFinish, and EscrowCancel transactions.
tx/lending
Package lending implements the XLS-66 LendingProtocol transaction types (LoanBroker* and Loan*), porting rippled 3.1.0's transactor semantics onto the XRPLNumber amortization math in the lmath subpackage.
Package lending implements the XLS-66 LendingProtocol transaction types (LoanBroker* and Loan*), porting rippled 3.1.0's transactor semantics onto the XRPLNumber amortization math in the lmath subpackage.
tx/lending/lmath
Package lmath ports the XLS-66 lending amortization math from rippled 3.1.0 (src/xrpld/app/misc/detail/LendingHelpers.cpp) onto the XRPLNumber foundation.
Package lmath ports the XLS-66 lending amortization math from rippled 3.1.0 (src/xrpld/app/misc/detail/LendingHelpers.cpp) onto the XRPLNumber foundation.
tx/offer
Reference: rippled CreateOffer.cpp, CancelOffer.cpp
Reference: rippled CreateOffer.cpp, CancelOffer.cpp
tx/sigcache
Package sigcache caches positive signature verdicts by transaction ID and signing namespace.
Package sigcache caches positive signature verdicts by transaction ID and signing namespace.
txq
validator/list
Package list implements the publisher-trust validator-list subsystem — the rippled-faithful counterpart of rippled/src/xrpld/app/misc/ ValidatorList.cpp + ValidatorSite.cpp.
Package list implements the publisher-trust validator-list subsystem — the rippled-faithful counterpart of rippled/src/xrpld/app/misc/ ValidatorList.cpp + ValidatorSite.cpp.
watchdog
Package watchdog detects stalled node event loops and guarantees terminal recovery when a stall reaches the abort threshold.
Package watchdog detects stalled node event loops and guarantees terminal recovery when a stall reaches the abort threshold.
Package keylet provides functions to compute the 256-bit SHA-512Half keys that uniquely identify ledger entries in the XRPL state tree.
Package keylet provides functions to compute the 256-bit SHA-512Half keys that uniquely identify ledger entries in the XRPL state tree.
ledger
entry
Package entry holds protocol-level definitions for XRPL ledger entries (Serializable Ledger Entries, "SLE").
Package entry holds protocol-level definitions for XRPL ledger entries (Serializable Ledger Entries, "SLE").
entry/cmd/entrygen command
Command ledgerfieldsgen emits one typed-decoder Go file per ledger entry type listed in ledger/entry/schema.Specs.
Command ledgerfieldsgen emits one typed-decoder Go file per ledger entry type listed in ledger/entry/schema.Specs.
entry/schema
Package schema is the declarative source of truth for the per-entry-type typed metadata decoders generated under ledger/entry.
Package schema is the declarative source of truth for the per-entry-type typed metadata decoders generated under ledger/entry.
Package log provides structured logging for go-xrpl.
Package log provides structured logging for go-xrpl.
Package protocol defines XRPL protocol constants used throughout the codebase.
Package protocol defines XRPL protocol constants used throughout the codebase.
scripts
amendment-watch command
Package main provides a manual freshness-checked amendment registry report.
Package main provides a manual freshness-checked amendment registry report.
docsgen/registries command
Command registries generates transaction, amendment, and ledger-entry docs from their live registries.
Command registries generates transaction, amendment, and ledger-entry docs from their live registries.
docsgen/rpcmethods command
Command rpcmethods generates docs/rpc-methods.md from the live RPC method descriptors, including each method's role, condition, and API versions.
Command rpcmethods generates docs/rpc-methods.md from the live RPC method descriptors, including each method's role, condition, and API versions.
Package shamap implements the SHAMap, a Merkle-like radix tree used by the XRPL for ledger state and transaction storage.
Package shamap implements the SHAMap, a Merkle-like radix tree used by the XRPL for ledger state and transaction storage.
backend
Package backend adapts NodeStore databases for use by SHAMaps.
Package backend adapts NodeStore databases for use by SHAMaps.
storage
kvstore
Package kvstore defines a generic key-value storage interface for persistent data backends.
Package kvstore defines a generic key-value storage interface for persistent data backends.
kvstore/kvstoretest
Package kvstoretest provides a shared, backend-agnostic conformance suite for the kvstore.KeyValueStore contract.
Package kvstoretest provides a shared, backend-agnostic conformance suite for the kvstore.KeyValueStore contract.
kvstore/memorydb
Package memorydb implements the kvstore.KeyValueStore interface using an in-memory map.
Package memorydb implements the kvstore.KeyValueStore interface using an in-memory map.
kvstore/pebble
Package pebble implements the kvstore.KeyValueStore interface using CockroachDB/Pebble.
Package pebble implements the kvstore.KeyValueStore interface using CockroachDB/Pebble.
nodestore
Package nodestore provides blockchain state storage for XRPL node data.
Package nodestore provides blockchain state storage for XRPL node data.
relationaldb
Package relationaldb defines the SQL-backed storage layer for queryable ledger data.
Package relationaldb defines the SQL-backed storage layer for queryable ledger data.
relationaldb/internal/contracttest
Package contracttest verifies relational repository backend parity.
Package contracttest verifies relational repository backend parity.
relationaldb/internal/sqlutil
Package sqlutil provides guarded database executors shared by relational backends.
Package sqlutil provides guarded database executors shared by relational backends.
relationaldb/postgres
Package postgres implements the github.com/LeJamon/go-xrpl/storage/relationaldb repository interfaces on top of PostgreSQL.
Package postgres implements the github.com/LeJamon/go-xrpl/storage/relationaldb repository interfaces on top of PostgreSQL.
relationaldb/sqlite
Package sqlite implements the github.com/LeJamon/go-xrpl/storage/relationaldb repository interfaces on top of SQLite.
Package sqlite implements the github.com/LeJamon/go-xrpl/storage/relationaldb repository interfaces on top of SQLite.
Package version holds the node's software and build versions.
Package version holds the node's software and build versions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL