Он вернулся домой во втором часу ночи уставший и полный отвращения к жизни. Ему шёл 52-ой год, и свою жизнь он воспринимал невозмутимым, гладким морем, в глубине которого таились чудовища: «все житейские недуги, болезни, горести, безумие, бедность, слепота». Каждую минуту он ждал, что одно из них перевернёт его утлую лодочку. Жизнь этого богатого, но очень одинокого человека была пуста, никчемна и отвратительна. Чтобы отвлечься от этих мыслей, он начал перебирать старые бумаги, пожелтевшие любовные письма и нашёл среди них небольшую восьмиугольную коробочку, в которой хранился маленький гранатовый крестик. Он напомнил Дмитрию Павловичу Санину о былом.
Летом 1840-го года, когда Санину исполнилось 22, он путешествовал по Европе, проматывая небольшое наследство от дальнего родственника. Возвращаясь домой, он остановился во Франкфурте. Дилижанс в Берлин отходил поздно, и Санин решил прогуляться по городу. Очутившись на небольшой улице, Дмитрий зашёл в «Итальянскую кондитерскую Джиованни Розелли», чтобы выпить стакан лимонада. Не успел он войти в зал, как из соседней комнаты выбежала девушка и начала умолять Санина о помощи. Оказалось, что младший брат девушки, мальчик лет четырнадцати по имени Эмиль, потерял сознание. Дома был только старый слуга Панталеоне, и девушка была в панике. Санин растёр мальчика щётками, и тот, к радости сестры, пришёл в себя. Спасая Эмиля, Дмитрий разглядывал девушку, удивляясь её изумительной классической красоте. В это время в комнату вошла дама, сопровождаемая доктором, за которым посылали служанку. Дама была матерью Эмилио и девушки. Она так обрадовалась спасению сына, что пригласила Санина на ужин.
Вечером Дмитрия встретили, как героя и спасителя. Он узнал, что мать семейства зовут Леонора Розелли. Двадцать лет назад она с мужем, Джиованни Баттистой Розелли покинула Италию, чтобы открыть во Франкфурте кондитерскую. Красавицу звали Джеммой. А их верный слуга Панталеоне, забавный маленький старичок, в прошлом был оперным тенором. Ещё одним полноправным членом семейства был пудель Тарталья. К своему разочарованию, Санин узнал, что Джемма была помолвлена с господином Карлом Клюбером, заведующим отдела одного из крупных магазинов.
Санин засиделся у них допоздна и опоздал на дилижанс. Денег у него осталось мало, и он попросил в долг у своего берлинского приятеля. Дожидаясь ответного письма, Дмитрий был вынужден остаться в городе на несколько дней. Утром Санина посетил Эмиль в сопровождении Карла Клюбера. Этот видный и рослый молодой человек, безукоризненный, благообразный и приятный во всех отношениях, поблагодарил Дмитрия от лица своей невесты, пригласил его на увеселительную прогулку в Соден и удалился. Эмиль попросил позволения остаться и вскоре подружился с Саниным.
Весь день Дмитрий провёл у Розелли, любуясь красотой Джеммы, и даже успел поработать продавцом в кондитерской лавке. Санин отправился в гостиницу поздно вечером, унося с собой «образ молодой девушки, то смеющейся, то задумчивой, то спокойной и даже равнодушной, — но постоянно привлекательной».
Следует сказать и несколько слов о Санине. Это был статный и стройный молодой человек с немного расплывчатыми чертами лица, голубыми глазами и золотистыми волосами, отпрыск степенного дворянского семейства. В Дмитрии сочетались свежесть, здоровье и бесконечно мягкий характер.
Утром состоялась прогулка в Соден — небольшой живописный городок в получасе езды от Франкфурта, организованная герром Клюбером с истинно немецкой педантичностью. Обедали в лучшем трактире Содена. Джемме наскучила прогулка. Чтобы развеяться, она захотела пообедать не в уединённой беседке, которую уже успел заказать её педантичный жених, а на общей террасе. За соседним столиком обедала компания офицеров майнцского гарнизона. Один из них, будучи в сильном подпитии, подошел к Джемме, «хлопнул стакан» за её здоровье и нахально схватил розу, лежащую возле её тарелки.
Этот поступок оскорбил девушку. Вместо того, чтобы заступиться за невесту, герр Клюбер поспешно расплатился и, громко возмущаясь, увёл её в гостиницу. Санин же подошёл к офицеру, назвал его нахалом, отобрал розу и напросился на дуэль. Эмиля восхитил поступок Дмитрия, а Клюбер притворился, что ничего не заметил. Всю обратную дорогу Джемма слушала самоуверенные разглагольствования жениха и под конец начала его стыдиться.
На следующее утро Санина посетил секундант барона фон Донгофа. У Дмитрия не было знакомых во Франкфурте, и ему пришлось пригласить в секунданты Панталеоне. Тот взялся за свои обязанности с необычайным рвением и уничтожил на корню все попытки примириться. Было решено стреляться из пистолетов с двадцати шагов.
Весь оставшийся день Санин провёл у Джеммы. Поздно вечером, когда Дмитрий покидал кондитерскую, Джемма подозвала его к окну и подарила ту самую, уже увядшую, розу. Она неловко наклонилась и оперлась на плечи Санина. В этот момент по улице пронёсся горячий вихрь, «как стая громадных птиц», и молодой человек понял, что влюблён. Дуэль состоялась в десять часов утра. Барон фон Донгоф преднамеренно выстрелил в сторону, признавая свою вину. Дуэлянты пожали друг другу руки и разошлись, а Санину долгое время было стыдно — очень уж по-детски всё получилось. В гостинице выяснилось, что Панталеоне разболтал о дуэли Джемме.
Днём Санина навестила фрау Леоне. Джемма хотела разорвать помолвку, хотя семья Розелли была практически разорена, и спасти её мог только этот брак. Фрау Леоне попросила Дмитрия повлиять на Джемму и уговорить её не отказывать жениху. Санин согласился, и даже попытался поговорить с девушкой, но уговоры дали обратный результат — Дмитрий окончательно влюбился и понял, что Джемма тоже его любит. После тайного свидания в городском саду и взаимных признаний ему ничего не оставалось, как сделать ей предложение.
Фрау Леоне встретила эту новость слезами, но расспросив новоявленного жениха о его материальном положении, успокоилась и смирилась. Санин владел небольшим поместьем в Тульской губернии, которое ему следовало срочно продать, чтобы вложить средства в кондитерскую. Дмитрий уже хотел ехать в Россию, как вдруг встретил на улице своего бывшего одноклассника. Этот жирный субъект по имени Ипполит Сидорыч Полозов был женат на очень красивой и богатой женщине из купеческого сословья. Санин обратился к нему с просьбой купить поместье. Полозов ответил, что все денежные вопросы решает его жена, и предложил отвезти Санина к ней.
Попрощавшись с невестой, Дмитрий отправился в Висбаден, где госпожа Полозова лечилась водами. Марья Николаевна действительно оказалась красавицей с тяжёлыми русыми волосами и несколько вульгарными чертами лица. Она немедленно начала обхаживать Санина. Оказалось, что полозов был «удобным мужем», который не лез в дела жены и давал ей полную свободу. Детей у них не было, а все интересы Полозова сходились на вкусной, обильной еде и роскошной жизни.
Супруги заключили пари. Ипполит Сидорыч был уверен, что на сей раз супруга своего не добьётся — уж очень сильно Санин был влюблён. К сожалению, Полозов проиграл, хотя его жене и пришлось потрудиться. Во время многочисленных обедов, прогулок и посещений театра, которые устраивала для Санина госпожа Полозова, он встретил фон Донгофа, предыущего любовника хозяйки. Дмитрий изменил своей невесте через три дня после приезда в Висбаден на конной прогулке, которую устроила Марья Николаевна.
У Санина хватило совести признаться Джемме в измене. После этого он полностью покорился Полозовой, стал её рабом и следовал за ней, пока она не выпила его досуха и выкинула как старое тряпьё. На память о Джемме у Санина остался только крестик. Он до сих пор не понимал, зачем покинул девушку, «столь нежно и страстно им любимую, для женщины, которую он и не любил вовсе».
После вечера воспоминаний Санин собрался и посреди зимы отправился во Франкфурт. Он хотел найти Джемму и попросить прощения, но не нашёл даже улицы, на которой тридцать лет назад стояла кондитерская. Во франкфуртской адресной книге он наткнулся на имя майора фон Донгофа. Тот сообщил Санину, что Джемма вышла замуж и дал её адрес в Нью-Йорке. Дмитрий послал её письмо и получил ответ. Джемма писала, что очень счастлива в браке и благодарна Санину за то, что он расстроил её первую помолвку. Она родила пятерых детей. Панталеоне и фрау Леоне умерли, а Эмилио погиб, сражаясь за Гарибальди. В письме была фотография дочери Джеммы, которая была очень похожа на мать. Девушка была помолвлена. Санин отправил ей в подарок «гранатовый крестик, обделанный в великолепное жемчужное колье», а потом и сам засобирался в Америку.