Explore features

Discover and share features by searching, filtering, and analyzing relationships between features persisted in the FeatureMesh registry using FeatureQL commands.

Syntax

Diagram(
Stack(
Sequence(
Terminal("SHOW"),
Choice(0, Skip(), "MY"),
Choice(0, Skip(), "RECENT"),
Choice(0, "FEATURES", "FEATURE"),
Choice(0, Skip(), Sequence(Terminal("("),
Choice(0, Skip(), Sequence(Terminal("INCLUDE"), NonTerminal("include"))),
Choice(0, Skip(), Sequence(Terminal("EXCLUDE"), NonTerminal("exclude"))),
Choice(0, Skip(), Sequence(Terminal("COLUMNS"), NonTerminal("columns")))
, Terminal(")"))),
),
Sequence(
Choice(0, Skip(), OneOrMore(NonTerminal("feature_name"), ",")),
Choice(0, Skip(), Sequence(Terminal("IN"), NonTerminal("namespace"), Choice(0, Skip(), Sequence(Terminal("UP TO LEVEL"), NonTerminal("level"))))),
Choice(0, Skip(), Sequence(Terminal("LIKE"), NonTerminal("like"))),
),
Sequence(
Choice(0, Skip(), Sequence("WHERE", NonTerminal("where"))),
Choice(0, Skip(), Sequence("ORDER BY", NonTerminal("order_by"))),
Choice(0, Skip(), Sequence("LIMIT", NonTerminal("limit")))
)
)
)

Here's the list of available metadata fields that you can use in INCLUDE, EXCLUDE, COLUMNS and the WHERE and ORDER BY clauses.

FieldTypeDescription
idVARCHARUnique identifier for the feature
nameVARCHARFully qualified name (includes namespace)
datatypeVARCHARData type of the feature
functionVARCHARAssociated function (as shown in SHOW FUNCTIONS)
paramsROWParameter details (kind, name, type)
created_atROWDate of creation
updated_atROWDate of update

Example

Let's create a few features to explore:

We can see the features we created:

Now let's replace the features with new ones:

Simplified Syntax

FeatureQL provides several shorthand commands for common queries:

Here are some common simplified FeatureQL queries, with descriptions to clarify their behavior:

Use CaseExample QueryEquivalent Expanded Query/Comment
Show a specific featureSHOW FEATURE NAME_OF_THE_FEATURE;Filters for an exact name.
Same as: WHERE name = 'NAME_OF_THE_FEATURE'
Show multiple featuresSHOW FEATURES NAME1, NAME2;Filters to the given names.
Same as: WHERE name IN ('NAME1', 'NAME2')
Show features by patternSHOW FEATURES LIKE 'fm.customers.%';Filters by pattern.
Same as: WHERE name LIKE 'fm.customers.%'
Features in a namespaceSHOW FEATURES IN 'fm.customers';Only features directly within this namespace.
E.g., fm.customers.segment1 is in,
but fm.customers.project1.segment1 is not.
Namespace + max depthSHOW FEATURES IN 'fm.customers' UP TO LEVEL 2;Returns features in the namespace up to the given depth.
E.g., fm.customers.project1.segment1 (2 levels deep) will be included.
Features you maintainSHOW MY FEATURES;Filters where you are point of contact.
Same as: WHERE point_of_contact = '<your_email>'
Most recent featuresSHOW RECENT FEATURES;Returns the most recently created features.
Same as: ORDER BY created_at DESC LIMIT 50

You can always mix and match these shortcuts for powerful filtering!

For example: @fql-playground(show_features_simplified)

Dependency Analysis

FeatureQL provides special operators for exploring feature dependencies that you can use in the WHERE condition.

OperatorDescription
IS_UPSTREAM_OF(feature)Returns true if the current feature is a dependency of the specified feature
IS_DOWNSTREAM_OF(feature)Returns true if the current feature is dependent on the specified feature
DEPTH_RELATIVE_TO(feature)Returns the relative depth of the current feature to the specified feature

To demonstrate relationship analysis, let's create a set of interconnected features:

This creates a dependency chain: RFEATURE0RFEATURE2RFEATURE3RFEATURE4, with RFEATURE1 also feeding into RFEATURE3.

Upstream dependencies

Let's get the features that the feature RFEATURE3 depends on:

Downstream dependencies

Let's get the features that depend on the feature RFEATURE3:

Relative depth

Let's get all the features linked to RFEATURE3 and their relative depth in the dependency DAG:

Last update at: 2025/12/05 16:03:14
Last updated: 2025-12-05 16:07:55