Skip to content

Instantly share code, notes, and snippets.

@markasoftware
Last active July 18, 2025 20:42
Show Gist options
  • Save markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45 to your computer and use it in GitHub Desktop.
Save markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45 to your computer and use it in GitHub Desktop.
OpenProject Enterprise mode for free
############ If you are using DOCKER all-in-one image, create Dockerfile like: ################
############ FROM openproject/openproject:16 ################
############ COPY ./enterprise_token.rb app/models/enterprise_token.rb ################
############ If you are runing a manual installation: ################
############ REPLACE app/models/enterprise_token.rb in the source code with this file! ################
############ also be sure to RESTART OpenProject after replacing the file. ################
############ If using some other set up (eg docker-compose), read the comments on ################
############ https://gist.github.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45 ################
# OpenProject is an open source project management software.
# Copyright (C) the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++
class EnterpriseToken < ApplicationRecord
class << self
def current
self.new
end
def allows_to?(feature)
true
end
def active?
true
end
def hide_banners?
true
end
def show_banners?
false
end
def banner_type_for(feature:)
nil
end
end
def token_object
Class.new do
def has_feature?(feature)
true
end
def will_expire?
false
end
def mail
"[email protected]"
end
def subscriber
"markasoftware-free-enterprise-mode"
end
def company
"markasoftware"
end
def domain
"markasoftware.com"
end
def issued_at
Time.zone.today - 1
end
def starts_at
Time.zone.today - 1
end
def expires_at
Time.zone.today + 1
end
def reprieve_days
nil
end
def reprieve_days_left
69
end
def restrictions
nil
end
def available_features
[]
end
def plan
"markasoftware_free_enterprise_mode"
end
def features
[]
end
def version
69
end
end.new
end
def will_expire?
false
end
def mail
"[email protected]"
end
def subscriber
"markasoftware-free-enterprise-mode"
end
def company
"markasoftware"
end
def domain
"markasoftware.com"
end
def issued_at
Time.zone.today - 1
end
def starts_at
Time.zone.today - 1
end
def expires_at
Time.zone.today + 1
end
def reprieve_days
nil
end
def reprieve_days_left
69
end
def restrictions
nil
end
def available_features
[]
end
def plan
"markasoftware_free_enterprise_mode"
end
def features
[]
end
def version
69
end
def allows_to?(action)
true
end
def expired?(reprieve: true)
false
end
def invalid_domain?
false
end
end
@OussamaBeyGahar
Copy link

thnx, my stuped self didn't read the file :p, i just did it thnx

@supaeasy
Copy link

supaeasy commented Jun 4, 2025

Openprojects GitHub Management as well as their support is a disaster. Didnt manage to update my database yet and nobody reacts to anything if you don't REALLY annoy people directly as I did about https://gist.github.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45?permalink_comment_id=5591479#gistcomment-5591479

@OussamaBeyGahar
Copy link

i agree, for exemple i'm stuck with the upgrade to new version, each time i try it following their docs i get the same error with ruby on rails about data base migration error

@scalenow
Copy link

scalenow commented Jun 5, 2025

Hi guys,
how to do this for an openproject that's not installed with docker ? meaning installed directly on centos machine

just replace the file directly

yes just cut copy and paste

@scalenow
Copy link

scalenow commented Jun 5, 2025

Openprojects GitHub Management as well as their support is a disaster. Didnt manage to update my database yet and nobody reacts to anything if you don't REALLY annoy people directly as I did about https://gist.github.com/markasoftware/f5b2e55a2c2e3abb1f9eefcdf0bfff45?permalink_comment_id=5591479#gistcomment-5591479

Support is complimentary ,they will reply at will

@supaeasy
Copy link

supaeasy commented Jun 6, 2025

i agree, for exemple i'm stuck with the upgrade to new version, each time i try it following their docs i get the same error with ruby on rails about data base migration error

Yes I gave up on that as well. But I just did a backup via in-App function (Backup Token), got a new docker stack running with Postgres 17 and Openproject 16 and restored the database. Not the smoothest experience because it didnt quite work as documented (surprise!) but managable (thank you, ChatGPT). Everything has been restored including all settings, custom types- everything. I am very happy with this solution and the whole upgrade path as documented seems completely unecessary to me now.

@3115fcfc-2c0b-4076-927f-ae6531c76061

They made some changes for the All-In-One solution (opf/openproject#19011 (comment), opf/openproject#19210).
And I tried to get the other changes merged for the docker-compose one last time (opf/openproject#19011 (comment)).

@antoniolago
Copy link

antoniolago commented Jun 17, 2025

If interests anyone, upgrade from 15 to 16 was seamless while using Helm Chart and this gist file works as expected

@JokerGermany
Copy link

JokerGermany commented Jun 18, 2025

If interests anyone, upgrade from 15 to 16 was seamless while using Helm Chart and this gist file works as expected

But you don't get the features of the tier Enterpise Professional? Only Enterprise Basic?

@antoniolago
Copy link

If interests anyone, upgrade from 15 to 16 was seamless while using Helm Chart and this gist file works as expected

But you don't get the features of the tier Enterpise Professional? Only Enterprise Basic?

Yes those features are working too, my config:

For helm installations

  1. Add configmap with this file content in it:
apiVersion: v1
kind: ConfigMap
metadata:
  name: enterprise-token-config
  namespace: openproject
data:
  enterprise_token.rb: |
    <file content here>
    
  1. Add helm values:
  extraVolumes:
     - name: enterprise-token-volume
       configMap:
         name: enterprise-token-config
   extraVolumeMounts:
     - name: enterprise-token-volume
       mountPath: /app/app/models/enterprise_token.rb
       subPath: enterprise_token.rb
       readOnly: true
   
 

@scalenow
Copy link

@JokerGermany my understanding was the above code will give full functional rights ,Is that not your understanding

@JokerGermany
Copy link

JokerGermany commented Jun 20, 2025

@scalenow
https://www.openproject.org/docs/release-notes/16-0-0/#important-updates

The Enterprise plans (Basic, Professional, Premium, and Corporate) have been updated. Each plan now includes a specific set of Enterprise add-ons. Support levels and pricing remain unchanged with version 16.0.

Current Enterprise customers retain their existing plans with access to all Enterprise add-ons available at that time. No features are removed. > From this version onward, new Enterprise add-ons may be included only in higher-tier plans. For example, the new Internal comments feature is part of the Professional plan.

@markasoftware
Copy link
Author

@JokerGermany as far as I know, this gist enables all features. Please install and test for yourself.

@positiveque
Copy link

@JokerGermany @markasoftware I confirm that all enterprise add-ons functions are available. Checked in the latest version 16.1.0.

@scalenow
Copy link

@positiveque thanks

@javiervalerocelada
Copy link

@positiveque Is working on docker?

@positiveque
Copy link

@positiveque Is working on docker?

Yes, sure. I use it in docker-compose.yml like this:

  volumes:
    - "/docker/openproject/enterprise/enterprise_token.rb:/app/app/models/enterprise_token.rb"

@javiervalerocelada
Copy link

@positiveque with version openproject-dev?

@positiveque
Copy link

@positiveque with version openproject-dev?

I use image for production "openproject/openproject:16-slim" and don't know about openproject-dev.

@Jerin-Altnix
Copy link

Its not working on the 16.1.1

@positiveque
Copy link

Its not working on the 16.1.1

I just checked and it works on the 16.1.1. Can you give more details?

@AFFLatusss
Copy link

AFFLatusss commented Jul 9, 2025

Anyone tried on OpenProject 16.1.1?

Every enterprise features is working but baseline comparison in work packages? any idea?

Like the options are available but not working...

@Jerin-Altnix
Copy link

Hey @positiveque , thanks for your support. It was my mistake, I had upgraded OpenProject from version 15 to 16 and tried using the token, but it didn’t work. I was also running PostgreSQL 13 at the time. I’ve now done a fresh setup, and everything is working fine.

@jafaripur
Copy link

jafaripur commented Jul 16, 2025

Work before 16.2, in version 16.2 error occurred!

@CMDAEW
Copy link

CMDAEW commented Jul 16, 2025

good open source knows how to protect itself :) all the best to openproject. hit me up if u want a free trial ;)

@samip5
Copy link

samip5 commented Jul 16, 2025

They seem to have added quite a bit of methods to the token class..

@christophwolff
Copy link

Give it some time. And a fix will be made ;)

@samip5
Copy link

samip5 commented Jul 16, 2025

Yes, I'm sure of that. Gonna take a stab at it myself. Shouldn't be too difficult to mock the added functions. :)

@markasoftware
Copy link
Author

yep they added some new methods, will look into it soon.

@samip5
Copy link

samip5 commented Jul 16, 2025

Cannot open the token page in UI, but that's fine. :D

Let me just leave this here:

class EnterpriseToken < ApplicationRecord
  class << self
    def current
      self.new
    end

    def allows_to?(feature)
      true
    end

    def active?
      true
    end

    def hide_banners?
      true
    end

    def show_banners?
      false
    end

    def banner_type_for(feature:)
      nil
    end

    def all_tokens
      [new]
    end

    def active_tokens
      [new]
    end

    def active_non_trial_tokens
      [new]
    end

    def active_trial_token
      nil
    end

    def table_exists?
      true
    end

    def trial_only?
      false
    end

    def available_features
      [:all_features]
    end

    def non_trialling_features
      [:all_features]
    end

    def trialling_features
      []
    end

    def trialling?(feature)
      false
    end

    def user_limit
      nil
    end

    def set_active_tokens
      [new]
    end

    def clear_current_tokens_cache
      true
    end
  end

  def token_object
    @token_object ||= Class.new do
      def has_feature?(feature)
        true
      end

      def will_expire?
        false
      end

      def mail
        "[email protected]"
      end

      def subscriber
        "markasoftware-free-enterprise-mode"
      end

      def company
        "markasoftware"
      end

      def domain
        "markasoftware.com"
      end

      def issued_at
        Time.zone.today - 1
      end

      def starts_at
        Time.zone.today - 1
      end

      def expires_at
        Time.zone.today + 1
      end

      def reprieve_days
        nil
      end

      def reprieve_days_left
        69
      end

      def restrictions
        nil
      end

      def available_features
        [:all_features]
      end

      def plan
        "markasoftware_free_enterprise_mode"
      end

      def features
        [:all_features]
      end
      
      def version
        70
      end

      def started?
        true
      end

      def trial?
        false
      end

      def active?(reprieve: true)
        true
      end

      def expired?(reprieve: true)
        false
      end

      def validate_domain?
        false
      end

      def valid_domain?(hostname)
        true
      end
    end.new
  end

  def will_expire?
    false
  end

  def mail
    "[email protected]"
  end

  def subscriber
    "markasoftware-free-enterprise-mode"
  end

  def company
    "markasoftware"
  end

  def domain
    "markasoftware.com"
  end

  def issued_at
    Time.zone.today - 1
  end

  def starts_at
    Time.zone.today - 1
  end

  def expires_at
    Time.zone.today + 1
  end

  def reprieve_days
    nil
  end

  def reprieve_days_left
    69
  end

  def restrictions
    nil
  end

  def available_features
    [:all_features]
  end

  def plan
    "markasoftware_free_enterprise_mode"
  end

  def features
    [:all_features]
  end
  
  def version
    70
  end

  def allows_to?(action)
    true
  end

  def expired?(reprieve: true)
    false
  end

  def invalid_domain?
    false
  end

  # Missing instance methods from original
  def expiring_soon?
    false
  end

  def in_grace_period?
    false
  end

  def statuses
    []
  end

  def unlimited_users?
    true
  end

  def max_active_users
    nil
  end

  def sort_key
    [Time.zone.today + 1000.years, Time.zone.today - 1]
  end

  def days_left
    365000 # A very large number
  end

  def started?
    true
  end

  def trial?
    false
  end

  def active?
    true
  end

  def clear_current_tokens_cache
    true
  end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment