Quick Recipe Version (TL;DR)
Swedish Christmas Meatballs with Creamy Gravy are tender, warmly spiced little meatballs served with velvety brown cream gravy, buttery mashed potatoes, and tangy lingonberry preserves. This cozy holiday dinner is just as lovely for a relaxed winter Sunday.
Quick Ingredients
- Meat: 1 pound (454 g) 85% lean ground beef and 1 pound (454 g) ground pork.
- Meatball mixture: 1 medium yellow onion (150 g), finely chopped; 1/2 cup (50 g) plain fine dry breadcrumbs; 1/2 cup (120 ml) whole milk; 1 large egg.
- Meatball seasonings: 1 teaspoon fine sea salt, 1/2 teaspoon ground allspice, 1/4 teaspoon ground nutmeg, and 1/2 teaspoon freshly ground black pepper.
- For cooking: 2 tablespoons (28 g) unsalted butter, divided, and 1 tablespoon (15 ml) neutral oil.
- Gravy: 2 tablespoons (28 g) unsalted butter, 3 tablespoons (24 g) all-purpose flour, 2 cups (480 ml) low-sodium beef broth, 1/2 cup (120 ml) heavy cream, 1 teaspoon soy sauce, 1 teaspoon Dijon mustard, 1/4 teaspoon fine sea salt, and 1/4 teaspoon black pepper.
- Mashed potatoes: 2 pounds (907 g) Yukon Gold potatoes, peeled and cut into 1-inch chunks; 3 tablespoons (42 g) unsalted butter; 1/2 cup (120 ml) whole milk; 1/2 teaspoon fine sea salt.
- To serve: 6 tablespoons (120 g) lingonberry preserves and 2 tablespoons finely chopped fresh parsley.
Do This
- 1. Cook the onion in 1 tablespoon butter over medium-low heat for 6–8 minutes. Separately, soak the breadcrumbs in 1/2 cup milk for 5 minutes.
- 2. Gently combine the cooled onion, soaked breadcrumbs, beef, pork, egg, and meatball seasonings. Shape into approximately 36 meatballs, about 1 1/2 inches wide.
- 3. Cover the potatoes with cold water, bring to a boil, and simmer for 18–20 minutes, until very tender.
- 4. Heat the remaining 1 tablespoon cooking butter and the oil over medium heat. Brown the meatballs in 3 batches for 5–6 minutes per batch; transfer to a plate.
- 5. Leave 1 tablespoon fat in the skillet. Add the gravy butter and flour; cook for 2 minutes. Whisk in broth, then cream, soy sauce, mustard, salt, and pepper. Simmer for 3 minutes.
- 6. Return the meatballs and their juices to the gravy. Gently simmer for 10–12 minutes, until the centers reach 160°F (71°C).
- 7. Drain and mash the potatoes with their butter, warmed milk, and salt. Serve with meatballs, gravy, 1 tablespoon lingonberry preserves per person, and parsley.
Why You’ll Love This Recipe
- Tender, not dense: Milk-soaked breadcrumbs and a beef-and-pork mixture keep the meatballs soft and juicy.
- Warm holiday flavor: Allspice, nutmeg, and black pepper give these little meatballs their Christmas-table character without overpowering the meat.
- A beautifully balanced plate: Rich gravy and buttery potatoes meet bright, tart-sweet lingonberries.
- Friendly to holiday schedules: Shape the meatballs ahead, or cook and freeze them for an easier celebration.
Grocery List
- Produce: 1 medium yellow onion, 2 pounds Yukon Gold potatoes, and 1 small bunch fresh parsley.
- Meat: 1 pound 85% lean ground beef and 1 pound ground pork.
- Dairy: 7 tablespoons unsalted butter, 1 cup whole milk, and 1/2 cup heavy cream.
- Eggs: 1 large egg.
- Pantry: Plain fine dry breadcrumbs, all-purpose flour, low-sodium beef broth, neutral oil, soy sauce, Dijon mustard, lingonberry preserves, fine sea salt, ground allspice, ground nutmeg, and black pepper.
Full Ingredients
For the Meatballs
- 1 tablespoon (14 g) unsalted butter, for the onion
- 1 medium yellow onion (150 g), very finely chopped
- 1/2 cup (50 g) plain fine dry breadcrumbs
- 1/2 cup (120 ml) whole milk
- 1 pound (454 g) 85% lean ground beef
- 1 pound (454 g) ground pork, approximately 20% fat
- 1 large egg
- 1 teaspoon (6 g) fine sea salt
- 1/2 teaspoon ground allspice
- 1/4 teaspoon ground nutmeg
- 1/2 teaspoon freshly ground black pepper
- 1 tablespoon (14 g) unsalted butter, for browning
- 1 tablespoon (15 ml) neutral oil, such as canola oil, for browning
For the Creamy Brown Gravy
- 1 tablespoon reserved fat from browning the meatballs
- 2 tablespoons (28 g) unsalted butter
- 3 tablespoons (24 g) all-purpose flour
- 2 cups (480 ml) low-sodium beef broth
- 1/2 cup (120 ml) heavy cream
- 1 teaspoon (5 ml) soy sauce
- 1 teaspoon (5 g) Dijon mustard
- 1/4 teaspoon (1.5 g) fine sea salt
- 1/4 teaspoon freshly ground black pepper
For the Buttery Mashed Potatoes
- 2 pounds (907 g) Yukon Gold potatoes, peeled and cut into even 1-inch chunks
- 3 tablespoons (42 g) unsalted butter
- 1/2 cup (120 ml) whole milk
- 1/2 teaspoon (3 g) fine sea salt
For Serving
- 6 tablespoons (120 g) lingonberry preserves, divided among the plates
- 2 tablespoons finely chopped fresh parsley

Step-by-Step Instructions
Step 1: Soften the onion and soak the breadcrumbs
Melt 1 tablespoon butter in a large, deep 12-inch skillet over medium-low heat. Add the finely chopped onion and cook for 6–8 minutes, stirring frequently, until soft and translucent but not browned. Transfer the onion to a large mixing bowl and let it cool for 5 minutes. Keep the skillet handy for browning the meatballs.
Meanwhile, combine the breadcrumbs and 1/2 cup milk in a small bowl. Let stand for 5 minutes, then stir into a soft paste. This mixture, called a panade, helps the meatballs stay tender.
Step 2: Mix gently and shape the meatballs
Add the soaked breadcrumbs, egg, 1 teaspoon salt, allspice, nutmeg, and 1/2 teaspoon black pepper to the cooled onion. Stir to combine. Add the beef and pork, then gently mix with your hands just until the ingredients are evenly distributed. Stop as soon as no large streaks remain; kneading the mixture can make the meatballs firm.
With lightly dampened hands, shape into approximately 36 meatballs, each about 1 1/2 inches across and 38–40 g. Arrange them on a tray. Keep the tray refrigerated while you start the potatoes.
Step 3: Cook the potatoes alongside the meatballs
Place the potato chunks in a large saucepan and add enough cold water to cover them by 1 inch. Bring to a boil over high heat, then reduce to a steady simmer. Cook for 18–20 minutes from the start of simmering, until a fork slides through the largest pieces without resistance.
While the potatoes cook, begin browning the meatballs. If the potatoes finish first, drain them thoroughly and return them to the warm saucepan, off the heat, with the lid resting slightly ajar.
Step 4: Brown the meatballs in batches
Add 1 tablespoon butter and the neutral oil to the onion skillet and heat over medium heat. Brown the meatballs in 3 batches of approximately 12, leaving space between them. Cook each batch for 5–6 minutes, turning carefully every 1–2 minutes so several sides develop a golden-brown crust.
Transfer the browned meatballs to a clean plate. They do not need to be cooked through yet; they will finish in the gravy. Adjust the heat as needed to keep the butter and browned bits from burning. Once all the meatballs are browned, carefully spoon off excess fat, leaving 1 tablespoon in the skillet along with the flavorful brown bits.
Step 5: Build the creamy brown gravy
Reduce the heat to medium-low. Add 2 tablespoons butter to the skillet, then whisk in the flour. Cook for 2 minutes, whisking constantly, until the mixture is lightly golden and smells toasty.
Gradually whisk in the beef broth, starting with a small splash to make a smooth paste before adding the rest. Scrape up the browned bits from the bottom of the skillet. Whisk in the heavy cream, soy sauce, Dijon mustard, 1/4 teaspoon salt, and 1/4 teaspoon black pepper. Bring to a gentle simmer and cook for 3 minutes, stirring, until lightly thickened.
Step 6: Finish the meatballs in the gravy
Return the meatballs and any accumulated juices to the skillet. Spoon gravy over them and simmer gently over low to medium-low heat for 10–12 minutes, turning the meatballs once or twice. The sauce should bubble softly, not boil vigorously.
Check several of the largest meatballs with an instant-read thermometer inserted into their centers. They must reach 160°F (71°C). Continue simmering if needed. The finished gravy should coat a spoon while remaining easy to pour.
Step 7: Mash the potatoes until buttery and smooth
If you have not already drained the potatoes, drain them now. Return them to their saucepan over low heat for 1 minute, shaking gently to evaporate excess moisture. Remove from the heat and mash with the 3 tablespoons butter.
Warm the remaining 1/2 cup milk in a small saucepan over low heat for 2–3 minutes, until steaming but not boiling. Stir it into the potatoes with 1/2 teaspoon salt. Mash just until smooth and fluffy. Avoid a blender or food processor, which can turn potatoes gluey.
Step 8: Plate with lingonberries and parsley
Divide the mashed potatoes among 6 warm plates. Add approximately 6 meatballs to each plate and spoon the creamy brown gravy generously over the meatballs and partly over the potatoes. Add 1 tablespoon lingonberry preserves to the side of each serving and finish with the chopped parsley.
Serve immediately, keeping the preserves distinct from the gravy so everyone can enjoy a little tart-sweet contrast with each bite.
Pro Tips
- Chop the onion very finely: Small, softened pieces blend into the meatballs instead of creating gaps that can make them split.
- Keep the mixture cool: If it feels sticky or difficult to roll, refrigerate it for 15 minutes before shaping. This optional chilling adds 15 minutes to the total time.
- Brown without crowding: Giving the meatballs room produces a better crust and flavorful skillet drippings for the gravy.
- Control the gravy consistency: If it becomes too thick, stir in warm water, 1 tablespoon at a time. If it is too thin after the meatballs are cooked, remove them briefly and simmer the gravy uncovered for 2–3 minutes.
- Use a thermometer: Color alone is not a reliable guide to doneness. Ground beef-and-pork meatballs should reach 160°F (71°C) in the center.
Variations
- Oven-finished meatballs: Instead of browning in the skillet, arrange the shaped meatballs on a lightly oiled, rimmed baking sheet. Bake at 425°F (220°C) for 15–18 minutes, until their centers reach 160°F (71°C). Make the gravy separately using 3 tablespoons butter total in place of the reserved fat and gravy butter, then add the cooked meatballs and warm gently for 3–5 minutes. The gravy will be lighter without the skillet fond.
- Gluten-free version: Substitute 50 g certified gluten-free fine dry breadcrumbs, 24 g gluten-free all-purpose flour blend, and gluten-free tamari for the soy sauce. Check that the broth and mustard are also gluten-free.
- No lingonberries available: Serve each portion with 1 tablespoon tart whole-berry cranberry sauce instead. The flavor is different, but it provides a similar bright contrast.
Storage & Make-Ahead
Refrigerate: Cool leftovers promptly and refrigerate within 2 hours in airtight containers. Store the meatballs with their gravy and keep the mashed potatoes and preserves separate. Use the meatballs, gravy, and potatoes within 3–4 days.
Make ahead: Shape the raw meatballs up to 24 hours before cooking and refrigerate them, covered, at 40°F (4°C) or below. Alternatively, prepare the meatballs and gravy completely 1 day ahead, cool promptly, and refrigerate. Freshly made mashed potatoes give the best texture.
Freeze: Freeze cooked meatballs with their gravy in airtight containers for up to 2 months. Thaw overnight in the refrigerator. Cream gravy may separate slightly after freezing; gentle reheating and stirring usually bring it back together.
Reheat: Warm the meatballs and gravy in a covered skillet over low heat for approximately 15–20 minutes, stirring gently, until the meatballs reach 165°F (74°C). Add water, 1 tablespoon at a time, if the gravy needs loosening. Reheat mashed potatoes separately over low heat with a splash of milk, stirring frequently, until they also reach 165°F (74°C).
Nutrition (per serving)
Estimated for one-sixth of the complete recipe, including approximately 6 meatballs, gravy, mashed potatoes, 1 tablespoon lingonberry preserves, and parsley. Values vary with the meat, broth, and preserves used.
Calories: 830 kcal | Carbs: 52g | Protein: 35g | Fat: 53g | Saturated Fat: 25g | Fiber: 4g | Sugar: 15g | Sodium: 1080mg | Cholesterol: 200mg
