Guides integration of FeatBit Java Server SDK for real-time feature flag evaluation in server-side Java apps like Spring Boot using Maven or Gradle dependencies.
npx claudepluginhub joshuarweaver/cascade-code-devops-misc-1 --plugin featbit-featbit-skillsThis skill uses the workspace's default tool permissions.
Use for server-side Java applications — Spring Boot, Jakarta EE, standalone services — that need real-time feature flag evaluation. Requires Java SE 8 or above.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Use for server-side Java applications — Spring Boot, Jakarta EE, standalone services — that need real-time feature flag evaluation. Requires Java SE 8 or above.
Why server-side SDK: maintains one persistent WebSocket connection, synchronizes all flag data locally in under 100 ms, then evaluates every flag locally in under 10 ms per call on average. Do not use for Android or client-side JavaScript — those require a client-side SDK.
https://github.com/featbit/featbit-java-sdk
Copy and track progress:
FBConfig and create the clientFBUser and evaluate the first feature flagStep 1: Add the dependency
Use one build tool:
<dependency>
<groupId>co.featbit</groupId>
<artifactId>featbit-java-sdk</artifactId>
<version>1.4.5</version>
</dependency>
implementation 'co.featbit:featbit-java-sdk:1.4.5'
Step 2: Create the client
Use this minimal setup:
FBConfig config = new FBConfig.Builder()
.streamingURL("ws://localhost:5100")
.eventURL("http://localhost:5100")
.build();
FBClient client = new FBClientImp("<your-env-secret>", config);
Step 3: Evaluate the first feature flag
Use the official pattern:
FBUser user = new FBUser.Builder("<unique-user-key>").userName("Jane").build();
// Flag value only
Boolean flagValue = client.boolVariation("flag-key", user, false);
System.out.printf("flag returns %b for user %s%n", flagValue, user.getUserName());
// Flag value with evaluation detail
EvalDetail<Boolean> ed = client.boolVariationDetail("flag-key", user, false);
System.out.printf("flag returns %b, reason: %s%n", ed.getVariation(), ed.getReason());
Step 4: Validate the integration
If client.isInitialized() is false or evaluation returns the fallback unexpectedly, verify the secret and both URLs, then retry. Call client.close() during shutdown.
After the client is initialized, evaluate a feature flag with a user and a fallback value:
FBUser user = new FBUser.Builder("<unique-user-key>").userName("Jane").build();
// Value only
Boolean value = client.boolVariation("flag-key", user, false);
// Value with evaluation detail
EvalDetail<Boolean> detail = client.boolVariationDetail("flag-key", user, false);
System.out.printf("returns %b, reason: %s%n", detail.getVariation(), detail.getReason());
Use boolVariation when only the flag value is needed. Use boolVariationDetail when the evaluation reason is also needed — detail.getReason() explains why the variation was returned.
Also available for non-boolean flags: variation/variationDetail (string), intVariation/intVariationDetail, longVariation/longVariationDetail, doubleVariation/doubleVariationDetail, jsonVariation/jsonVariationDetail.
Add custom properties to FBUser when targeting rules depend on user attributes beyond key and userName:
FBUser user = new FBUser.Builder("a-unique-key-of-user")
.userName("bob")
.custom("age", "15")
.custom("country", "FR")
.build();
Use .custom(key, value) for any attribute that must be referenced in feature flag targeting rules.
getAllLatestFlagsVariations to get all flags for a user at once.