DevCycle changelog
Realtime Updates on Server-Side SDKs
We've been working for the past few months to bring server-sent events and realtime updates to all of our SDKs and today we're happy to announce that this functionality is now available on all of our server-side SDKs.
If you're running our server-side SDKs and want to limit the number of times the SDKs make polling requests while ensuring you stay up-to-date with new configuration changes, you can enable Realtime Updates in the initialization options of your favourite DevCycle server SDK.
Check out NodeJS as an example.
Custom Property Schemas
We’re thrilled to introduce a new enhancement that makes setting up targeting rules smoother and error-free: Custom Property Schemas. You can now define a schema and set up a list of allowed values for each Custom Property. These values appear in a dropdown when configuring Targeting Rules.
Custom Labels for Easy Readability: Assign readable labels to each value, making selections quick, clear, and intuitive. It’s a simple but powerful improvement to speed up workflows and reduce errors.
Dropdown selections: No more memorizing valid inputs—just choose from the list! This feature enables easy selection and visibility by presenting only valid values when you’re creating Targeting Rules.
Push-Based Config Updates for Server SDKs
We're excited to announce that we've completed work to have all of our server-side SDKs receive configuration updates via a push-based server-sent event system.
When the SSE-based configuration system is enabled, you can drastically reduce the number of polling requests made to the DevCycle Config CDN.
This work includes SSE functionality for:
Python
Java
.NET
GO
Ruby
Roku SDK
We’re pumped to introduce the DevCycle Roku Client SDK, an exciting new addition to our suite of SDKs! Experience seamless user segmentation and bucketing with global edge workers, delivering fast, reliable performance. Bring the power of feature flagging to your Roku setup today! 📺
Check out the Roku SDK docs for info!
More improvements & fixes:
Added default evaluations to the Reach (Variable Evaluations) graph.
Variable defaults are the values you provide in code that tell DevCycle SDKs what value to assign to a Variable in cases where a different value is unavailable. It’s useful for debugging and investigation purposes to see how often a variable is defaulted.
Randomize Using a Custom Property
This new functionality provides the ability to use any Custom Property field as an alternative key for rolling out a feature. This is particularly useful for B2B companies that want to rollout features to all users within a client company at once.
To learn more about this new feature you can check out the relevant documentation here.
"Starts With" / "Ends With" Comparator
Adding new comparators to DevCycle's targeting rules (Starts With and Ends With") which are particularly useful for targeting by domain or host.
Vercel Edge Config Integration
The Vercel Edge Config integration allows teams to automatically sync DevCycle flagging configurations to Vercel Edge Config, a lightning-fast data storage system optimized for deployments running on Vercel.
With DevCycle + Vercel Edge Config, the decision logic for your features lives with your hosted site. You can run your feature rollouts or experiments with ultra-low latency, improving performance and end-user experience.
More Improvements & Fixes
Creating a project from the edit page
Improved Variable searching
Make teammate invite field multi-line to avoid input errors
Approval Workflows
When a DevCycle user makes a Feature change, they can request/might require approval from a Publisher within their DevCycle project. Approvals introduce an added level of protection and governance to the use of feature flags.
Approval Workflows documentation can be found here.
More improvements & fixes
Update Comparative Analysis section to be named Experiment Results
Created an organization level setting for managing discoverability
Improved dark mode, fixing some styling issues
OpenFeature Multi-Provider Wrapper
Contributed a library to the OpenFeature project that manages multiple providers at once to aid with a gradual transition between Feature Flagging solutions or to run mutliple providers concurrently in a single project.
You can check out our blog post on OpenFeature's blog here.
More improvements & fixes
Added an SDK Install Wizard to the main dashboard for new users
Web Debugger
The Web Debugger is a helpful tool you can embed in your own site when using DevCycle. It allows authorized users to see the current state of their Features, use Self-Targeting to override Features and Variables, and see a stream of Events from the SDK as they occur.
It leverages the simplicity of Self-Targeting and makes manual testing and QA even easier by bringing overrides and event logging right into your website.
Check out the docs to set it up in your application.
Passthrough Rollouts: Ability to "pass through" a Targeting Rule
With Passthrough Rollouts, if a rollout or schedule hasn’t been hit for a given user, they will pass through and be evaluated against the subsequent rules. They will not be “held” on the first rule and can be served the targeting of subsequent rules. This allows you to manage complex schedules and variation changes for the same audience more easily.
Currently this functionality is opt-in, you can turn it on today by enabling it on your project’s settings pages.
On July 17, 2024, we will make Passthrough Rollouts the default functionality for all schedules and rollouts. If your team is actively using the Scheduled Rollouts functionality for Targeting Rules, this change may affect how Targeting Rules behave for your Features.
For our server-side SDKs, we recommend upgrading your SDK before July 17, 2024, and before turning Passthrough Rollouts on. If you do not update your SDK, the Targeting Rule behavior will remain the same, but client-side SDKs will use the passthrough targeting logic.
Client-side SDK users can opt-in whenever you'd like without an SDK update and start using the new targeting rule behaviour immediately.
Here is a link to our docs for more info on Passthrough Rollouts & the required server-side SDK versions!
Slack App & Webhooks - Environment Filters
We're excited to announce an enhancement to our Slack integration & outbound webhooks - you can now subscribe to specific environment changes!
In Slack, to add a subscription for a project or feature changes for a specific environment, add the flag [-e environment-key]
to the Slack command.
For example:
All Project changes for the specified Environment:
devcycle subscribe project-key [-e environment-key]
All Feature changes that impact the specified Environment:
/devcycle subscribe project-key [-f feature-key] [-e environment-key]
SDK Bootstrapping & Server-Side Rendering
Today we're introducting SDK bootstrapping for all Javascript-based SDKs to help teams and ensure the best possible performance when leveraging DevCycle in a server-side rendering context.
When using a server rendering framework such as Remix, Nuxt, or SvelteKit, you will likely render content on the server and send it to the client for hydration. When feature flagging is involved, you need to ensure that rendering on the server uses the same flag values as the client. It is also important to avoid the performance impact of the initial client-side DevCycle configuration fetch that would normally have to occur when the page is first loaded.
Check out the bootstrapping docs to learn more.
Other Recent Improvements:
Dashboard
Prevent the very last organization owner from changing their Role
Added an "Export User Roles" button to the Team page
For teams with a lot of environments (greater than 6) we made the side nav on the Feature Management page scrollable
Added some additional date protections to Multi-Step Rollouts to insure only valid rollouts can be entered
SDKs
Removed the JS SDK's dependency on the window object, making it easier use the JS SDK in other contexts such as within a Chrome Extension
Multi-Step Rollouts
We've added a new rollout option, Multi-Step Rollouts! This allows you to set up a stepped or phased rollout schedule for your Feature with certain percentage milestones, giving you more control & options on how your team wants to orchestrate a Feature rollout.
For example, you can set up a Targeting Rule to roll out a Variation to 25% of users on X date, roll out to 50% of users on Y date, and then gradually roll out to the rest of the users (100%) by Z date.
Check out our docs to learn how to set up a multi-step rollout!
DevCycle Slack App
We're thrilled to release our DevCycle Slack App! Now, receive real-time notifications directly in your Slack channels for all Feature activity within DevCycle. The app allows you to subscribe to Feature changes for an entire project or a particular set of Features and have the updates posted to a channel within your Slack workspace.
We hope this integration helps streamline collaboration and keeps your team informed about new Features and modifications without leaving Slack!
Check out our Slack App integration page & connect your workspace!
Custom Property Usage
We have added the ability to see what Audiences & Features a Custom Property is being used in! We hope that making this usage information readily available will be useful for our teams leveraging Custom Properties.
To find this information, navigate to your Settings page > Custom Properties and click View Info on any Custom Property you wish to learn more about!
Native NestJS Support
Today we're announcing native NestJS support via a wrapper of our Node.js SDK. This continues our goal of providing the best possible experience to developers that are working with our platform.
The NestJS wrapper for the Node.js SDK provides a DevCycle module that we recommend importing at the root of your app. The module exports the DevCycle client, allowing you to inject a single instance throughout your app.
The NestJS SDK also includes:
Parameter decorators and guards to provide a more seamless experience using DevCycle with NestJS
Mocks, making it easier to mock DevCycle variables in your tests
Feature Flag Obfuscation
Feature flags are often used to hide upcoming features before release. Normally, not showing the feature on a UI is enough to conceal it from users. However, in some cases, it may be important to ensure that no trace of the feature can be found in the code that is shipped to users. This is particularly important on the web, where end-users can easily see network calls as well as the source code for the page. From that, intrepid users can often infer the nature of a feature they can't access, which may lead to sensitive or strategic information being leaked.
To prevent this, we created Feature Obfuscation which allows you to obfuscate all the Variable keys used in your code in Web platforms (React, Next.js, Javascript etc.) to keep their names private! Next.js users can also take advantage of our SDK's Conditional Deferred Rendering feature, which will strip out any source code for features the user isn't eligible for, reducing bundle size while keeping the feature's details private.
Embedded Code in Onboarding Flow
We've added a code playground to the Guided Onboarding flow, which can also be accessed again from the dashboard on the demo, "Hello Togglebot" feature. With this code playground we're trying to make learning about DevCycle and how our SDKs work as easy as possible.
Change Variable Status Indicator for Newly Re-Associated Variables
Feature Archiving
The introduction of the "Archived" state aims to help users declutter their dashboard and enhance focus on active and transitional features and driving to clean up. This state is intended to reduce clutter, improve system manageability, and help clean-up.
Built-In OpenFeature Support and More!
Here at DevCycle we love OpenFeature and what they are doing, so we're continuing to dive deeper into our support for this great community!
We have three updates to announce today that reflect our passion for the OpenFeature project:
We now have official providers for all OpenFeature languages. You can check out our OpenFeature docs here.
We are the only OpenFeature provider with support built directly into our SDKs. All you have to do is use our getOpenFeatureProvider() method in any of our OpenFeature-supported SDKs.
Our CTO, Jonathan Norris, was elected to the OpenFeature governance board.
DevCycle is committed to helping drive the OpenFeature project forward, and these updates are just small steps in our long journey together.
If you are interested in a particular SDK, our docs for each provider can be found here:
Outbound Webhooks
Outbound Webhooks enable you to connect and integrate DevCycle with your favorite tools and platforms, streamlining your development workflow.
Below are a few valuable ways to leverage Webhooks:
Real-time Notifications: Stay informed about Feature changes as they happen.
Seamless Integrations: Connect DevCycle with Slack, GitHub, Zendesk, and more.
Custom Automation: Tailor notifications and actions to your specific needs.
Native Next.js SDK
We're excited to announce our latest SDK milestone: the launch of our first-class Next.js SDK. This SDK fully supports the latest features of Next.js, allowing you to work on the bleeding edge with a seamless feature flagging experience.
Here's what you can expect:
Seamless Integration with App Router and Server Component Rendering: Our SDK works with the Next.js App Router, allowing you to flag features in Server Components.
Realtime Updates of Flag Configuration: Change your feature flag configurations in realtime and watch as your server- and client-rendered content updates dynamically.
Faster Performance with Static and Streaming Content: We've designed our SDK for lightning-fast page rendering, fully supporting static pages and streaming with Suspense.
Consistent Experience Across Server and Client: DevCycle ensures a unified set of flag values on both ends, maintaining server and client rendering coherence.
Local Evaluation of Flag Rules: Determine user-specific flag values locally on your backend for sub-millisecond evaluation times.
To get started with the SDK check out the documentation here.
Guided Onboarding for Non-Developers
A step-by-step onboarding flow for non-developers that embeds our example app, allowing a non-developer to get to the same a-ha moment as developers without needing to run the example themselves.
Feature-Level Audit Logs
We’re excited to finally release our Feature-Level Audit Log! A Feature's Audit Log will allow you to see what changes were made, who made the changes, and when they occurred.
In the case of an outage or bug within your application, we understand it's extremely important to know all changes to a system within a particular timeframe to help engineers resolve incidents and get to the root cause of an issue. Now, your team can see a change log of what’s happened within every feature's configuration, variables, and targeting over its lifetime.
You can find each Feature's Audit Log at the bottom of the side nav, or by clicking on the Last Modified link at the top of the Feature form.
Variable Status Indicators
We've now added Variable Status indicators to the Feature Form that show:
if the Variable has been seen in code (if Code References have been enabled)
if evaluations have been seen for the Variable
These indicators are helpful when setting up features to confirm proper setup, and aid in Variable cleanup once a Feature has completed it's lifecycle.
Hover over these indicators for more detail about a Variable's code references & evaluation information!
"Complete" Feature Status
As a part of our goal to bring you more Feature Lifecycle & Cleanup tools, we recently added the ability to mark a Feature as "Complete" in the dashboard. One could consider a Feature "Complete" once it has been fully rolled out to all users, is stable in production, and likely with only one variation being distributed.
To change the status of a Feature, click on Feature Status within the left nav bar on the Feature Form.
After a Feature is marked "Complete", it enters a semi-readonly state, limiting some edibility such as restricting the addition of new Targeting Rules and Variations, and all Users will receive the chosen "Release Variation" in all environments. Upon completing a Feature, you will see cleanup checklists for each Variable as well!