Questions about building Redmine or ChiliProject plugins?

I want to start writing down what I know about building plugins for Redmine and ChiliProject but I’ve been doing it for so long that I don’t remember what stupid mistakes I made while learning. So I want to “ask the audience”.

What questions do you have or have you had when building plugins for Redmine or ChiliProject?

Post your question in the comments below or reply to me on Twitter (@edavis10) and I’ll try to answer them in some future blog posts.


  1. Anonymous says:

    These are the questions I’ve encountered myself while doing redmine plugins. I’ve been able to answer most of them, but it took me a lot of time and effort; I had to hunt for information in many places, and often had to rely on reading the redmine source code.

    1- What is the correct way to handle plugin settings? Some plugins need “settings” in order to work. It could be a path on the filesystem, or a flag, or a bit of text that must be shown in all pages.

    2- Can you explain what “Dispatcher”, “require_dependency” and “Principal” are?

    3- What is the correct way to calculate an instance variable into an existing controller? For example, say I want to have a drop-down showing projects on my “plugin settings”. How do I monkeypatch the new @projects variable into SettingsController?

    4- Is there a recommended way to handle i18n in plugins? If I only include an en.yml locale, will I get errors when my users set their i18n settings to french?

    5- Say I need additional CSS or images for displaying information in my plugin. Where should I put those?

    6- I’d like to use a gem from inside my plugin. The gem isn’t installed on the standard redmine. Is there a way to satisfy this?

    7- Is there a standard for versioning redmine/chilliproject plugins?

    8- Are there any licensing facts I need to take into account? Is there a particular licensing provision regarding plugins?

    Sorry for the long post. I hope it helps.


      • Anonymous says:

        Hi Eric,

        I’m glad I could help, if only a tiny bit.

        I’ve just thought of two more questions while helping a coworker develop a very simple plugin  for the first time. The plugin literally just redefines a helper function. ( It allows locking users without having to activate them first ; shows two buttons instead of one in user#index)

        The two new question are:

        9- What is “unloadable”?

        10- Why can’t I just monkeypatch (redefine) a method into an existing Model/Controller/Helper but have to rely on alias_method_chain instead?


        ( BTW, if anyone is interested, the plugin he developed is )

  2. Mattsees says:

    Hi Eric,

    Redmine_Burndown: can it be created or filtered for each team member? 

    Thanks a million?

Comments are closed.