RuuviTracker Server
Clojure HTML CSS JavaScript Python
Latest commit 269041a Jul 12, 2015 @laurijamsa laurijamsa Fix URL
Failed to load latest commit information.
resources Fix #76: Remove Jetty support. Apr 22, 2013
src Remove unused MAC algorithm usage. May 22, 2013
test-utils example uses v1-dev api Dec 16, 2012
.gitignore Ignore some files from git Aug 24, 2012
.slugignore Remove test directories from Heroku slug file. See https://devcenter.… May 25, 2012
.travis.yml Use lein2 Aug 18, 2012
LICENSE License information Mar 9, 2012
Procfile Explicitly use server command with heroku Aug 20, 2012 Fix URL Jul 11, 2015
project.clj Upgraded deps. Apr 22, 2013


Clojure based implementation of RuuviTrackerServer.

See for more details.

Server works either as standalone application, using a HTTP Servlet container (for example Jetty) or with Heroku cloud.

This software provides only REST and WebSocket APIs. User interface is available in separate project RuuviTracker/ruuvitracker_web.

New development

There is a rewrite of the server application works at


Most of the discussions about development happen on IRCNet channel #ruuvitracker.

There is also a mailing list at!forum/ruuvitracker-dev



Currently server implements Tracker API and Client API partially.

  • Requests are saved to database, but they are not properly validated yet.

Standalone application

  1. Fetch sources
git clone git://
  1. Setup database, see src/resources/server-dev-config.clj
  2. Fetch dependencies
lein deps
  1. Create tables to database

    lein run -m ruuvi-server.launcher migrate
  2. (Optional) Import example data to database

    lein run -m ruuvi-server.launcher load-example-data
  3. Start server
lein ring server
  1. Access web application http://localhost:3001/api/v1-dev/events

Heroku usage

  1. Get sources
git clone git://
  1. Create Heroku account
    • Simply create an Heroku account and push code to Heroku.
  2. Create heroku application
heroku create --stack cedar
  1. Add heroku as git remote
git remote add heroku
  1. Configure heroku
heroku addons:add heroku-postgresql:dev
heroku config:add RUUVISERVER_ENV=heroku --app APPNAME
  1. Create tables to database and some content to tables

    heroku run lein run -m ruuvi-server.launcher migrate
  2. (Optional) Import example data to database

    heroku run lein run -m ruuvi-server.launcher load-example-data
  3. Start heroku process
heroku scale web=1
  1. Access the app


Server uses PostgreSQL or H2 database engines. See resources/server-XXX-config.clj files for database configuration.

UI develpment

Static html files are located in resources/public. Add javascript ui there.

Continuous Integration

Travis is used as CI.


  • master branch:

Guide to source tree

Production code lives under 'src', unit-tests and other automatic tests live under 'test'. Directory 'test-utils' contains scripts usable in manual testing. Directory 'resources' contains data files that are not executable code.

Unit tests are implemented with Midje.

src directory

  • 'ruuvi_server/' contains main functionality of the server.
    • 'launcher.clj' is the starting point. Handles configuration and starts up serveres.
    • 'configuration.clj' contains functions to handle configuration data. It also contains atom that holds current configuration.
    • 'core.clj' sets up basic REST routes for whole software.
    • 'api.clj' is the main starting point for API.
    • 'client_api.clj' contains implementation of client part of API. Clients (web browsers, mobile devices) can get location data via JSON api.
    • 'tracker_api.clj' contains implementation of tracker API. Tracker device can send location and other data using JSON API.
    • 'tracker_security.clj' implements security features used in tracker API. HMAC based message verification.
    • 'util.clj' contains generic utility functions.
    • 'parse.clj' contains input parsing functions.
  • 'lobos/' contains database migration files (a.k.a database schema changes). Migrations are implemented with Lobos frameworks.
  • 'ruuvi_server/database/' contains database access layer, scripts for initally populating the database with test data and connection pooling. Database access is implemented with Korma library.
    • 'entities.clj' contains definitions for ORM entities.
    • 'event_dao.clj' contains DAO functions for manipulating event data.
    • 'pool.clj' constructs a connection pool.


Copyright (C) 2012 Juha Syrjälä

BSD License