Skip to content
A simple-stupid self-hostable continuous integration service. 🙈
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
etc falk: use asyncio process for custom vm backend Jul 23, 2018
COPYING github: support for pull request aborting Mar 20, 2016
Makefile kevin: use async defs for message distribution Jul 28, 2018 release v0.5 Jul 28, 2018

Kevin CI

A simple-stupid self-hosted continuous integration service.


Kevin is a self-hostable CI daemon to build pull requests inside temporary containers.

It was mainly developed for openage, but you can use it for any project!

Kevin can create doc files, bundle software, run tests, make screenshots, end world hunger, calculate the last digits of pi: all in a custom container.

Requires Python >=3.6, tornado >=5.1 and qemu.


  • Your running kevin daemon is notified by a github webhook.
  • It spawns a temporary VM for the job.
  • The repo is cloned and the build/test steps in kevinfile are executed.
  • Progress can be viewed live via website, github, curl or websocket API.
  • Results are instantly reported to github.


  • Makefile-like control file (kevinfile)

    • Directly specify command dependencies of your build
    • Report the step results and timing back to github
  • Live-view of build console output

    • See what the machine builds in real-time
    • Store and download resulting files (e.g. releases)
  • GitHub pull requests

    • A build is triggered for each new and updated pull request
    • When you push to a currently-in-build branch, the previous build is canceled
  • File output

    • Let your project generate files and folders
    • They're saved to the static web folder
    • Use it to generate documentation, releases, ...
  • Container management

    • Jobs are built in temporary throwaway VMs
    • Easily change and update the base images


  • Kevin: Receives triggers and launches the builds
  • Falk: Provides temporary containers to Kevin
  • Chantal: Run inside the container to execute the Job
  • Mandy: Webinterface to view live-results


You have to set up 3 things: Kevin, Falk and Chantal. Optionally, serve the Mandy webinterface with any static webserver.

How? Lurk into our setup guide.



If you have questions, suggestions, encounter any problem, please join our Matrix or IRC channel and ask! #sfttech

Of course, create issues and pull requests.


Released under the GNU Affero General Public License version 3 or later, see COPYING and LICENSE for details.

You can’t perform that action at this time.