My grandmother's thieboudienne — ceebu jën in Wolof, rice and fish — is the dish I learned before I learned anything else in a kitchen. Mame Coumba never measured. She pressed garlic and parsley into the fish with her thumb, read the color of the broth with a glance, knew by smell when to lower the flame. I moved to Lyon at nineteen. I am a nurse now. On Sundays, when the ER finally releases me, I cook this. It takes three hours. It is the only three hours of the week when I do not think about anything else.
What is thieboudienne, and why does it matter?
Thieboudienne — ceebu jën in Wolof — is the national dish of Senegal. It is rice cooked in a tomato-onion-fish broth, with fish that has been stuffed with garlic, parsley, and hot pepper, and a tray of vegetables that absorb everything. It is served from a communal platter. Everyone eats together, from the same bowl, with the right hand.
The dish is specifically Senegalese in a way that French people sometimes underestimate. Jollof rice is a broad category across West Africa. Thieboudienne is a specific thing. The technique matters. The fermented ingredients matter. The broken rice matters. Make it with the wrong rice and my mother would not say a word. She would just look at the pot.
The dish is credited to Penda Mbaye, a cook from Saint-Louis in northern Senegal, who is said to have developed the tomato-based version in the 19th century. Before tomatoes arrived through trade along the Senegalese coast, rice and fish were already cooked together — but the red broth, the thieb bou deekh, came from that innovation. Saint-Louis still makes a strong claim on the original. My family is from Medina, in Dakar. We do not argue about this. We just cook it.
The ingredients you cannot skip
This is where most recipes fail you. Thieboudienne has ingredients with no substitutes that grocery stores outside West African neighborhoods will not carry. If you skip them, you are making something else.
Broken rice (thieb rek / riz cassé). Short, irregular, slightly starchy. Not basmati. Not jasmine. Not long-grain. The broken grain has a different texture and absorbs the tomato broth in a way that whole rice does not. Look for it at West African grocery stores, labeled riz cassé or broken rice. Some Senegalese cooks in France use broken Thai jasmine when desperate. It is not the same but it is closer than anything else.
Yet (fermented dried snail). Dark, umami, intensely marine. A single piece the size of your thumb changes the entire broth. It dissolves as it cooks. This is non-negotiable if you want the dish to taste like Senegal. Find it at West African or Caribbean grocery stores, sometimes labeled yeet.
Guedj (dried fermented fish). Salted, dried, pungent. Functions like a solid fish stock cube, but more complex. A small piece alongside the yet gives the broth its bottom note.
Nététou (dawadawa / fermented locust bean). Earthy, funky, almost miso-like when raw. When it hits hot oil with onions, it transforms. This is the ingredient that makes people from Dakar close their eyes when they taste the broth. Some West African grocery stores carry it as a paste. Dried is also fine. Do not skip it.
Fresh fish. Thiof — white grouper — is traditional in Senegal. In France, lieu jaune (pollack) or cabillaud (cod) works well. The fish needs to be a firm white fish that can be stuffed and hold together in the broth. Ask at a fish counter. Tell them what you are making.
The stuffing: this is the center of everything
The fish is not just cooked whole. It is stuffed. This is what makes thieboudienne different from putting fish in broth.
The stuffing — called rof — goes inside cuts made along the fish's side. Traditionally: flat-leaf parsley, garlic, whole or half a small hot pepper (piment), and a pinch of salt. Pound them together in a mortar until it is a rough paste. Push this paste into the slits you have cut. Press it in with your thumb so it stays.
My mother adds a little dried smoked fish (ketiakh — smoked herring or similar) to the mortar, just a small amount, for more depth. My grandmother did not. I do both on different Sundays.
The stuffed fish goes into the pot with the broth. The rof bleeds out into the liquid as it cooks. The broth that results is not just tomato and onion. It has garlic and parsley and heat from the pepper, concentrated in the flesh of the fish and then released slowly. This is the soul of the dish.
The full recipe
For 4-6 people, served from one platter
For the broth and fish:
- 1 whole white fish (1-1.2 kg), cleaned, with three deep cuts per side
- 1 piece yet (fermented dried snail), roughly thumbnail-sized
- 1 piece guedj (dried fermented fish), similar size
- 1 small piece ketiakh (smoked herring), optional but good
- 1 large onion, roughly chopped
- 4 tablespoons tomato paste
- 2 tablespoons peanut oil (not olive oil)
- 2 cloves garlic, minced
- Salt, black pepper
For the rof (stuffing):
- Small handful flat-leaf parsley
- 3 garlic cloves
- 1 small hot pepper (or half, depending on your heat)
- 1 pinch nététou (dawadawa)
- Salt
For the vegetables (go with what you have):
- 2 large carrots, cut in thick rounds
- 1 medium yam or sweet potato, cut in large cubes
- Quarter of a small cabbage, cut in wedges
- 4-6 whole okra
- 1 small eggplant, cut thick
For the rice:
- 500g broken rice
- Cooking broth from the fish pot
Step by step
Step one: make the rof. Pound parsley, garlic, hot pepper, nététou, and salt together in a mortar until you have a rough paste. Push this into the cuts on both sides of the fish. Set aside.
Step two: build the base. Heat peanut oil in a large, heavy pot over medium-high heat. Add the yet and guedj. Let them sizzle for two minutes — they will smell intense. This is normal. Add the chopped onion. Cook until soft and beginning to brown, about eight minutes. Add the garlic and tomato paste. Stir constantly for five minutes. The paste will darken from bright red to a deep, almost brick color. This is the most important step. Under-caramelized tomato paste makes a raw-tasting broth. It needs time.
Step three: add water and the stuffed fish. Pour in roughly 1.5 liters of water. Add the ketiakh if using. Taste for salt — it should be well-seasoned because the rice will absorb this liquid. Bring to a simmer, then gently lay the stuffed fish into the broth. Add all the vegetables except the okra (it goes in during the last fifteen minutes or it dissolves). Simmer on medium, uncovered, for twenty-five minutes.
Step four: remove fish and vegetables, keep the broth. When the fish is cooked through and the vegetables are soft but not collapsed, lift them all out carefully onto a tray. Cover to keep warm. You now have your cooking broth.
Step five: cook the rice. Rinse the broken rice twice. Add it to the broth in the pot. The broth should cover the rice by about two centimeters — add water if needed. Bring to a boil, then lower the heat to the lowest setting, cover tightly, and cook for twenty to twenty-five minutes. Check once at fifteen minutes. If the water is absorbed but the rice still has bite, add a splash of water and cover again. The finished rice should be tender, red from the tomato, and slightly dense.
Step six: the bottom crust. Once the rice is cooked, raise the heat for two minutes. This creates a crust at the bottom — ceebu jën traditionalists love this crust. Wet a clean cloth, drape it over the pot, put the lid back on, and let it rest off the heat for ten minutes. The cloth absorbs the steam and the crust loosens.
Serve. Invert the rice onto the platter if you want to show the crust at the top, or scoop it out and arrange the fish and vegetables around and on top. Squeeze half a lemon over everything. Bring the platter to the table. Eat together.
What goes wrong and how to fix it
Rice stuck to the bottom (too much). The crust is wanted, but if the rice is burning, your heat was too high or your pot is thin. Use the lowest flame and the heaviest pot you own.
Broth tastes flat. You did not caramelize the tomato paste long enough, or you skipped the yet and guedj. These fermented ingredients give the broth its depth. If you already cooked without them, add a small splash of fish sauce — not the same, but it helps.
Fish falling apart. It was overcooked, or your fish was not firm enough. Grouper, pollack, and cod hold together. Tilapia does not. Remove the fish at twenty-five minutes, not thirty.
Rice is too soft and wet. You had too much broth. Next time, use less water. The ratio is close — the broken rice absorbs more than whole rice, so start conservative.
Why Sunday, and why this dish
I work twelve-hour shifts in an emergency room. The work is what it is. I do not glamorize it. People come in, I help them, I go home, I sleep a few hours, I come back. Most days it is fine. Some days it is not, and I sit on the kitchen floor after my shift and I call my mother in Dakar and she talks to me until I can stand up again.
On Sundays I cook thieboudienne. It takes three hours, which is the point. I cannot rush it. I cannot check my phone. The tomato paste needs five minutes of constant stirring and it will tell me if I am not paying attention. The rice needs the exact right amount of broth. The fish needs care when you lift it from the pot.
Cooking this dish is the only time in my week when time moves slowly on purpose. When I start I am thinking about the week. By the time the rice is resting, I am thinking about nothing except whether my crust will be good.
My grandmother Mame Coumba made this for my family every Friday. I make it every Sunday. The recipe is the same. My apartment in Croix-Rousse smells like Dakar for six hours. That is enough.
If you make this and the broth is too pale, you did not let the tomato paste caramelize. If the rice is right, you will know. It holds the color of the broth, deep red-brown, and when you press it it is dense and soft at the same time.
You are welcome to find me and tell me how it went.