Making dye from plants involves three basic steps: extracting color from plant material by simmering it in water, preparing your fabric with a mordant so the color sticks, and then soaking the fabric in the dye bath. The process is simple enough to do in a kitchen, but the details at each stage determine whether you end up with a vibrant, lasting color or a faded disappointment.
Choosing Your Plant Material
Different plants produce different colors, and some hold up far better than others over time. Here’s a practical starting point for common, easy-to-find materials:
- Onion skins (yellow to burnt orange): One of the easiest dyes for beginners. The papery outer skins of yellow onions produce a rich golden color, while red onion skins lean toward rust and soft greens.
- Red cabbage (blue to purple): Produces vivid blue-purple tones that shift dramatically depending on acidity. Adding vinegar pushes the color toward pink; adding baking soda shifts it toward blue-green.
- Avocado pits and skins (pink to dusty rose): A surprising source of soft pink tones, especially on protein fibers like wool.
- Black walnut hulls (deep brown): One of the few plant dyes that doesn’t need a mordant at all because the hulls are naturally rich in tannins.
- Madder root (red): The most lightfast red dye available from plants, used since at least 2500 BC. Textile fragments dyed with madder root have been found in Pakistan dating to that period.
- Turmeric (bright yellow): Produces an intense yellow immediately, but it is extremely light-sensitive and fades quickly. Better for fun experiments than lasting projects.
- Indigo leaves (blue): The classic source of deep blue. Indigo requires a different, more advanced extraction process involving fermentation, so it’s not ideal for a first attempt.
As a general rule, you need roughly twice the weight of plant material as the weight of the dry fabric you plan to dye. So for 100 grams of fabric, start with about 200 grams of plant material. Strongly pigmented sources like walnut hulls or madder root can work at lower ratios.
Extracting the Dye
Chop or tear your plant material into small pieces to expose more surface area. Place it in a large pot (stainless steel or enamel, not aluminum or cast iron, which react with the dye and shift colors unpredictably). Cover the material with enough water that it can move freely, usually about twice the volume of the plant material.
Bring the pot to a gentle simmer. You’re not boiling hard here. A rolling boil can break down delicate pigments and muddy the color. Keep the temperature just below boiling and let it simmer for one to two hours. Tough materials like bark, roots, and nut hulls benefit from longer extraction, sometimes up to three or four hours, or even an overnight cold soak before heating. Soft materials like flower petals and berries release their color faster and can turn brown if overcooked.
Once the water is deeply colored, strain out all the plant material through cheesecloth or a fine mesh strainer. What you’re left with is your dye bath.
Why Mordanting Matters
If you skip this step, most plant dyes will wash out of your fabric within a few cycles. A mordant is a substance that acts as a bridge between the dye molecules and the fiber, locking the color in place. Without it, the pigment just sits on the surface.
The most common and safest mordant for home use is alum (potassium aluminum sulfate), available at grocery stores in the spice aisle or from dye suppliers. It produces bright, true colors without shifting the hue much. Iron is another accessible option. It “saddens” colors, pulling them toward darker, more muted tones, greens and grays. A rusty nail soaked in vinegar for a week creates a usable iron mordant.
Tannins, found naturally in oak galls, tea, and pomegranate rinds, also work as mordants. Their chemical structure creates crosslinks between dye molecules and fibers, which is why tannin-rich dyes like black walnut hold color without any added mordant at all. Many dyers use tannin as a pre-treatment for plant-based fabrics before applying alum, because it gives the alum something extra to grip onto.
Avoid chrome (chromium) mordants entirely. Several chromium compounds are classified as known human carcinogens. Tin and copper mordants also carry toxicity concerns and are unnecessary for home projects when alum and iron work well.
How to Mordant Your Fabric
Dissolve alum in hot water at a ratio of roughly 10 to 15 percent of the dry weight of your fabric. For 100 grams of fabric, that’s 10 to 15 grams of alum dissolved in enough water to submerge the fabric completely. Add the pre-wetted fabric (always soak fabric in plain water first so it absorbs evenly) and simmer gently for about an hour. Let it cool in the mordant bath, then wring it out. You can mordant fabric a day or two ahead and keep it damp in a bag until you’re ready to dye.
For an iron mordant, use much less, around 2 to 4 percent of the fabric weight. Iron is potent, and too much makes fibers brittle over time.
Protein vs. Plant Fibers
The type of fabric you choose affects the results as much as the dye itself. Fibers fall into two categories, and they absorb color through completely different chemistry.
Protein fibers like wool, silk, and alpaca are built from amino acids that have chemical groups called amines. These amines bond readily with plant dye molecules, which is why wool typically produces the deepest, richest colors with the least effort. Silk dyes especially well and often achieves deeper saturation than other protein fibers.
Cellulose fibers like cotton, linen, and hemp are built from a different molecule entirely, with hydroxide groups on the surface instead of amines. These fibers are harder to dye with plants. They generally need a tannin pre-treatment followed by an alum mordant to achieve decent color uptake. Even then, the results are typically lighter than what you’d get on wool with the same dye bath. If you’re new to plant dyeing, start with wool. It’s far more forgiving.
The Dye Bath
Place your mordanted, pre-wetted fabric into the strained dye bath. Heat it slowly to a gentle simmer and keep it there for one to two hours, stirring occasionally to ensure even color. Avoid stirring too aggressively with wool, which can felt at high temperatures with agitation.
The color you see in the pot will look darker than the final result. Fabric always dries lighter. If you want deeper color, you can leave the fabric soaking in the cooling dye bath overnight, or even for 24 hours. Some dyers repeat the process, dipping and drying multiple times to build intensity.
Once you’re satisfied, remove the fabric, rinse it in cool water until the water runs mostly clear, and hang it to dry out of direct sunlight.
How pH Changes Color
One of the most satisfying parts of plant dyeing is discovering that you can shift colors by changing the acidity of the dye bath. Anthocyanin pigments, the ones responsible for the reds, purples, and blues in plants like red cabbage, butterfly pea flowers, and berries, are especially responsive to pH.
Adding something acidic like white vinegar or citric acid pushes anthocyanin-based dyes toward the pink and red end of the spectrum. Adding something alkaline like baking soda or soda ash shifts them toward blue and green. This means a single red cabbage dye bath can produce pink, purple, blue, or teal depending on what you add to it. Start with small test swatches before committing a whole piece of fabric.
How Long Plant Dyes Last
This is where expectations need adjusting. Nearly all natural plant dyes score below a grade 4 out of 8 on standard lightfastness scales, meaning they will fade noticeably with light exposure over time. There is no fully effective way to prevent this, though a few strategies help.
Keeping dyed items out of direct sunlight makes the biggest difference. Low humidity also slows fading. If you’re framing or displaying dyed fabric, UV-filtering glass provides a worthwhile boost to longevity for most dye types.
Some dyes hold up much better than others. Among reds, madder root is the most stable, followed by cochineal (an insect-based dye), with brazilwood a distant third. Among yellows, weld and dyer’s broom produce pigments based on a compound called luteolin, which resists fading better than the pigments in turmeric or buckthorn. Indigo, when properly prepared, is also relatively durable.
Wash dyed items in cold water with gentle soap, and expect the color to evolve over time. This impermanence is part of what makes plant-dyed textiles distinctive. They age rather than simply deteriorating, shifting in tone as they’re used and exposed to light.

