Lente 1924. Lev Glebovich Ganin woont in een Russisch pension in Berlijn. Naast Ganin woont de wiskundige Alexei Ivanovich Alferov, een man "met een dunne baard en een schitterende gezwollen neus", "een oude Russische dichter" Anton Sergeyevich Podtyagin, en Klara, "een volle, volledig zwarte zijde, zeer gezellige jongedame", werkend als typiste en verliefd op, woonachtig in een pension. Ganina, evenals de balletdansers Colin en Gornotsvetov. "Een bijzondere schaduw, mysterieuze mimiek" scheidt de laatste van andere kostgangers, maar "eerlijk gezegd kan men het duivengeluk van dit onschadelijke koppel niet veroordelen".
Vorig jaar, toen hij in Berlijn aankwam, vond Ganin onmiddellijk een baan. Hij was een arbeider en een ober en een extraatje. Hij heeft genoeg geld over om Berlijn te verlaten, maar daarvoor moet hij breken met Lyudmila, wiens relatie al drie maanden aan de gang is en hem beu is. Maar hoe te breken, weet Ganin niet. Zijn raam komt uit op het spoor en daarom "plaagt de mogelijkheid om te vertrekken obsessief." Hij deelt aan de minnares mede dat hij zaterdag zal vertrekken.
Ganin hoort van Alferov dat zijn vrouw Mashenka zaterdag arriveert. Ganin leidt Alferov naar zichzelf om hem foto's van zijn vrouw te laten zien. Ganin leert zijn eerste liefde. Vanaf dit moment is hij volledig ondergedompeld in de herinneringen aan deze liefde, het lijkt hem dat hij precies negen jaar jonger was. De volgende dag, op dinsdag, kondigt Ganin aan Ludmila aan dat hij van een andere vrouw houdt. Nu kan hij zich herinneren hoe hij, negen jaar geleden, toen hij zestien jaar oud was, herstellende van buiktyfus op een zomerlandgoed bij Voskresensk, een vrouwelijk beeld voor zichzelf creëerde, dat hij in een maand in werkelijkheid ontmoette. Mashenka had een 'kastanje vlecht in een zwarte strik', 'Tatar brandende ogen', een gezicht met een donkere huidskleur, een stem 'mobiel, burry, met onverwachte borstgeluiden'. Masha was erg opgewekt, hield van snoep. Ze woonde in een landhuis in Voskresensk. Eens met twee vrienden klom ze het tuinhuisje in het park in. Ganin sprak met de meisjes, ze spraken af om de volgende dag te gaan varen. Maar Mashenka kwam alleen. Elke dag begonnen ze elkaar te ontmoeten aan de kant van de rivier waar een leeg wit landhuis op een heuvel stond.
Toen hij op een stormachtige zwarte nacht, aan de vooravond van het vertrek naar St. Petersburg aan het begin van het schooljaar, hem voor het laatst op deze plek ontmoette, zag Ganin dat de luiken van een van de ramen van het landgoed op een kier stonden en een menselijk gezicht van binnenuit tegen het glas werd gedrukt. Dit was de zoon van de wachter. Ganin brak het glas en begon 'met een vuist op zijn natte gezicht te slaan'.
De volgende dag ging hij naar Petersburg. Masha verhuisde pas in november naar Petersburg. Het "sneeuwtijdperk van hun liefde" begon. Het was moeilijk te ontmoeten, lange tijd in de kou ronddwalen was pijnlijk, dus beiden herinnerden zich de zomer. 'S Avonds spraken ze uren aan de telefoon. Alle liefde vereist privacy en ze hadden geen onderdak, hun families kenden elkaar niet. Aan het begin van het nieuwe jaar werd Mashenka naar Moskou gebracht. En het is vreemd: deze scheiding was een opluchting voor Ganin.
In de zomer kwam Masha terug. Ze belde Ganin naar het huisje en zei dat haar vader nooit meer een huisje in Voskresensk zou willen huren en ze woont nu vijftig kilometer daarvandaan. Ganin ging naar haar fiets. In het donker al aangekomen. Mashenka wachtte hem op aan de poorten van het park. 'Ik ben van jou', zei ze. 'Doe wat je wilt met mij.' Maar in het park waren vreemde geluiden te horen, Mashenka was te volgzaam en onbeweeglijk. 'Het lijkt mij dat er iemand komt', zei hij en stond op.
Een jaar later ontmoette hij Mashenka in een landtrein. Ze stapte uit bij het volgende station. Ze hebben elkaar nooit meer gezien. Tijdens de oorlog wisselden Ganin en Mashenka verschillende keren zachte brieven uit. Hij was in Jalta, waar "een militaire strijd werd voorbereid", het was ergens in Klein Rusland. Daarna zijn ze elkaar kwijtgeraakt.
Op vrijdag besluiten Colin en Gornotsvetov, ter gelegenheid van een verloving, Klara's verjaardag, Ganins vertrek en Podtyagins veronderstelde vertrek naar Parijs, om een "feest" te houden voor zijn nichtje. Ganin met Podtyagin gaat naar de politie om hem te helpen met een visum. Wanneer het langverwachte visum is ontvangen, laat Podtyagin per ongeluk een paspoort achter in de tram. Hij heeft een hartaanval.
Het feestelijke diner is triest. Podtyagin wordt opnieuw ziek. Ganin geeft een drankje aan de al dronken Alferov en stuurt hem in slaap, en hij stelt zich voor hoe hij Masha 's ochtends op het station zal ontmoeten en haar meenemen.
Nadat hij zijn spullen heeft gepakt, neemt Ganin afscheid van de kostgangers die aan het bed van de stervende Podtyagin zitten en gaat naar het station. Er is nog een uur voordat Mashenka arriveert. Hij gaat zitten op een bankje in het park bij het station, waar hij zich vier dagen geleden herinnerde aan tyfus, het landgoed en Masha's voorgevoel. Ganin realiseert zich geleidelijk "met meedogenloze helderheid" dat zijn affaire met Mashenka voor altijd is beëindigd. 'Het duurde maar vier dagen, deze vier dagen waren misschien wel de gelukkigste tijden van zijn leven.' Het beeld van Mashenka bleef bij de stervende dichter in het 'huis van schaduwen'. En er is geen andere Mashenka en kan dat niet zijn. Hij wacht op het moment dat een sneltrein uit het noorden langs de spoorbrug komt. Hij neemt een taxi, gaat naar een ander station en stapt in een trein naar het zuidwesten van Duitsland.