A routing engine service using Open Street Maps and GTFS as data source
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


kamal Build Status Clojars Project

A routing engine and API service based on Open data. Its current focus are flexibility, speed and stability in that order.


Check out the API examples provided as a Postman collection. Simply import it and have fun :)

For a demo see try.hyposfer.com (it will take a few seconds on the first run).

By default kamal will run at localhost:3000.


You can install kamal from clojars using lein or use our docker image.


$ git clone https://github.com/hiposfer/kamal.git && cd kamal

## set up environment variables
$ export FRANKFURT_AREA_NAME="Frankfurt am Main"
$ export FRANKFURT_AREA_GTFS=resources/test/frankfurt.gtfs.zip

## preprocess input data -> output to ./resources/test
$ lein run -m hiposfer.kamal.preprocessor

## compile application - you can run it with lein as well
$ lein with-profile release uberjar

export FRANKFURT_AREA_EDN resources/test/frankfurt.edn.gz
$ java -jar target/kamal.jar


Use our latest docker image:

$ ## setup env vars like above and pass them to docker
$ docker run -it -p 3000:3000 hiposfer/kamal


We follow Stuart Sierra's reload workflow. Our system configuration is created by reading the environment variables. An example of such config can be found in hiposfer.kamal.dev/env. As you can see there, it is also possible to create a system by providing the configuration directly.

  1. Start a REPL
  2. Load the hiposfer.kamal.dev namespace
  3. Run the hiposfer.kamal.dev/refresh! function
  4. Perform your changes
    • if your changes modify the network build process. Repeat from 3.
    • keep making your changes in the repl otherwise

In other words:

$ git clone https://github.com/hiposfer/kamal.git && cd kamal
$ lein repl
hiposfer.kamal.core=> (use 'hiposfer.kamal.dev)
hiposfer.kamal.core=> (hiposfer.kamal.dev/refresh!)

And then browse to localhost:3000

OSM Files

kamal consumes General Transit Feed Specification (GTFS) and Open Street Map files.

kamal is very routing oriented, thus we rely on the awesome Overpass-API for filtering of Open Street Map data. Check out our pedestrian filtering query Here.

You can customize it however you want; once you are done, simply save the query run the preprocessing script again with lein preprocess resources/. This will preprocess all gtfs configs in your environment variables with (automatically) downloaded osm data.


kamal is distributed under LGPL v3