Melt butter with olive oil in a large skillet over medium heat. Add your sliced onions and stir well to coat everything in the butter mixture. This step seems simple, but don't rush it — you want them evenly coated so they caramelize together.
Cook the onions for about 25-30 minutes, stirring every few minutes. They'll go from raw to soft to golden brown. Don't panic if they look a little watery at first — that's totally normal and they'll release their moisture before it evaporates and concentrates all that flavor.
You'll know they're done when they're deep golden brown and smell absolutely incredible. The kitchen will smell like a French bistro, and that's your cue they've hit the sweet spot. If they're still pale, give them another 5 minutes.
Remove the skillet from heat and let the caramelized onions cool for about 2 minutes. While they're cooling, grab a medium bowl and add your softened cream cheese, sour cream, and grated Gruyère cheese together. Mix until it's mostly smooth — a few small lumps are totally fine and actually kind of nice.
Stir in the onion powder, garlic powder, black pepper, and salt to the cheese mixture. Give it a good mix so the seasonings are evenly distributed throughout. Taste it at this point and adjust — if you want more garlic punch, add a little extra garlic powder now.
Fold the caramelized onions into your cheese mixture gently, keeping those beautiful golden pieces intact. You want swirls of onion throughout rather than a completely blended dip. I personally like seeing those onion chunks because they remind you this is the real deal, not some packet mix.
Transfer everything to a serving bowl and top with fresh chopped parsley. You can serve it immediately while it's still warm, or let it chill for an hour if you prefer it cold. Either way, this french onion dip scratch gets better as the flavors meld together.