DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
- Created by Swapnil Shah, last modified on May 14, 2025
OFBIZ-13234 - Getting issue details... STATUS
Introduction
In our previous guides, we covered an important foundation:
Understanding Virtual & Variant Products in Apache OFBiz — what they are, why they matter, and how they simplify complex product structures.
Now, in this guide, we bring it all together.
You’ll learn how to set up a virtual product—a base template that isn’t sold directly—and link it to multiple variant products, each representing a sellable version with unique features like size, color, or material. We’ll walk you through a hands-on example to show how it works in practice.
This approach keeps your catalog clean, improves your user experience, and helps you scale product variations without duplicating effort.
Whether you're offering T-shirts in multiple sizes or electronics with different specs, this tutorial gives you a clear, beginner-friendly path to get started.
Let’s dive in.
Getting The Basic Concepts Right
What is a Virtual Product in Apache OFBiz?
A virtual product in Apache OFBiz is essentially a template or parent product that represents multiple variations of an item – like a T-shirt that comes in different sizes and colors. Unlike standard products, virtual products cannot be sold directly. Instead, they act as containers that organize and group related variants (known as variant products) under a single listing.
This setup is especially useful in industries like fashion, electronics, or furniture, where a single product design may have multiple sellable versions. Virtual products help streamline catalog management, improve searchability, and reduce data duplication.
In Apache OFBiz, virtual products support feature-based configuration — so you can define attributes like color, size, or material and let the system automatically associate matching variants. It’s a powerful way to manage complexity without clutter.
What is the use of Virtual Products?
Virtual products offer a structured way to manage complex product catalogs with multiple variations. Instead of creating and maintaining separate entries for each variant, you group them under a single virtual product. This reduces duplication, simplifies pricing, and improves the user experience — both for back-end teams and customers.
They’re especially useful when:
- You have products with multiple features (like color, size, memory).
- You want to configure and manage the “Bill of Material” (BoM) and pricing at the group (virtual) level, so all variants automatically inherit those changes.
- You need clean, feature based product listings for your online store.
From an operations standpoint, virtual products also help in overall order management, and enable dynamic product creation based on feature combinations.
In short, they reduce chaos and bring scalability to your product setup — something growing businesses can’t ignore.
What is a Variant Product in Apache OFBiz?
A variant in Apache OFBiz represents a specific, sellable version of a virtual product. While the virtual product acts as a parent or master template, each variant captures a unique combination of features — such as color, size, or material.
For example, if your virtual product is a skateboard, its variants could be individual models in red, blue, and yellow. Each of these variants will have its own Product ID & inventory, but they’re all tied to the same virtual product. This structure allows for clean catalog presentation, centralized control, and easier maintenance across high-variation product lines.

What is a Standard Product in Apache OFBiz?
A Standard Product in Apache OFBiz is a standalone, sellable item that exists independently in the catalog. Unlike virtual products or variants, it isn’t part of a configurable group and doesn’t offer interchangeable features.
For example, a limited edition skateboard designed with a promotional theme or a one-off color scheme would be treated as a standard product. Since it’s not part of a variant set and cannot be configured or swapped with other options, it stands alone in the catalog. It has its own Product ID, pricing, inventory, and description — displayed and managed independently.
Standard products are ideal for items that are fixed in nature and not meant to be customized or grouped under a parent listing.
Understanding the Skateboard Virtual and Variant Product Setup
In Apache OFBiz, a BoM defines the hierarchy of components needed to assemble a finished product. In addition to standard products, in Apache OFBiz BoMs can also be defined for virtual products. Based on the configuration of variant features, automatic mechanisms ensure that each variant (e.g., red, blue and yellow, in the case of the Skateboard example) pulls the right set of components during production.
To help you better understand the configuration process, we’ve illustrated the skateboard’s construction in the image below. The breakdown shown in the figure includes key components, sub-components, and their corresponding Product IDs. By referring to this structure, you’ll find it easier to follow the upcoming setup steps and match them with the relevant screenshots. The visual representation serves as a quick reference point, ensuring you stay aligned with the overall product hierarchy as you move through the guide.

The finished good here is the complete skateboard, made of 4 key components:
- Deck
- Transfer
- Warranty Card
- Sticker
Now, the Deck is an intermediate product, also known as a Sub-Assembly. The Deck is further composed of 4 sub-components that make it up. It comprises of:
- Face (defines color variation)
- Ply
- Glue
- Core
Color variants (like red, blue and yellow) are determined by the sub-component “Face” applied during production. So, while the core structure stays constant, the Face varies based on the selected product variant.
Note: From this point onward, all Virtual and Standard Product IDs will begin with ‘VTC’, while all Variant Product IDs will follow the ‘XTC’ prefix. This naming convention will help clearly distinguish between the two as we move through the next steps. Here all virtual products include 3 items -
- Skateboard (defining variance at product level)
- Deck (defining variance at component level)
- Face (defining variance at sub-component level)
Since, these will be what changes as per the variant chosen by the customer. Meanwhile the rest of the components are standard since they are shared across variants hence they too remain consistent and as it is. This will help you understand the logic of the system once you see the BoM of the skateboard in the system screenshot further down the document.
Skateboard BoM Structure
The BoM image below provides a clear visual breakdown of the skateboard’s product structure — starting from the main product and flowing into its components and sub-components. While this guide focuses on setting up virtual products and variants, this image helps you grasp how everything fits together logically.
The diagram acts as a reference map, so as you go through each setup step in Apache OFBiz, you can understand why certain elements need to be created in a specific order. Think of it as the blueprint that connects the catalog structure with backend configuration.
Why Use Virtual and Variant Products with a BoM?
In Apache OFBiz, virtual and variant product structures are especially useful when working with BoM. A virtual product acts as a master template that holds the BoM configuration, while its variants inherit this structure. This means you only need to define the BoM once at the virtual level. All variants will automatically reference the same BoM.
The benefit? If a change is needed — say, swapping out a sub-component or updating a raw material — you only need to update the BoM attached to the virtual product. That change instantly applies to all associated variants, saving time and reducing errors. This approach streamlines manufacturing, ensures consistency across product versions, and makes ongoing maintenance significantly easier.
Moreover, this structured BoM ensures production teams can automate procurement, manage stock accurately, and handle variant-specific assembly without manual intervention.
Step-by-Step Virtual Product and Variant Creation in Apache OFBiz
Step 1: Defining the Virtual Product, Its BoM Structure, and Variant Setup
Here’s a super-simple walkthrough, of what we’re actually going to do in this step:
Define the Virtual Product
– Build your base “configurable” item (the skateboard) and outline its structure in the BoM (Deck component + face sub-component).Create Color Variants
– Under that virtual skateboard, spin off each color option (e.g. red color in our case example) as its own variant. They all share the same BoM but get their own slot in the product tree.Link Variants to the Parent
– Use the Product Association feature to tie each variant back to the skateboard. Now the system knows they’re siblings in one product family.Add Feature Tags
– Drop in the feature values (e.g. “Red”) on the virtual product so that when someone picks “Red,” the system lights up the right parts.Point to the Right Components
– Assign each variant’s component & sub-component IDs {e.g. Red Deck (XTC1004), Red Face (XTC2004)} so ordering “Red” pulls those exact parts.
And that’s it—first you make the product, then you wire up associations, then you slap on features, and finally you point each variant at its exact parts.
1.1 Creating Virtual Product

1.1.1 Go to Catalog > Products > Create New Product.
1.1.2 Enter Product ID (VTC1005) for the virtual finished product to be made.
1.1.3 Choose the ‘Product Type’ as ‘Finished Good’.
1.1.4 The ‘Wording And Comment’ field contains the nomenclature for your product, i.e., 'Internal Name' and 'Product Name'. Fill in the details. Here we used the case example of skateboard for your understanding. Keep in mind that internal name is a compulsory field as this is what the item will be referred to within your organization and processes. However,it can be edited later.
1.1.5 Further down, click on the ‘Virtual Product’ section to expand and choose ‘Y’ for yes in the ‘Is VIRTUAL Product?’, and ‘N’ for no in the ‘Is VARIANT Product’ field as seen in the screenshot.
1.1.6 Click on the ‘Create Product’ button to enter your product into the system.
1.2 Adding Features To The Virtual Product

1.2.1 Go to Catalog > Products > Search Options.
1.2.2 In the ‘Product ID field’, enter the Product ID for the Virtual Product, for instance 'VTC1005' for the skateboard virtual product.
1.2.3 Click on the ‘Find’ button and select the respective Virtual Product’s ID.
1.2.4 A page will appear that looks like below -

1.2.5 Select the ‘Features’ option from the horizontal list.
1.2.6 Navigate downwards and you will find a section named ‘Add Product Feature With ID’.
1.2.7 In the field box marked in the screenshot above as ‘ID’, type the feature’s ID which is the differentiator amongst the variants to be sold. In our case it is the colour.
1.2.8 Once you have typed the ID, go to the field ‘Feature Application Type’ and choose ‘Selectable’ from it.
1.2.9 Click on the ‘Add’ button. Your provided options will be visible on the top of the screen as highlighted in the above screenshot.
In our example, we’ve told the system to show certain options whenever someone wants to buy a skateboard. Since we're using colors as variants, we're adding those color choices for the customer to select from.
1.3 Creating Virtual Product’s Components

1.3.1 Go to Catalog > Products > Create New Product.
1.3.2 Enter Product ID (e.g., VTC1003) for the component.
1.3.3 Choose the ‘Product Type’ as ‘Raw Material’.
1.3.4 Fill in the particulars in the ‘Wording And Comment’ section.
1.3.5 Do not select ‘Yes’ or ‘No’ for ‘Virtual Product’ or ‘Variant Product’ for these components. These are standard parts that will be the same across all versions of the product, so the system doesn’t need to treat them as either virtual products or as separate variants.
1.3.6 Click on the ‘Create Product’ button to enter your component into the system.
NOTE: Repeat these steps for each component and subcomponents of the product until everything is added into the system. But there are two special cases: the Deck and the Face. In fact, the Deck had a variance factor along with it, it is a sub-assembly too and, hence, has a BoM structure of its own, and the Face, which is a component of the Deck, decides the color of the product, Hence along with the Virtual Skateboard (VTC1005) only the Virtual Deck (VTC1004) and Virtual Face (VTC2004) shall have the option chosen as ‘Y’ for virtual product option. For the rest, no option is to be chosen and the section left intact as it is. Any component, sub component that defines the variance of a product will need to have a corresponding virtual product setup prior.
1.4 Creating Variant Product

1.4.1 Go to Catalog > Products > Create New Product.
1.4.2 Enter Product ID (e.g., XTC1005) for the variant product.
1.4.3 Choose the ‘Product Type’ as ‘Finished Good’ next to the Product ID.
1.4.4 Fill in the particulars in the ‘Wording And Comment’ section.
1.4.5 Click on the ‘Virtual Product’ section to expand and choose ‘N’ for no in ‘Is VIRTUAL Product?’ and ‘Y’ for yes in ‘Is VARIANT Product?’, as seen in the screenshot.
1.4.6 Click on the ‘Create Product’ button to enter your variant product into the system.
Note - Follow the same steps to add a new product entry for each variant you want. For example, just like the red skateboard variant, you’ll need to add separate entries for the yellow, blue or any other color options in the same way.
1.5 Setting The Variant Product As The Feature Specific Option For The Main Product

1.5.1 Go to Catalog > Products > Search Options.
1.5.2 In the ‘Product ID field’, enter the Product ID for the Variant Product, for instance 'XTC1005' for the red skateboard.
1.5.3 Click on the ‘Find’ button and select the respective Variant Component.
1.5.4 A page will appear that looks like below.

1.5.5 Select the ‘Features’ option from the horizontal list.
1.5.6 Navigate downwards and you will find a section named ‘Add Product Feature With ID’.
1.5.7 In the field box marked in the screenshot above as ‘ID’, type the feature’s ID with respect to the variant’s feature as per your product. In our case it is 'TEXT_RED', which indicates red colour.
1.5.8 Once you have typed the ID, go to the field ‘Feature Application Type’ and choose ‘Standard’ from it.
1.5.9 Click on the ‘Add’ button. Your selected ID will be visible on the top of the screen as highlighted in the above screenshot.
Note - We're basically setting each product variant as belonging to a particular colour. The more options you offer, the more variants you’ll need to add at the beginning. To see how to add products, refer to step 1.4.
Additionally, repeat this step for all the variances defining variant Component(s) and Sub-component(s), i.e., for all the variants of skateboard, deck and face.
1.6 Creating Variant Product’s Component(s)

Similar to how we created products for components and sub-components of the Virtual product, create variant products ONLY for variant components (deck) and variant sub-components (face) of the Variants, basically any part which creates the variations.
1.6.1 Go to Catalog > Products > Create New Product.
1.6.2 Enter Product ID (e.g., XTC1004) for the variant product.
1.6.3 Choose the ‘Product Type’ as ‘Raw Materials’ next to the Product ID.
1.6.4 Fill in the particulars in the ‘Wording And Comment’ section.
1.6.5 Click on the ‘Virtual Product’ section to expand and choose ‘N’ for no in ‘Is VIRTUAL Product?’ and ‘Y’ for yes in ‘Is VARIANT Product?’, as seen in the screenshot.
1.6.6 Click on the ‘Create Product’ button to enter your variant product’s variant component into the system. You need to repeat this process for each varying component that you enter into the system like we are doing the same here for the ‘red color deck’ component for our ‘red skateboard’
1.7 Creating Variant Product’s Variant Sub-components

1.7.1 Go to Catalog > Products > Create New Product.
1.7.2 Enter Product ID (e.g., XTC2004) for the variant product.
1.7.3 Choose the ‘Product Type’ as ‘Raw Materials’ next to the Product ID.
1.7.4 Fill in the particulars in the ‘Wording And Comment’ section.
1.7.5 Click on the ‘Virtual Product’ section to expand and choose ‘N’ for no in ‘Is VIRTUAL Product?’ and ‘Y’ for yes in ‘Is VARIANT Product?’, as seen in the screenshot.
1.7.6 Click on the ‘Create Product’ button to enter your variant product’s variant sub-components into the system. You need to repeat this process for each varying sub-component that you enter into the system like we are doing the same here for the ‘red color face’ component for our ‘red skateboard’

[Screen showing variant association of red face with the virtual face]
1.8 Setting up Association for Virtual and Variant Products and Components

1.8.1 Go to Catalog > Products > Search Options.
1.8.2 In the ‘Product ID field’, enter the Product ID for the Virtual Product, for instance "VTC1005" for the skateboard.
1.8.3 Click on the ‘Find’ button and select the respective Virtual Product.
1.8.4 A page will appear that looks like the one below.

1.8.5 Select the ‘Associations' option as highlighted in the Screenshot above.

1.8.6 In the field ‘Product ID To’, enter the Product ID of the Variant Product you wish to link to this Virtual Product for instance, 'XTC1005' for the skateboard red variant
1.8.7 In the field ‘Association Type’, choose the option ‘Product Variant’ from the drop down list.
1.8.8 Click on the ‘Create’ button.
Note: In the same manner, set up variant associations for all the components and sub-components for e.g. deck and face in our skateboard’s scenario so that as per the system you now have a variant at each level of the product -
- at the main product level (Skateboard).
- at the component level (Deck).
- at the sub-component level (Face).

[Screen showing variant association of red skateboard with the virtual skateboard]

[Screen showing variant association of red deck with the virtual deck]
Step 2: Setting up BoM for Virtual Product
Once the virtual product and its variants are created, their associations and features defined, the next step is to define the Bill of Materials (BoM) for the virtual product in Apache OFBiz, The BoM is attached only to the virtual product — not to each individual variant. This is because all variants inherit the same product structure, so there's no need to duplicate the setup.
Start by linking the required components (like Deck, Transfer, etc.) to the virtual product. This setup ensures that all variants of the skateboard automatically follow the same manufacturing flow and structure.
Even though each variant may look different (like having a red, blue, or black face), their underlying structure remains the same. That’s why setting up a single BoM at the virtual level is both logical and efficient.
2.1 Setting up BoM for Virtual Product

2.1.1 Go to Manufacturing > Bill Of Materials > Create BoM.
2.1.2 On the left hand side of the screen, you’ll see a field marked as ‘BoM Type’. Select ‘Manufacturing Bill of Materials’ from the drop down menu.
2.1.3 On the right hand side of the screen, in the field marked as ‘Product ID’ write the Product ID of the Virtual Product. In our example case, that ID will be VTC1005, which is the ID for the skateboard.
2.1.4 Just below the field, there is another field marked as ‘To Product ID’. Write the Product ID of the component, for instance VTC1003 for the Transfer in our case example.
2.1.5 The same fields have been given below once again just below the horizontal line. Fill the same corresponding details.
2.1.6 Finally once done, click on the ‘Add’ button given at the bottom of the form.

Repeat the above steps for each individual component of the skateboard, like in our case we have a total of 4 components, so this step will be done a total of 4 times.
2.2 Setting up BoM for Virtual Product’s Sub-Assembly

2.2.1 Go to Manufacturing > Bill Of Materials > Create BoM.
2.2.2 On the left hand side of the screen, you’ll see a field marked as ‘BoM Type’. Select ‘Manufacturing Bill of Materials’ from the drop down menu.
2.2.3 On the right hand side of the screen, in the field marked as ‘Product ID’ write the Product ID of the Sub-Assembly. In our example case, that ID will be VTC1004, which is the ID for the Deck.
2.2.4 Just below the field, there is another field marked as ‘To Product ID’. Write the Product ID of the Sub-component, for instance VTC2001 for the Glue in our case example.
2.2.5 The same fields have been given below once again just below the horizontal line. Fill the same corresponding details.
2.2.6 Finally once done, click on the ‘Add’ button given at the bottom of the form.

Repeat the above steps for each individual sub-component of the skateboard, like in our case we have a total of 4 sub-components, so this step will be done a total of 4 times.
Step 3: Review and Validation of Virtual and Variant Product
3.1 Reviewing Final BoM Structure
Reviewing the final Bill of Materials (BoM) structure acts as a critical validation step. It allows you to confirm whether all product associations, component hierarchies, and variant linkages have been configured accurately. This ensures the system will process the manufacturing logic as intended, minimizing the risk of errors during execution.

3.1.1 Go to Manufacturing > Bill Of Materials > BoM Simulation as shown in the first image.
3.1.2 In the ‘Product ID’ field enter the skateboard Virtual Product’s ID.
3.1.3 Just below in the ‘BoM Type’ field, choose ‘Manufacturing Bill of Materials’.
3.1.4 At the bottom click on the ‘Submit’ button.
3.1.5 This will give you the output shown in the image below.

3.2 Validating Feature and Association Setup
To confirm whether you have correctly setup and features and associations amongst the virtual product, its components, sub-components and its respective variants or not, you can run a BoM simulation to see the list of components and tally as per your product specifics, like in our case, when we ran the BoM simulation, we got the following result -

3.2.1 Go to Manufacturing > Bill Of Materials > BoM Simulation as shown in the first image.
3.2.2 In the ‘Product ID’ field enter the skateboard Variant Product’s ID.
3.2.3 Just below in the ‘BoM Type’ field, choose ‘Manufacturing Bill of Materials’.
3.2.4 At the bottom click on the ‘Submit’ button.
3.2.5 This will give you the output shown in the image below.

3.2.6 As shown in the screenshots above, while entering the Product ID for the variant product, all of the associated components remain standard across all variants except the only unique elements. In this case they are the red deck (XTC1004) and its sub-component, the red face (XTC2004), which define the color variation. All other components are shared and hence consistent across variants.
Note: Repeat the same steps for all forms of associations that you intend to create for -
- virtual and variant Component(s) on which the variance depends.
- virtual and variant Sub-Components on which the variance depends.
Also, repeat this entire process for each variant that you intend to create.
Understanding Multi-Level BoM Components and Variant Selection Logic
Once the virtual product’s BoM is defined and the appropriate features are set with the variant product association formed as the standard, each variant automatically inherits the full product structure. The differentiation between variants — such as color in this case — is represented by the variant’s own Product ID.
For example, if XTC1005 is the Product ID of a specific skateboard variant, and its BoM includes XTC2004 as the ‘Face’ component (which defines the color), then selecting XTC1005 directly corresponds to selecting the skateboard with that specific color. The system does not require any additional logic or mapping — the BoM structure of the Virtual Product and thereafter the ‘Variant’ product association attributed to the Variant Product in the product’s properties section ensures that the correct raw-materials are used when a variant is produced based on the selected Variant Product ID.
That’s how Apache OFBiz ensures the right raw-materials are used when a variant is produced without you needing to set up separate BoMs for each one. It’s all about smart mapping through Product IDs and features.
Wrapping It All Up - Simplifying Complexity through Smart Setup
Setting up virtual and variant products in Apache OFBiz isn’t just a technical requirement — it’s the foundation for simplified and scalable production. By linking a shared Bill of Materials (BoM) to a virtual product and assigning unique features to each variant, businesses can manage complex product structures with remarkable precision. This approach not only reduces repetitive work but also ensures consistency with regards to BoM across all product variations.
Whether you're manufacturing customized colored variants of a skateboards or running a multi-tiered assembly line with component level variations at each level of BoM based off of the produced variant product, this system ensures that the right variant gets picked, every time — without redundant BoM entries, confusion, or last-minute fire-fighting. Once the virtual and variant relationships are properly defined, you unlock powerful automation and flexibility as the BoM complexity grows with your business.
