Preheat the oven to 400°F (200°C). Line a baking sheet with parchment paper.
Prepare the berries: rinse and gently dry fresh berries, chopping large berries into small pieces. If using frozen berries, keep them slightly frozen and toss lightly with a little flour or cornstarch to reduce excess liquid.
Make the cream cheese filling: in a medium bowl, beat the cream cheese, granulated sugar, vanilla extract, and lemon zest (if using) until smooth and creamy. Taste and adjust sweetness if desired.
Optional compote: in a small saucepan, combine berries, sugar, and lemon juice. Cook over medium heat until the berries soften and release their juices, about 5–8 minutes. Stir in cornstarch mixed with a little water if you want a thicker filling. Let cool completely before using.
Prepare the puff pastry: place the thawed puff pastry sheets on a lightly floured surface. Roll each sheet out slightly to even the thickness. Cut each sheet into 4 rectangles or triangles, for a total of 8 pieces.
Fill the pastry: spoon a small amount of cream cheese filling onto one end of each piece of pastry, leaving a border around the edges. Top with a spoonful of fresh berries or cooled berry compote. Do not overfill to avoid leaks.
Shape the croissants: for triangles, roll from the wide base toward the tip and gently curve the ends into a crescent shape. For rectangles, fold the pastry over the filling like a turnover and press the edges to seal with your fingers or a fork.
Make the egg wash: in a small bowl, whisk together the egg and milk or cream. Brush the tops of the pastries with the egg wash.
Bake: arrange the filled pastries on the prepared baking sheet, leaving space between them. Bake for 15–20 minutes, or until the berry stuffed croissants are puffed and deep golden brown.
Cool and serve: allow the croissants to cool for 5–10 minutes, as the filling will be very hot. Dust with powdered sugar before serving, if desired. Serve warm for the best flavor and texture.