1# frozen_string_literal: true
2
3source "https://rubygems.org"
4# if there is a super emergency and rubygems is playing up, try
5#source 'http://production.cf.rubygems.org'
6
7gem "bootsnap", require: false, platform: :mri
8
9gem "actionmailer", "~> 7.2.0"
10gem "actionpack", "~> 7.2.0"
11gem "actionview", "~> 7.2.0"
12gem "activemodel", "~> 7.2.0"
13gem "activerecord", "~> 7.2.0"
14gem "activesupport", "~> 7.2.0"
15gem "railties", "~> 7.2.0"
16gem "sprockets-rails"
17
18gem "json"
19
20# TODO: At the moment Discourse does not work with Sprockets 4, we would need to correct internals
21# We intend to drop sprockets rather than upgrade to 4.x
22gem "sprockets", "~> 3.7.3"
23
24# this will eventually be added to rails,
25# allows us to precompile all our templates in the unicorn master
26gem "actionview_precompiler", require: false
27
28gem "discourse-seed-fu"
29
30gem "mail"
31gem "mini_mime"
32gem "mini_suffix"
33
34# config/initializers/006-mini_profiler.rb depends upon the RedisClient#call.
35# Rework this when upgrading to redis client 5.0 and above.
36gem "redis", "< 5.0"
37
38# This is explicitly used by Sidekiq and is an optional dependency.
39# We tell Sidekiq to use the namespace "sidekiq" which triggers this
40# gem to be used. There is no explicit dependency in sidekiq cause
41# redis namespace support is optional
42# We already namespace stuff in DiscourseRedis, so we should consider
43# just using a single implementation in core vs having 2 namespace implementations
44gem "redis-namespace"
45
46# NOTE: AM serializer gets a lot slower with recent updates
47# we used an old branch which is the fastest one out there
48# are long term goal here is to fork this gem so we have a
49# better maintained living fork
50gem "active_model_serializers", "~> 0.8.3"
51
52gem "http_accept_language", require: false
53
54gem "discourse-fonts", require: "discourse_fonts"
55
56gem "message_bus"
57
58gem "rails_multisite"
59
60gem "fastimage"
61
62gem "aws-sdk-s3", require: false
63gem "aws-sdk-sns", require: false
64gem "excon", require: false
65gem "unf", require: false
66
67gem "email_reply_trimmer"
68
69gem "image_optim"
70gem "multi_json"
71gem "mustache"
72gem "nokogiri"
73gem "loofah"
74gem "css_parser", require: false
75
76gem "omniauth"
77gem "omniauth-facebook"
78gem "omniauth-twitter"
79gem "omniauth-github"
80
81gem "omniauth-oauth2", require: false
82
83gem "omniauth-google-oauth2"
84
85gem "oj"
86
87gem "pg"
88gem "mini_sql"
89gem "pry-rails", require: false
90gem "pry-byebug", require: false
91gem "rtlcss", require: false
92gem "messageformat-wrapper", require: false
93gem "rake"
94
95gem "thor", require: false
96gem "diffy", require: false
97gem "rinku"
98gem "sidekiq"
99gem "mini_scheduler"
100
101gem "execjs", require: false
102gem "mini_racer", "0.17.pre13"
103
104gem "highline", require: false
105
106gem "rack"
107
108gem "rack-protection" # security
109gem "cbor", require: false
110gem "cose", require: false
111gem "addressable"
112gem "json_schemer"
113
114gem "net-smtp", require: false
115gem "net-imap", require: false
116gem "net-pop", require: false
117gem "digest", require: false
118
119# Gems used only for assets and not required in production environments by default.
120# Allow everywhere for now cause we are allowing asset debugging in production
121group :assets do
122 gem "uglifier"
123end
124
125group :test do
126 gem "capybara", require: false
127 gem "webmock", require: false
128 gem "fakeweb", require: false
129 gem "simplecov", require: false
130 gem "selenium-webdriver", "~> 4.14", require: false
131 gem "selenium-devtools", require: false
132 gem "test-prof"
133 gem "rails-dom-testing", require: false
134 gem "minio_runner", require: false
135end
136
137group :test, :development do
138 gem "rspec"
139 gem "listen", require: false
140 gem "certified", require: false
141 gem "fabrication", require: false
142 gem "mocha", require: false
143
144 gem "rb-fsevent", require: RUBY_PLATFORM =~ /darwin/i ? "rb-fsevent" : false
145
146 gem "rspec-rails"
147
148 gem "shoulda-matchers", require: false
149 gem "rspec-html-matchers"
150 gem "pry-stack_explorer", require: false
151 gem "byebug", require: ENV["RM_INFO"].nil?, platform: :mri
152 gem "rubocop-discourse", require: false
153 gem "parallel_tests"
154
155 gem "rswag-specs"
156
157 gem "annotate"
158
159 gem "syntax_tree"
160 gem "syntax_tree-disable_ternary"
161
162 gem "rspec-multi-mock"
163end
164
165group :development do
166 gem "ruby-prof", require: false, platform: :mri
167 gem "bullet", require: !!ENV["BULLET"]
168 gem "better_errors", platform: :mri, require: !!ENV["BETTER_ERRORS"]
169 gem "binding_of_caller"
170 gem "yaml-lint"
171 gem "yard"
172end
173
174if ENV["ALLOW_DEV_POPULATE"] == "1"
175 gem "discourse_dev_assets"
176 gem "faker", "~> 2.16"
177else
178 group :development, :test do
179 gem "discourse_dev_assets"
180 gem "faker", "~> 2.16"
181 end
182end
183
184# this is an optional gem, it provides a high performance replacement
185# to String#blank? a method that is called quite frequently in current
186# ActiveRecord, this may change in the future
187gem "fast_blank", platform: :ruby
188
189# this provides a very efficient lru cache
190gem "lru_redux"
191
192gem "htmlentities", require: false
193
194# IMPORTANT: mini profiler monkey patches, so it better be required last
195# If you want to amend mini profiler to do the monkey patches in the railties
196# we are open to it. by deferring require to the initializer we can configure discourse installs without it
197
198gem "rack-mini-profiler", require: ["enable_rails_patches"]
199
200gem "unicorn", require: false, platform: :ruby
201gem "puma", require: false
202
203gem "rbtrace", require: false, platform: :mri
204
205# required for feed importing and embedding
206gem "ruby-readability", require: false
207
208# rss gem is a bundled gem from Ruby 3 onwards
209gem "rss", require: false
210
211gem "stackprof", require: false, platform: :mri
212gem "memory_profiler", require: false, platform: :mri
213
214gem "cppjieba_rb", require: false
215
216gem "lograge", require: false
217gem "logstash-event", require: false
218gem "logster"
219
220# A fork of sassc with dart-sass support
221gem "sassc-embedded"
222
223gem "rotp", require: false
224
225gem "rqrcode"
226
227gem "rubyzip", require: false
228
229gem "sshkey", require: false
230
231gem "rchardet", require: false
232gem "lz4-ruby", require: false, platform: :ruby
233
234gem "sanitize"
235
236if ENV["IMPORT"] == "1"
237 gem "mysql2"
238 gem "redcarpet"
239
240 # NOTE: in import mode the version of sqlite can matter a lot, so we stick it to a specific one
241 gem "sqlite3", "~> 1.3", ">= 1.3.13"
242 gem "ruby-bbcode-to-md", git: "https://github.com/nlalonde/ruby-bbcode-to-md"
243 gem "reverse_markdown"
244 gem "tiny_tds"
245 gem "csv"
246end
247
248group :generic_import, optional: true do
249 gem "sqlite3"
250 gem "redcarpet"
251end
252
253gem "web-push"
254gem "colored2", require: false
255gem "maxminddb"
256
257gem "rails_failover", require: false
258
259gem "faraday"
260gem "faraday-retry"
261
262# workaround for faraday-net_http, see
263# https://github.com/ruby/net-imap/issues/16#issuecomment-803086765
264gem "net-http"
265
266# Workaround until Ruby ships with cgi version 0.3.6 or higher.
267gem "cgi", ">= 0.3.6", require: false
268
269gem "tzinfo-data"
270gem "csv", require: false
271
272# dependencies for the automation plugin
273gem "iso8601"
274gem "rrule"
275
276group :migrations, optional: true do
277 gem "extralite-bundle", require: "extralite"
278
279 # auto-loading
280 gem "zeitwerk"
281
282 # databases
283 gem "trilogy"
284
285 # CLI
286 gem "ruby-progressbar"
287
288 # non-cryptographic hashing algorithm for generating placeholder IDs
289 gem "digest-xxhash"
290end
291
292gem "dry-initializer", "~> 3.1"
293
294gem "parallel"