
Classic Porcupine Meatballs in Tomato Sauce
Tender beef meatballs studded with long-grain rice that cooks right inside them, simmered in a savory Worcestershire-spiked tomato sauce until the rice pokes out like porcupine quills. Cozy, budget-friendly, and made in one pan.
- Prep
- 20 min
- Cook
- 1 hr 5 min
- Wait
- 5 min
- Total
- 1 hr 30 min
- Makes
- About 24 meatballs (6 servings)
Steps
Before you start
- Use UNCOOKED long-grain white rice and do not rinse it. The rice cooks inside the meatballs by absorbing sauce as they simmer.
- Choose a deep 12-inch (30 cm) skillet with a tight lid, or a 5-quart (4.7 L) heavy-bottomed pot with a lid, so the meatballs sit in one snug layer and are mostly covered by sauce.
- Use 80/20 ground beef. Leaner beef makes drier meatballs.
- Plan on about 90 minutes from start to table; 42 minutes of that is unattended simmering. This recipe is cooked entirely on the stovetop, so no oven is needed.
Prep the onions
- Peel the onions.
- Finely grate half of one onion on the large holes of a box grater into a large mixing bowl, including all the juices.
- Finely dice the whole remaining onion and set it aside on a plate.
- Mince the garlic.
+ Show details− Hide details
Ready when: Grated onion looks wet and pulpy; diced pieces are about ¼ inch (6 mm).
Tip: Grating the onion for the meatballs keeps it from leaving crunchy chunks and adds moisture.
Mix the meatballs
- To the grated onion, add the egg, uncooked rice, 1 tbsp (15 ml) of the Worcestershire sauce, 1¼ tsp kosher salt, the pepper, and garlic powder.
- Stir with a fork to combine.
- Add the cold ground beef and mix gently with your hands for about 30 seconds, just until the rice and seasonings are evenly distributed.
+ Show details− Hide details
Ready when: Mixture holds together when squeezed, with no streaks of egg or pockets of dry seasoning.
Tip: Overmixing makes tough, rubbery meatballs. Stop as soon as everything is evenly combined.
Shape the meatballs
- Scoop about 2 tablespoons (40 g) of the mixture and roll it between damp palms into a smooth 1½-inch (4 cm) ball.
- Place on a rimmed baking sheet or plate.
- You should get about 24 meatballs.
- Rinse and re-dampen your hands as needed to stop sticking.
+ Show details− Hide details
Ready when: Balls are uniform in size, with rice grains tucked in or lightly poking out.
Tip: Keep the balls roughly the same size so they finish cooking at the same time. Don't pack them tightly.
Soften the aromatics
- Heat the olive oil in a deep 12-inch (30 cm) skillet or 5-quart (4.7 L) heavy pot over medium heat until it shimmers.
- Add the diced onion and cook, stirring often, for about 4 minutes.
- Add the garlic and stir for 30 seconds more.
+ Show details− Hide details
Ready when: Onion is soft and translucent with no browning, and the garlic smells fragrant but is not brown.
Tip: If the garlic starts to brown, lower the heat right away. Browned garlic turns bitter.
Build the sauce
- Pour in the tomato sauce and water.
- Add the remaining 2 tbsp (30 ml) Worcestershire sauce, the brown sugar, and ½ tsp kosher salt.
- Stir well, scraping the bottom of the pan, and bring to a gentle simmer over medium-high heat, about 4 minutes.
+ Show details− Hide details
Ready when: Small bubbles break steadily around the edges of the pan.
Tip: The sauce will seem thin. That's right, because the rice will absorb a good amount of it.
Add the meatballs
- Reduce the heat to medium-low.
- Gently place the meatballs into the sauce one at a time in a single snug layer, spooning a little sauce over any that sit above the surface.
- Don't stir.
- Let the sauce return to a bare simmer.
+ Show details− Hide details
Ready when: Sauce is bubbling lightly around and between the meatballs.
Tip: Don't stir now. Raw meatballs are fragile and will break apart until they firm up in the sauce.
Cover and simmer
- Cover tightly and reduce the heat to low so the sauce barely bubbles.
- Simmer for 45 minutes.
- At about the 25-minute mark, lift the lid and gently roll each meatball over with a spoon, then re-cover.
- Do not lift the lid at other times, so the steam stays in to cook the rice.
+ Show details− Hide details
Ready when: After 45 minutes the rice grains are puffed and tender when you bite one, and a meatball cut open shows no pink.
Tip: If the sauce is boiling hard or sticking, lower the heat and add a splash of water.
Check and thicken
- Insert an instant-read thermometer into the center of 2 or 3 meatballs; they must read at least 160°F (71°C).
- Taste a rice grain to confirm it's tender.
- Then remove the lid, raise the heat to medium, and simmer 5–8 minutes, spooning sauce over the meatballs, to thicken.
- Taste the sauce and add a pinch of salt if needed.
+ Show details− Hide details
Ready when: Meatballs register 160°F (71°C); sauce coats the back of a spoon and leaves a clear trail when you drag a spoon across the pan bottom.
Tip: If the rice is still firm but the meatballs are cooked, re-cover and simmer on low 5–10 more minutes.
Rest and serve
- Turn off the heat and let the meatballs rest in the sauce for 5 minutes so the sauce settles and thickens slightly.
- Sprinkle with the chopped parsley and serve hot with mashed potatoes, buttered egg noodles, or crusty bread.
+ Show details− Hide details
Ready when: Sauce has stopped bubbling and clings to the meatballs.
Good to know
Tips
- Use raw, un-rinsed rice. Rinsing removes surface starch that helps bind the meatballs.
- Don't lift the lid often during the simmer. The trapped steam is what cooks the rice through.
- Shape meatballs with damp hands and keep them loose. Packing them tight leaves the rice undercooked in the center.
- If the sauce reduces too much during simmering, stir in a few tablespoons of hot water to loosen it.
Make ahead
Shape the raw meatballs up to 8 hours ahead, cover, and refrigerate on the baking sheet. Add them to the simmering sauce straight from the fridge and add about 5 minutes to the simmer time. The fully cooked dish also reheats well and tastes even better the next day.
Storage & reheating
Room temperature: no more than 2 hours. Refrigerator: cool and store in an airtight container with the sauce for up to 4 days. Freezer: freeze meatballs in sauce for up to 3 months; thaw overnight in the fridge. Reheat gently in a covered saucepan over low heat with a splash of water, stirring rarely, until steaming hot (165°F / 74°C), about 10–15 minutes. The rice keeps absorbing sauce, so add water as needed.
Substitutions
- 80/20 ground beef → Half ground beef and half ground pork, or ground turkey (93/7). Pork adds richness. Turkey is leaner and can be drier, so add 1 tbsp olive oil to the mixture. Cook to 165°F (74°C) if using turkey.
- long-grain white rice → Medium-grain white rice. Works the same way. Don't use instant rice (turns mushy) or brown rice (needs much more liquid and time).
- Worcestershire sauce → Soy sauce, same amount. Gives a similar savory depth, though it will taste slightly saltier, so reduce the added salt in the sauce a little.
- plain tomato sauce → One 28 oz (800 g) can crushed tomatoes plus 1 cup (240 ml) water. Gives a chunkier, more rustic sauce. Increase the water to 1¼ cups (300 ml) as needed.
More meatballs
See all →Find more like this
- Meal
- Dinner
- Cuisine
- American
- Main ingredient
- Ground BeefRice
- Diet
- Dairy-FreeHalal
- Method
- Stovetop




