Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
2be361c
Initial native ios lib setup
yugisu-flux Oct 20, 2025
7caa72b
Add DatadogFlags package to the iOS deps
yugisu-flux Oct 20, 2025
dbac621
Working flag assignment evaluation
yugisu-flux Oct 29, 2025
58d40ae
Pass configuration from RN to Swift SDK
yugisu-flux Nov 4, 2025
1133298
Merge remote-tracking branch 'origin/feature/v3' into dima/FFL-906-im…
yugisu-flux Nov 13, 2025
ab48ffe
Pin Datadog* ios packages to a specific commit
yugisu-flux Nov 13, 2025
2fd23d1
Update deps to 3.2.0
yugisu-flux Nov 13, 2025
cb038d0
Support other feature flag types
yugisu-flux Nov 13, 2025
9d51b6d
Add a get*Details method
yugisu-flux Nov 14, 2025
a174065
Switch to only passing details methods from Swift
yugisu-flux Nov 14, 2025
9882b31
Properly handle Integer flag type
yugisu-flux Nov 14, 2025
11dd287
Add default value type validation
yugisu-flux Nov 14, 2025
5912826
Add JSDoc documentation to public stuff
yugisu-flux Nov 14, 2025
257f683
Hard set `gracefulModeEnabled` to true, add a warning for misconfigur…
yugisu-flux Nov 17, 2025
67c8284
Remove stale FIXME
yugisu-flux Nov 17, 2025
70484e6
Minor improvements to error handling
yugisu-flux Nov 17, 2025
c7fea30
Revert Datadog deps to 3.1.0, add them to old arch app
yugisu-flux Nov 17, 2025
91d3ffb
Revert an auto-formatter change
yugisu-flux Nov 17, 2025
7d91c9c
Add flagging SDK demo to the old arch example app, update the new arc…
yugisu-flux Nov 18, 2025
f2fd0d8
Fix failing tests
yugisu-flux Nov 19, 2025
daff8ea
Add tests for the flagging functionality
yugisu-flux Nov 24, 2025
8800f64
Implement `DatadogFlags.enable()` method, add JSDoc comments to Datad…
yugisu-flux Nov 25, 2025
e266879
Remove redundant `gracefulModeEnabled` setting
yugisu-flux Nov 25, 2025
0e6a850
Move the `DatadogFlags.enable` call to `initializeNativeSDK`
yugisu-flux Nov 25, 2025
ab6fa5f
Add more tests
yugisu-flux Nov 25, 2025
3ef21c5
Update Podfile.lock
yugisu-flux Nov 25, 2025
ea1967d
Remove Flags initialization and configuration logic from the shared i…
yugisu-flux Dec 1, 2025
eb788ad
Remove stale tests
yugisu-flux Dec 1, 2025
7ec774e
Finish removal of unnecessary Flags code in global SDK init code
yugisu-flux Dec 1, 2025
3d48d77
Remove unnecessary comma
yugisu-flux Dec 1, 2025
14799f2
Remove leftovers for global init
yugisu-flux Dec 1, 2025
040c681
Bump datadog SDK package versions, add flags SDK
yugisu-flux Dec 1, 2025
c45b654
Initial Android implementation
yugisu-flux Dec 2, 2025
7094828
Remove `customFlagsHeaders` from iOS wrapper configuration
yugisu-flux Dec 3, 2025
54d1324
Update Flags SDK to evaluate feature flags synchronously
yugisu-flux Dec 3, 2025
d5848d7
FFL-1460 Track sync flag evaluations
yugisu-flux Dec 3, 2025
696b72c
FFL-1460 Remove `get*Details` methods from DdFlagsImplementation
yugisu-flux Dec 3, 2025
7183cc7
Address PR comments regarding DatadogFlags enable method
yugisu-flux Dec 3, 2025
7ebf3a8
Fix Obj-C remap names
yugisu-flux Dec 3, 2025
c1f9446
Fix JS tests
yugisu-flux Dec 8, 2025
b7cebb4
Support the `client.getFlagsDetails` -> `client.getAllFlagsDetails` r…
yugisu-flux Dec 8, 2025
709c53a
Merge remote-tracking branch 'origin/dima/FFL-906-implement-flags-rea…
yugisu-flux Dec 8, 2025
d53a6a2
Merge pull request #1052 from DataDog/dima/update-feature-flags-branc…
yugisu-flux Dec 9, 2025
2adedb0
Cast to FlagsClientInternal when using "internal" iOS APIs
yugisu-flux Dec 9, 2025
7fe86cf
Merge pull request #1032 from DataDog/dima/FFL-906-implement-flags-re…
yugisu-flux Dec 9, 2025
9651bd6
Merge branch 'dima/FFL-1256-implement-flags-react-native-android-wrap…
yugisu-flux Dec 9, 2025
8f78e64
FFL-1460 Implement a proper Android wrapper, update the flags caching…
yugisu-flux Dec 11, 2025
8462236
FFL-1460 Small changes to building Flags configuration
yugisu-flux Dec 11, 2025
4ae663b
Update iOS wrapper code with the changes to the exposed API
yugisu-flux Dec 11, 2025
8b78731
Move extension methods to the general file, add tests for them
yugisu-flux Dec 11, 2025
b695366
Move PrecomputedFlag from internal packages, minor changes
yugisu-flux Dec 11, 2025
06ed0cb
Fix build issues
yugisu-flux Dec 11, 2025
d9debbf
Rename of iOS methods
yugisu-flux Dec 15, 2025
62b258f
Remove usage of `_getInternal()` in favor of using `_FlagsInternalPro…
yugisu-flux Dec 15, 2025
62a43df
Update Android implementation to use UnparsedFlag
yugisu-flux Dec 16, 2025
00f6af2
Update Android implementation to use the setEvaluationContext callback
yugisu-flux Jan 5, 2026
3f5b5c9
FFL-1460 Update tests to accomodate new FlagsClient changes
yugisu-flux Jan 7, 2026
31d52b5
Merge remote-tracking branch 'origin/feature/v3' into dima/update-fla…
yugisu-flux Jan 7, 2026
dbb65b0
Merge branch 'dima/update-flags-with-latest-v3' into dima/FFL-1460-sy…
yugisu-flux Jan 7, 2026
e0765b0
Remove Datadog package version pins from example apps
yugisu-flux Jan 7, 2026
7cc7a1d
Merge branch 'dima/update-flags-with-latest-v3' into dima/FFL-1460-sy…
yugisu-flux Jan 7, 2026
f5f5291
Lock iOS deps to a specific commit
yugisu-flux Jan 7, 2026
e147449
Cut Android implementation to a separate PR
yugisu-flux Jan 7, 2026
f69f9d4
Flags Android implementation
yugisu-flux Jan 7, 2026
bb3fcb6
Rename DatadogFlags -> DdFlags
yugisu-flux Jan 12, 2026
8996a36
Update example apps with better usages of flags
yugisu-flux Jan 12, 2026
1cb346b
Fix React Native hot reload issue
yugisu-flux Jan 12, 2026
47cc00f
Merge remote-tracking branch 'origin/dima/FFL-1460-sync-flag-evaluati…
yugisu-flux Jan 12, 2026
c6961cc
Bump Datadog SDK version to 3.5.0
yugisu-flux Jan 12, 2026
c0872f7
Merge pull request #1095 from DataDog/dima/update-flags-with-latest-v3
yugisu-flux Jan 12, 2026
e766f27
Fix failing iOS tests
yugisu-flux Jan 13, 2026
17d5e82
Merge remote-tracking branch 'origin/dima/FFL-1460-sync-flag-evaluati…
yugisu-flux Jan 13, 2026
2cc11d6
Bump iOS SDK to 3.5.0
yugisu-flux Jan 14, 2026
113759c
Fix ktlint and detekt errors
yugisu-flux Jan 14, 2026
8eb54c8
Fix failing extension tests
yugisu-flux Jan 14, 2026
868d9c0
Merge pull request #1064 from DataDog/dima/FFL-1460-sync-flag-evaluat…
yugisu-flux Jan 14, 2026
a9cd3ca
Merge pull request #1096 from DataDog/dima/FFL-1256-implement-flags-r…
yugisu-flux Jan 14, 2026
75a485c
Implement OpenFeature provider for React Native
yugisu-flux Jan 15, 2026
8c63004
Update tests
yugisu-flux Jan 15, 2026
d5fcf47
Merge remote-tracking branch 'origin/feature/flags' into dima/FFL-908…
yugisu-flux Jan 15, 2026
8617eb9
Update the DatadogProvider initialization logic, update the example n…
yugisu-flux Jan 20, 2026
9607abe
Address PR comments
yugisu-flux Jan 20, 2026
58f50dc
Update 3rd party licenses
yugisu-flux Jan 20, 2026
89d9891
Rename package to correspond to the repo standards
yugisu-flux Jan 21, 2026
55edd45
Update the Old Architecture example app with OpenFeature Flags provider
yugisu-flux Jan 21, 2026
d75cfe4
Merge remote-tracking branch 'origin/develop' into dima/chore/update-…
yugisu-flux Jan 26, 2026
492631c
Fix imports
yugisu-flux Jan 26, 2026
4acc57b
Rename DatadogProvider -> DatadogOpenFeatureProvider
yugisu-flux Jan 26, 2026
485c730
Fix typos
yugisu-flux Jan 26, 2026
8b098ca
Update the update-version.sh script to include the openfeature provid…
yugisu-flux Jan 26, 2026
99c6526
Add `@datadog/mobile-react-native-openfeature` to Example app depende…
yugisu-flux Jan 26, 2026
2c473d1
Rename directory `react-native-openfeature-provider` -> `react-native…
yugisu-flux Jan 26, 2026
85c97d7
Add a README to the OpenFeature provider package
yugisu-flux Jan 26, 2026
2d7d475
Update the README as per recommendations
yugisu-flux Jan 27, 2026
60f3b70
Export PrimitiveValue
yugisu-flux Jan 27, 2026
cdce239
Add evaluation reason to the example app
yugisu-flux Jan 27, 2026
2481e20
Merge pull request #1110 from DataDog/dima/chore/update-flags-branch
yugisu-flux Jan 27, 2026
3773b2b
Merge remote-tracking branch 'origin/feature/flags' into dima/FFL-908…
yugisu-flux Jan 27, 2026
59d824c
Update OpenFeature provider version to correspond to general versions
yugisu-flux Jan 27, 2026
eb6248e
Merge pull request #1106 from DataDog/dima/FFL-908-implement-flags-re…
yugisu-flux Jan 28, 2026
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
2 changes: 2 additions & 0 deletions LICENSE-3rdparty.csv
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ dev,react-native-webview,MIT,"Copyright (c) 2015-present, Facebook, Inc."
dev,react-test-renderer,MIT,"Copyright (c) Facebook, Inc. and its affiliates."
dev,typescript,Apache-2.0,"Copyright Microsoft Corporation"
dev,genversion,MIT,"Copyright (c) 2021 Akseli Palén"
dev,@openfeature/core,Apache-2.0,"Copyright (c) The OpenFeature Authors"
prod,@openfeature/web-sdk,Apache-2.0,"Copyright (c) The OpenFeature Authors"
prod,chokidar,MIT,"Copyright (c) 2012 Paul Miller (https://paulmillr.com), Elan Shanker"
prod,fast-glob,MIT,"Copyright (c) Denis Malinochkin"
prod,svgo,MIT,"Copyright (c) Kir Belevich"
Expand Down
2 changes: 1 addition & 1 deletion benchmarks/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -129,5 +129,5 @@ dependencies {

// Benchmark tools from dd-sdk-android are used for vitals recording
// Remember to bump thid alongside the main dd-sdk-android dependencies
implementation("com.datadoghq:dd-sdk-android-benchmark-internal:3.4.0")
implementation("com.datadoghq:dd-sdk-android-benchmark-internal:3.5.0")
}
128 changes: 92 additions & 36 deletions example-new-architecture/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,18 @@ import {
DdLogs,
DdTrace,
TrackingConsent,
DdFlags,
} from '@datadog/mobile-react-native';
import React from 'react';
import {DatadogOpenFeatureProvider} from '@datadog/mobile-react-native-openfeature';
import {
OpenFeature,
OpenFeatureProvider,
useObjectFlagDetails,
} from '@openfeature/react-sdk';
import React, {Suspense} from 'react';
import type {PropsWithChildren} from 'react';
import {
ActivityIndicator,
SafeAreaView,
ScrollView,
StatusBar,
Expand Down Expand Up @@ -53,51 +61,62 @@ import {APPLICATION_ID, CLIENT_TOKEN, ENVIRONMENT} from './ddCredentials';
config.uploadFrequency = UploadFrequency.FREQUENT;
config.batchSize = BatchSize.SMALL;


// Initialize the Datadog SDK.
await DdSdkReactNative.initialize(config);

// Enable Datadog Flags feature.
await DdFlags.enable();

// Set the provider with OpenFeature.
const provider = new DatadogOpenFeatureProvider();
OpenFeature.setProvider(provider);

// Datadog SDK usage examples.
await DdRum.startView('main', 'Main');
setTimeout(async () => {
await DdRum.addTiming('one_second');
}, 1000);
await DdRum.addAction(RumActionType.CUSTOM, 'custom action');

await DdLogs.info('info log');

const spanId = await DdTrace.startSpan('test span');
await DdTrace.finishSpan(spanId);
})();

type SectionProps = PropsWithChildren<{
title: string;
}>;
function AppWithProviders() {
React.useEffect(() => {
const user = {
id: 'user-123',
favoriteFruit: 'apple',
};

OpenFeature.setContext({
targetingKey: user.id,
favoriteFruit: user.favoriteFruit,
});
}, []);

function Section({children, title}: SectionProps): React.JSX.Element {
const isDarkMode = useColorScheme() === 'dark';
return (
<View style={styles.sectionContainer}>
<Text
style={[
styles.sectionTitle,
{
color: isDarkMode ? Colors.white : Colors.black,
},
]}>
{title}
</Text>
<Text
style={[
styles.sectionDescription,
{
color: isDarkMode ? Colors.light : Colors.dark,
},
]}>
{children}
</Text>
</View>
<Suspense
fallback={
<SafeAreaView style={{height: '100%', justifyContent: 'center'}}>
<ActivityIndicator />
</SafeAreaView>
}>
<OpenFeatureProvider suspendUntilReady>
<App />
</OpenFeatureProvider>
</Suspense>
);
}

function App(): React.JSX.Element {
const isDarkMode = useColorScheme() === 'dark';
const greetingFlag = useObjectFlagDetails('rn-sdk-test-json-flag', {
greeting: 'Default greeting',
});

const isDarkMode = useColorScheme() === 'dark';
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
Expand All @@ -108,14 +127,21 @@ function App(): React.JSX.Element {
barStyle={isDarkMode ? 'light-content' : 'dark-content'}
backgroundColor={backgroundStyle.backgroundColor}
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic"
style={backgroundStyle}>
<ScrollView contentInsetAdjustmentBehavior="automatic" style={backgroundStyle}>
<Header />
<View
style={{
backgroundColor: isDarkMode ? Colors.black : Colors.white,
}}>

<View style={{backgroundColor: isDarkMode ? Colors.black : Colors.white}}>
<Section title={greetingFlag.value.greeting}>
The title of this section is based on the{' '}
<Text style={styles.highlight}>{greetingFlag.flagKey}</Text> feature
flag.{'\n\n'}
If it's different from "Default greeting", then it is coming from
the feature flag evaluation.{'\n\n'}
Evaluation reason is <Text style={styles.highlight}>{greetingFlag.reason}</Text>.{'\n\n'}Inspect <Text style={styles.highlight}>greetingFlag</Text> in{' '}
<Text style={styles.highlight}>App.tsx</Text> for more evaluation
details.
</Section>

<Section title="Step One">
Edit <Text style={styles.highlight}>App.tsx</Text> to change this
screen and then come back to see your edits.
Expand All @@ -136,6 +162,36 @@ function App(): React.JSX.Element {
);
}

type SectionProps = PropsWithChildren<{
title: string;
}>;

function Section({children, title}: SectionProps): React.JSX.Element {
const isDarkMode = useColorScheme() === 'dark';
return (
<View style={styles.sectionContainer}>
<Text
style={[
styles.sectionTitle,
{
color: isDarkMode ? Colors.white : Colors.black,
},
]}>
{title}
</Text>
<Text
style={[
styles.sectionDescription,
{
color: isDarkMode ? Colors.light : Colors.dark,
},
]}>
{children}
</Text>
</View>
);
}

const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
Expand All @@ -155,4 +211,4 @@ const styles = StyleSheet.create({
},
});

export default App;
export default AppWithProviders;
2 changes: 1 addition & 1 deletion example-new-architecture/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ target 'DdSdkReactNativeExample' do
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)

post_install do |installer|
# https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
react_native_post_install(
Expand Down
Loading
Loading