Skip to content

Commit b15bea5

Browse files
Pawan-yadav266rohitesh-wingify
authored andcommitted
feat: support for both vwo and wingify package (rebranded)
1 parent ac02fed commit b15bea5

145 files changed

Lines changed: 2087 additions & 1509 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
uses: wingify/slack-github-action@v1.15.1-wingify
5050
with:
5151
channel-id: 'vwo-fs-fme-sdk-job-status'
52-
slack-message: "<!here> Java FME SDK Test on *Java-${{ matrix.java_version }}* and *${{ matrix.os }}* got *${{job.status}}* ${{job.status == 'success' && ':heavy_check_mark:' || ':x:'}} \nCommit: `${{github.event.head_commit.message}}`. \nCheck the latest build: https://github.com/wingify/vwo-fme-java-sdk/actions"
52+
slack-message: "<!here> Java FME SDK Test on *Java-${{ matrix.java_version }}* and *${{ matrix.os }}* got *${{job.status}}* ${{job.status == 'success' && ':heavy_check_mark:' || ':x:'}} \nCommit: `${{github.event.head_commit.message}}`. \nCheck the latest build: https://github.com/wingify/wingify-fme-java-sdk/actions"
5353
color: "${{job.status == 'success' && '#00FF00' || '#FF0000'}}"
5454
env:
5555
SLACK_BOT_TOKEN: ${{ secrets.SLACK_NOTIFICATIONS_BOT_TOKEN }}

CHANGELOG.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,74 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.50.0] - 2026-06-29
9+
10+
This release introduces **Wingify** as the primary SDK branding and package namespace, while keeping existing **VWO** integrations fully supported.
11+
12+
### Added
13+
14+
- **Wingify public API** — use `Wingify`, `WingifyInitOptions`, and `WingifyUserContext` from the `com.wingify` package as the recommended entry point for new integrations.
15+
16+
```java
17+
import com.wingify.Wingify;
18+
import com.wingify.models.user.WingifyUserContext;
19+
import com.wingify.models.user.WingifyInitOptions;
20+
import com.wingify.models.user.GetFlag;
21+
22+
WingifyInitOptions options = new WingifyInitOptions();
23+
options.setAccountId(123456);
24+
options.setSdkKey("32-alpha-numeric-sdk-key");
25+
26+
Wingify client = Wingify.init(options);
27+
28+
WingifyUserContext context = new WingifyUserContext();
29+
context.setId("user-123");
30+
31+
GetFlag flag = client.getFlag("feature-key", context);
32+
```
33+
34+
### Changed
35+
36+
- The SDK implementation now lives under the `com.wingify` package.
37+
- Log messages and documentation have been updated to reflect Wingify branding.
38+
- **No breaking changes for existing integrations** — server event names, payload keys, and runtime behavior remain compatible with the VWO platform.
39+
40+
### Deprecated
41+
42+
The following **VWO** classes in `com.vwo` are deprecated but **continue to work without modification**:
43+
44+
| Deprecated (still supported) | Use instead |
45+
|---|---|
46+
| `com.vwo.VWO` | `com.wingify.Wingify` |
47+
| `com.vwo.models.user.VWOInitOptions` | `com.wingify.models.user.WingifyInitOptions` |
48+
| `com.vwo.models.user.VWOContext` | `com.wingify.models.user.WingifyUserContext` |
49+
| `com.vwo.interfaces.logger.LogTransport` | `com.wingify.interfaces.logger.LogTransport` |
50+
| `com.vwo.packages.logger.enums.LogLevelEnum` | `com.wingify.packages.logger.enums.LogLevelEnum` |
51+
| `com.vwo.interfaces.integration.IntegrationCallback` | `com.wingify.interfaces.integration.IntegrationCallback` |
52+
| `com.vwo.packages.storage.Connector` | `com.wingify.packages.storage.Connector` |
53+
54+
Existing code does not need to change immediately. We recommend adopting the Wingify API for new projects and migrating when convenient:
55+
56+
```java
57+
// Still supported — no action required today
58+
import com.vwo.VWO;
59+
import com.vwo.models.user.VWOContext;
60+
import com.vwo.models.user.VWOInitOptions;
61+
62+
VWOInitOptions options = new VWOInitOptions();
63+
options.setAccountId(123456);
64+
options.setSdkKey("32-alpha-numeric-sdk-key");
65+
66+
VWO client = VWO.init(options);
67+
68+
VWOContext context = new VWOContext();
69+
context.setId("user-123");
70+
71+
client.getFlag("feature-key", context);
72+
```
73+
74+
**Migration tip:** Replace `VWO``Wingify`, `VWOInitOptions``WingifyInitOptions`, and `VWOContext``WingifyUserContext`, and update imports from `com.vwo.*` to `com.wingify.*`. Method signatures and SDK behavior are unchanged.
75+
876
## [1.21.0] - 2026-03-24
977

1078
### Added

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Contributing to VWO FME JAVA SDK
1+
## Contributing to Wingify FME Java SDK
22
We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
33

44
- Reporting a bug
@@ -19,7 +19,7 @@ Pull requests are the best way to propose changes to the codebase (we use [Githu
1919
When you submit code changes, your submissions are understood to be under the same [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0) that covers the project. Feel free to contact the maintainers if that's a concern.
2020

2121
### Report bugs using GitHub issues
22-
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/wingify/vwo-fme-java-sdk/issues); it's that easy!
22+
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/wingify/wingify-fme-java-sdk/issues); it's that easy!
2323

2424
**Note**: Write bug reports with detail, background, and sample code
2525

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@
187187
same "printed page" as the copyright notice for easier
188188
identification within third-party archives.
189189

190-
Copyright 2024-2025 Wingify Software Pvt. Ltd.
190+
Copyright 2024-2026 Wingify Software Pvt. Ltd.
191191

192192
Licensed under the Apache License, Version 2.0 (the "License");
193193
you may not use this file except in compliance with the License.

NOTICE

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright 2024-2025 Wingify Software Pvt. Ltd.
1+
Copyright 2024-2026 Wingify Software Pvt. Ltd.
22

33
Licensed under the Apache License, Version 2.0 (the "License");
44
you may not use this file except in compliance with the License.
@@ -12,9 +12,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1212
See the License for the specific language governing permissions and
1313
limitations under the License.
1414

15-
Wingify VWO FME Java SDK
15+
Wingify FME Java SDK
1616

1717
This product includes software developed at
1818
Wingify Software Pvt. Ltd. (https://wingify.com/).
1919

20-
Copyright 2024-2025 Wingify Software Pvt. Ltd.
20+
Copyright 2024-2026 Wingify Software Pvt. Ltd.

git-hooks/pre-push

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env node
22

33
/**
4-
* Copyright 2024-2025 Wingify Software Pvt. Ltd.
4+
* Copyright 2024-2026 Wingify Software Pvt. Ltd.
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -207,7 +207,7 @@ let checkLicenseUtil = {
207207
console.time('Execution time for License and Copyright');
208208
console.log(`${AnsiColorEnum.CYAN}\nVerifying License and Copyright${AnsiColorEnum.RESET}\n`);
209209
const isSuccess = checkLicenseUtil.checkLicenseAndCopyright({
210-
year: '2024-2025',
210+
year: '2024-2026',
211211
author: 'Wingify Software Pvt. Ltd.',
212212
paths: 'src',
213213
stoppingCriteria: '\\*\\/',

pom.xml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22

3-
<!-- Copyright 2024-2025 Wingify Software Pvt. Ltd.
3+
<!-- Copyright 2024-2026 Wingify Software Pvt. Ltd.
44
55
Licensed under the Apache License, Version 2.0 (the "License");
66
you may not use this file except in compliance with the License.
@@ -17,14 +17,14 @@ limitations under the License. -->
1717
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
1818
<modelVersion>4.0.0</modelVersion>
1919

20-
<groupId>com.vwo.sdk</groupId>
21-
<artifactId>vwo-fme-java-sdk</artifactId>
22-
<version>1.21.0</version>
20+
<groupId>com.wingify.sdk</groupId>
21+
<artifactId>wingify-fme-java-sdk</artifactId>
22+
<version>1.50.0</version>
2323
<packaging>jar</packaging>
2424

25-
<name>VWO FME Java SDK</name>
26-
<description>VWO Feature Management and Experimentation SDK for Java</description>
27-
<url>https://github.com/wingify/vwo-fme-java-sdk</url>
25+
<name>Wingify FME Java SDK</name>
26+
<description>Wingify Feature Management and Experimentation SDK for Java</description>
27+
<url>https://github.com/wingify/wingify-fme-java-sdk</url>
2828

2929
<licenses>
3030
<license>
@@ -34,9 +34,9 @@ limitations under the License. -->
3434
</licenses>
3535

3636
<scm>
37-
<url>scm:git@github.com:wingify/vwo-fme-java-sdk.git</url>
38-
<connection>scm:git:git@github.com:wingify/vwo-fme-java-sdk.git</connection>
39-
<developerConnection>scm:git:git@github.com:wingify/vwo-fme-java-sdk.git</developerConnection>
37+
<url>scm:git@github.com:wingify/wingify-fme-java-sdk.git</url>
38+
<connection>scm:git:git@github.com:wingify/wingify-fme-java-sdk.git</connection>
39+
<developerConnection>scm:git:git@github.com:wingify/wingify-fme-java-sdk.git</developerConnection>
4040
<tag>v1.0.0</tag>
4141
</scm>
4242

@@ -287,7 +287,7 @@ limitations under the License. -->
287287
</executions>
288288
<configuration>
289289
<excludes>
290-
<exclude>com/vwo/**/Murmur3*</exclude>
290+
<exclude>com/wingify/**/Murmur3*</exclude>
291291
</excludes>
292292
</configuration>
293293
</plugin>

src/main/java/com/vwo/VWO.java

Lines changed: 27 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2024-2025 Wingify Software Pvt. Ltd.
2+
* Copyright 2024-2026 Wingify Software Pvt. Ltd.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,108 +15,44 @@
1515
*/
1616
package com.vwo;
1717

18-
import com.vwo.packages.logger.enums.LogLevelEnum;
19-
import com.vwo.services.LoggerService;
18+
import com.vwo.models.user.GetFlag;
2019
import com.vwo.models.user.VWOInitOptions;
21-
import com.vwo.utils.LogMessageUtil;
22-
import com.vwo.utils.UUIDUtils;
20+
import com.wingify.Wingify;
21+
import com.wingify.WingifyBuilder;
22+
import com.wingify.models.user.WingifyUserContext;
2323

24+
/**
25+
* Backward-compatible entry point for the SDK.
26+
* Existing integrations using {@code com.vwo.VWO} continue to work without code changes.
27+
*
28+
* @deprecated Use {@link com.wingify.Wingify} instead.
29+
*/
30+
@Deprecated
31+
public class VWO extends Wingify {
2432

25-
public class VWO extends VWOClient {
26-
27-
/**
28-
* Constructor for the VWO class.
29-
* Initializes a new instance of VWO with the provided options.
30-
* @param settings - Settings string for the VWO instance.
31-
* @param vwoBuilder - VWO builder instance containing configuration options.
32-
*/
33-
public VWO(String settings, VWOBuilder vwoBuilder) {
34-
super(settings, vwoBuilder);
33+
VWO(String settings, WingifyBuilder wingifyBuilder) {
34+
super(settings, wingifyBuilder);
3535
}
3636

3737
/**
38-
* Sets the singleton instance of VWO.
39-
* Configures and builds the VWO instance using the provided options.
40-
* @param options - Configuration options for setting up VWO.
41-
* @return A CompletableFuture resolving to the configured VWO instance.
38+
* Initializes the SDK using {@link VWOInitOptions}.
39+
*
40+
* @deprecated Use {@link com.wingify.Wingify#init(com.wingify.models.user.WingifyInitOptions)} instead.
4241
*/
43-
private static VWO setInstance(VWOInitOptions options) {
44-
VWOBuilder vwoBuilder;
45-
if (options.getVwoBuilder() != null) {
46-
vwoBuilder = options.getVwoBuilder();
47-
} else {
48-
vwoBuilder = new VWOBuilder(options);
49-
}
50-
vwoBuilder
51-
.setLogger() // Sets up logging for debugging and monitoring.
52-
.setSettingsManager() // Sets the settings manager for configuration management.
53-
.setStorage() // Configures storage for data persistence.
54-
.setNetworkManager() // Configures network management for API communication.
55-
.initPolling() // Initializes the polling mechanism for fetching settings.
56-
.initUsageStats();
57-
58-
String settings = vwoBuilder.getSettings(false);
59-
vwoBuilder.initBatching();
60-
VWO vwoInstance = new VWO(settings, vwoBuilder);
61-
// Set VWOClient instance in VWOBuilder
62-
vwoBuilder.setVWOClient(vwoInstance);
63-
64-
vwoBuilder.getLoggerService().log(LogLevelEnum.INFO, "CLIENT_INITIALIZED", null);
65-
return vwoInstance;
66-
}
67-
42+
@Deprecated
6843
public static VWO init(VWOInitOptions options) {
69-
if (options == null || options.getSdkKey() == null || options.getSdkKey().isEmpty()) {
70-
String message = "[ERROR]: VWO-SDK Please provide the sdkKey in the options and should be a of type string";
71-
System.err.println(message);
72-
}
73-
74-
if (options == null || options.getAccountId() == null || options.getAccountId().toString().isEmpty()) {
75-
String message = "[ERROR]: VWO-SDK Please provide VWO account ID in the options and should be a of type string|number";
76-
System.err.println(message);
77-
}
78-
79-
if (options == null ||options.getIsAliasingEnabled() && (options.getGatewayService() == null || options.getGatewayService().isEmpty())) {
80-
String message = "[ERROR]: VWO-SDK Please provide a valid gateway service url in the options when aliasing is enabled";
81-
System.err.println(message);
82-
}
83-
//start timer
84-
long initStartTime = System.currentTimeMillis();
85-
VWO instance = VWO.setInstance(options);
86-
long initTime = System.currentTimeMillis() - initStartTime;
87-
// send sdk init event
88-
instance.sendSdkInitAndUsageStatsEvent(initTime);
89-
return instance;
44+
options.setIsViaVWO(true);
45+
return (VWO) Wingify.init(options, VWO::new);
9046
}
9147

9248
/**
93-
* Generate a deterministic UUID for a given user and account combination.
49+
* Returns the feature flag result as {@link GetFlag} for backward compatibility.
9450
*
95-
* @param userId The user's ID (must be a non-empty string).
96-
* @param accountId The account ID (must be a non-empty string).
97-
* @return UUID without dashes in uppercase, or null on invalid input or error.
51+
* @deprecated Use {@link com.wingify.WingifyClient#getFlag(String, com.wingify.models.user.WingifyUserContext)} instead.
9852
*/
99-
public static String getUUID(String userId, String accountId) {
100-
String apiName = "getUUID";
101-
try {
102-
// Validate userId
103-
if (userId == null || userId.isEmpty()) {
104-
System.out.println("userId passed to " + apiName + " API is not of valid type.");
105-
return null;
106-
}
107-
108-
// Validate accountId
109-
if (accountId == null || accountId.isEmpty()) {
110-
System.out.println("accountId passed to " + apiName + " API is not of valid type.");
111-
return null;
112-
}
113-
114-
// Call the UUID utility function
115-
return UUIDUtils.getUUID(userId, accountId);
116-
117-
} catch (Exception error) {
118-
System.out.println("API - " + apiName + " failed to execute. Trace: " + error);
119-
return null;
120-
}
53+
@Deprecated
54+
@Override
55+
public GetFlag getFlag(String featureKey, WingifyUserContext context) {
56+
return new GetFlag(super.getFlag(featureKey, context));
12157
}
12258
}

src/main/java/com/vwo/interfaces/integration/IntegrationCallback.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2024-2025 Wingify Software Pvt. Ltd.
2+
* Copyright 2024-2026 Wingify Software Pvt. Ltd.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,8 +15,11 @@
1515
*/
1616
package com.vwo.interfaces.integration;
1717

18-
import java.util.Map;
19-
20-
public interface IntegrationCallback {
21-
void execute(Map<String, Object> properties);
18+
/**
19+
* Backward-compatible callback for existing VWO integrations.
20+
*
21+
* @deprecated Use {@link com.wingify.interfaces.integration.IntegrationCallback} instead.
22+
*/
23+
@Deprecated
24+
public interface IntegrationCallback extends com.wingify.interfaces.integration.IntegrationCallback {
2225
}

src/main/java/com/vwo/interfaces/logger/LogTransport.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2024-2025 Wingify Software Pvt. Ltd.
2+
* Copyright 2024-2026 Wingify Software Pvt. Ltd.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,6 +17,12 @@
1717

1818
import com.vwo.packages.logger.enums.LogLevelEnum;
1919

20+
/**
21+
* Backward-compatible custom logger transport for existing VWO integrations.
22+
*
23+
* @deprecated Use {@link com.wingify.interfaces.logger.LogTransport} instead.
24+
*/
25+
@Deprecated
2026
public interface LogTransport {
2127
void log(LogLevelEnum level, String message);
22-
}
28+
}

0 commit comments

Comments
 (0)