Repository navigation
Releases
🚀 Release 0.67.1 (orchid mantis)
orchid-mantis-1.mp4
The video above was generated with Oxen.ai.
Orchid mantis: An insect whose pink and white legs are shaped like flower petals, so it can stand inside an orchid and look like part of the bloom.
New features
- Downloading a file from a server now tells you its content hash:
GETandHEADon/file/{revision}/{path}send it in anoxen-file-hashheader, so a client that copies a file within a repository can reuse the stored copy rather than downloading and re-uploading it. A self-hosted server sends it to every caller, while requests to repositories hosted on Oxen.ai don't receive it yet. A resized image or video thumbnail has no such header. #1175
Changes
oxen diff <rev1> <rev2> <file>and the Python package's diff of one file between two revisions now report an error when the diff fails, where they used to print nothing. A text file over 1 MiB or 20,000 lines in either version is refused as too large to compare line by line, and a file that cannot be compared, such as an image, gets an invalid file type error. A diff of a directory still skips such files. #1174- The server's compare view gives no line diff for a text file over 1 MiB or 20,000 lines in either version, and bounds the time a line diff takes. Self-hosted and hosted. #1174
- Image resizes and video thumbnails accept a width or height from 1 to 2048 pixels and answer anything else with a 400. An image is never scaled past its own size, and an image path with no extension gets a 415. Self-hosted and hosted. #1169
- A part over 10 MiB sent to the batch upload (
POST /versions) or the workspace file upload is refused with a 413 that points to upload sessions. TheoxenCLI and the Python package never send parts that large, so this affects only direct HTTP API callers. #1170 #1173
Bug fixes
- On a self-hosted server whose data is on NFS, a large commit push uploaded in chunks failed to clean up its chunks and logged a "Directory not empty" error. #1172
- A failed transfer of a repository could leave an empty directory at the destination, which made every retry of the transfer fail. #1166
- A repository name could be claimed for an address that already led to another repository on the server. Creating, renaming, or transferring to such a name is now refused with a 409. #1166
Performance
- S3 storage isn't supported in open source yet, so please hold off on using it for now. On a server storing repositories in S3, a file between 10 and 100 MiB written to S3 outside a push (such as a workspace commit or a repository's move to S3) now goes up in up to 16 concurrent 5 MiB parts instead of one request. #1177
Internal improvements
- Replaced the
differencecrate withsimilarfor line diffs. #1174 - CI rebuilds its Rust caches weekly, so a dependency change no longer recompiles every crate. #1171
- Test suite, logging, documentation, and code organization improvements. #1166 #1169 #1170 #1174 #1177
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.67.0 (honeybee)
honeybee-mono-2.mp4
The video above was generated with Oxen.ai.
Honeybee: A fuzzy, social bee that carries pollen from flower to flower as it gathers the nectar its hive turns into honey.
Breaking changes
- Upgrade a self-hosted
oxen-servertogether with its clients. A push from the 0.67.0oxenCLI oroxenaipackage whose commit history goes up in chunks (more than 10 MiB of it) fails against a server older than 0.67.0. Older clients keep working against a 0.67.0 server, and repositories hosted on Oxen.ai are not affected. #1165
New features
oxen verifynow reports a commit whose node will not parse, and a commit missing its directory index, and goes on to check the rest of history instead of stopping at the first unreadable commit. A version file whose size the store does not report is listed as unchecked. #1117
Bug fixes
oxen checkoutno longer deletes an untracked file, or a file put in place of a tracked directory, when the target branch has a directory at that path. The checkout stops with the "your local changes would be overwritten" error and leaves the working tree as it was.oxen merge --abortstill replaces the file. #1153- Moving a committed data frame with a workspace file move now moves it. It used to stay at its old path as well as appearing at the new one, and a JSON data frame moved that way lost its staged edits. #1162
- A move, copy, or data frame rename onto a path the commit already has now gets a 409 whose type is
destination_exists, where a file move or rename got a 400. #1162 - Unstaging an edited CSV, Parquet, or other tabular data frame in a workspace now discards its staged edits. It used to answer success and leave the file staged as modified. #1163
- Listing a JSON data frame's versions on a branch now gives each version its schema hash. #1163
- Uploading a file over 2 MiB through
PUT /file, whichRemoteRepo.uploadinoxenaiuses, no longer fails with "Payload error". One upload can now carry up to 100 MiB, and a larger one gets a 413 that gives the limit. #1164 - A push whose commit history the server refuses now stops at the refusal and reports the server's message, instead of resending it for about 55 seconds and then reporting only that the retry failed. #1165
- Workspace data frame renames and file moves now refuse a path outside the repository with a 400 that says which field was refused, before anything is written. #1161
- Looking up a file at a path ending in
.., or at a path that is not valid UTF-8, now answers not found instead of a server error. #1161
Performance
oxen verifychecks version file sizes on a local version store in one batch: 1.0 s instead of 1.2 s for 200,000 version files, 17% less. #1117- The server reads and hashes a finished chunked commit upload, and lists a file's versions on a branch, without holding a request worker, so other requests keep being served meanwhile. #1163 #1165
Internal improvements
- Pushes allocate less when the server advances a branch, and the push gate's invalid-path error keeps the directory it refers to. #1117
- Test suite improvements. #1161 #1162 #1163 #1167
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.66.0 (ladybug)
ladybug-5.mp4
The video above was generated with Oxen.ai.
Ladybug: A small, round beetle with a glossy red shell dotted in black, a welcome visitor to any garden, where it feeds on aphids.
Breaking changes
oxen rmno longer deletes untracked files. It deletes only the files Oxen tracks, then the tracked directories that leaves empty, so a file under the directory that was never added, or one whose removal was already staged withoxen rm --staged, stays on disk.oxen rm -r .now deletes every tracked file, asgit rm -r .does, and removing a path whose removal is already staged now fails instead of succeeding. #1114oxen df --text2sqlis removed, since nothing translated its query and it printed every row.oxen df --sqlnow fails outside a repository instead of ignoring the query, and refuses--revision, which it used to ignore. #1158
New features
- A data frame that exists only in a workspace, such as a CSV uploaded there and not yet committed, can now be indexed, queried, and edited row by row before it is committed. #1121
- A workspace can copy a committed file to a new path without the client downloading and uploading it again, through
POST /api/repos/<namespace>/<repo>/workspaces/<id>/copy/<path>. This is available on self-hosted servers and not yet on Oxen.ai. #1121
Bug fixes
- A SQL query on a committed data frame that failed, from a malformed statement or a column the frame lacks, returned every row of the file with no error, so a filter was silently dropped. It now returns the query's error as a 400. A query on a file type DuckDB can't index, such as
.arrow, is refused with a 400 naming the extension rather than a 500. #1154 - Uploading a file to a workspace with the content it already has committed staged it as modified, and left any earlier staged edit or removal of it in place, so committing the workspace recorded a change nobody made. Such an upload is now a no-op that drops the stale edit, as
oxen addis, for multipart uploads, upload sessions, zip uploads, and URL imports alike. #1113 #1130 #1131 #1132 - A push no longer fails when a connection drops partway through uploading small files. The interrupted batch is retried instead. #1125
- A download refused for a missing or invalid API key now fails at once with an authentication error, rather than retrying for 55 seconds and then failing with an error that never mentioned the key. #1125
- A video with a track the MP4 reader doesn't recognize, such as a timecode track, now gets its duration, width, and height recorded, and a video whose movie header has a timescale of 0 no longer causes a panic. #1135
- A file committed with a modification time before 1970 no longer makes Oxen panic when it checks out a branch or checks the file for changes. #1121
- oxen-server validates the paths of the files a new repository is seeded with, and accepts only commit history entries in a pushed commit archive, refusing anything else with a 400. The
oxenCLI and theoxenaiPython package send nothing these refuse. #1157 #1160
Performance
- The S3 storage backend isn't supported in open source yet, so please hold off on using it for now. On S3, adding a file to a workspace no longer writes a copy of it to the data volume, and re-adding a file the store already has takes 0.35 s rather than 4.31 s for a 512 MiB file (92% less) and 0.16 s rather than 0.37 s for a 64 MiB file (57% less). #1128
- Re-uploading a directory of mostly unchanged files to a workspace no longer stores or inspects the unchanged ones again, on local storage and S3. #1113 #1130 #1131
Internal improvements
- Bounded the memory used to sniff a CSV's dialect and to read a stored CSV's schema. #1128
- Committed data frames, local and on S3, are now read through the same scan that staging uses. #1116 #1129 #1148 #1152
- Test suite and documentation improvements. #1127 #1133 #1147 #1149 #1150 #1151 #1155 #1156 #1159
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.65.2 (firefly)
firefly-1.mp4
The video above was generated with Oxen.ai.
Firefly: A soft-bodied beetle that glows on summer evenings, drifting over meadows in slow, blinking flashes of yellow-green light.
Security
- URL imports into a repository connect only to public addresses. The server checks every address a host name resolves to as it connects, on the first request and on each redirect, and refuses more reserved address ranges than before. This applies to both self-hosted and hosted servers. On a self-hosted server, URL imports connect directly and ignore proxy environment variables such as
HTTP_PROXYandHTTPS_PROXY. #1126
Internal improvements
- Test suite improvements: smaller test data and merged tests for a faster run, and stronger checks in the prune and remote tests. #1118 #1122
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.65.1 (garden snail)
garden-snail-2.mp4
The video above was generated with Oxen.ai.
Garden snail: A small land mollusk that carries its spiral shell on its back and glides along on a single muscular foot, leaving a silvery trail wherever it goes.
Bug fixes
- After a whole directory was moved in a workspace, later commits inside the moved directory could silently drop files committed there since the move. On Oxen.ai this happened after renaming a Workbench folder, and on self-hosted servers after moving a directory through the workspace API. Reads of repositories already affected are repaired, but files an earlier commit dropped have to be restored by hand. #1119
Internal improvements
- Test suite improvements. #1115
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.65.0 (leafcutter ant)
leafcutter-ant-2.mp4
The video above was generated with Oxen.ai.
Leafcutter ant: A tropical ant that cuts pieces of leaf and carries them home like green sails, where its colony grows the fungus garden it feeds on.
Breaking changes
oxen rmrefuses to delete work that exists nowhere else, asgit rmdoes: a file whose staged edit has not been committed, a file added under a directory given with-rsince the last commit, and an edited file whose committed content is missing locally. Pass the new-f(force=Trueon Python'sRepo.rm) to remove them anyway.-falso overrides the existing refusal of a file with unsaved edits. Scripts that relied onoxen rmdeleting such files need-f. #1105oxen rm --stagedrefuses when the staged content matches neither the file on disk nor the last commit, since that content has no other copy. #1105oxen rm --stagedwith a glob whose every match already has its removal staged fails with an error pointing atoxen restore --staged, rather than exiting 0 having done nothing. #1101
New features
- Workspaces move and remove whole directories in one request. A move takes every file under the directory along with its subfolders and data frame edits, and either all of it moves or none of it does. Removing a directory also drops files staged only in the workspace under it, so committing no longer re-creates the deleted folder. #1094
Bug fixes
- In a workspace, moving or renaming a file or data frame whose removal was staged brought the deleted content back at the new path. It now returns a 409. #1094
- Renaming a data frame in a workspace onto a path where the workspace had staged another file replaced that file, losing its rows and edits without an error. Moving anything to a path beneath a file staged a directory over that file. Both now return a 409. #1094
- Renaming a data frame that had not been opened in the workspace failed. #1094
- Deleting every row of a
.jsondata frame in a workspace and committing left a file with no columns that could not take rows again. That commit is now refused, as it already was for.jsonl. #1109 - Audio added to a workspace, through
oxen workspace add, the web UI, or the API, was committed without its duration, channel count, and sample rate, whichoxen addrecords. Both routes now record the same metadata. #1100 oxen mergeandoxen pullrun from a subdirectory of a repository refused with "your local changes to the following files would be overwritten" for files that already matched the merge. #1104- After
oxen addstaged the removal of a deleted directory,oxen statuskept listing files that had been staged under it as new files. #1097
Performance
- Adding files to a workspace stores the uploaded copy directly instead of writing each file twice: adding 100 small files went from 865 ms to 771 ms (11% faster), and adding one 128 MiB file from 146 ms to 104 ms (29% faster). #1096
- The server runs the repository work of directory zip downloads, merges, and imports off its request worker threads, so a slow one no longer holds up other requests on the same worker. #1092 #1098 #1107
Security
- The
oxenCLI, the Python package, andoxen-serverdistrust the compromised eMudhra intermediate CAs, and the server's Docker image requires the Debianca-certificatesupdate that distrusts them. #1110
Internal improvements
- Rust 1.99.1, DuckDB 1.10506.1, and
tempfilein place ofasync-tempfile. #1099 #1109 #1095 - File types and metadata are read from a file's bytes through one function that opens each file once, with every file's metadata and hash unchanged. #1103 #1106
- Test suite, CI, and documentation improvements. #1087 #1091 #1093 #1102 #1108 #1111
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.64.0 (water flea)
water-flea-1.mp4
The video above was generated with Oxen.ai.
Water flea: A tiny see-through crustacean that rows through ponds in little hops with its branched antennae, its heart beating visibly inside its shell.
Breaking changes
- A file's or directory's commit history now reports
has_morein place oftotal_entriesandtotal_pages, and refuses a page size of 0. Olderoxenaipackages can't read a path's history from this server, so please upgrade the Python package along with it. In Python,RemoteRepo.log()exposeshas_more, withpaginationset toNonefor a path's history. This applies to self-hosted and hosted servers. #1007 - Self-hosted only: a server no longer deletes the
$SYNC_DIR/.oxendirectory that releases before 0.59.0 used for access keys, and lists one that's still there as a namespace called.oxen. If yours is still there, delete it as Stop starting the server with-adescribes. #1067 - Self-hosted only: oxen-server's OpenTelemetry log and span fields now follow the semantic conventions, with Oxen-specific fields under
oxen.(oxen.repository_path,oxen.commit_id,exception.message, and so on). Update any saved queries or dashboards that use the old field names. #1055
New features
- Pushing a large file, or adding one to a workspace, now sends it in parts the server stores as they arrive, so the upload no longer ends with the server reassembling the whole file, and a dropped connection costs one part rather than the whole file. Adding a file the server already has sends nothing. A single file can be at most 1 TiB, a provisional limit. #1073 #1078 #1081 #1085
Deprecations
- The chunk upload endpoints (
POST /versions/{hash}/create,PUT /versions/{hash}/chunks,POST /versions/{hash}/complete) are deprecated in favor of upload sessions (POST /versions/uploadsandPUT /versions/uploads/{upload_id}/parts/{part_number}), and will be removed in 0.69.0. Clients from this release on use upload sessions. #1085 #1089
Bug fixes
oxen rm --staged <path>on a committed path did nothing, so neither the CLI norRepo.rm(staged=True)could stop tracking a file while keeping it on disk. It now stages the removal and keeps the file, asgit rm --cacheddoes, andoxen statuslists the kept file as untracked. #1063 #1075- Putting a file back to match the last commit and running
oxen addleft its staged removal or edit in place, so the next commit removed a file that was still on disk, or recorded content the file no longer had. #1068 - On macOS, an LMDB transaction could fail with
Invalid argument (os error 22)when two LMDB environments shared a semaphore and one of them closed. The test suite hit it as failed pushes, and the CLI and Python package on macOS most likely could too. #1071 - Two edits arriving close together on the same workspace data frame could open a second copy of its database, which can corrupt the data frame or lose an edit. #1082
- A migration, prune, or workspace clear could start beside a write whose client had reset the connection partway through. #1017
Performance
- Opening a file's or directory's history reads only the page requested. On a history of 3,200 commits that each changed the file, a page of 15 went from 1.8 s to 9 ms. #1007
- oxen-server keeps serving other requests on the same worker while it creates a repository or handles workspace data frame column, embedding, and schema requests and Merkle tree requests. This applies to self-hosted and hosted servers. #1066 #1084 #1086 #1088 #1090
oxen statuslooks up each path's staged entry once, andoxen addcleans up after unstaged files once per command rather than once per file. #1063 #1068
Internal improvements
- Test suite, CI, and documentation improvements. #1064 #1065 #1069 #1070 #1072 #1074 #1076 #1077 #1079 #1083
- Updated actix-web to 4.17.0 and uuid to 1.27.0. #1073 #1088
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.63.0 (springtail)
springtail-1.mp4
The video above was generated with Oxen.ai.
Springtail: A tiny six-legged creature of moss and leaf litter that keeps a spring-loaded tail folded under its body and flicks it to leap out of harm's way.
Breaking changes
- An
oxenclient older than 0.54.0 can no longer push, since the server no longer answers the request those clients send on every push to mark commits as synced. Upgrade the client to push to a 0.63.0 server, self-hosted or on Oxen.ai. #1062
Bug fixes
oxenai'screate_repo(name, host=..., files=[...])created the repository on hub.oxen.ai whatever host it was given, so a caller pointed at a self-hosted server got a 404 on its next call, and with hub.oxen.ai credentials a repository it never meant to create there. #1061- A data frame operation could lose its database connection when the server closed idle connections while it was still running. #1018
- Reading the size of a repository whose recorded size was written by a release before 0.58.0 logged an error. #1058
Performance
- The S3 backend isn't supported in open source yet, so please hold off on using it for now. On it, a version file larger than 10 MiB is now read as several ranged requests in parallel rather than one stream, for file views, downloads, and server work that needs the file on disk. #1060
- Opening a data frame no longer holds up the server's other data frame operations while it opens. #1018
Internal improvements
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.62.0 (mote sprite)
mote-sprite-1.mp4
The video above was generated with Oxen.ai.
Mote sprite: A tiny winged sprite no bigger than a speck of dust, glowing softly as it drifts through shafts of sunlight.
Breaking changes
- Oxen no longer opens a repository whose Merkle nodes are still on the filesystem backend, and the
merkle_nodes_to_lmdbmigration that moved them to LMDB is gone. Run that migration with Oxen 0.61.1 before upgrading, as described in Move a repository's Merkle nodes to LMDB. A self-hosted server answers requests for such a repository with a 400. Repositories hosted on Oxen.ai are already on LMDB. #1035
New features
- The S3 backend isn't supported in open source yet, so please hold off on using it for now. With that in mind, a server can now move a repository's version files between local storage and S3 with
PUT /api/repos/{namespace}/{repo_name}/storage, and pushes keep working while the files copy. A second move of the same repository while one is running is refused with a 409. #1049 #1053
Bug fixes
- A workspace commit no longer overwrites a file the branch added or changed after the workspace was created, brings back a file the branch removed, or drops files the branch added under a directory the workspace removes. Such a commit now gets a 409 conflict. #1040
- Two workspace commits to the same branch at the same moment no longer leave one of them on no branch while both report success. #1037
- Two overlapping commits of the same workspace no longer fail with a "workspace is behind" conflict when nothing conflicts, and a commit of a workspace deleted while it waited gets a 404. #1036
- A commit of a file staged without the directories above it, as a batch upload can stage it, no longer empties the branch. #1039
- Two commits with the same parents, message, and author made in the same second no longer share one tree. The second is refused with a 429 and
Retry-After: 1, and a retry lands. #1041
Performance
- A
HEADrequest for a file no longer reads the file. For a 50 MB file on local storage it went from 52 ms to under 1 ms, and from 19 to about 2,100 requests per second on one connection. #1054 - The S3 backend isn't supported in open source yet, so please hold off on using it for now. On it, each request that reads a version file is about 10 ms faster, for example a text file view from 74 ms to 61 ms (18% faster), and an S3 call that stops answering now times out instead of holding its request open. #1052
- A slow workspace commit no longer stalls other requests handled by the same server worker. #1011
- A burst of workspace commits to one repository now recalculates the repository's size once at a time rather than once per commit. #1038
Dependency updates
oxenainow requires polars below 2.0, since the bindings have not been tested against polars 2. #1051- aws-sdk-s3 1.152.0. #1052
Internal improvements
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64
🚀 Release 0.61.1 (diatom)
diatom-v2-1.mp4
The video above was generated with Oxen.ai.
Diatom: A single-celled alga that lives inside a glass shell it builds from silica, gliding through ponds, streams, and oceans in countless intricate shapes.
Breaking changes
oxen init,oxen clone, andoxen create-remoteno longer take--merkle-backend. Every new repository is created on LMDB, a backend an older client still sends in a create request is ignored, and repository responses no longer includemerkle_node_backend. #1034
Hardening
- The server answers a request path with a
.., absolute, or drive component with a 400, so every request resolves inside its repository. #1042 - File uploads, zip archives, URL imports, and chunked uploads that name a
.oxenpath, in any letter case or by its Windows stream and short-name spellings, are refused. A zip upload checks every entry before extracting any of them. #1043 - A
from_directorydata frame request whoseoutput_pathis missing or leaves the workspace is refused with a 400. #1044 - Clone, pull, checkout, merge, restore, and
oxen downloadrefuse to write a path from a commit's tree that would land outside the working tree or inside a.oxendirectory, with a hint to ask the repository's owner to rename or remove it. A merge checks all of its incoming paths before writing any of them. #1045 - The server refuses a push whose commit adds an entry name that is not a single plain path component or that names a
.oxendirectory. A repository that already holds such a name still accepts pushes elsewhere in its tree. #1046
Performance
- Reading from an LMDB store through a new handle no longer waits out a write in progress, which took a read behind a busy writer from about 2 ms to about 4 microseconds. This covers every LMDB store, the per-repository Merkle node store included. #1003
Internal improvements
- Opening different LMDB environments no longer waits on one process-wide lock. #1026
- Documentation updates. #1034
Binaries are available for the following platforms:
- Docker arm64
- Docker x86_64
- Linux arm64
- Linux x86_64
- MacOS arm64 (Apple Silicon)
- MacOS x86_64 (Intel)
- Windows x86_64
🐧 Linux Binaries
The Linux binaries require a minimum glibc version of 2.34.
These are the minimum versions of common distributions with glibc 2.34 or later.
| Distribution | First version with glibc 2.34+ |
|---|---|
| Amazon Linux | 2023 |
| Arch | 2021 |
| CentOS | Stream 9 |
| Debian | 12 |
| Fedora | 35 |
| RHEL | 9.0 |
| Ubuntu | 22.04 |
The -rhel8 tarballs and wheels are for RHEL 8 and its rebuilds, which have glibc
2.28. No distribution in the table above needs them.
🖥️ Windows Binaries
The Windows binaries require a minimum version of Visual C++ 2022.
You may need to install the latest Microsoft Visual C++ Redistributable.
🍏 MacOS Binaries
The MacOS arm64 (Apple Silicon) binaries require a minimum version of MacOS 11 Big Sur.
The MacOS x86_64 (Intel) binaries require a minimum version of MacOS 10.13 High Sierra.
🐍 Python Wheels
The Python wheels are abi3 wheels built against Python 3.11 and compatible with
Python 3.11+. They are available for the following platforms:
- Linux arm64
- Linux x86_64
- MacOS arm64 [Apple Silicon]
- MacOS x86_64 [Intel]
- Windows x86_64