Jan Blaha

Blog about software development

Report server


It is a practice to open with a definition. Unfortunately there is no satisfying definition out there so I decided to put short one together.

Reporting server is a system capable of rendering reports based on the client request parameters, where report is meant as a document with various possible formats visually representing a system state.

If you are looking for one, there are few solutions out there fulfilling this simple definition. This post won't compare them but rather focus just on one of them. The goal here is to present jsreport and describe how does it cover previous definition.

jsreport basics

jsreport was developed from the start to serve the purpose of report server. You can install it on your own machine for free or use it as a report as a service solution. The workflow using jsreport is similar to any other reporting server.

  1. define report data source
  2. define report visual representation and output format
  3. call API and get back report document

jsreport is probably the only one reporting server that is cross platform running on javascript. Not only it's running on javascript based node.js server but also whole report definition is based on javascript templating engines.

Output formats

jsreport report rendering is a base extension point where you can hook with your own rendering implementation. The report rendering process is called jsreport recipe. There are several recipes provided out of the box mainly supporting html and pdf output format. Probably the most popular one is phantom-pdf recipe which generates pdf using html conversion. You can for example define report using jsrender templating engine and let it print into pdf.

    {{for people}}
            <td class="{{if age < 18}}red{{else}}blue{{/if}}">


There is no need to install a report designer on every client because jsreport designer is based on html5 and running in any browser. jsreport designer is basically just an enhanced code editor providing unlimited possibilities to the output report.


Various data sources

There are two ways how you can define data source. The simpler one is to push input data into server using api. This means when you want to render a report you first collect data from any data source and send them to the report server inside rendering request.

The second way uses jsreport scripts extension. Using this extension you can define a custom script that will be evaluated in reporting server before the real rendering process starts. This script can collect any data from data source or even from remote API.


jsreport is fully flagged free reporting server running on every main platform. It includes a html based report designer used to manage reports. Report definition is based just on javascript templating engines which gives unlimited possibilities to the resulting reports. It supports out of the box html and pdf output formats and yes, everything is opensourced on github.

last blog posts

09-12-2017 18:40 jsreport

Quite some time ago I blogged about rendering pdf reports in c#. Recently we have added excel reports into jsreport and it was released with a little delay also into .NET. This means you should be able to use both html-to-xlsx and xlsx recipes to create excel files from your .NET environments now.

read more

09-10-2015 14:09 AWS

Such a very common thing like adding an existing external volume to Amazon elastic beanstalk is not easily supported out of the box. The official blog mentions only how to attach a snapshot or how to attach and overwrite a new volume every time the service starts. It took me a while to make the config file actually adding an existing volume without formatting it every time so I share it here with you...

read more

04-10-2015 14:09 jsreport

The best practice when adding email notifications feature to your system is to separate as much as you can from email body assembling to email sending outside of the core system. The emails templates quite likely often changes and you don't want to deploy the system because of every single notification change. The best is to just separate everything into an external system and give the access to your PR or Marketing department so they change emails as the time goes without affecting the core system.

read more

Jan Blaha

About author

Hi! My name is Jan Blaha. I'm software developer and startup enthusiastic. See my current work.