Featurevisor v3.0 is here!

Featurevisor v3.0 is here, focused on making projects easier to organize and scale, datafiles easier to shape, and SDKs easier to use consistently across multiple different languages.
This is a breaking release, but the generated datafile schema remains version 2.
That means you can upgrade your Featurevisor project first, publish v3-generated datafiles, and then upgrade application SDKs one by one at your own pace allowing you to coordinate the release with your application teams very conveniently.
What's new?#
The biggest changes in v3 are:
- Targets replace scopes and automatic tag-based datafile generation.
- Sets let one repository contain multiple independent project trees.
- Promotions copy definitions between sets, with optional promotion flows.
- Feature
tagsare now optional. - Projects have no default environments unless you define them.
- Namespaced keys use
.as the default separator. - JavaScript SDK now uses
createFeaturevisor()as the main API. - SDK modules replace hooks.
- SDK diagnostics replace the old JavaScript logger API.
setDatafile()merges by default, enabling loading datafiles incrementally.- Go, Swift, Java, Ruby, Python, and PHP SDKs have been ported to v3 behavior.
Targets for datafiles#
Scopes were introduced to make smaller datafiles from partially known contexts. In v3, that responsibility belongs to Targets.
Targets live as files in the targets directory:
description: Web datafile# pick all features tagged with 'web'tag: web# apply partially known context upfront# to reduce conditions/segments/rules in generated datafilecontext: platform: webYou can also select features directly:
description: Checkout featuresincludeFeatures: - checkout* - shared.navigationexcludeFeatures: - checkout.internal*Every datafile is now produced from a target. The smallest possible target is simply:
description: All featuresUnless anything else is specified, the target will include all features in the project.
Sets and promotions#
With Sets, a project can be split into independent trees:
sets/├── dev/├── staging/└── production/Each set owns its own attributes, segments, features, targets, and tests. You can then use Promotions to move definitions forward:
$ npx featurevisor promote --from=dev --to=staging --applyThis works well for teams that want release lanes, ownership boundaries, or distinct surfaces while keeping everything Git-based.
The same sets-based approach also be used for completely different areas of your business, such as different products, teams, or geographies, that need to be managed independently.
SDKs#
The JavaScript SDK has a smaller and clearer public API:
import { createFeaturevisor, type Featurevisor, type FeaturevisorOptions, type FeaturevisorModule,} from '@featurevisor/sdk'Modules replace hooks:
const trackingModule: FeaturevisorModule = { name: 'tracking', after(evaluation) { // send exposure or diagnostic data to your own system return evaluation },}const f = createFeaturevisor({ datafile, modules: [trackingModule],})Diagnostics are now the standard way to observe SDK behavior:
const f = createFeaturevisor({ logLevel: 'info', onDiagnostic(diagnostic) { // send to your observability system },})The Go, Swift, Java, Ruby, Python, and PHP SDKs have also been aligned with the same v3 behavior where practical for each language.
Datafile schema#
Featurevisor v3 still generates schema version 2 datafiles:
{ "schemaVersion": "2"}The old v1 datafile generation path and --schema-version selection are gone from active usage. If you still have a consumer that requires v1 datafiles, keep using an older Featurevisor v2 CLI for that consumer while you migrate it.
Migration guide#
The full migration guide is available here:
The recommended path is:
- Upgrade your Featurevisor project and generate v3 datafiles.
- Publish the datafiles.
- Upgrade application SDKs one at a time.
Because the datafile schema remains version 2, this can be done incrementally for applications already using v2-compatible SDKs.
Where we stand today#
Featurevisor has come a long way since its inception in 2023, going stable with v1 in the same year later.
SDK coverage has improved significantly since v2 release last year, along with skills for AI agents too for more automation.
Initially I built it for developers to write the definitions by hand, but now I feel we live in a different world where AI agents are more capable of generating the definitions for us. And Featurevisor feels like a natural fit for that for any product engineering organization with feature management needs.
v3 is all about making things more performant and scalable, especially for larger projects. I mean, really large projects with thousands of features, segments, rules, and what not. With the new improvements in v3, I do not foresee scaling being a blocker for adopting Featurevisor anymore.
Based on the numbers from npm, the usage of Featurevisor has been growing steadily. And word of mouth will play a key role in the future. I am hoping the v3 release will help it grow even faster.
Going forward#
I have been quietly expanding the visor family with Messagevisor (for i18n and l10n needs) and Eventvisor (for analytics schema governance), and I will be spending some time there to make them stable and production ready.
There will be synergy between the tools, like how Messagevisor already has a Featurevisor module. More to come on that front.
Goal is still to keep them as separate projects, while making it easier to use them together.
And as more visors are adopted together, the faster you can leverage agentic workflows for the areas they cover. More recipes will arrive soon how to maximize the benefits of that.
Support#
Star on GitHub to show your support, and follow me on Twitter to get updates on the future of Featurevisor and the visor family.

