Beastie: an experimental BibTeX processor

Beastie is an experiment in parsing and processing BibTeX files.

Beastie is:

The .bst language counts as rather niche. It has substantial amusement value, but expertise could hardly be said to be widespread (of course, one could complain that scheme has some niche aspects, but it also has its numerous compensating virtues).

The implementation of the .bst language is intended to be fairly complete, in the sense that it is nearly a drop-in replacement for the bibtex program, and deviations from that program are bugs, where they are not noted as deliberate exceptions.

Beastie also provides a framework for writing alternative bibliography tools. The ‘experimental’ status means that it is not yet fully-featured in that respect. The fact that it implements the .bst language confirms its scope, and acts as some indicator of ‘correctness’, and the examples/ directory in the distribution illustrates how one would go about writing a from-scratch style file, but there isn't (yet) a drop-in Scheme-based alternative to, for example, plain.bst.

It is a goal of Beastie to go slightly beyond BibTeX, and to make it a little easier to use .bib files to generate HTML or other formats, or for the output of beastie to be ingested into other processing pipelines. This has informed some of the choices made.


Most of this is implemented in an embedded copy of s7, from


As far as the .bst language is concerned, it aims to support it quite fully, in the sense that it will produce the same resuls as BibTeX, for the standard styles. However it doesn't support it slavishly, and there are some deviations noted in doc/, in the distribution. It also aims to slightly improve .bst error reporting, and adds a couple of extra .bst builtin functions, in both cases with the aim of being useful for debugging or developing .bst files (eg, show.stack$$ and printf$$).

Future plans (tentative)


The program is distributed under the terms of the 2-clause BSD licence. See the file LICENCE.txt for details.

Release notes

v0.9, 2024 July 5

v0.8, 2024 May 11

v0.7, 2024 March 17:

2024 July 5