Release notes
Clio, an XRP Ledger API server optimized for HTTP and WebSocket API calls, is under active development.
This release adds new features and bug fixes.
Proxy Support
Clio now supports extracting the client's original IP address from the Forwarded HTTP header. This behavior is enabled only if the request meets one of the following conditions:
- The request originates from an IP address defined in the
server.proxy.ipsconfiguration list. - The request includes an
X-Proxy-Tokenheader, and its value matches a token specified in theserver.proxy.tokensconfiguration list.
Logger changes
In this release, there are significant changes to the logging system and log configuration.
Clio has been migrated from Boost.Log to spdlog, which offers better performance and maintainability. Additionally, the configuration schema has been restructured to group all logging-related settings under a single log object.
Some additional resources:
Configuration Migration Required:
log_format→log.format, also changed fromBoost.Logformat tospdlogformat patterns, please see the documentationlog.is_asyncwas added; controls whether logging is asynchronous (default:true)log_directory_max_sizewas removed; replaced bylog.directory_max_fileslog_rotation_hour_intervalwas removed; time-based rotation is no longer supportedlog_level→log.levellog_to_console→log.enable_consolelog_directory→log.directorylog_rotation_size→log.rotation_sizelog_directory_max_files→log.directory_max_fileslog_tag_style→log.tag_stylelog_channels→log.channelslog_channels.[].log_level→log.channels.[].level
Config validation
Now, Clio will fail to start, if a field is present in configuration file, while Clio's config schema doesn't support it.
Whats's changed
🚀 Features
- Use mold linker on Linux (#2304) by @mathbunnyru
- Use spdlog logger (#2372) by @mathbunnyru
- Validate unexpected config values (#2457) by @mathbunnyru
- Generate Debian packages with CPack (#2282) by @legleux
- Do not print critical errors in stdout (#2468) by @mathbunnyru
- Proxy support (#2490) by @kuznetsss
- Add network id to ledger feed (#2505) by @kuznetsss
- Cache state endpoint (#2642) by @godexsoft
- Support Keyspace (#2454) by @PeterChen13579
- Support new types in ledger_entry (#2654) by @emreariyurek
🐛 Bug Fixes
- Do not link to several boost::stacktrace implementations because… (#2329) by @mathbunnyru
- Fix default bool value print in config definition (#2397) by @mathbunnyru
- Remove tight loop in ETLng (#2398) by @godexsoft
- ETLng more cpu usage fixes (#2399) by @godexsoft
- MPT test object producing ASAN error (#2406) by @godexsoft
- Remove 'count' from logger level (#2408) by @PeterChen13579
- Do not log shutdown message in LogService (#2424) by @mathbunnyru
- Fix GCC 15 discovered bugs (#2425) by @mathbunnyru
- Fix default severity in Logger (#2449) by @mathbunnyru
- Add trustline locking flag to account_info (#2338) by @PeterChen13579
- Print error and help on unknown arg (#2460) by @mathbunnyru
- Shutdown LogService after exceptions are printed (#2464) by @mathbunnyru
- Fix package issues (#2469) by @mathbunnyru
- ASAN issues in CommunicationService (#2480) by @godexsoft
- ASAN issues from runSpawnWithTimeout (#2482) by @godexsoft
- Add nft_id and offer_id to txn stream (#2335) by @PeterChen13579
- Change error style in Config (#2314) by @emreariyurek
- Support canonical names for type in account_objects (#2437) by @emreariyurek
- Fix data race in ClusterCommunication (#2522) by @kuznetsss
- Add MPT to txn JSON (#2392) by @PeterChen13579
- Remove global static loggers (#2557) by @mathbunnyru
- Remove MPTIssuanceID from tx (#2569) by @PeterChen13579
- ETLng task manager stops queue on run (#2585) by @godexsoft
- Keep spdlog loggers valid between tests (#2614) by @mathbunnyru
- Workaround large number validation and parsing (#2608) by @godexsoft
- Mpt_issuance_id not in tx for MPTIssuanceCreate (#2630) by @PeterChen13579
- Print out error details of web context (#2351) by @emreariyurek
- ASAN issue with AmendmentBlockHandler test (#2674) by @godexsoft
- Add gRPC Timeout and keepalive to handle stuck connections (#2676) by @rrmanukyan
- Drop dynamic loggers to fix memory leak (#2686) by @mathbunnyru
- Address AmendmentBlockHandler flakiness in old ETL tests (#2694) by @godexsoft
- Add mpt_issuance_id to meta of MPTIssuanceCreate (#2701) by @PeterChen13579
🚜 Refactor
- Refactor Logger.hpp and LoggerFixtures.hpp (#2356) by @mathbunnyru
- Refactor Logger::init() into multiple functions (#2357) by @mathbunnyru
- Put log options in log section in config (#2440) by @mathbunnyru
- Add kCONFIG_DESCRIPTION_HEADER (#2463) by @mathbunnyru
- Output struct (#2456) by @PeterChen13579
- Use expected<void, error> instead of optional (#2565) by @emreariyurek
- Keyspace comments (#2684) by @PeterChen13579
📚 Documentation
- Fix some doxygen issues (#2370) by @mathbunnyru
- Set
ws_portto 6006 in example config (#2377) by @godexsoft - Delete logging.md (#2450) by @mathbunnyru
- Update information about minimum compilers (#2448) by @mathbunnyru
- Add log format description (#2461) by @mathbunnyru
- Fix some doxygen issues in LedgerFeed (#2556) by @emreariyurek
- Update conan lockfile docs to work on all machines the same way (#2607) by @mathbunnyru
- Update doxygen-awesome-css to 2.4.0 (#2647) by @mathbunnyru
- Build docs using doxygen 1.14.0 (#2681) by @mathbunnyru
- All files are .hpp (#2683) by @mathbunnyru
- Update doxygen-awesome-css to 2.4.1 (#2690) by @mathbunnyru
⚡ Performance
- Add benchmark for Logger (#2407) by @mathbunnyru
- Optimize bench logger code for more realistic scenario (#2412) by @mathbunnyru
- Pass const reference Input into handlers (#2409) by @emreariyurek
🎨 Styling
- Update pre-commit hooks (#2384) by @github-actions[bot]
- Mark spdlog fwd declararations as NOLINT(readability-identifie… (#2423) by @mathbunnyru
- Fix JSON colon style in C++ code (#2484) by @mathbunnyru
- Fix JSON indent style in C++ code (#2485) by @mathbunnyru
- Update pre-commit hooks (#2491) by @github-actions[bot]
- Update pre-commit hooks (#2658) by @mathbunnyru
- Rename workflows to use dash and show reusable (#2667) by @mathbunnyru
- Rename actions to use dash (#2669) by @mathbunnyru
🧪 Testing
- Fix prometheus tests (#2312) by @kuznetsss
- Write more data to fill socket buffer (#2433) by @mathbunnyru
- Move prettyPath to its own file and test it (#2486) by @mathbunnyru
- Run LoggerFixture::init in integration tests (#2636) by @mathbunnyru
- Enable address sanitizer testing (#2628) by @mathbunnyru
⚙️ Miscellaneous Tasks
- Pin docker image to commit hash (#2354) by @mathbunnyru
- Update boost usages to match 1.88 (#2355) by @godexsoft
- Improve RC release notes (#2361) by @mathbunnyru
- Do not add sha256 checksums to release notes (#2362) by @mathbunnyru
- Use artifactory DNS name (#2363) by @mathbunnyru
- Use image with artifactory DNS name (#2364) by @mathbunnyru
- Verify version of the binary on release (#2365) by @mathbunnyru
- Provide fetch-tags and ref when using actions/checkout (#2366) by @mathbunnyru
- [DEPENDABOT] Bump ytanikin/pr-conventional-commits from 1.4.1 to 1.4.2 (#2368) by @dependabot[bot]
- Pass expected_version to build_impl.yml (#2367) by @mathbunnyru
- Do not generate source files and use target_compile_definition… (#2369) by @mathbunnyru
- Add option to force conan upload (#2376) by @mathbunnyru
- Move config definition to cpp file (#2371) by @mathbunnyru
- Specify conan profile in check_libxrpl (#2381) by @mathbunnyru
- Call prepare_runner right after checkout (#2383) by @mathbunnyru
- [DEPENDABOT] Bump docker/metadata-action from 5.7.0 to 5.8.0 in /.github/actions/build_docker_image (#2385) by @dependabot[bot]
- Hash-pin docker/login-action (#2386) by @mathbunnyru
- Enable CMake 4 support (#2387) by @mathbunnyru
- Use an image with CMake 4 in CI (#2388) by @mathbunnyru
- Bump libuv recipe version (#2389) by @mathbunnyru
- Update conan recipe revisions (#2390) by @mathbunnyru
- Fix concurrency settings to allow parallel workflows on develop branch (#2391) by @Copilot
- Rewrite clio Dockerfile so it's more clear (#2395) by @mathbunnyru
- Make clio_server executable (#2394) by @mathbunnyru
- Build benchmark code in CI (#2404) by @mathbunnyru
- Update trufflehog max depth (#2405) by @godexsoft
- [DEPENDABOT] Bump docker/login-action from 3.4.0 to 3.5.0 (#2416) by @dependabot[bot]
- [DEPENDABOT] Bump docker/login-action from 3.4.0 to 3.5.0 in /.github/actions/build_docker_image (#2415) by @dependabot[bot]
- [DEPENDABOT] Bump actions/download-artifact from 4 to 5 (#2414) by @dependabot[bot]
- Remove trufflehog (#2427) by @godexsoft
- Build GCC 15.2 (#2426) by @mathbunnyru
- Use GCC 15.2 (#2428) by @mathbunnyru
- Add GDB to docker image (#2429) by @mathbunnyru
- Use image with GDB (#2430) by @mathbunnyru
- Make CI work well in forks (#2434) by @mathbunnyru
- Start using apple-clang 17 in CI (#2432) by @mathbunnyru
- Fix docker CI in forks (#2435) by @mathbunnyru
- Add dependencies for Debian packages (#2436) by @legleux
- Fix nightly docker image in forks (#2438) by @mathbunnyru
- Use main repo release tag in forks (#2439) by @mathbunnyru
- [DEPENDABOT] bump actions/checkout from 4 to 5 (#2443) by @dependabot[bot]
- "Revert ci: [DEPENDABOT] bump actions/checkout from 4 to 5" (#2446) by @mathbunnyru
- Update build image (#2453) by @legleux
- Cleanup packages installed on macOS runner (#2472) by @mathbunnyru
- [DEPENDABOT] bump actions/upload-pages-artifact from 3 to 4 (#2476) by @dependabot[bot]
- [DEPENDABOT] bump codecov/codecov-action from 5.4.3 to 5.5.0 (#2477) by @dependabot[bot]
- Use XRPLF/prepare_actions (#2473) by @mathbunnyru
- Use prepare-runner action with dash (#2481) by @mathbunnyru
- Use Python 3.13 in CI docker image (#2493) by @mathbunnyru
- Use image with Python 3.13 (#2495) by @mathbunnyru
- Pass use_mold correctly to CMake (#2498) by @mathbunnyru
- Move cmake fatal error into status message (#2497) by @kuznetsss
- Use xrpl/2.6.0 (#2496) by @mathbunnyru
- Use pre-commit and pre-commit-autoupdate reusable workflows (#2506) by @mathbunnyru
- Use conan_ref and add PR link in check_libxrpl (#2508) by @mathbunnyru
- Use cleanup-workspace action (#2510) by @mathbunnyru
- Use conan options to only control dependencies (#2503) by @mathbunnyru
- Update Conan to 2.20.1 (#2509) by @mathbunnyru
- Use mold when available without option (#2521) by @mathbunnyru
- Rename conan remote in Dockerfie (#2536) by @mathbunnyru
- Rename conan remote (#2537) by @mathbunnyru
- Use image with new remote name and newer Conan (#2539) by @mathbunnyru
- [DEPENDABOT] bump codecov/codecov-action from 5.5.0 to 5.5.1 (#2548) by @dependabot[bot]
- Remove all conan options and use purely CMake targets (#2538) by @mathbunnyru
- [DEPENDABOT] bump tj-actions/changed-files from 46.0.5 to 47.0.0 (#2619) by @dependabot[bot]
- Run only 10 instances of upload-conan-deps using max-parallel (#2617) by @mathbunnyru
- Wrap GitHub CI conditionals in curly braces (#2629) by @bthomee
- Make separate download/upload options for ccache (#2637) by @mathbunnyru
- Move clang-tidy_on_fix_merged workflow into a main one (#2641) by @mathbunnyru
- Remove redundant headers and include CassandraDBHelper.h (#2649) by @emreariyurek
- Update libxrpl to 2.6.1-rc2 (#2652) by @PeterChen13579
- Update libXRPL to 2.6.1 (#2656) by @PeterChen13579
- Start pr title with uppercase (#2666) by @mathbunnyru
- [DEPENDABOT] bump docker/login-action from 3.5.0 to 3.6.0 in /.github/actions/build_docker_image (#2663) by @dependabot[bot]
- [DEPENDABOT] bump docker/login-action from 3.5.0 to 3.6.0 (#2662) by @dependabot[bot]
- Allow PR titles to start with
[(#2668) by @mathbunnyru - Add separate pre-commit image (#2677) by @mathbunnyru
- Add git to pre-commit image (#2679) by @mathbunnyru
- Use separate pre-commit image (#2678) by @mathbunnyru
- Install Doxygen 1.14.0 in our images (#2682) by @mathbunnyru
- Publish RCs as non-draft (#2685) by @mathbunnyru
- Add libatomic as dependency for pre-commit image (#2697) by @mathbunnyru
- Use pre-commit image with libatomic (#2698) by @mathbunnyru
- Disable flaky DisconnectClientOnInactivity (#2699) by @godexsoft
- Update pre-commit workflow to latest version (#2702) by @mathbunnyru