Reika
Reika is an opinionated dependency manager and build initiator tool, primarily for Common Lisp projects. Examples of projects that use Reika are Benben and XQATool.
This project is still very early in development. It can be used to build things, but is still quite touchy, missing features, and doesn't have good error messages. YMMV.
Reika is entirely written and maintained by one person, Remilia Scarlet! If you want to support her and Reika, you can buy her a coffee on Ko-Fi, or support her through Liberapay. Support is greatly appreciated for this volunteer effort ^_^
How do I get set up?
You will need Fossil and Crystal to build Reika. When using Reika to build other projects, you probably want to have both Fossil and Git installed, at a minimum.
It has been tested with Crystal 1.12.2, but most other versions should work.
To build Reika from source:
- Clone this repository somewhere using Fossil.
- Change into the directory where you cloned the repository.
- Run
shards build -p(orshards build --release -p). - The binary will be in the
bin/directory.
How to Build a Project that Uses Reika
- To build a project, change into its directory and run
reika build. - To just gather a project's dependencies, change into its directory and run
reika update. - You can run
reika help(orreika <some command> --help) for more ways to run Reika.
For more detailed usage, check out the manual
How to Use Reika for Your Own Project
To use Reika for your own project, please consult the manual.
Frequently Questioned Answers
Why write it in Crystal?: For easier bootstrapping. Since the primary goal is to be able to build Common Lisp projects without having to touch a REPL, ASDF, or Quicklisp, it wouldn't make sense to write this in Common Lisp. So, Crystal was instead chosen since the Shards program (which is used to build Crystal software) is just as easy to use.
So basically, to make it easier for end users who want to build Lisp software but are not Lispers themselves.
Will it work for non-Lisp projects?: Technically yes using the
cmdkey in the project file. In fact I plan to use it for a Pascal projects since, in Pascal land (as far as I know) the norm is to maintain your dependencies in-tree. That said, when it comes to Reika, only Lisp is officially supported, so you’re on your own for other languages.Why not extend ASDF?: Because ASDF is a build system, not a dependency manager. It can do some dependency-related things, like version checking, but in my opinion, it should not do much else except build software. Also, the primary goal is to make it easy for non-Lispers to build software that’s written in Lisp. Having them start a REPL and call ASDF commands is antithetical to this goal.
What about Quicklisp?: Quicklisp is nice in general, but not necessarily for non-Lispers. Nor does it solve the problem of actually building a binary for a project. Also, I have never used Quicklisp and I don’t intend to start.
Can you add Darcs support?: No. Well, maybe in the future I’ll allow it, but for now, no. Consider using a better VCS.
Can I use this to manage dependencies for my library?: I highly discourage this. It’s meant specifically for projects that create a binary executable such as Benben and XQATool.
Why use RSConf for the project file?: RSConf is chosen because it results in no external dependencies (e.g. libyaml), yet still allows stuff like comments (unlike JSON). In fact, it was specifically designed for uses such as this, so it just makes sense to use it.
Why do the ‘mod’ key in
versionlike that? Why not symbols?: To prevent ambiguity or confusion. I can never remember what the heck~>means compared to=>or>=or whatever without looking up the docs. So I took some inspiration from Ada and changed them to plain English.Also, in my own experience, you just want a specific checkout/tag/branch in 99% of cases anyway, or just a simple "this version or greater". No need to complicate it much further.
I have a project on my local disk that isn’t in a web-accessible repo yet. Can I still use it?: Yes! Just set the dependency's type to
localand place the source path intolocation. Reika will symlink it into yourdeps/directory automatically. The version/tag stuff is then ignored. Just remember, local dependencies cannot be vendored.Why name it "Reika"?: It's named after an anime character. It's just something I tend to do.
Development
Style info
I use a somewhat non-standard style for my code.
- Keep lines 118 characters or shorter. Obviously sometimes you can't, but please try. Use 80 or 115 characters for Markdown files, though.
- Please use pascalCase for variable and method names. Use CamelCase for type names. Use UPPER_SNAKE_CASE for constants.
- ALWAYS put parentheses around method parameters, except for these methods:
puts,pp,p,raise,sleep,spawn,loop, andexit. - Always the full
do |foo|...endsyntax with blocks, except when it's all on one line, then always use { and }. - The type name for exceptions end with Error. For example,
ExternalProgramError.
How do I contribute?
- Go to https://fossil.cyberia9.org/reika/ and clone the Fossil repository.
- Create a new branch for your feature.
- Push locally to the new branch.
- Create a bundle with Fossil that contains your changes.
- Get in contact with me.
Contributors
- Remilia Scarlet - creator and maintainer
- Homepage: https://remilia.sdf.org/
- Fediverse: @remilia@social.cyberia9.org
- Email: zremiliaz@postzeoz.jpz My real address does not contain Z's
Links and Licenses
Reika is under the GNU Affero General Public License version 3.
