Het artikel "Hoe synchronisatie werkt" beschrijft wat je ziet. Dit artikel gaat een laag dieper, naar wat elk apparaat en de server echt met je wijzigingen doen.
Elke wijziging wordt een operatie
Als je een notitie bewerkt, doet je apparaat twee dingen in één stap: het slaat de nieuwe tekst op in zijn lokale database, en het zet een operatie in een wachtrij, een klein record dat zegt: "deze notitie is veranderd, hier is de nieuwe versie". Een notitie maken, bewerken, vastmaken, taggen, archiveren en verwijderen zijn allemaal operaties.
Voordat je apparaat de wachtrij verstuurt, ruimt het die op. Tien snelle bewerkingen aan dezelfde notitie worden er één. Maak je een notitie vast terwijl je er nog in typt, dan worden het vastmaken en de nieuwe tekst samengevoegd tot één operatie, zodat geen van beide wijzigingen verloren gaat. Alleen de volgorde in de wachtrij telt: een latere wijziging wint altijd van een eerdere, wat de klok van het apparaat ook zegt.
Een operatie verlaat de wachtrij pas als de server haar heeft bevestigd. Valt de verbinding halverwege weg, of sluit je de app midden in een synchronisatie, dan staat de wachtrij er de volgende keer nog en gaat er niets verloren.
Eerst versturen, dan ophalen
Synchronisatie bestaat uit twee eenvoudige gesprekken met de server:
- Versturen (push). Je apparaat stuurt zijn operaties uit de wachtrij in batches. De server voert ze een voor een uit en schrijft elke operatie in een logboek van wijzigingen voor je account, waarbij elk item het volgende nummer in de reeks krijgt.
- Ophalen (pull). Je apparaat vraagt: "wat is er veranderd sinds nummer 1.234?" De server antwoordt met elk logboekitem na dat nummer, en het apparaat verwerkt ze in zijn lokale database.
Omdat elk apparaat het laatste nummer onthoudt dat het heeft gezien, downloadt het alleen wat nieuw is. Het maakt niet uit hoe lang een apparaat offline was: het pakt de draad precies weer op waar het gebleven was.
Alles wat je notities verandert, loopt via dat logboek, ook wijzigingen via de API of via een AI-tool die over MCP is gekoppeld. Daarom verschijnt een notitie die een AI-assistent voor je schrijft op al je apparaten, net als elke andere.
Hoe conflicten worden opgemerkt
Elke bewerking die je apparaat verstuurt, vermeldt de laatste versie van die notitie die het heeft gezien. Is de kopie op de server sindsdien veranderd, omdat een ander apparaat de notitie in de tussentijd heeft bewerkt, dan overschrijft de server niets. In plaats daarvan antwoordt hij met zijn eigen kopie.
Je apparaat probeert dan een driewegsamenvoeging, de techniek die versiebeheerprogramma's gebruiken. Het vergelijkt drie teksten: de versie waarmee beide apparaten begonnen, die van jou en die van de server. Raken de bewerkingen verschillende delen van de notitie, dan combineert het ze en verstuurt het het samengevoegde resultaat, zonder dat je er iets van merkt. Alleen als beide apparaten dezelfde regels hebben veranderd, vraagt Caliu welke versie je wilt behouden. Zie het artikel "Synchronisatieconflicten oplossen".
Sommige wijzigingen kunnen nooit een conflict opleveren. Vastmaken, archiveren en een notitie alleen-lezen maken tellen niet als bewerkingen van de tekst, dus die voegen zich netjes samen met alles.
Overal dezelfde regels
De web-app, de Apple-apps en de Android-app zijn in drie verschillende talen geschreven, maar ze volgen dezelfde synchronisatieregels. De regels voor het opruimen van de wachtrij worden op alle drie getoetst aan één gedeelde set testgevallen, zodat een wijziging van het ene apparaat op elk ander apparaat op dezelfde manier wordt behandeld.
Zonder account
Zonder account verlaat er nooit iets je apparaat. Zodra je inlogt, worden de notities die al op je apparaat staan onderdeel van je account en net als elke andere wijziging verstuurd.