SQLite3 is really the best option.
You may be thinking, "I don't need a relational database engine. All I want to do is store some stuff." I used to think the same thing until I decided to just try it on an insignificant project.
Try it yourself though; when you want to add functionality beyond just ejaculating some key/value pairs onto the disc you'll be thankful. And if you get down the road and find that you really don't like sqlite you can replace it. The refactoring would be good for your code anyways. The only downside is that SQL is boring and won't net you meme-points like Rust or D will.
What kind of differences are you trying to track anyways? mtime? hash? unified diff? If it's just mtime you could have a schema like...
CREATE TABLE files(id INTEGER PRIMARY KEY, name TEXT, mtime INTEGER);
CREATE TABLE local(fileid REFERENCES files);
CREATE TABLE server(fileid REFERENCES files);
CREATE VIEW localmtime(name, mtime)
AS SELECT name, mtime
FROM files, local
WHERE files.id = local.fileid;
CREATE VIEW servermtime(name, mtime)
AS SELECT name, mtime
FROM files, server
WHERE files.id = server.fileid;
And finding all the newer files on the server would be something as simple as:
SELECT * FROM
localmtime AS l,
servermtime AS s
WHERE
l.name = s.name AND
l.mtime < s.mtime;