Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ Download the appropriate binary for your platform from the [releases page](https

```bash
# Example: Linux x86_64
wget https://github.com/Eppo-exp/cpp-sdk/releases/download/v1.0.0/eppoclient-1.0.0-linux-x86_64.tar.gz
tar -xzf eppoclient-1.0.0-linux-x86_64.tar.gz
wget https://github.com/Eppo-exp/cpp-sdk/releases/download/v2.0.0/eppoclient-2.0.0-linux-x86_64.tar.gz
tar -xzf eppoclient-2.0.0-linux-x86_64.tar.gz

# Headers are in: include/
# Library is in: lib/libeppoclient.a
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [2.0.0] - 2025-12-02

### Added

- `EvaluationClient` - lightweight client for flag evaluation without logging
- `ConfigurationStore` convenience API for setting configuration by value:
- `ConfigurationStore(Configuration config)` - constructor accepting Configuration by value
- `setConfiguration(Configuration config)` - setter accepting Configuration by value
Expand All @@ -25,17 +28,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Collect all parsing errors instead of failing on first error
- Enable partial success handling (return value with warnings)
- New `ParseResult<T>` template for structured error reporting during parsing
- Support for building without exceptions via `-fno-exceptions` flag
- Abort-free configuration parsing - all parsing operations can now fail gracefully

### Changed

- **BREAKING**: `ConfigurationStore::getConfiguration()` now returns `std::shared_ptr<const Configuration>` instead of `Configuration` by value
- Eliminates expensive configuration copies on every flag evaluation
- **BREAKING**: `Configuration` constructors now take parameters by value for better performance
- **BREAKING**: SDK now uses RE2 regex library instead of `std::regex`
- RE2 is not vulnerable to ReDoS (Regular Expression Denial of Service) attacks
- RE2 works without exceptions, enabling exception-free builds
- This change improves security and reliability
- `ConfigurationStore` now uses atomic operations instead of mutex internally for better performance
- **BREAKING**: Parsing functions now report errors instead of silently skipping invalid entries:
- `parseConfigResponse()` and `parseBanditResponse()` return `ParseResult<T>` with error collection
- Use the new `parseConfiguration()` convenience function for simplified error handling
- Errors are aggregated and returned rather than causing silent data loss
- **BREAKING**: client.getBoolAssignment renamed to client.getBooleanAssignment for consistency with getBooleanAssignmentDetails

### Removed

Expand Down Expand Up @@ -63,4 +73,5 @@ Initial release of the Eppo C++ SDK.
- Example applications for flags and bandits
- Comprehensive documentation and README

[2.0.0]: https://github.com/Eppo-exp/cpp-sdk/releases/tag/v2.0.0
[1.0.0]: https://github.com/Eppo-exp/cpp-sdk/releases/tag/v1.0.0
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ if(EPPOCLIENT_BUILD_EXAMPLES)

add_executable(assignment_details examples/assignment_details.cpp)
target_link_libraries(assignment_details PRIVATE eppoclient)

add_executable(manual_sync examples/manual_sync.cpp)
target_link_libraries(manual_sync PRIVATE eppoclient)
endif()

# Optional: Build tests
Expand Down
7 changes: 7 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ examples:
@echo " make run-bandits"
@echo " make run-flags"
@echo " make run-assignment-details"
@echo " make run-manual-sync"

# Run example binaries
.PHONY: run-bandits
Expand All @@ -103,6 +104,11 @@ run-assignment-details: examples
@echo "Running assignment_details example..."
@cd examples && ../$(BUILD_DIR)/assignment_details

.PHONY: run-manual-sync
run-manual-sync: examples
@echo "Running manual_sync example..."
@cd examples && ../$(BUILD_DIR)/manual_sync

# Clean build artifacts
.PHONY: clean
clean:
Expand Down Expand Up @@ -169,6 +175,7 @@ help:
@echo " run-bandits - Build and run the bandits example"
@echo " run-flag-assignments - Build and run the flag_assignments example"
@echo " run-assignment-details - Build and run the assignment_details example"
@echo " run-manual-sync - Build and run the manual_sync example"
@echo " format - Format all C++ source files with clang-format"
@echo " format-check - Check if files are properly formatted (CI-friendly)"
@echo " clean - Remove build artifacts"
Expand Down
Loading
Loading