Backup and replication
One destination abstraction over local disk, cloud object stores and a self-hosted replica.
Backup is the work currently in progress. Some of what follows is implemented and exercised against real cloud endpoints; some is not finished. This page says which is which.
One abstraction, several backends
Rather than a separate feature per storage type, there is a single backup destination concept with several backends behind it:
| Backend | Covers |
|---|---|
| Filesystem | A local folder, an external or USB drive, a mounted network share |
| Object store | Amazon S3, Google Cloud Storage, Azure Blob Storage |
| Replica | A self-hosted DunneNote host acting as a replica |
Configuring a destination is the same operation in each case. What differs is the credentials it asks for and the encryption posture it reports back.
How backups are written
Backups are encrypted before they leave your machine, content-addressed, and incremental. Because content is addressed by hash, a backup after a small change uploads the changed content and nothing else — the unchanged blocks are already there under the same address.
Encryption happening before transmission is the important part: the destination holds ciphertext, whether the destination is a USB stick or somebody else’s object store.
Encryption posture is reported, not assumed
Selecting a destination causes DunneNote to read and report that destination’s actual encryption posture rather than assume one. Choose a different destination and the posture is re-read for the new one — a subtlety that was a real defect at one point and is now covered by tests.
The offline invariant
DunneNote’s offline-first rule is that nothing requires the network. Backup is where that is deliberately relaxed: sending data to an object store obviously needs a connection. The relaxation is confined to this feature and is opt-in per destination — the application does not become network-dependent because you configured a backup.
Archiving
A canvas can be marked Active or Archived, with a recorded reason. Finer-grained archiving — individual grid cells, records or bulk selections — and a dedicated archive search are planned rather than implemented.
Status
Destination configuration, the encryption posture reporting, and real connections to live object-store endpoints are implemented and have been exercised against actual buckets. The full end-to-end acceptance run through the application’s own interface is not finished. This page will lose its in progress badge when it is.