Setting dye in cotton fabric depends entirely on the type of dye you’re using. Fiber-reactive dyes need soda ash, natural dyes need a mordant like alum, and commercially dyed fabrics that bleed can be treated with a chemical fixative. Each method works through different chemistry, so using the wrong fixative is the most common reason dye washes out. Here’s how to match your method to your dye.
Fiber-Reactive Dyes: Soda Ash Is Essential
Fiber-reactive dyes (the type used in tie-dye kits and sold by companies like Dharma Trading and Procion) form a permanent chemical bond with cotton fibers. That bond only happens in an alkaline environment, which is where soda ash comes in. Soda ash raises the pH of the fabric to about 10.5, triggering a reaction that locks the dye molecule directly onto the cellulose in cotton. Without it, the dye sits on the surface and rinses away.
The standard ratio is 1 cup (8 oz) of soda ash per gallon of warm water. You can either pre-soak the fabric in this solution before applying dye, or add it to the dye bath itself. Pre-soaking is the more common approach for techniques like tie-dye because it keeps the dye application step simpler. Submerge your fabric for 15 to 20 minutes, wring it out (don’t rinse), and then apply your dye.
Salt plays a supporting role in this process. Cotton fibers and most dye molecules both carry a negative electrical charge, which means they naturally repel each other. Salt reduces that repulsion and pushes the dye toward the fiber, improving how much color the fabric absorbs. For dye baths (as opposed to direct application), adding non-iodized salt helps the dye exhaust more completely from the water into the fabric.
Letting the Dye React: Time and Temperature
After applying fiber-reactive dye with soda ash, the fabric needs time for the chemical bond to fully form. Wrap or bag the fabric to keep it moist, and let it sit (this is called “batching”) for a minimum of 6 to 8 hours at room temperature. Warmer environments speed the reaction. Many dyers batch overnight, or up to 24 hours, for the deepest color.
If you’re painting dye directly onto fabric rather than using a dye bath, steam setting is another option. Place the dyed fabric in a steamer where it’s exposed to consistent, moist heat from boiling water. The steam temperature and duration vary by fabric weight. For heavier cotton, you may need to unroll the fabric bundle partway through, re-roll it in the opposite direction, and steam again for the same length of time to ensure even penetration.
Natural Dyes Need a Mordant, Not Soda Ash
Plant-based dyes (from sources like indigo, turmeric, avocado pits, or onion skins) don’t bond to cotton the way reactive dyes do. They need a mordant, a substance that acts as a bridge between the dye and the fiber. For cotton and other plant-based fabrics, the traditional mordant process uses tannin followed by alum (aluminum sulfate).
Start by weighing your dry fabric. Dissolve tannin extract equal to about 10% of that weight in very hot water, then add it to a bucket with enough water for the fabric to move freely. Wet the fabric first, submerge it, and let it soak for at least one hour (overnight is better), turning it occasionally. After the tannin bath, the fabric goes into an alum solution. This two-step process gives the natural dye something to grip onto, dramatically improving how well the color survives washing and light exposure.
Skipping the mordant with natural dyes is the single biggest reason colors fade to almost nothing after a few washes. The dye may look vivid when you pull the fabric out of the pot, but without that chemical bridge, it has no way to stay put.
Why Vinegar Doesn’t Work for Most Cotton Dyeing
Vinegar is one of the most repeated pieces of dye-setting advice online, and for cotton, it’s mostly wrong. Vinegar is an acid, and it works well as a dye fixative for protein fibers like wool, silk, and nylon, where the acid helps the dye bond to amino acids in the fiber. Cotton is a cellulose fiber with completely different chemistry. Fiber-reactive dyes need an alkaline environment (the opposite of acidic), so vinegar would actually work against the bonding process.
There is some historical and scientific basis for vinegar as a mordant with certain natural dyes on cotton. Research has shown that vinegar used as a bio-mordant with plant-based dyes like bougainvillea, beetroot, and coconut husk extract can produce fabrics with reasonable wash and light fastness. But this is a specific mordanting technique, not a universal “add vinegar to lock in color” trick. For fiber-reactive dyes, which are by far the most common type used in home cotton dyeing, vinegar does nothing helpful.
Setting Dye in Store-Bought Cotton Fabric
If you’ve bought a commercially dyed cotton garment or fabric that bleeds color in the wash, the dye has already been applied, and you can’t go back and add soda ash or a mordant. What you can do is use a commercial dye fixative like Retayne, which coats the fiber and traps loose dye molecules in place.
Retayne requires hot water to work: 140°F (60°C). Use 1 teaspoon per yard of fabric. In a washing machine, fill to the appropriate level with hot water, add the Retayne, and run a 20-minute wash cycle. By hand, add the fabric to a basin of 140°F water with the Retayne and swish it continuously for 20 minutes using a spoon or dowel. This treatment is a one-time fix. It won’t make a poorly dyed fabric colorfast forever, but it significantly reduces bleeding.
Rinsing and Washing After Dyeing
How you wash freshly dyed cotton matters almost as much as how you set it. After batching or steaming fiber-reactive dye, rinse the fabric first in cool water to remove the bulk of unfixed dye, then gradually increase the water temperature. The goal is to wash away every bit of dye that didn’t chemically bond to the fiber.
A pH-neutral detergent designed for this purpose, like Synthrapol, keeps loose dye particles suspended in the wash water so they rinse away cleanly instead of reattaching to lighter areas of the fabric. Regular laundry detergent tends to be high-pH (alkaline), which can actually encourage stray reactive dye particles to bond onto areas where you don’t want them, causing muddy colors or staining on white sections. Synthrapol’s neutral pH prevents this entirely.
After a thorough hot wash with Synthrapol or a similar product, the water running off the fabric should be clear. If it’s not, wash again. Once the rinse water runs clean, your dye is fully set and the fabric can be washed normally going forward. For the first few washes, it’s still smart to wash dyed cotton separately, just in case a small amount of surface dye remains.
Quick Reference by Dye Type
- Fiber-reactive dyes (Procion MX, tie-dye kits): Soda ash pre-soak (1 cup per gallon), batch 6 to 24 hours, rinse with pH-neutral detergent.
- Direct dyes (Rit All-Purpose, similar brands): Salt in the dye bath improves absorption. These dyes don’t form a chemical bond, so color will fade over time. A commercial fixative like Retayne can help.
- Natural/plant-based dyes: Tannin soak followed by alum mordant before dyeing. Mordant is not optional for lasting color.
- Already-dyed commercial fabric that bleeds: Retayne at 140°F, 1 teaspoon per yard, 20-minute soak.

