Attributes
Attributes define the selectable options for your products—materials, finishes, edge profiles, hardware, and any other choices customers make when ordering.
Overview

Attributes are organized into tables with customizable columns. Each row represents an option the customer can select.
Example: Material Attribute
| Name | Price | Thickness | Weight |
|---|---|---|---|
| Cherry | $25 | 3/4 | 0.8 |
| Maple | $30 | 3/4 | 0.5 |
| Walnut | $35 | 5/4 | 1.2 |
When a customer selects "Cherry," your pricing and parts formulas can reference material.price (25), material.thickness (0.75), or material.weight (0.8).

Creating an Attribute

Step 1: Open Product Attributes
Navigate to your product and click the Attributes tab.
Step 2: Add Attribute
Click the "+" icon to create a new attribute.
Step 3: Define Structure
| Field | Description |
|---|---|
| Attribute Name | The label shown to customers (e.g., "Material", "Edge Profile") |
| Table Headers | The data columns for this attribute (e.g., "Price", "Thickness") |
Note: The "Name" column is automatically included—you don't need to add it.
Step 4: Choose Data Types
For each column, select the appropriate data type (see Data Types below).
Step 5: Add Rows
After saving the structure, add rows to your attribute table. Each row represents one selectable option.
Data Types
Each column in your attribute table needs a data type:
| Type | Description | Example |
|---|---|---|
| Price | Currency value | $25.00 |
| Fraction | Fractional measurement | 3/4, 1 1/2 |
| Decimal | Decimal number | 0.75, 1.5 |
| Integer | Whole number | 1, 2, 10 |
| Description | Text value | "Standard finish" |
| Boolean | Yes/No toggle | Yes, No |
| List | Dropdown selection | Select from predefined options |
| Block | Empty spacer | (Visual separator) |
Choosing the Right Type
- Price for costs and upcharges
- Fraction for dimensions that customers see (3/4", 1 1/2")
- Decimal for calculations (thickness in formulas)
- Description for text information
- Boolean for yes/no features
Using Attributes in Formulas
Attributes are referenced in Pricing, Parts, and Inventory formulas.
Reference Format
attribute_name.column_nameExamples
| Reference | Returns |
|---|---|
material.price | Selected material's price value |
material.thickness | Selected material's thickness |
edge.upcharge | Selected edge option's upcharge |
hardware.name | Selected hardware option's name |
In the Formula Builder
- Click "Add Step"
- Select "Field" as the operand type
- Choose the attribute from the dropdown
- Select the column/property
In the Code Editor
// Price based on material and edge options
const sqFt = (width * height) / 144;
return sqFt * material.price + edge.upcharge;CSV Import/Export
Speed up attribute setup with CSV files.
Exporting Attributes
- Open the attribute you want to export
- Click the "Export CSV" button
- Save the file for backup or editing
Importing Attributes
- Prepare a CSV with headers matching your attribute structure
- Click "Import CSV"
- Select your file
- Review and confirm the import
CSV Format
Your CSV should have:
- First row: Column headers (must match attribute columns)
- Subsequent rows: Option values
Example:
Name,Price,Thickness,Weight
Cherry,25,0.75,0.8
Maple,30,0.75,0.5
Walnut,35,1.25,1.2Common Attributes
Here are common attributes for woodworking products:
Materials
| Column | Type | Purpose |
|---|---|---|
| Name | Text | Material name |
| Price | Price | Cost per unit |
| Thickness | Decimal/Fraction | Stock thickness |
| Density | Decimal | For weight calculations |
Edge Profiles
| Column | Type | Purpose |
|---|---|---|
| Name | Text | Profile name |
| Price | Price | Price per linear foot |
| Image | Description | Reference image path |
Designs/Styles
| Column | Type | Purpose |
|---|---|---|
| Name | Text | Design name |
| Price | Price | Additional cost |
| Stile Width | Decimal | Frame dimension |
| Rail Width | Decimal | Frame dimension |
Finishes
| Column | Type | Purpose |
|---|---|---|
| Name | Text | Finish name |
| Price | Price | Price per unit |
| Lead Time | Integer | Additional days |
Parts Data for Visual Part Builder
Attribute columns can be referenced as "parts" data in the Parts & Pieces configuration and Visual Part Builder. This is what makes automatic part calculations possible.
How It Works
When you add columns like thickness, stile_width, or rail_width to an attribute, these values become available for field mapping using dot notation:
AttributeName.column_name → ValueSetting Up Parts Columns
Example: Material Attribute with Parts Data
| Name | Price | thickness | density | weight_factor |
|---|---|---|---|---|
| Cherry | $25 | 0.75 | 35 | 2.1 |
| Maple | $30 | 0.75 | 44 | 2.4 |
| Walnut | $35 | 0.75 | 38 | 2.2 |
These columns can be referenced as:
Material.thickness→ 0.75 (for Cherry)Material.density→ 35 (for Cherry)Material.weight_factor→ 2.1 (for Cherry)
Example: Design Attribute with Frame Dimensions
| Name | Price | stile_width | rail_width | panel_reveal |
|---|---|---|---|---|
| Shaker | $0 | 2.25 | 2.25 | 0.125 |
| Mission | $15 | 2.5 | 2.5 | 0.125 |
| Craftsman | $25 | 3.0 | 3.0 | 0.1875 |
These columns can be referenced as:
Design.stile_width→ 2.25 (for Shaker)Design.rail_width→ 2.25 (for Shaker)Design.panel_reveal→ 0.125 (for Shaker)
Using Parts Data in Visual Part Builder
In the Visual Part Builder configuration:
- Open your product → Parts tab
- Select "Use Visual Templates"
- For each dimension field, map to attribute columns:
| Builder Field | Mapping | Source |
|---|---|---|
| Thickness | Material.thickness | Material attribute |
| Stile Width | Design.stile_width | Design attribute |
| Rail Width | Design.rail_width | Design attribute |
| Lip/Reveal | Design.panel_reveal | Design attribute |
Benefits of Parts Data
- Define once, use everywhere — Stile widths, thicknesses defined on attributes apply to all products using them
- Automatic calculations — Visual Part Builder computes stile lengths, panel sizes automatically
- Consistent cut sheets — Production documents always reflect the correct values
- Easy maintenance — Update an attribute, and all products get the new values
Best Practice: Parts Column Naming
Use lowercase, snake_case names for parts columns that will be referenced in formulas:
| Good | Avoid |
|---|---|
thickness | Thickness |
stile_width | Stile Width |
rail_width | Rail Width |
panel_reveal | Panel Reveal |
This ensures consistent referencing in formulas and field mappings.
Attribute Layout
Control how attributes appear in the order form:
Display Order
Drag and drop attributes to reorder them in the customer-facing form.
Grouping
Group related attributes together for a cleaner interface.
Required vs. Optional
Mark attributes as required to ensure customers make a selection.
Best Practices
Naming
- Use clear, customer-friendly names
- Be consistent across products
- Avoid abbreviations in customer-facing names
Structure
- Keep attribute tables focused (one concept per attribute)
- Use appropriate data types for calculations
- Include all values needed for formulas
Maintenance
- Review and update prices regularly
- Archive discontinued options rather than deleting
- Use CSV export for backups
Troubleshooting
Attribute Not Appearing in Formulas
- Verify the attribute is saved
- Check that column names are lowercase in formula references
- Refresh the formula builder
Import Errors
- Ensure CSV headers match exactly
- Check for special characters in values
- Verify data types match (numbers vs. text)
Calculation Issues
- Confirm the correct column is referenced
- Check for null/empty values in attribute rows
- Test with known values
Next Steps
- Line Items - Configure order form fields
- Pricing - Use attributes in pricing formulas
- Parts - Reference attributes in part dimensions
- Visual Part Builder - Visual layout editor with auto-calculation
- Formula Builder - Visual calculation builder