Skip to content

Releases

Cairn 0.1.23

Choose a tag to compare

@stepankandrushin stepankandrushin released this 13 Nov 09:08

Each program is shown by its own name, on every platform: Cairn is the main program, the CLI and daemon, cairn (cairn.exe), and Cairn Tray the optional tray, cairn-tray; nothing is shown as "Cairn Sync" any more.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c --ignore-missing cairn-0.1.23.sha256
tar xzf cairn-0.1.23-linux-x86_64.tar.gz

macOS: unpack cairn-0.1.23-macos-universal.app.tar.gz (Cairn.app) and cairn-0.1.23-macos-universal-tray.app.tar.gz (Cairn Tray.app) into ~/Applications; README.md has the launchd agent for Cairn.app. Windows: put cairn-0.1.23-windows-x86_64.exe and cairn-0.1.23-windows-x86_64-tray.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.23-linux-x86_64 is the bare Linux program, which installed copies update to. cairn-0.1.23.sha256 is every file's SHA-256, and update.json the signed list of this release's files that every installed copy checks.

Every file is at https://cairn.storage/download/0.1.23.html and in GitHub's release v0.1.23, each with its SHA-256.

The server has changed in this release: upgrade it before the clients.

Changes in 0.1.23

Changed:

  • Each program is shown by its own name, the same on every platform. Cairn, the main program, the CLI and
    daemon, is cairn (cairn.exe on Windows) as before, and macOS and Windows now show it as "Cairn", where they
    showed "Cairn Sync": on macOS its bundle is Cairn.app, where it was Cairn Sync.app, and so Login Items and Local
    Network name it; on Windows its version information, which Task Manager shows, says Cairn. Cairn Tray, the
    tray, which nothing needs, is cairn-tray and shown as "Cairn Tray", where it was "Cairn": on macOS its bundle
    is Cairn Tray.app, where it was Cairn.app, and the name is in its Windows version information, its window's
    title, its menu's Quit, the Run key's value on Windows and the autostart entry on Linux. The bundle
    identifiers, and with them each permission macOS keeps, are unchanged.
  • The release's files name the tray alone: cairn-<v>-linux-x86_64 (cairn alone), cairn-<v>-linux-x86_64.tar.gz
    (cairn and cairn-server), cairn-<v>-macos-universal.app.tar.gz (Cairn.app) and -tray.app.tar.gz (Cairn
    Tray.app), cairn-<v>-windows-x86_64.exe (cairn.exe) and -tray.exe (cairn-tray.exe), where cairn's ended in
    -sync.
  • A copy of 0.1.21 updates itself to it and keeps its paths. On Windows the tray goes on starting at login by
    the Run key's old value, Cairn, which it takes for its own and removes once it is set either way. On macOS
    the new bundles go in under the old names, Cairn Sync.app and Cairn.app, which Finder and Login Items may still
    show. To rename them: launchctl bootout both agents (com.cairn.tray, and the daemon's), rename Cairn.app to
    Cairn Tray.app, then Cairn Sync.app to Cairn.app, point ~/.local/bin/cairn and the daemon's agent at
    Cairn.app/Contents/MacOS/cairn, run cairn-tray --login on from the renamed tray, and launchctl bootstrap
    the daemon's agent.

Cairn 0.1.21

Choose a tag to compare

@stepankandrushin stepankandrushin released this 13 Nov 06:54

The release's files are named by platform, then program, so each platform's sit together on a page sorted by name, and one file, cairn-0.1.21.sha256, holds the SHA-256 of them all; installed copies update from the new names as before.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c --ignore-missing cairn-0.1.21.sha256
tar xzf cairn-0.1.21-linux-x86_64.tar.gz

macOS: unpack cairn-0.1.21-macos-universal-sync.app.tar.gz (Cairn Sync.app) and cairn-0.1.21-macos-universal-tray.app.tar.gz (Cairn.app) into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.21-windows-x86_64-sync.exe and cairn-0.1.21-windows-x86_64-tray.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.21-linux-x86_64-sync is the bare Linux program, which installed copies update to. cairn-0.1.21.sha256 is every file's SHA-256, and update.json the signed list of this release's files that every installed copy checks.

Every file is at https://cairn.storage/download/0.1.21.html and in GitHub's release v0.1.21, each with its SHA-256.

The server is unchanged since 0.1.18; a 0.1.21 client works with a 0.1.18 server.

Changes in 0.1.21

Changed:

  • The release's files are named by platform, then program, so a release page that sorts by name groups each
    platform's together, and each program has one name everywhere: cairn-<v>-linux-x86_64-sync (cairn alone),
    cairn-<v>-linux-x86_64.tar.gz (cairn and cairn-server), cairn-<v>-macos-universal-sync.app.tar.gz (Cairn
    Sync.app) and -tray.app.tar.gz (Cairn.app), cairn-<v>-windows-x86_64-sync.exe (cairn.exe) and
    -tray.exe (cairn-tray.exe). One file, cairn-<v>.sha256, holds every file's SHA-256, in place of a
    .sha256 beside each: sha256sum -c --ignore-missing cairn-<v>.sha256. Installed copies update from the new
    names as before, as each finds its file by program and platform in update.json; installed, the programs keep
    their names. Releases before keep theirs.

Cairn 0.1.20

Choose a tag to compare

@stepankandrushin stepankandrushin released this 13 Nov 05:52

A sync holds about a quarter of the memory it did: on a tree of 842,000 entries every sync but a device's first peaks at 210 to 430 MB, where each took 0.95 to 1.3 GB.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.20-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.20-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.20-windows-x86_64.exe and cairn-tray-0.1.20-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.20-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

Every file is at https://cairn.storage/download/0.1.20.html and in GitHub's release v0.1.20, each with its SHA-256.

The server is unchanged since 0.1.18; a 0.1.20 client works with a 0.1.18 server.

Changes in 0.1.20

Changed:

  • A sync holds about a quarter of the memory it did: on a tree of 842,000 entries every kind of sync but a
    device's first peaks at 210 to 430 MB, where each took 0.95 to 1.3 GB: a sync with nothing to do 212 MB, one
    of one edit 280 MB, a daemon's sync of 1,000 rewritten files 360 MB, its daily check 380 to 430 MB, and the
    first sync after an update, which rebuilds the ledger, 355 MB; between syncs the daemon keeps 25 to 40 MB.
    The walk sorts each folder's entries against the ledger as it leaves the folder, on several threads, and
    keeps whole only what the ledger does not account for: of the rest, the object each is, some 30 bytes an
    entry, where it held a node of about 800 bytes for every entry, those a daemon's sync takes from the ledger
    without listing them too. The ledger is held as the state stores it, about 150 bytes an entry instead of
    300, and asked rather than copied into a map of every row by inode. A sync with nothing to do asks the
    ledger too, instead of reading every row. What a round takes in of what was sorted away is made again from
    its ledger entry and row, and checked against what the ledger says was read. A sync takes as long as it
    did, but for the first after an update, which walks the tree once more (22 s there, 18 before). A harness
    build keeps every node whole beside what was sorted, and fails a sync unless the rows the walk was given,
    the check and a rebuild come out the same from either.

Cairn 0.1.19

Choose a tag to compare

@stepankandrushin stepankandrushin released this 12 Nov 16:41

A sync that brings many new files, as a device's first sync of a big tree does, waits far less on the disk: new files are written and flushed in batches, each still whole and durable before it appears at its name.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.19-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.19-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.19-windows-x86_64.exe and cairn-tray-0.1.19-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.19-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

Every file is at https://cairn.storage/download/0.1.19.html and in GitHub's release v0.1.19, each with its SHA-256.

The server is unchanged since 0.1.18; a 0.1.19 client works with a 0.1.18 server.

Changes in 0.1.19

Changed:

  • A sync that brings many new files, as a device's first sync of a big tree does, waits far less on the disk:
    new files are written up to 64 at a time and, where a flush waits on the disk, flushed together, so a
    journaling filesystem commits them in a few flushes rather than one each. Each is still whole and durable
    before it appears at its name, checked against what is there in its own turn, and placed in the same order as
    before. A first sync of 50,000 small files on two NVMe drives in RAID1 took 32 s, where it took 261.

Cairn 0.1.18

Choose a tag to compare

@stepankandrushin stepankandrushin released this 12 Nov 03:58

Updates now come from cairn.storage, where every release's files are, and from GitHub only when that does not answer; the web interface adds and renames folders, switches between a light and a dark theme, and opens an item from anywhere in its name's cell.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.18-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.18-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.18-windows-x86_64.exe and cairn-tray-0.1.18-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.18-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

Every file is at https://cairn.storage/download/0.1.18.html and in GitHub's release v0.1.18, each with its SHA-256.

The server has changed in this release: upgrade it before the clients.

Changes in 0.1.18

Added:

  • Folders added and renamed in the web interface. The + beside Folders in the sidebar adds a folder of the
    user's own, which they manage and nobody else reaches until given access: what they call it, and its name
    on the server, made of that (Family photos as family-photos) until they change it. Each folder has a page
    of its settings, opened from Folder settings under it in the sidebar or from its level beside its name, which
    until now did nothing when clicked: its name on the server, which a manager renames there, the user's own
    name for it, their access, and the command that syncs it on a computer.
  • A folder renamed while the server serves, by a manager of it, in one transaction, its chunks left where
    they are: what was begun by the former name as it was renamed goes on in the same folder, a commit or a web
    upload in flight lands in it, and the former name goes on reaching it as after cairn-server folder rename,
    which stays for the server stopped. The API is POST /v1/folders and POST /v1/ns/{ns}/rename
    (docs/protocol.md); a name that is or was another folder's is refused, saying nothing of that folder.
  • A light and a dark theme in the web interface, switched by a button at the right end of the top bar (on the
    sign-in page and a public link's page too) and chosen in Settings, Theme, which also goes back to following
    the device. Kept in that browser; until something is chosen it is light or dark as the device is, as before.

Changed:

  • Updates come from cairn.storage, where each release's files are, with its downloads page
    (https://cairn.storage/download/), and from GitHub's latest release only when that does not answer. cairn update says which feed answered, and what the one before it said when it did not, so a fallback never hides
    a feed that is down. Several feeds, comma-separated, are asked in order wherever one is named: a build's
    CAIRN_UPDATE_FEED, update-settings.json's feed, --feed. A release's update.json names its files
    beside it, so the one signed file serves from either; copies of 0.1.17 and before, which ask GitHub alone,
    take this release there.
  • In the web's file list and on Shared with me, a click anywhere in the name's cell opens the item: its icon and
    the space around and beside the name too, where only the name itself did.

Cairn 0.1.17

Choose a tag to compare

@stepankandrushin stepankandrushin released this 11 Nov 16:51

A new server's first folder is called cloud, a folder can be renamed and still answers to its old name, each person can give a folder a name of their own, which their devices suggest from the folder they sync it into, and the web shows times as year-month-day with icons throughout its menus.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.17-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.17-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.17-windows-x86_64.exe and cairn-tray-0.1.17-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.17-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

The server has changed in this release: upgrade it before the clients.

Changes in 0.1.17

Added:

  • Each user's own name for a folder, which only they see and which changes nothing else: the web interface
    shows it wherever it names the folder (the sidebar, the top of the path, page titles, Members, Shares and
    links, Recently deleted), its Settings set it or take it away (Folder names), and cairn folders lists it.
    A device offers the name of the directory it syncs the folder into, as cairn init joins and each time its
    daemon starts, which the server keeps only while the user has none: a folder synced into ~/Sync shows as
    "Sync" until they choose another.
  • cairn-server folder rename <from> <to>, with the server stopped: one transaction, the folder's chunks left
    where they are, so nothing is moved or copied; its former name goes on reaching it, so every device, link
    and bookmark made with it goes on working. Each device takes the new name up at its next sync, and no other
    folder may take the former name; folder list shows it.

Changed:

  • A new server's first folder is cloud, where it was default; a server from before keeps its default
    and gets no second one. cairn init without --folder syncs the one folder the token reaches, whatever its
    name, and with several names them and asks which, where it took default.

  • The server's database is schema 5: a renamed folder's former names, each user's own names for folders, and
    where a renamed folder keeps its chunks. A server moves a database of schema 4 to it when it starts, in one
    transaction, so a kill or a full disk leaves 4 or 5 whole. A server of schema 4 refuses it; cairn-server downgrade --data <dir>, with the server stopped, now moves it back one schema each time it runs: to 4,
    dropping what schema 5 added, once no folder is renamed away from its first name, then to 3.

  • The web interface writes times on a 24-hour clock and dates as year-month-day (2026-11-11 09:50), where it
    followed the browser's locale. Its new Settings page, at the top of every page, chooses a 12-hour clock or
    another date order; the choice is kept in that browser.

  • The web's sidebar gives a folder's Recently deleted, Members, and Shares and links an icon each, and Shared
    with me one of its own in place of Members' people. They stay listed under the folder while Shared with me
    or Settings is open, until another folder is opened. Settings has a gear, on a phone the gear alone, Sign out a
    door, and Upload folder a folder with an arrow.

Fixed:

  • The web's Recently deleted squeezed the Name column to a few letters wide on a narrow window or phone. As
    the page narrows, the Was in and By columns, then Size and Deleted, move to lines under the name, and a
    path breaks after a / rather than inside a word.

Cairn 0.1.16

Choose a tag to compare

@stepankandrushin stepankandrushin released this 10 Nov 18:39

After a device joined with other file modes, every other device took the whole tree on its next sync, for minutes and several GB of memory, to apply nothing; a note now counts as no change, so they take only what changed.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.16-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.16-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.16-windows-x86_64.exe and cairn-tray-0.1.16-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.16-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

The server is unchanged since 0.1.15; a 0.1.16 client works with a 0.1.15 server.

Changes in 0.1.16

Fixed:

  • After a device joined on another umask, every other device's next sync took the whole tree, for minutes
    and several GB of memory, to apply nothing: it counted each file the join's note named as changed. A note
    changes nothing, so it now counts as no change, grouped or one to each file; the sync takes only what
    did change, and cairn log shows the note as before.

Cairn 0.1.15

Choose a tag to compare

@stepankandrushin stepankandrushin released this 10 Nov 17:53

A smaller and faster server database, each revision kept once in binary, about a quarter of the size, the same on the wire; a device that joins with other file modes writes one note naming every file rather than one note each; and Recently deleted opens at once.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.15-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.15-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.15-windows-x86_64.exe and cairn-tray-0.1.15-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.15-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

The server has changed in this release: upgrade it before the clients.

Changes in 0.1.15

Changed:

  • The server keeps each revision's body once, as a binary record, where it kept it twice as JSON: in the
    commit and again in the table of revisions. Its database is schema 4, about a quarter of the size (a real
    one, 1.3 GB, became 361 MB), and reading it is a little faster. What it sends is the same, byte for byte.
    A server of this release moves a database of schema 3 when it starts, in one transaction, after checking
    for room, and gives the freed space back; cairn-server downgrade moves it back to schema 3, for a server
    from before.
  • cairn-server fsck also checks that each revision is named by the commit that made it.
  • A commit's notes of one text, the losers of a merge, go as one note naming each object, where they went
    as one to each: a device joining on another umask wrote the same "mode: kept 664 from the server; this
    device had 644" for every file. cairn log says how many each names. A client sends them so only to a
    server of this release, which says it takes them (/info's note_groups); to an older one, a note to
    each object as before. A client from before reads one as a note of its first object.

Fixed:

  • The web's Recently deleted opens at once and lists all of the last 30 days, from an index the server
    keeps in memory, rather than reading the journal back on each request, which took minutes on a busy disk.

Cairn 0.1.14

Choose a tag to compare

@stepankandrushin stepankandrushin released this 10 Nov 08:25

A web interface in the server, which a device opens signed in from its tray or cairn web: browse and upload, history and restore, recently deleted, who has access, shares of any file or folder with other users, and public links that need no account.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.14-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.14-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.14-windows-x86_64.exe and cairn-tray-0.1.14-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.14-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

The server has changed in this release: upgrade it before the clients.

Changes in 0.1.14

Added:

  • A web interface, at the server's address. Sign in with a token, then browse each folder; upload files and
    folders, in parts any proxy passes; download a file, or a folder as a zip; preview images, video, audio,
    PDFs and text; see a file's history and restore any revision; bring back what was deleted lately; make
    folders, rename, move and delete. A change made there is a commit like any device's: refused, with the
    reason, when the file or folder changed since it was looked at, never forced over it. A file replaced from a
    browser keeps its mode, owners, extended attributes and streams.
  • Sharing from the web. A folder's members are listed, and its managers change them. A manager shares any
    file or folder in it with another user, to read or to write, or by a public link that needs no account,
    reads only and may expire: each reaches what it names and nothing above it, follows it when it moves, and
    stops when it is deleted or its maker no longer manages the folder. "Shared with me" lists what others
    shared with you.
  • Signing in from a device, with nothing to type: the tray's Open in browser, and cairn web in a synced
    folder, open the web interface signed in as that device, by a ticket that works once within two minutes.
    The browser keeps a session the server signed, never the token, and removing the token signs it out.
  • Endpoints for all of it, which any client may use (docs/protocol.md, "Web"), and schema 3 on the server,
    which adds the table of shares.

Cairn 0.1.13

Choose a tag to compare

@stepankandrushin stepankandrushin released this 09 Nov 16:25

Cairn 0.1.13: the server's address answers a browser with a page saying what it is. The tray's "Open in browser" opened a page saying only missing or wrong token, which read as a client that had lost its token; the server now answers a browser at its address with a page saying it is a Cairn server, that there is no web interface yet, and where the files and their history are. The page names no version, user or folder, and everything else on the server still needs a token. Only the server changed: the clients are as in 0.1.12, and work with either server. Installed copies of 0.1.6 to 0.1.12 take it by themselves, within the hour; the server is upgraded by hand.

This is early software. Keep another copy of anything you put through it.

Linux (x86_64, static):

sha256sum -c cairn-0.1.13-x86_64-unknown-linux-musl.tar.gz.sha256
tar xzf cairn-0.1.13-x86_64-unknown-linux-musl.tar.gz

macOS: unpack both .app.tar.gz into ~/Applications; README.md has the launchd agent for Cairn Sync.app. Windows: put cairn-0.1.13-windows-x86_64.exe and cairn-tray-0.1.13-windows-x86_64.exe in a folder of their own as cairn.exe and cairn-tray.exe. cairn-0.1.13-linux-x86_64 is the bare Linux program, which installed copies update to. update.json is the signed list of this release's files that every installed copy checks.

The server has changed in this release, and either order works: a 0.1.13 client works with a 0.1.12 server, and an earlier client with a 0.1.13 server.

Changes in 0.1.13

Fixed:

  • The tray's "Open in browser" opened a page saying only missing or wrong token, which read as a client
    that had lost its token. The server's address now answers a browser with a page saying it is a Cairn
    server, that there is no web interface yet, and where the files and their history are; it names no
    version, user or folder. Everything else on the server still needs a token.