Skip to content


OpenProject is an Open source project management software.

The benefits over other similar software are:

The things I don't like are:

  • It's not keyboard driven, you use the mouse a lot.
  • The task editor doesn't support markdown
  • You can't sort the work package views
  • You can't fold the hierarchy trees so it's difficult to manage the tasks once you have many. You can see my struggles with this issue here.
  • You can't order the tasks inside the Relations tab of a task.

  • You can't propagate easily the change of attributes to all it's children. For example if you want to make a parent task and all it's children appear on a report that is searching for an attribute. You need to go to a view where you see all the tasks (an hierarchy view) select them all and do a bulk edit.

  • Versions or sprints can't be used across projects even if they are subprojects of a project.

  • The manual order of the tasks is not saved across views, so you need to have independent views in order not to get confused on which is the prioritized list.
  • Data can be exported as XML or CSV but it doesn't export everything. You have access to the database though, so if you'd like a better extraction of the data you in theory can do a selective dump of whatever you need.
  • It doesn't yet have tag support. You can meanwhile add the strings you would use as tags in the description, and then filter by text in description.
  • There is no demo instance where you can try it. It's easy though to launch a Proof of Concept environment yourself if you already know docker-compose.
  • You can't hide an element from a report for a day. For example if there is a blocked task that you can't work on for today, you can't hide it till tomorrow.
  • Even thought the Community (free) version has many features the next aren't:
  • The status column is not showing the status color.
  • Status boards: you can't have Kanban boards that show the state of the issues as columns. You can make it yourself through a Basic board and with the columns as the name of the state. But when you transition an issue from state, you need to move the issue and change the property yourself. I've thought of creating a script that works with the API to do this automatically, maybe through the webhooks of the openproject, but it would make more sense to spend time on pydo.
  • Version boards: Useful to transition issues between sprints when you didn't finish them in time. Probably this is easily solved through bulk editing the issues.
  • Custom actions looks super cool, but as this gives additional value compared with the competitors, I understand it's a paid feature.
  • Display relations in the work package list: It would be useful to quickly see which tasks are blocked, by whom and why. Nothing critical though.
  • Multiselect custom fields: You can only do single valued fields. Can't understand why this is a paid feature.
  • 2FA authentication is only an Enterprise feature.
  • OpenID and SAML are an enterprise feature.


Proof of Concept

It can be installed both on kubernetes and through docker-compose). I'm going to follow the docker-compose instructions for a Proof of Concept:

  • Clone this repository:
git clone --depth=1 --branch=stable/12 openproject
cd openproject/compose
  • Make sure you are using the latest version of the Docker images:
docker-compose pull
  • Launch the containers:
OPENPROJECT_HTTPS=false PORT= docker-compose up


  • OPENPROJECT_HTTPS=false: Is required if you want to try it locally and you haven't yet configured the proxy to do the ssl termination.
  • PORT= Is required so that you only expose the service to your localhost.

After a while, OpenProject should be up and running on http://localhost:8080.


It can be installed both on kubernetes and through docker-compose). I'm going to follow the docker-compose:

  • Clone this repository:
git clone --depth=1 --branch=stable/12 /data/config
cd /data/config/compose
  • Make sure you are using the latest version of the Docker images:
docker-compose pull

Where secret is the value of head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo ''

  • Launch the containers:
docker-compose up
  • Configure the ssl proxy.

  • Connect with user admin and password admin.

  • Create the systemd service in /etc/systemd/system/openproject.service


# Shutdown container (if running) when unit is started
# Start container when unit is started
ExecStart=/usr/bin/docker-compose up
# Stop container when unit is stopped
ExecStop=/usr/bin/docker-compose down




The plans

I usually do a day, week, month, trimestre and year plans. To model this in OpenProjects I've created a version with each of these values. To sort them as I want them to appear I had to append a number so it would be:

    1. Day
    1. Week
    1. Month
  • ...


Bulk editing

Select the work packages to edit holding the Ctrl key and then right click over them and select Bulk Edit.

Form editing

Even though it looks that you can't tweak the forms of the issues you can add the sections on the right grey column to the ones on the left blue. You can't however:

  • Remove a section.
  • Rename a section.

Tweaking the work package status

Once you create a new status you need to tweak the workflows to be able to transition the different statuses.

In the admin settings select “Workflow” in the left menu, select the role and Type to which you want to assign the status. Then uncheck “Only display statuses that are used by this type” and click “Edit”.

In the table check the transitions you want to allow for the selected role and type and click “Save”.

Deal with big number of tasks

As the number of tasks increase, the views of your work packages starts becoming more cluttered. As you can't fold the hierarchy trees it's difficult to efficiently manage your backlog.

I've tried setting up a work package type that is only used for the subtasks so that they are filtered out of the view, but then you don't know if they are parent tasks unless you use the details window. It's inconvenient but having to collapse the tasks every time it's more cumbersome. You'll also need to reserve the selected subtask type (in my case Task) for the subtasks.

Sorting work package views

They are sorted alphabetically, so the only way to sort them is by prepending a number. You can do 0. Today instead of Today. It's good to do big increments between numbers, so the next report could be 10. Backlog. That way if you later realize you want another report between Today and Backlog, you can use 5. New Report and not rename all the reports.

Pasting text into the descriptions

When I paste the content of the clipboard in the description, all new lines are removed (\n), the workaround is to paste it inside a code snippet.