Meuse: a free crate registry

Hello,

I have been working for a while on a crate registry.

The name of the project is Meuse. You can find the code on Github, and the documentation is here.

Meuse fully implements the alternative registries RFC/API. You can publish your crates on it, download dependencies from it etc... like you do with crates.io (all Cargo commands like yank, owner, publish, search should work with Meuse).

Meuse also exposes an API to manage users, roles, crates, categories, tokens.

Meuse can store the crates binary files in 2 stores currently: on the local filesystem, or on an S3-compatible storage. Meuse is also able to mirror crates.io (crates will be downloaded by Meuse from crates.io, and then cached in the Meuse store).

I've also started working on a frontend to browse/search crates and categories.

Meuse is built with Clojure + Postgres. I chose Clojure for several reasons:

  • I really like the language and I'm very productive with it.
  • The JVM is a good platform to develop/deploy apps (the ecosystem is huge, launching Meuse is only java -jar meuse.jar, performances are great etc...).

Of course, the project is not finished (I still have some internal refactoring to do, especially around error handling for example).

I'm looking for people to try the project/give me feedbacks. How to build/run the project is explained in the documentation. Don't hesitate to ask questions.

Thanks :wink:

1 Like

Maybe you would like to use https://lib.rs as the front-end for it?

I'm not familiar with lib.rs, but I don't think it's possible to reuse code from it. Meuse exposes its own API to get crates, categories, users etc...

You created a Rust package repo in Clojure and the JVM?
Sorry, I'm having a face palm moment.

I use the right tool for the right job.

Rust is interesting, but for this kind of project (where you can totally afford a GC) I prefer to use the language in which i'm the most productive. Does it matter if Cargo interacts with a server which is not written in Rust ?

You would have to write import method for Meuse API, but you could reuse most of the front-end.

lib.rs currently supports GitHub and GitLab as data sources, independent from crates-io, e.g.

https://lib.rs/lab/hagrid-keyserver/hagrid/hagrid & https://lib.rs/gh/tikv/tikv/tikv

Actually if I would need to pick language where I am the most productive I would pick Rust. And I think, that there are many people who spend on Rust so much time last months/years, that they would claim such too. It is nothing bad, that @mcorbin found some niche here, but don't want to go deep into Rust with this project or at all - if you have some spare time, go ahead and give us Rust repo server - it would obviously have some benefits. For now there is the JVM one and if some company would consider Rust if only it would allow for simply create non-public repo, then I am happy that they have one.

2 Likes

On the Rust repo server part: https://github.com/Hirevo/alexandrie

1 Like

Yep. Let me be very honest here. I have dropped everything for Rust, dropped C++, dropped Go, dropped Python and even dropped Java. Rust is the language I'm most literate in right now. Yes that's the big bet I've made on Rust, I've given up literally every other language for it. And it's not for loyalty, but it's because I love it. Rust is a language that I understand and it is a language that understands me and there's nothing that comes to be as timeless as Rust. This is our project. This is the world's project. We have to make it great.

2 Likes

Whoa what? That sounds extremely insolent. I just agreed to @hashedone. Did I even point you out? And no one's trying to bring a language flame war! @mcorbin That was really impertinent

1 Like

@mcorbin btw - thanks for this solution. I may need some private repo in near future, and I would probably try this one if it would be a thing.

On reflection my comment was unduly negative. I deleted it. To be fair to myself though, I never did say anything was crap.

There are hundreds of languages in use today. Most of them are not going away any time soon. It's better that Rust plays nicely with it's peers and we all get along.

1 Like

Thanks :wink:

I will soon start working on a CLI to manage users, tokens etc...

I'm also thinking about the best way to make Meuse highly available.
Today, it's already possible to store crates files on an S3 like storage, but the repository index (which is a git repository) is still on the filesystem (so running 2 versions of Meuse in parallel will not work, because of possible conflicts on the git repository).

ps: I've also deleted my previous comment.

2 Likes

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.