Pijul - Latest posts https://discourse.pijul.org Latest posts Made a GUI for pijul in F#, but need help using nest.pijul.com There are a bunch of GUI elements that don’t do anything. Specifically the image, and the edit and delete buttons. These all come with the template from Avalonia.FuncUI that I used. The edit and delete buttons might be implementable later? The image contained some async code that I left in for perhaps later reference.

The search bar can currently only search hashes. This is because the only way afaik to get information from pijul changes is using the pijul CLI program. Which is very slow. So no data other than the hashes is currently loaded. For a selected change more information is loaded upon selection.

]]>
https://discourse.pijul.org/t/made-a-gui-for-pijul-in-f-but-need-help-using-nest-pijul-com/1339#post_2 Sun, 26 Apr 2026 14:56:48 +0000 discourse.pijul.org-post-4134
Made a GUI for pijul in F#, but need help using nest.pijul.com Hello,

I made a GUI for pijul using Avalonia.FuncUI for F# (.NET). The syntax for F# is also based on ML, so it shouldn’t be all that different from OCaml that pijul is written in I assume?

I am using pijul version pijul 1.0.0-beta.11, built from source on Windows. With some own modifications to get it compile, as I explained in another topic (it seems unmaintained?).

I tried to fix the compilation errors in the pijul-gui project that is still on nest dot pijul dot com (to avoid 2 link limit). I assume that is a re-upload of this project that seems to have been removed by the original developers? But struggled to configure a remote and pushing using pijul. I somehow got it uploaded once (see pijul-gui-fork), but a lot of changes I wrote were not actually recorded and ended up being reverted.

So I could use some help on how to use pijul. I read all the documentation, but still can’t figure some things out.

The title of the GUI app is tijul, based on what I read on the Spanish (es) Wikipedia page Crotophaga sulcirostris.

Here is a screenshot:

]]>
https://discourse.pijul.org/t/made-a-gui-for-pijul-in-f-but-need-help-using-nest-pijul-com/1339#post_1 Sun, 26 Apr 2026 14:52:46 +0000 discourse.pijul.org-post-4133
Is recording extra dependencies still possible with 1.0.0-beta.1? There’s a fix at pijul/pijul - Discussion #892 - Recording extra dependencies . It would be lovely if this could be pulled in.

]]>
https://discourse.pijul.org/t/is-recording-extra-dependencies-still-possible-with-1-0-0-beta-1/883#post_3 Sun, 29 Mar 2026 22:31:36 +0000 discourse.pijul.org-post-4131
Is this project still active? Yes it is I hope we can get an update on the health and future of this project. I’ve been following it since its inception, and I would love to use it in more serious projects. There has been a lot of resurgence in VCS lately, especially with Jujutsu that is gaining a lot of popularity.

Unfortunately pijul is still relatively unknown in comparison. And we know that the popularity/ubiquity/familiarity of a VCS tool is quite important.

]]>
https://discourse.pijul.org/t/is-this-project-still-active-yes-it-is/451?page=4#post_74 Wed, 25 Mar 2026 18:26:46 +0000 discourse.pijul.org-post-4130
Manyana - Same/Same/Different? Yes, aplogies, i didnt mean to minimise over a decade of work. I guess i meant ‘rediscovery’ in the sense that the author clearly was searching for a tool like Pijul because of similar motivating frustrations and obviously didn’t search hard eniugh to find it so assumed it didn’t exist.

Thank you for your long response, it largely echoes what i figured when i wrote the question. But obviously as a new incomer, i was curious what more experienced people in the area of research thought.

I have since spent more time reading the theory of Pijul and watching talks and I’m quite excited to dive in!

]]>
https://discourse.pijul.org/t/manyana-same-same-different/1335#post_3 Mon, 23 Mar 2026 09:32:46 +0000 discourse.pijul.org-post-4128
Manyana - Same/Same/Different? The difficulty of writing a version control system is in no way even remotely related to what the blog post describes. In particular, if you want to handle conflicts, resolutions must be part of the basic operations of the datastructure, or else you won’t be able to rebase them. In that blog post, there is one set of operations (add/delete), and a mere possibility of adding a separate set for handling conflicts, which the author admits doesn’t exist yet.

Properly handling conflicts using a single set of operations (for both “usual” ones and conflict-related ops), is several orders of magnitude harder than what the author describes. Part of the theoretical foundations of Pijul rely on a mathematical proof that the structure we use is the simplest possible that handles conflicts well, and that rather abstract structure required a huge effort in low-level system programming. The ability to do both isn’t common. Concretely, Pijul is based on maths (categories, graphs, complexity), yet required its own key-value store (the Sanakirja project) in order to implement branches. That key-value store also ended up being the fastest known on-disk key-value store (Pijul - Rethinking Sanakirja).

The main contribution of that blog post seems to be related to showing conflicts to the user in a nicer way than Git, which is certainly an important feature. However, the main problem with Git has nothing to do with that: the main problem with Git is that rebasing and merging are heuristics based on content similarity, with no model of conflict resolution.

I don’t think rediscovering Pijul accidentally is even possible. I know how incredibly hard it is to get these things right. The fact that no bibliography at all is mentioned in the blog post isn’t a very good sign of seriousness: indeed, a basic rule of research is that you can’t go very far without understanding what others have worked on. In particular, there have been multiple attempts at doing “CRDTs for version control” (I forget the names right now, but also I’m not writing a blog post), Mercurial is innovating way faster than Git, Pijul has been around for 10 years…

]]>
https://discourse.pijul.org/t/manyana-same-same-different/1335#post_2 Mon, 23 Mar 2026 09:13:28 +0000 discourse.pijul.org-post-4127
Manyana - Same/Same/Different? Today I was introduced to CRDT based version control through a post to Manyana: A Coherent Vision For The Future Of Version Control | Lobsters about a “new” version control tool “Manyana”:

From the comments of this I found Pijul. I find this approach to version control very interesting but as an obvious newcomer, I am not well versed in the intricacies. I was hoping for some input from people who already knew about this and were involved, is this an ‘accidental’ copy of Pijul? Are there ideas here that are different?

Obviously it is much less mature, it is barely a python script currently. But I guess I just wanted more experienced input!

]]>
https://discourse.pijul.org/t/manyana-same-same-different/1335#post_1 Sun, 22 Mar 2026 19:55:06 +0000 discourse.pijul.org-post-4125
Trying to register for nest.pijul, email could not be sent It seems like the same issue as: Unable to sign up to the Pijul Nest

And the issue is not the mail alias, it is probably the mail server, because I also tried it with a proton mail.

]]>
https://discourse.pijul.org/t/trying-to-register-for-nest-pijul-email-could-not-be-sent/1332#post_2 Sun, 15 Mar 2026 09:54:59 +0000 discourse.pijul.org-post-4119
Trying to register for nest.pijul, email could not be sent I would like to try out pijul and migrate my setup repo from git to it.

Since I want to save it somewhere remote, I tried to make an account here: https://nest.pijul.com

But I used an E-Mail alias from addy.io, something like: [email protected]

And got this error:

The email could not be sent. Please check the address, and try again later.

The mail is valid (used it to make this forum account), aliases are probably disabled for spamming reasons, is it somehow possible to allow mine? or what should I do?

]]>
https://discourse.pijul.org/t/trying-to-register-for-nest-pijul-email-could-not-be-sent/1332#post_1 Sun, 15 Mar 2026 09:20:36 +0000 discourse.pijul.org-post-4118
Outdated documentation and unmaintained Windows build? To get pijul to compile on Windows at all I had to change in pijul/src/commands/mod.rs:

#[cfg(not(unix))]
- fn pager(_repo_config_pager: Option<&pijul_config::Choice>) -> bool {
+ fn pager(_config: &pijul_config::Config) -> bool {

And I used a portable openssl build from Download Free OpenSSL Windows Installers & ZIP Files , and ran (in powershell)$env:OPENSSL_DIR="PathToUnzippedOpenssl"before running cargo build.

Now compilation worked.

I could go through the pijul identity new prompt to generate a key, something that is not documented in Uploading public keys - The Pijul manual .

But then pijul identity prove [email protected]caused an exception:

thread 'main' (38592) panicked at <RustupPath>rustup\.cargo\registry\src\index.crates.io-1949cf8c6b5b557f\clap_builder-4.5.53\src\builder\debug_asserts.rs:732:9:
Argument 'no_keyring' is positional and it must take a value but action is SetTrue
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

So I still can not push anything to nest dot pijul dot com it seems?

]]>
https://discourse.pijul.org/t/outdated-documentation-and-unmaintained-windows-build/1331#post_1 Wed, 18 Feb 2026 13:18:28 +0000 discourse.pijul.org-post-4117
How to create an identity non-interactively? (1.0.0-beta.11) Thank you for this project! I’m using Pijul version 1.0.0-beta.11. I’d like to create an identity non-interactively. Here’s what I’m trying:[1]

pijul identity new --no-link --no-prompt --display-name 'Test User' --email '[email protected]'

Unfortunately, this gives me the following error:

Error: Cannot get path of un-named identity

I searched for this error message, and I found pijul/pijul - Discussion #953 - Regression: pijul identity new --no-prompt never works, which has a couple of patches that were merged recently. Would it be possible to get a new beta release that includes those patches? Or, alternatively, is there another way that I can create an identity non-interactively, that works on beta.11?


  1. Based on pijul/pijul - Discussion #936 - [ID] do not stuck in pijul if without identities ↩︎

]]>
https://discourse.pijul.org/t/how-to-create-an-identity-non-interactively-1-0-0-beta-11/1330#post_1 Fri, 13 Feb 2026 01:40:01 +0000 discourse.pijul.org-post-4116
Pijul reset to undelete file/directory I occasionally search for a solution and run across my own question here… I don’t think a solution exists yet because pijul’s cli parser seems to check that the passed argument is an existing file which shortcuts the command from being processed.

In other words, if I accidentally delete a file I just re-copy the file from the upstream source.

]]>
https://discourse.pijul.org/t/pijul-reset-to-undelete-file-directory/1225#post_4 Mon, 26 Jan 2026 15:20:45 +0000 discourse.pijul.org-post-4115
Community introductions Thanks for the reply, I appreciate it. Good luck with those bugs if you end up trying to fix them!

]]>
https://discourse.pijul.org/t/community-introductions/381?page=3#post_42 Thu, 15 Jan 2026 15:42:39 +0000 discourse.pijul.org-post-4109
Community introductions Hi! Welcome here! I’ve been really slow on this project lately because of other professional commitments, but I’m getting back to it now. Feel free to ask for help. The foundational crates of Pijul (libpijul, sanakirja) are probably not the easiest bits of Rust code to contribute to, because the type system of Rust doesn’t match 100% what we want to do in Sanakirja, and because of a lot of performance considerations: actually, making Pijul efficient wasn’t easy at all.

]]>
https://discourse.pijul.org/t/community-introductions/381?page=3#post_41 Thu, 15 Jan 2026 08:38:44 +0000 discourse.pijul.org-post-4108
Community introductions Welcome here! The theory behind Pijul has branched from the purely categorical concepts a long time ago. That particular paper provides a really nice insight of a datastructure that is “enough” to handle all conflicts between insertions, but doesn’t really handle deletions, for example, and all the conflicts that arise from them.

The main way to contribute is by testing I think, and seeing what you like and don’t like. There are a few remaining known bugs, but they’re so niche that unfortunately I might be the only one that can fix them.

The open source version of the Nest, which I’d like to turn into the actual nest, needs a lot of love (pmeunier/nest). It’s written in a mixture of Svelte and Rust.

]]>
https://discourse.pijul.org/t/community-introductions/381?page=2#post_40 Thu, 15 Jan 2026 08:33:56 +0000 discourse.pijul.org-post-4107
Community introductions Hi, my name is Coy.

My background is in Computer Science and Math. I found out about Pijul through a friend, and got interested because I enjoy category theory. I am reading through the paper that inspired Pijul, but I have heard that it has undergone significant changes since then.

I admit, I am a bit confused how I would get started with contributing. Looking for any resources that explain the current state of Pijul and some of the theory behind it now.

Best,
Coy

]]>
https://discourse.pijul.org/t/community-introductions/381?page=2#post_39 Thu, 15 Jan 2026 06:39:47 +0000 discourse.pijul.org-post-4106
Is this project still active? Yes it is Thank you for developing Pijul and for your efforts to make it robust! I would love to hear your experience once you use it on your larger project. Meanwhile, I hope to use it in more of my personal projects and gather an experience myself.

]]>
https://discourse.pijul.org/t/is-this-project-still-active-yes-it-is/451?page=4#post_72 Fri, 02 Jan 2026 11:19:10 +0000 discourse.pijul.org-post-4101
Is this project still active? Yes it is I have good news about this, I’ll start to use Pijul more, and with others, and on a larger project (my own company) soon. I still noticed a few minor quirks in the tests which still need some fixing, but hopefully this will give me more opportunities to experience the pain points (many are “only” communication, i.e. people assuming wrong things because they are poorly explained).

]]>
https://discourse.pijul.org/t/is-this-project-still-active-yes-it-is/451?page=4#post_71 Fri, 02 Jan 2026 10:41:59 +0000 discourse.pijul.org-post-4100
Is this project still active? Yes it is I signed up just to upvote and support this effort.

The Git experience in version control feels like the C++ experience in programming languages—gotten so messy with all the various options and features that it is a pain to learn and debug.

The Pijul experience in version control feels like the Go experience in programming languages… a breath of fresh air… and a bliss of using an elegant and user-friendly piece of software/solution that just works rather than being a Frankenstein monster that you need to constantly fight in a 100 different ways.

I feel Pijul deserves the chance to prove itself in a real-world production environment so that the world can really take notice of what it is capable of. This would let the world see what Pijul can do for projects. It could be the boost that can bring Pijul to mainstream.

I understand that there maybe high costs to changing a core part of existing tech stack for most large teams but it feels like the world is missing out a lot. I feel holding on to legacy like its the ultimate truth, neglecting its pitfalls… would make the world miss out on the joy of programming and the effectiveness of being efficient. A good version control system should stay out of the way of the programmer, so that the the programmer can focus on what they are here to do… programming. I feel that the world should try out emerging technology like Pijul so that there can be a transition from high-friction legacy software to productivity enabling software that stays out of the way of the user.

I am just a beginner, would love to know what you all think.

]]>
https://discourse.pijul.org/t/is-this-project-still-active-yes-it-is/451?page=4#post_70 Fri, 02 Jan 2026 10:25:31 +0000 discourse.pijul.org-post-4099
.pijul takes 6.5 gigabytes / how is it possible? My repository is private.

]]>
https://discourse.pijul.org/t/pijul-takes-6-5-gigabytes-how-is-it-possible/1322#post_7 Sun, 23 Nov 2025 15:26:45 +0000 discourse.pijul.org-post-4098
.pijul takes 6.5 gigabytes / how is it possible? is your repo public?

]]>
https://discourse.pijul.org/t/pijul-takes-6-5-gigabytes-how-is-it-possible/1322#post_6 Sun, 23 Nov 2025 15:22:14 +0000 discourse.pijul.org-post-4097
.pijul takes 6.5 gigabytes / how is it possible? I just realized it shows 3.7 GB, but macOS displays 6.5 GB.
That’s strange.

]]>
https://discourse.pijul.org/t/pijul-takes-6-5-gigabytes-how-is-it-possible/1322#post_5 Sun, 23 Nov 2025 15:17:35 +0000 discourse.pijul.org-post-4096
.pijul takes 6.5 gigabytes / how is it possible? For some reason, the image gets discarded, so here is the output of the first command:

3.7G	.pijul/pristine
1.9M	.pijul/changes
  0B	.pijul/identities
3.7G	.pijul
]]>
https://discourse.pijul.org/t/pijul-takes-6-5-gigabytes-how-is-it-possible/1322#post_4 Sun, 23 Nov 2025 15:08:19 +0000 discourse.pijul.org-post-4094
.pijul takes 6.5 gigabytes / how is it possible? Not a problem!

  du -h -d 1 .pijul

  pijul debug > /dev/null # printed ()
]]>
https://discourse.pijul.org/t/pijul-takes-6-5-gigabytes-how-is-it-possible/1322#post_3 Sun, 23 Nov 2025 15:06:59 +0000 discourse.pijul.org-post-4093
.pijul takes 6.5 gigabytes / how is it possible? This sounds a bit much indeed. Pijul stores two things;

  • The compressed patches containing the actual contents of changes to your files. If you’ve made large changes to binary files, this could get big, especially if files are hard to compress.
  • A datastructure which I’ve been meaning to store compressed for a long time now, but never managed to find the time. I’m still hopeful that I’ll be able to finish these things in 2025.

I’d be interested to see which of these is heavier, would you mind running something like du -h -d 1 .pijul ?

Also, pijul debug > /dev/null checks for corruption, which is unlikely by now, but may bloat your .pjiul

]]>
https://discourse.pijul.org/t/pijul-takes-6-5-gigabytes-how-is-it-possible/1322#post_2 Sun, 23 Nov 2025 14:45:16 +0000 discourse.pijul.org-post-4092
.pijul takes 6.5 gigabytes / how is it possible? Hi. I decided to check how much memory .pijul directory takes up and was a little surprised.
I admit that I might have accidentally recorded a large file, but the largest directory in my project is build/, which is 310 megabytes and I am sure I did not record it because the .ignore file includes it. Other files are less than 100-400 kilobytes.
The repository contains 427 changes.

Is it my fault or Pijul’s fault?
What could I have done that made repository size so large?
Are there ways to check what record contains a large file?

]]>
https://discourse.pijul.org/t/pijul-takes-6-5-gigabytes-how-is-it-possible/1322#post_1 Sun, 23 Nov 2025 13:56:35 +0000 discourse.pijul.org-post-4091
Is this project still active? Yes it is Hi,

Looks like things have been quiet for a while. Any chance that I can get an update on the project? Sorry if there actually has been other activity around the site, I’m new to using Discourse. I noticed that there is also a Zulip and a Reddit, but I am most familiar with Discord. Any chance that one exists?

]]>
https://discourse.pijul.org/t/is-this-project-still-active-yes-it-is/451?page=4#post_69 Thu, 20 Nov 2025 23:31:32 +0000 discourse.pijul.org-post-4088
Community introductions Hi,

I’m Seraiah. I have a math and cs background and am familiar with a number of different languages. I just read the rust book recently and figured I aught to try a project. At the same time I’d like to learn to use pijul and maybe contribute at some point.

]]>
https://discourse.pijul.org/t/community-introductions/381?page=2#post_38 Thu, 20 Nov 2025 23:13:28 +0000 discourse.pijul.org-post-4087
Nest is not accesible Hay! It is back! Nest is working!

]]>
https://discourse.pijul.org/t/nest-is-not-accesible/1319#post_2 Thu, 16 Oct 2025 20:35:29 +0000 discourse.pijul.org-post-4085
Nest is not accesible Hi, it looks like nest is not accessible over https or with pijul app itself

]]>
https://discourse.pijul.org/t/nest-is-not-accesible/1319#post_1 Sun, 12 Oct 2025 19:09:27 +0000 discourse.pijul.org-post-4084
How to correctly edit hunks when recording? Giving the following when recording:

1. Replacement in ".ignore":4 4.32 "UTF-8"
B:BD 3.5 -> 2.0:2/2
  up 3.5, new 1:20, down
- l
+ dddaaaaaaaa
+ tttttl

I can delete any of the added lines without changing the metadata of the hunk, and it does exactly what I want: it only records the remaining ones, which to me works better than having a staging area. However, when I deleted the deleted line, the change was recorded anyway, as if I hadn’t touched the hunk at all.

I guess I need to change the metadata somehow to be able to exclude deletions, or any complex changed, from being recorder. Is this syntax explained somewhere?

]]>
https://discourse.pijul.org/t/how-to-correctly-edit-hunks-when-recording/1318#post_1 Thu, 18 Sep 2025 19:15:01 +0000 discourse.pijul.org-post-4083
Cannot push to Nest (August 2025) hi, there was a breaking change in thrussh dependency that needed to be updated in pijul. It was fixed by pijul/pijul - Discussion #963 - Thrussh should be updated to fix push command for nest

]]>
https://discourse.pijul.org/t/cannot-push-to-nest-august-2025/1315#post_2 Mon, 25 Aug 2025 08:18:24 +0000 discourse.pijul.org-post-4079
Cannot push to Nest (August 2025) hello, i am trying to push to nest, but i have had no luck. i’m getting a Warning: Unable to automatically authenticate with server. Please make sure your SSH keys have been uploaded to the Nest. error. i don’t know what i should be doing. i’m using the origin origin = “nest.pijul.com” and origin = “ssh.pijul.com”and attempting to connect to both nest.pijul.com and ssh.pijul.com i don’t know what i’m doing wrong. i have indeed added the public key under SSH keys in my profile.

is there something going on with the Nest ?

any help is greatly appreciated !

]]>
https://discourse.pijul.org/t/cannot-push-to-nest-august-2025/1315#post_1 Fri, 22 Aug 2025 11:51:34 +0000 discourse.pijul.org-post-4077
Generalized birthday bound attack on version identifiers As I said, if you replace the version identifier by the addition of hashes-to-elliptic-curves, then your performance should improve dramatically over whatever exponentiation you’re doing now.

It’s just like the birthday paradox, where if you have 20 people in a room, then often 2 have the same birthday, but instead of a square root, the attacker benefits from the k-th root.

We stop the attack by working in some group that has a hard discrete log problem, like a secure elliptic curve. We’ve no secrets here so how we create the groups elements matters: If we create curve points using scalar multiplication, or create large finite field elements using exponentiations like your manual describes, then the attacker can run the attack in the scalar field or in the exponent. If otoh we hash-to-curve then nobody knows the scalars that relate those group elements, so the attacker must now work in the elliptic curve itself, but if they’d an algorith that worked here then they’d break the discrete log problem itself, so that’s impossible.

This is great for you because hash-to-curve is by far the fastest way to create a fresh elliptic curve point anyways. A “slow” hash-to-curve works by rejection sampling the x coordinate and solving the curve equation to see if some y coordinate exists. This succeeds half the time for fast curve, so already a couple hundred times faster than a scalar multiplicaiton, which itself should be 10 x faster than your exponentiation. RistrettoPoint::from_hash should be somewhat faster still.

Also an unrelated issue..

Your shallow clones might already be vulnerable to some unrelated subtracted patch attack on shallow clones. This fix would not change the status of this flavor of possible attack on shallow clones.

An accumulator would fix this possible attack, but they are extremely expensive. It’s likely cheaper to fix in other ways, like by having shallow clones do some validation that patches provided leave no “holes”, or going back to some signed check point of known good versions. Accumulators would provide no benefits except for shallow clones.

]]>
https://discourse.pijul.org/t/generalized-birthday-bound-attack-on-version-identifiers/1314#post_4 Wed, 20 Aug 2025 15:54:33 +0000 discourse.pijul.org-post-4076
Generalized birthday bound attack on version identifiers It’s collisions in the version identifier: An adversary could create multiple disjoint patch sets that yield the same version identifier.

The adversary creates k buckets B_i each containing thousands of unrelated patches. Their attack algorithm identifies several distinct mappings f_j such that f_j(i) lies in B_i, but all the f_j yield the same combined product, aka H(f_j(0)) * H(f_j(1)) * … * H(f_j(k)) is the same for each j. This means each pair of f_j defines a colliding patch set.

All the patches in B_i are good for i>0, but half the patches in B_0 are malicious, so many of these f_j use all good patches, while many of the f_j contain exactly one malicious patch.

They submit one honest patch set that gets merged, after which they convince others that the dishonest patch was merged, maybe using signatures or web posting of the version identifier.

If you use David Wagner’s original attack, then you need roughly k=128 buckets, aka 128 patches in both the good and bad patch sets.

There is a faster attack that needs only k=16 buckets, but comes with more constraints, which I’ve now forgotten.

Do other VCSs have similar problems?

Very unlikely. Afaik, only a patch based DVCS would employ some commutative algebraic version identifier, but others like darcs might never have thought of doing so.

]]>
https://discourse.pijul.org/t/generalized-birthday-bound-attack-on-version-identifiers/1314#post_3 Wed, 20 Aug 2025 15:33:58 +0000 discourse.pijul.org-post-4075
Generalized birthday bound attack on version identifiers Is the attack a spoof of a repo with malware? Or something else?
Do other VCSs have similar problems?

]]>
https://discourse.pijul.org/t/generalized-birthday-bound-attack-on-version-identifiers/1314#post_2 Wed, 20 Aug 2025 14:23:51 +0000 discourse.pijul.org-post-4074
Generalized birthday bound attack on version identifiers I pointed out the generalized birthday bound attack on version identifiers back in 2022. It seems the pijul manual says you compute version identifiers by doing exponentiations. I’ve no idea if this changed since my comment in 2022 but..

Actually exponentiations are vulnerable to generalized birthday bound attacks, since the adversary would know their own hashes, and the discrete log problem is easy in the exponent where your hashes occur. In concrete terms, an adversary would compute the hashes for many buchets of possible patches, then identify some version identifier product which they could obtain through many different selections of one patch from each bucket.

We discussed two defense mechanisms before:

  • Cryptographic accumulators remain extremely expensive, but would prove that a bare identifier consists of accumulated hashes, without any patches being subtracted.

  • Addition of hashes-to-elliptic-curves avoids generalized birthday bound attacks nicely, while being extremely cheap, far cheaper than exponentiations or scalar-point multiplication.

Addition of hashes-to-elliptic-curves is not an accumulator, but afaik you’ll only care when faced with shallow clones taken from adversarial repositories. Addition of hashes-to-elliptic-curves should siffice either (a) if shallow clones already involve some trust element anyways, or (b) if shallow clones make no sense anyways, or maybe (c) depending upon what patch state shallow clones do contain.

Anyways..

Assuming addition of hashes-to-elliptic-curves suffice, I’d expect RistrettoPoint::from_hash and RistrettoPoint: ops:Add in curve25519_dalek yield about the fastest implementation, since few elliptic curves have such a nice base field.

Also, there is no real change in how you hash patches per se, only in how you compute the version identifiers from the set of patches.

]]>
https://discourse.pijul.org/t/generalized-birthday-bound-attack-on-version-identifiers/1314#post_1 Wed, 20 Aug 2025 03:04:18 +0000 discourse.pijul.org-post-4073
Clarification from the docs There’s nothing new in what you are saying… of course the docs have a bias toward Pijul.
There is no guessing going on. It is two different ways to merge, and Git has a lot of options to merge in different ways.
At least the Git help tells you why you get what you get.

]]>
https://discourse.pijul.org/t/clarification-from-the-docs/1308#post_4 Tue, 08 Jul 2025 21:23:21 +0000 discourse.pijul.org-post-4066
Clarification from the docs The graph is from the pijul docs here:

I’m just wondering if there is a clear reason why pijul’s behavior (in the graphic) is deemed more correct. It appears to me you have to guess what operations occurred between two file versions, and this graphic shows two different guesses.

]]>
https://discourse.pijul.org/t/clarification-from-the-docs/1308#post_3 Tue, 08 Jul 2025 20:27:33 +0000 discourse.pijul.org-post-4065
Clarification from the docs You have a different “takeaway” than I do from that graphic. I tried this in Git, and when I got to the merge part, I looked at the help (since I didn’t know the command), and it says that it will play the commits from the parameter onto the current branch. So the result is dependent on the context of the branch. I got the same result as the graphic when I was on the Alice branch and merged the Bob branch (using no special options, but there are a lot of them to choose). I’m not sure if it would be the same if I was on the Bob branch and merged the Alice branch. That doesn’t sound arbitrary to me.

I don’t know that the Pijul choice is any more correct, but it is likely to also be sensitive to the order of the patches you have. Many times, I pull the pijul repo and it gives order conflicts on Cargo.lock (and that’s with me making no local changes).

Neither tool knows the editing details of the file, but they do store different information about the “commit” made. They apparently have different algorithms for merge.

]]>
https://discourse.pijul.org/t/clarification-from-the-docs/1308#post_2 Tue, 08 Jul 2025 20:00:57 +0000 discourse.pijul.org-post-4064
Clarification from the docs A question from the docs:

The “takeaway” in the above screenshot, is that Git merge arbitrarily places X. But, I also see Pijul’s merge as arbitrary. Am I missing something?

How does Pijul infer that lines A, B get prepended to the file. Technically it only sees the file A\nB\nG\nA\nB. It doesn’t know how that file was arrived at. It would need to know the operations performed on the file to know how to complete this unambiguously. For example, suppose that Alice does this sequence instead which produces the same state. From G\nA\nB: Shift A to the top of the file producing A\nG\nB, Inject B on line 2 producing A\nB\nG\nB, then insert an A between last two lines producing A\nB\nG\nA\nB. Is there a reason this sequence is not inferred? It’s just more edits?

]]>
https://discourse.pijul.org/t/clarification-from-the-docs/1308#post_1 Mon, 07 Jul 2025 23:01:31 +0000 discourse.pijul.org-post-4063
Pijul on macOS Fails with ssh/Nest – Seeking Nest Source Access and Contribution Opportunities Hi Rasmus and acvio,
Thank you for your replies. I’ll try the workaround for the nest integration issue you mentioned when I resume investigating Pijul, and I hope this gets fixed in the meantime. Please let me know if there’s progress on a fix.
Thanks,
Don

]]>
https://discourse.pijul.org/t/pijul-on-macos-fails-with-ssh-nest-seeking-nest-source-access-and-contribution-opportunities/1282#post_5 Mon, 21 Apr 2025 19:12:50 +0000 discourse.pijul.org-post-4041
Pijul on macOS Fails with ssh/Nest – Seeking Nest Source Access and Contribution Opportunities Oh I didn’t know, thanks

]]>
https://discourse.pijul.org/t/pijul-on-macos-fails-with-ssh-nest-seeking-nest-source-access-and-contribution-opportunities/1282#post_4 Mon, 21 Apr 2025 06:54:58 +0000 discourse.pijul.org-post-4040
Pijul on macOS Fails with ssh/Nest – Seeking Nest Source Access and Contribution Opportunities Hi, also hew here :3

Nest is open source now, but if I recall correctly there is a new version of Nest in development. The repo of the current open source Nest says contributions are accepted, though

]]>
https://discourse.pijul.org/t/pijul-on-macos-fails-with-ssh-nest-seeking-nest-source-access-and-contribution-opportunities/1282#post_3 Sun, 20 Apr 2025 11:02:28 +0000 discourse.pijul.org-post-4038
Pijul on macOS Fails with ssh/Nest – Seeking Nest Source Access and Contribution Opportunities Have you tried the fix mentioned here?

If that fixed it, the issue would likely be a version mismatch between nest and the versioned release of pijul, in my admittedly limited understanding of the problem; nest’s source code is not public (see pijul/pijul - Discussion #963 - Thrussh should be updated to fix push command for nest)

As for contributing, being new (this is my first interaction with people using pijul in fact, hi!), I can’t comment on how to contribute, I feel like the manual book wants to make me believe that the repo’s discussion section is the place for this to happen, but far as I can tell while it does get some talks going, it seems incredibly stale in the case of pijul/pijul itself, the above issue is merely a version bump, has been known since February, and still hasn’t been merged

]]>
https://discourse.pijul.org/t/pijul-on-macos-fails-with-ssh-nest-seeking-nest-source-access-and-contribution-opportunities/1282#post_2 Sat, 19 Apr 2025 15:19:23 +0000 discourse.pijul.org-post-4037
Community introductions Hello!

I recently discovered Pijul and found the mathematical theory very appealing. I’m using it for my current projects now and I’m curious to see how I’ll experience using it in the long term, compared to Git. I’m particularly interested in learning about the workflows or methodologies that people apply in Pijul, and generally principles to apply to get the most out of it.

Until now I’ve been doing version control with GUI tools, and while I’m getting along fine with Pijul’s CLI, I’m going to try creating a graphical Pijul client, to be based on the libcosmic GUI toolkit. I’m not sure if I’ll ever finish it, but it should be a good project for me to learn both how well Pijul works for the development of a large project, and simultaneously learn about the internals of it.

]]>
https://discourse.pijul.org/t/community-introductions/381?page=2#post_37 Fri, 18 Apr 2025 09:24:58 +0000 discourse.pijul.org-post-4028
A very rough draft of a plain HTML pijul repo viewer Hi, wanted to give an update about this, even though it’s not about pijul.

I ended up continuing this project with darcs, since darcs already has the ability to clone a repo from a static directory, and the aforementioned darcs show contents command has been useful when generating the site. I’d love to make this project also work with pijul, but given that I haven’t written a single line of rust before, I’m not sure if I’ll be able to implement those features myself.

The project site (showing its own code) is here if you’d like to check it out: https://repos.tuckerm.us/repos/eleventy-darcs/branches/main. I plan on posting more updates on the darcs-users mailing list.

]]>
https://discourse.pijul.org/t/a-very-rough-draft-of-a-plain-html-pijul-repo-viewer/1256#post_5 Mon, 14 Apr 2025 03:39:13 +0000 discourse.pijul.org-post-4025
Pijul on macOS Fails with ssh/Nest – Seeking Nest Source Access and Contribution Opportunities I’m unable to get Pijul on Mac working with Nest, and it seems to be a recurring issue based on discussions I’ve seen on Discourse boards. I’m keen to contribute to resolving this, as I believe Pijul could serve as a decentralized information management layer for a DePIN infrastructure I’m exploring with Mysterium. However, this problem is blocking my investigation.

I’ve included troubleshooting logs below for reference. To dive deeper, I’d like to access Nest’s source code and set up a test environment. Could someone guide me on how to get involved in this way? Alternatively, if there’s a known technical issue with Pijul, resulting in reduced engineering activity on the platform, I’d appreciate an update. I haven’t noticed much recent development, so any insight would help.

Thanks for any assistance or pointers on contributing!

Trouble Shooting Logs / ssh connectivity to nest:

  • MacOS Version: 11.7.10
  • Pijul: Installed via cargo install pijul --version “~1.0.0-beta”, version 1.0.0-beta.9

SSH Key Setup

  • Generated: ssh-keygen -t ed25519 -C “EMAIL”

  • ~/.ssh/config:

Host nest.pijul.com
    HostName nest.pijul.com
    User highvibe
    IdentityFile ~/.ssh/id_ed25519
  • Public key uploaded to Nest: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILcrtP23IcXI5dAgI8l6i9LXx+L0G8EKb0kBvxxEJRGQ EMAIL

pijul identity

  • pijul identity new (selected “no” to SSH key prompt to avoid hang):
~/Library/Application Support/pijul/identities/highvibe/identity.toml:
username = "highvibe"
email = "EMAIL"
origin = "nest.pijul.com"
[public_key]
key = "EJbs1yQA8Tdh9WnbD8TjtHyHn6KbtgYk4UXXTxCKVsUF"

[public_key]
version = 0
algorithm = "Ed25519"
signature = "2hgzvQijSacV3QJ6Z4iCUuv6LZQjDSCPDKd81yphyPTy7PpqidQ9gapq4oJnSVtLCED2CkEZFiEiHJa6JbwpMb7R"
key = "EJbs1yQA8Tdh9WnbD8TjtHyHn6KbtgYk4UXXTxCKVsUF"

identity prove Fails

  • RUST_LOG=“pijul=debug” pijul identity prove highvibeAT[nestHOST]
  [2025-04-03T20:14:01Z DEBUG pijul_remote::ssh] Trying key Ed25519(...)
[2025-04-03T20:14:01Z DEBUG pijul_remote::ssh] fingerprint = "eulf5RwDiNbwc+gf1brMtxhdaJw0g8wL1Y5VlrR3llk"
[2025-04-03T20:14:01Z DEBUG pijul_remote::ssh] authenticate future
Error: "Not authenticated. Please check your credentials and try again."

SSH Succeeds, Hangs

  • ssh -v highvibeAT[NEST HOST] echo TEST
debug1: Offering public key: /Users/don/.ssh/id_ed25519 ED25519 SHA256:eulf5RwDiNbwc+gf1brMtxhdaJw0g8wL1Y5VlrR3llk
debug1: Authentication succeeded (publickey).
debug1: Sending command: echo TEST
[Hangs]

Clone Fails

  • RUST_LOG=“pijul=debug” pijul clone highvibeAT[NEST HOST]/pijul/pijul
[2025-04-03T20:15:55Z DEBUG pijul_remote::ssh] Trying key Ed25519(...)
[2025-04-03T20:15:55Z DEBUG pijul_remote::ssh] authenticate future
[Hangs]
]]>
https://discourse.pijul.org/t/pijul-on-macos-fails-with-ssh-nest-seeking-nest-source-access-and-contribution-opportunities/1282#post_1 Thu, 03 Apr 2025 21:28:51 +0000 discourse.pijul.org-post-4018
Self host on internal network The manual’s documentation appears to be no longer complete. Cloning from an ssh server on my LAN (pijul clone [email protected]:bar/src/baz) gives the following:

Warning: Unable to automatically authenticate with server. Please make sure your SSH keys have been uploaded to the Nest.
For more information, please visit https://pijul.org/manual/the_nest/public_keys.html#ssh-public-keys

But of course Nest is not involved in this transaction, so it’s unclear what to do. Perhaps the manual should address this or pijul clone changed to not assume use of Nest.

Perhaps relatedly, pijul identity prove is not clear as to what it does or why one might want to do it. What does “associate” mean? Does it have something to do with auth?

]]>
https://discourse.pijul.org/t/self-host-on-internal-network/954#post_3 Thu, 20 Mar 2025 16:29:35 +0000 discourse.pijul.org-post-4014
Equivalent of Emacs' Magit? Hi every one, any progress here? )

]]>
https://discourse.pijul.org/t/equivalent-of-emacs-magit/285#post_11 Sun, 16 Mar 2025 12:34:18 +0000 discourse.pijul.org-post-4012