At a high-level, the vision of the project is to provide a simpler, easier-to-extend, and more featureful successor to CSL, with a model defined in Rust code, and JSON schemas generated from it.
More specifically, the idea is to:
More concretely, the goal is a suite of models, libraries and tools that make extremely performant advanced citation and bibliography processing available everywhere:
For the Style
model:
For the InputReference
and Citation
models:
Contributor
model offers similar flexibility, and power where needed.This is not particularly close to ready for actual use, and needs more development, testing, and input.
A very high-level summary of where this at ATM:
csln-schemas
binary that will create JSON schemas to validate themcsln
CLI that uses the above; it's Rust, so a single binary, and very fast.To understand the difference between this model and CSL 1.0, look at style::options. There, you will note configuration options for many details that in CSL 1.0 are configured within the template language:
Plus, I've added localization
support as such a configuration option group, with the idea it can be more easily-expanded there, than by burdening the template language with those details.
In that sense, this design is closer to BibLaTeX, which has a very long list of flat options that handle much of the configuration. Like that project, here we standardize on EDTF dates.
On the citation end, CSL in general has been most akin to the BibLaTeX autocite
commands rather than the lower-level ones. This is to ensure documents are portable across radically-different output styles. But this model adds a basic distinction between "integral" (aka narrative or text) citations, and "non-integral."
I've separated the code into discrete crates, with the intention to ultimately publish them.
I'm hoping to have demonstrated enough so far that this is a promising direction for the future of CSL, at least on the technical end, that folks might be willing to help build this out. Ideally, I want to develop one or both of these projects sufficiently to move them to the GitHub CSL org for further development and future maintenance. Doing so, however, will require sorting out details of how that process is managed and funded.
I would love to have help on this, both because I'm an amateur programmer and a Rust newbie, and because the vision I am sketching out here will take a lot of work to realize.
Please contact me via discussions or the issue tracker, or by email, if you'd like to contribute.
I licensed the code here under the same terms as citeproc-rs, in case code might be shared between them. I also understand the Mozilla 2.0 license is compatible with Apache.
A note on citeproc-rs:
In reviewing the code, it strikes me pieces of it obviously complement this code base. In particular, it has been optimized for the Zotero use-case, where it provides real-time formatting, while I have focused of the batch-processing case.