Dammit Jim, I'm a developer, not a magician.

Bones is a Fossil repository managment site in the lines of Flint, backing Chisel.

Note: Bones hosts it's own Fossil repository which is mirrored on Github.

The canonical Fossil source: Fossil Bones
My hosted version of Bones: Bones.isin.space

Provides a bare-bones interface for managing multiple Fossil repositories on a per user basis.

Bones is still being polished for depolys with the following tasks still needing to be completed before the first version goes live:


  • [ ] Sandbox Fossil
  • [ ] Ensure all text input is escaped in the templates
  • [ ] Flesh out tests and documentation for Bones & Fossil modules
  • [x] Ensure usernames are validated like repository names
  • [x] Setup Mail gem to be configurable per env - https://github.com/mikel/mail#sending-an-email
  • [x] Non-page based log out. Button on sidebar should just do it
  • [x] Feature flag for public sign-up
  • [x] Build out lighttpd setup and test it out
  • [x] Dockerfile for the ruby component
  • [-] Mobile/responsive design
    • This is somewhat done, in that the site is mostly usable on mobile, but doesn't have a good mobile friendly design

Bones is missing these features but I might add them in the future:

  • [ ] Periodic task to pull/sync cloned repos
  • [ ] Periodic task to mirror a repo to git automatically
  • [ ] Public/Private setting repositories (all repositories as "private" at the moment)
  • [ ] Possible webhook setup for pushes using the 2.12.1 hooks feature
  • [ ] Email relay to allow repos to send emails from Bones
  • [ ] Custom domain handling


As this project only provides the management of Fossil repository files, you'll still need to have Fossil serving the individual repositories. You could look into something like running fossil server but the recommended fashion is by using lighttpd and using Fossil as a cgi script. In fact it's so recommended that Bones auto generates a CGI script for each users repositories.

An example lighttpd config is provided, along with a functional docker-compose setup in docker/; A simple cd docker/; docker-compose up should do the trick.


Ensure you have Fossil in your path, as well as Sqlite, then:

asdf local 2.7.0

You'll also want to ensure that the settings in config/ are to your liking.

Finally use the user tool to make youself a new user:

./bin/bones user create --help


An IRB shell is available with the environment loaded up via:


Debuggers, via the break gem, can be dropped in with:


Additionally the project is configured with Zeitwerk for auto-loading and reloading of code in development, the only time you should have to manually restart the server is when changing env.rb, config.ru or config/<environment>.yml.


Bones is moving towards a utility css backed, componentized view setup with Trailblazer cells; Frontend magic is done with the help of some splashes of AlpineJS. I'll fill this section out more in the future when the migration is finished or at least solidified in practices.

While there is a app/styles.css and some small amount of rscss that'll probably remain in place, for the most part everything is done with Tailwind and the css gets stripped with purgecss. See Tailwind CSS v2 for more help with the available classes.

If you do need to rebuild the public/styles.css file after changing something in app/css/, just run the css npm script: npm run css

Release Prep

At the least these two commands should be ran and pass:


bundle exec rubocop -A

Tests, with coverage:

bundle exec rake

Optionally, but good to test if changing something in lib/ that should be documented:

bundle exec rake rdoc