Instagram's own feed-post size, ready to upload without a re-crop.
Target: 1080×1080px
Instagram compresses and re-crops any image that doesn't match one of its supported ratios, which is the usual cause of a feed photo looking softer or cropped differently than intended after posting. Uploading at 1080×1080px — the resolution Instagram itself renders a square post at — avoids that extra re-compression pass entirely.
If your photo isn't square, Instagram also fully supports a 4:5 portrait (1080×1350px) and a 1.91:1 landscape (1080×566px) post — both use more of the feed's vertical space and typically get more thumb-stopping attention than a square crop of the same photo.
Yes, Instagram re-compresses every upload for delivery, but starting from the exact resolution it expects avoids the extra quality loss caused by it also having to resize your image first.
Keep it under roughly 1-2MB after resizing. Instagram's own compression already reduces the file significantly, so a smaller, cleaner starting file uploads faster with no visible quality difference.
JPG for photos — it compresses photographic detail far more efficiently than PNG and Instagram converts everything to JPG internally anyway. Use PNG only if the image has flat colours, transparency, or text that needs to stay sharp.