Swedish Meatballs
Tender Swedish meatballs made with beef and pork, gently spiced with allspice and nutmeg, browned in a skillet, then finished in a creamy brown gravy. Served over classic mashed potatoes with a spoonful of lingonberry-style jam at the edge. The key is a soft panade, gentle mixing, proper browning, and a smooth gravy built from the meatball drippings. Building the meatballs with a proper panade — breadcrumbs fully hydrated in milk and egg — is the technique this whole dish depends on for genuinely tender results, since that soft, hydrated structure is what keeps the meat from turning dense even after simmering in gravy, the same panade-for-tenderness principle used elsewhere in this collection whenever ground meat needs real moisture insurance built directly into the mixture. Softening the onion before it ever meets the meat is what gives the finished meatballs a sweeter, more classic flavour rather than a sharp, raw onion bite. Browning the meatballs only for colour, then finishing them fully in the gravy, is what keeps them tender rather than dried out from a single, complete cooking stage. The payoff is a dish with real comfort and depth — soft, gently spiced meatballs in a glossy, creamy brown gravy over classic mashed potatoes.

Prep Time : 10 min
Cook Time : 0 min
Servings : 8
10 min
0 min
8
Ingredients
For the Mashed Potatoes
• 1000g potatoes, peeled and cut into even chunks
• Water for boiling
• 12g fine sea salt for the cooking water
• 80g unsalted butter — this one on Amazon
• 180ml whole milk, warmed — this one on Amazon
• 60ml heavy cream, warmed — this one on Amazon
• Fine sea salt, to taste
• White pepper or black pepper, to taste
For the Panade
• 80g plain breadcrumbs
• 160ml whole milk
• 1 large egg
For the Meatballs
• 550g ground beef
• 250g ground pork
• 120g yellow onion, very finely diced
• 20g unsalted butter, for cooking the onion
• 10g fine sea salt
• 2g black pepper
• 1½ tsp ground allspice — this one on Amazon
• ¼ tsp ground nutmeg — this one on Amazon
• 15g fresh parsley, finely chopped
• 20ml neutral oil, for browning
• 20g unsalted butter, for browning
For the Creamy Brown Gravy
• Meatball pan drippings
• 35g unsalted butter
• 35g all-purpose flour
• 500ml beef stock
• 150ml heavy cream
• 10ml soy sauce, optional but good for classic color and depth
• 1 tsp Dijon mustard, optional — this one on Amazon
• Black pepper, to taste
• Fine sea salt, to taste
For Serving
• Lingonberry jam or cranberry jam — this one on Amazon
• Chopped parsley
• Extra black pepper
This post may contain affiliate links. As an Amazon Associate I earn from qualifying purchases, at no additional cost to you.
Directions
- Start the Mashed Potatoes
Place the potatoes in a pot and cover with cold water. Add the salt and bring to a boil. Simmer until the potatoes are fully tender, about 18 to 22 minutes depending on size. Drain well and let them steam-dry in the hot pot for 2 minutes. Watery potatoes make loose mash. Letting them steam-dry before mashing gives you a thicker, cleaner potato base. That brief steam-dry lets residual surface moisture evaporate off the cooked potatoes before any dairy is added, protecting the finished mash from turning thin or waterlogged. - Finish the Mashed Potatoes
Mash the potatoes until smooth. Add the butter first and mix until melted. Gradually add the warm milk and warm cream until the potatoes are soft, creamy, and spoonable. Season with salt and pepper. Keep warm while you make the meatballs. Add the dairy warm, not cold. Cold milk tightens the mash and makes it heavier. Warm dairy incorporates into the hot potato without shocking its temperature down, keeping the starches relaxed and the texture genuinely light rather than gluey. - Make the Panade
In a large bowl, combine the breadcrumbs, milk, and egg. Let sit for 10 minutes, until the breadcrumbs fully hydrate. The panade is what keeps Swedish meatballs tender. If the breadcrumbs stay dry, the meatballs become dense. That fully hydrated bread structure works its way through the meat mixture, physically interrupting the protein strands from binding into as tight a network as beef and pork alone would form. - Cook the Onion
Melt the butter in a small pan over medium-low heat. Add the finely diced onion and cook for 5 to 7 minutes, until soft and translucent but not browned. Let cool for a few minutes. Raw onion can stay sharp inside the meatballs. Softening it first gives a sweeter, more classic flavor and a better texture. Cooling the onion briefly before it meets the meat matters directly here — mixing genuinely hot onion straight into the raw beef and pork would begin cooking the exterior of the mixture prematurely, working against the gentle, even mixing this recipe depends on. - Mix the Meatballs
Add the ground beef, ground pork, cooked onion, salt, black pepper, allspice, nutmeg, and parsley to the panade. Mix gently with your hands just until evenly combined. Shape into meatballs, about 35 to 40g each. You should get around 22 to 24 meatballs. Do not overmix. Swedish meatballs should be tender and soft, not springy like sausage. Ground meat’s proteins bind together more tightly the more they’re handled, and stopping the mixing the moment everything is evenly distributed is exactly what keeps that binding from tightening into the springier, sausage-like texture this dish specifically avoids. - Brown the Meatballs
Heat a large skillet over medium-high heat. Add the neutral oil and butter. Brown the meatballs in batches, turning gently, for about 5 to 7 minutes per batch. They should be browned on the outside but do not need to be fully cooked through yet. Transfer browned meatballs to a plate. Brown the meatballs in batches. Crowding the pan makes them steam, and you lose the browned bits that build the gravy. That deliberate partial cook leaves genuine headroom for the meatballs to finish gently in the gravy later, while the fond left behind in the pan becomes the actual foundation of the gravy itself. - Build the Gravy
Lower the heat to medium. Keep the browned bits and drippings in the pan. Add the butter. Once melted, sprinkle in the flour and whisk for 1 to 2 minutes, until it turns light golden and smells slightly nutty. Gradually whisk in the beef stock, scraping the bottom of the pan. Simmer for 4 to 5 minutes, until the gravy begins to thicken. Add the heavy cream, soy sauce if using, Dijon if using, black pepper, and salt to taste. Add the stock gradually while whisking. This keeps the gravy smooth instead of lumpy. Cooking the flour briefly in the butter before any liquid is added is what removes its raw, starchy taste and lets it thicken the gravy smoothly once the stock joins, rather than leaving a raw flavour or uneven, lumpy result. - Finish the Meatballs in the Gravy
Return the meatballs and any juices from the plate to the skillet. Simmer gently for 8 to 10 minutes, turning once or twice, until the meatballs are cooked through and coated in glossy creamy gravy. Keep the gravy at a gentle simmer, not a hard boil. Hard boiling can make the gravy split and the meatballs tighten. Because the meatballs were deliberately browned only for colour, this gentle simmer is genuinely enough to finish cooking them through — a hard boil at this stage risks both splitting the cream-enriched gravy and toughening meat that was specifically left underdone to finish tender here. - Serve
Spoon the mashed potatoes into bowls. Add the Swedish meatballs and plenty of creamy brown gravy. Place a spoonful of lingonberry-style jam at the edge. Finish with chopped parsley and black pepper. That spoonful of tart lingonberry or cranberry jam served at the edge, rather than stirred in, gives each bite the option of bright, sweet-tart contrast against the rich, savoury gravy exactly when wanted.
*Notes :
- Building the meatballs with a proper panade deserves genuine respect as the technique responsible for their tender, soft final texture, exactly as the recipe’s own notes emphasise. That hydrated bread structure physically interrupts the meat’s protein network from binding as tightly as beef and pork alone would form — skipping this step would produce a noticeably denser meatball regardless of how carefully everything else is handled.
- Softening the onion before it ever meets the raw meat, then letting it cool before mixing, reflects real, deliberate technique rather than an optional extra step. Raw onion mixed directly into meatballs stays genuinely sharp and can release moisture unevenly during cooking; pre-softened onion instead contributes sweetness and a more classic, integrated flavour throughout the finished meatball.
- Browning the meatballs only for colour, deliberately leaving them not fully cooked through, reflects the same two-stage protein cooking principle used throughout this collection’s other braised or sauce-finished meat dishes. That initial browning builds real flavour and the fond the gravy depends on, leaving genuine headroom for the meatballs to finish gently in the simmering gravy afterward.
- The recipe’s own explicit warning against boiling the gravy hard once the meatballs return deserves real attention. A cream-enriched gravy is genuinely vulnerable to splitting under aggressive heat, and that same hard boil would also toughen meatballs that were deliberately left underdone specifically to finish tender at this final, gentle stage.
Why This Recipe Works
This recipe works because the meatballs are built with a proper panade, physically protecting their texture from turning dense. The onion is softened and cooled before mixing, contributing sweetness rather than raw sharpness.
Browning the meatballs only for colour, then finishing them fully in the gravy, keeps them tender through a genuine two-stage cook.
The gravy itself is built from the meatballs’ own drippings, thickened smoothly with a properly cooked flour base, and kept at a gentle simmer throughout to protect both its own emulsion and the meatballs’ tenderness.
Ingredient Breakdown
Panade (Breadcrumbs, Milk, and Egg)
The critical tenderizing technique — physically interrupts the meat’s protein network, keeping the meatballs genuinely soft.
Softened, Cooled Onion
The flavour foundation — contributes sweetness and integrated flavour rather than raw sharpness or premature cooking of the meat mixture.
Browned-Then-Simmered Meatballs
The two-stage technique — colour and fond built quickly, doneness finished gently in the gravy for real tenderness.
Flour Cooked in Butter (Before Stock)
The critical thickening technique — removes raw flour taste and enables smooth, clean gravy thickening.
Gentle Final Simmer (Meatballs in Gravy)
The finishing technique — protects the cream-enriched gravy’s emulsion and the meatballs’ tenderness together.
Flavor Structure Explained
This Swedish meatball dish follows a layered balance model:
- Tender savoury centre (panade-enriched, gently browned-and-simmered meatballs)
- Warm spiced depth (allspice, nutmeg)
- Rich creamy gravy (butter, flour, beef stock, heavy cream)
- Neutral hearty base (buttery mashed potatoes)
- Bright sweet-tart finish (lingonberry or cranberry jam)
Tender, panade-enriched meatballs provide this dish’s savoury centre, their texture protected through a genuine two-stage cook. Allspice and nutmeg add warm, distinctly Swedish spiced depth throughout. A rich, creamy brown gravy, built from the meatballs’ own drippings, ties everything together with glossy, savoury body. Buttery mashed potatoes provide a neutral, hearty base that lets the meatballs and gravy take center stage, and a spoonful of lingonberry or cranberry jam finishes each plate with bright, classic sweet-tart contrast.
Common Mistakes to Avoid
- Skipping the Panade – This produces denser, less tender meatballs. Always include the fully hydrated breadcrumb mixture.
- Adding Raw, Uncooked Onion Directly to the Meat – This leaves a sharp, raw bite in the finished meatballs. Always soften and cool the onion first.
- Overmixing the Meatball Mixture – This makes them springy rather than tender. Always mix only until combined.
- Fully Cooking the Meatballs During Browning – This leaves no headroom for them to finish tender in the gravy. Always brown for colour only.
- Boiling the Gravy Hard Once the Meatballs Return – This risks splitting the sauce and toughening the meat. Always keep this final stage at a gentle simmer.
Variations
All-Beef Version
Substitute all beef for the pork if preferred, accepting a slightly leaner, firmer finished meatball.
Extra-Spiced Version
Increase the allspice slightly for a more pronounced, classically Swedish warm spice note.
Lighter Gravy Version
Reduce the heavy cream slightly and increase the beef stock for a thinner, less rich finished gravy.
Cranberry Jam Version
Substitute cranberry jam for lingonberry if the classic Swedish variety isn’t available, per the recipe’s own note.
Storage & Make-Ahead
Best served immediately while the gravy is hot and the mashed potatoes are soft.
The meatballs and gravy can be made a day ahead and reheated gently over low heat, loosening the gravy with a splash of stock if needed.
The mashed potatoes are best made fresh, though they can be gently reheated with a splash of warm milk to restore their creamy texture.
Frequently Asked Questions
Why does the panade matter so much for these meatballs’ texture?
That hydrated bread structure physically interrupts the meat’s protein network from binding as tightly as beef and pork alone would form. Skipping it produces a noticeably denser, less tender meatball, even after simmering in gravy.
Why does the onion need to be cooked and cooled before it’s mixed into the meat?
Raw onion mixed directly into meatballs stays genuinely sharp and cooks unevenly. Pre-softened, cooled onion instead contributes sweetness and integrated flavour without prematurely cooking the surrounding raw meat mixture.
Why are the meatballs only browned, not fully cooked, before going into the gravy?
That initial browning builds real flavour and the fond the gravy depends on, leaving genuine headroom for the meatballs to finish gently in the simmering gravy afterward, rather than treating browning as their complete cook.
Why can’t the gravy be boiled hard once the meatballs are added back in?
A cream-enriched gravy is genuinely vulnerable to splitting under aggressive heat, and that same hard boil would also toughen meatballs that were deliberately left underdone to finish tender at this gentle final stage.
Are there other creamy beef, meatball, or comfort-food dishes worth trying?
Beef Stroganoff offers a related, creamy beef dish worth exploring for a different classic comfort meal. Classic Mashed Potatoes is worth making on its own as a versatile side. Meatball Sub Sandwich and Juicy Beef Meatballs are also worth trying for other meatball directions.
Nutrition Facts
( per serving )
Calories
~920 kcal
Protein
46 g
Fat
56 g
Carbs
58 g
Calories
~920 kcal
Protein
46 g
Fat
56 g
Carbs
58 g
Related Recipes
Related Recipes
You might also like
You might also like

Swedish Meatballs
Ingredients
Method
- Place the potatoes in a pot and cover with cold water. Add the salt and bring to a boil. Simmer until the potatoes are fully tender, about 18 to 22 minutes depending on size. Drain well and let them steam-dry in the hot pot for 2 minutes. Watery potatoes make loose mash. Letting them steam-dry before mashing gives you a thicker, cleaner potato base. That brief steam-dry lets residual surface moisture evaporate off the cooked potatoes before any dairy is added, protecting the finished mash from turning thin or waterlogged.
- Mash the potatoes until smooth. Add the butter first and mix until melted. Gradually add the warm milk and warm cream until the potatoes are soft, creamy, and spoonable. Season with salt and pepper. Keep warm while you make the meatballs. Add the dairy warm, not cold. Cold milk tightens the mash and makes it heavier. Warm dairy incorporates into the hot potato without shocking its temperature down, keeping the starches relaxed and the texture genuinely light rather than gluey.
- In a large bowl, combine the breadcrumbs, milk, and egg. Let sit for 10 minutes, until the breadcrumbs fully hydrate. The panade is what keeps Swedish meatballs tender. If the breadcrumbs stay dry, the meatballs become dense. That fully hydrated bread structure works its way through the meat mixture, physically interrupting the protein strands from binding into as tight a network as beef and pork alone would form.
- Melt the butter in a small pan over medium-low heat. Add the finely diced onion and cook for 5 to 7 minutes, until soft and translucent but not browned. Let cool for a few minutes. Raw onion can stay sharp inside the meatballs. Softening it first gives a sweeter, more classic flavor and a better texture. Cooling the onion briefly before it meets the meat matters directly here — mixing genuinely hot onion straight into the raw beef and pork would begin cooking the exterior of the mixture prematurely, working against the gentle, even mixing this recipe depends on.
- Add the ground beef, ground pork, cooked onion, salt, black pepper, allspice, nutmeg, and parsley to the panade. Mix gently with your hands just until evenly combined. Shape into meatballs, about 35 to 40g each. You should get around 22 to 24 meatballs. Do not overmix. Swedish meatballs should be tender and soft, not springy like sausage. Ground meat’s proteins bind together more tightly the more they’re handled, and stopping the mixing the moment everything is evenly distributed is exactly what keeps that binding from tightening into the springier, sausage-like texture this dish specifically avoids.
- Heat a large skillet over medium-high heat. Add the neutral oil and butter. Brown the meatballs in batches, turning gently, for about 5 to 7 minutes per batch. They should be browned on the outside but do not need to be fully cooked through yet. Transfer browned meatballs to a plate. Brown the meatballs in batches. Crowding the pan makes them steam, and you lose the browned bits that build the gravy. That deliberate partial cook leaves genuine headroom for the meatballs to finish gently in the gravy later, while the fond left behind in the pan becomes the actual foundation of the gravy itself.
- Lower the heat to medium. Keep the browned bits and drippings in the pan. Add the butter. Once melted, sprinkle in the flour and whisk for 1 to 2 minutes, until it turns light golden and smells slightly nutty. Gradually whisk in the beef stock, scraping the bottom of the pan. Simmer for 4 to 5 minutes, until the gravy begins to thicken. Add the heavy cream, soy sauce if using, Dijon if using, black pepper, and salt to taste. Add the stock gradually while whisking. This keeps the gravy smooth instead of lumpy. Cooking the flour briefly in the butter before any liquid is added is what removes its raw, starchy taste and lets it thicken the gravy smoothly once the stock joins, rather than leaving a raw flavour or uneven, lumpy result.
- Return the meatballs and any juices from the plate to the skillet. Simmer gently for 8 to 10 minutes, turning once or twice, until the meatballs are cooked through and coated in glossy creamy gravy. Keep the gravy at a gentle simmer, not a hard boil. Hard boiling can make the gravy split and the meatballs tighten. Because the meatballs were deliberately browned only for colour, this gentle simmer is genuinely enough to finish cooking them through — a hard boil at this stage risks both splitting the cream-enriched gravy and toughening meat that was specifically left underdone to finish tender here.
- Spoon the mashed potatoes into bowls. Add the Swedish meatballs and plenty of creamy brown gravy. Place a spoonful of lingonberry-style jam at the edge. Finish with chopped parsley and black pepper. That spoonful of tart lingonberry or cranberry jam served at the edge, rather than stirred in, gives each bite the option of bright, sweet-tart contrast against the rich, savoury gravy exactly when wanted.






