# CHANGELOG

## 4.0.1 - 2025-07-31

- [FIX] Ensure Rack 2 / 3 cross compatibility [#654](https://github/com/MiniProfiler/rack-mini-profiler/pull/654)
## 4.0 - 2025-06-11

- [BREAKING CHANGE] Ruby version 3.1.0 or later is required. [#632](https://github.com/MiniProfiler/rack-mini-profiler/pull/632)
- [FEATURE] Implement prepend patch for postgres [#625](https://github.com/MiniProfiler/rack-mini-profiler/pull/625)
- [FEATURE] Show Active Record QueryCache hits in UI. [#640](https://github.com/MiniProfiler/rack-mini-profiler/pull/640)
- [FEATURE] Show record type and count in SQL query UI. [#638](https://github.com/MiniProfiler/rack-mini-profiler/pull/638)
- [FIX] Requests page fails due to trying to modify a frozen string. [#630](https://github.com/MiniProfiler/rack-mini-profiler/pull/630)
- [FIX] alignment of SQL query start times. [#627](https://github.com/MiniProfiler/rack-mini-profiler/pull/627)
- [FIX] Lower case HTTP response headers to be compatible with Rack 3 [#628](https://github.com/MiniProfiler/rack-mini-profiler/pull/628)
- [FIX] Truncate long profiler name in profiler popup. [#634](https://github.com/MiniProfiler/rack-mini-profiler/pull/634)
- [FIX] `flamegraph_mode` query param having no effect. [#635](https://github.com/MiniProfiler/rack-mini-profiler/pull/635)
- [FIX] max_traces_to_show had chance to break the profiler frontend [#297](https://github.com/MiniProfiler/rack-mini-profiler/issues/297)

## 3.3.1 - 2024-02-15
- [FEATURE] Support dynamic `config.content_security_policy_nonce` [#609](https://github.com/MiniProfiler/rack-mini-profiler/pull/609)
- [FEATURE] Add flamgraph path to response header: [#601](https://github.com/MiniProfiler/rack-mini-profiler/pull/601)

## 3.3.0 - 2023-12-07
- [FEATURE] Use `?pp=flamegraph?ignore_gc=true` or `config.flamegraph_ignore_gc` to ignore gc in flamegraphs. [#599](https://github.com/MiniProfiler/rack-mini-profiler/pull/599)

## 3.2.1 - 2023-12-07
- [FIX] memory_profiler was broken due to an undefined local [#597](https://github.com/MiniProfiler/rack-mini-profiler/pull/597)

## 3.2.0 - 2023-12-06
- [BREAKING CHANGE] Ruby version 2.7.0 or later is required.
- [FEATURE] All RMP actions can be chosen by including a X-Rack-Mini-Profiler header as well as by query parameter. [#578](https://github.com/MiniProfiler/rack-mini-profiler/pull/578)
- [FEATURE] Speedscope 1.12 -> 1.16
- [FIX] If patch_rails is false, do not patch mysql2 or pg [#583](https://github.com/MiniProfiler/rack-mini-profiler/pull/583)
- [FIX] vertical position bottom now aligns the detail window correctly [#581](https://github.com/MiniProfiler/rack-mini-profiler/pull/581)
- [FIX] Webpacker hiccup in some setups [#582](https://github.com/MiniProfiler/rack-mini-profiler/pull/582)
- [INTERNAL] Capture rows instantiated by ActiveRecord, UI to be added later [#585](https://github.com/MiniProfiler/rack-mini-profiler/pull/585)
- [INTERNAL] Lots of refactoring.


## 3.1.1 - 2023-08-01

- [FIX] Include configured base path in speedscope iframe URL [#587](https://github.com/MiniProfiler/rack-mini-profiler/pull/587)
- [FIX] Race condition starting CacheCleanupThread [#586](https://github.com/MiniProfiler/rack-mini-profiler/pull/586)
- [FEATURE] Add controller name to description [#567](https://github.com/MiniProfiler/rack-mini-profiler/pull/567)
- [FIX] 'more' link w/HTTPS [#574](https://github.com/MiniProfiler/rack-mini-profiler/pull/574)

## 3.1.0 - 2023-04-11

- [FEATURE] The query parameter that RMP uses (by default, pp) is now configurable [#553](https://github.com/MiniProfiler/rack-mini-profiler/pull/553)
- [FEATURE] You can now opt-out of the Net::HTTP patch by using RACK_MINI_PROFILER_PATCH_NET_HTTP="false"
- [FIX] Error responses now include header values from the app, and stackprof not installed message now has correct content [#547](https://github.com/MiniProfiler/rack-mini-profiler/pull/547)
- [FIX] RMP pages now have more valid HTML, with title elements [#552](https://github.com/MiniProfiler/rack-mini-profiler/pull/552)
- [BREAKING CHANGE] Ruby 2.4 and Ruby 2.5 are no longer supported.
- [FIX] Now works with apps that don't otherwise require erb [#531](https://github.com/MiniProfiler/rack-mini-profiler/pull/531)
- [DOCS] Added Heroku Redis instructions
- [DEPRECATION] We are changing the name of the generators to `rack_mini_profiler`, e.g. `rack_mini_profiler:install` [#550](https://github.com/MiniProfiler/rack-mini-profiler/pull/550)

## 3.0.0 - 2022-02-24

- PERF: Improve snapshots page performance (#518) (introduces breaking changes to the API of `AbstractStore`, `MemoryStore` and `RedisStore`, and removes the `snapshots_limit` config option.)

## 2.3.4 - 2022-02-23

- [FEATURE] Add cookie path support for subfolder sites
- [FIX] Remove deprecated uses of Redis#pipelined

## 2.3.3 - 2021-08-30

- [FEATURE] Introduce `pp=flamegraph_mode`
- [FEATURE] Richer CSP configuration options
- [FEATURE] Add support for Hotwire Turbo Drive

## 2.3.2 - 2021-04-30

- [FEATURE] Introduce `pp=async-flamegraph` for asynchronous flamegraphs

## 2.3.1 - 2021-01-29

- [FIX] compatability with Ruby 3.0
- [FIX] compatability with peek-mysql2

## 2.3.0 - 2020-12-29

- [FEATURE] flamegraphs are now based off speedscope

## 2.2.1 - 2020-12-23

- [FIX] Turbolinks integration causing increasing number of GET requests
- [FEATURE] enahanced log transporter with compression and exponential backoff
- [FEATURE] sameSite=Lax added to MiniProfiler cookie

## 2.2.0 - 2020-10-19

- [UX] Enhancements to snapshots UI
- [FEATURE] Mini Profiler cookie is now sameSite=lax
- [FEATURE] Snapshots transporter
- [FEATURE] Redact SQL queries in snapshots by default

## 2.1.0 - 2020-09-17

- [FEATURE] Allow assets to be precompiled with Sprockets
- [FEATURE] Snapshots sampling (see README in repo)
- [FEATURE] Allow `skip_paths` config to contain regular expressions

## 2.0.4 - 2020-08-04

- [FIX] webpacker may exist with no config, allow for that

## 2.0.3 - 2020-07-29

- [FIX] support for deprecation free Redis 4.2
- [FEATURE] skip /packs when serving static assets
- [FEATURE] allow Net::HTTP patch to be applied with either prerpend or alias

## 2.0.2 - 2020-05-25

- [FIX] client timings were not showing up when you clicked show trivial

## 2.0.1 - 2020-03-17

- [REVERT] Prepend Net::HTTP patch instead of class_eval and aliasing (#429) (technique clashes with New Relic and Skylight agents)

## 2.0.0 - 2020-03-11

- [FEATURE] Prepend Net::HTTP patch instead of class_eval and aliasing (#429)
- [FEATURE] Stop patching Rails and use `ActiveSupport::Notifications` by default (see README.md for details)

## 1.1.6 - 2020-01-30

- [FIX] edge condition on page transition function could lead to exceptions

## 1.1.5 - 2020-01-28

- [FIX] correct custom counter regression
- [FIX] respect max_traces_to_show
- [FIX] handle storage engine failures in whitelist mode

## 1.1.4 - 2019-12-12

- [SECURITY] carefully crafted SQL could cause an XSS on sites that do not use CSPs

## 1.1.3 - 2019-10-28

- [FEATURE] precompile all templates to avoid need for unsafe-eval

## 1.1.2 - 2019-10-24

- [FIX] JS payload was not working on IE11 and leading to errors
- [FIX] Remove global singleton_class which was injected
- [FIX] Regressions post removal of jQuery

## 1.1.1 - 2019-10-22

- [FIX] correct JavaScript fetch support header iteration (Jorge Manrubia)

## 1.1.0 - 2019-10-01

- [FEATURE] remove jQuery dependency, switch template library to dot.js
- [FEATURE] disable all sensitive debugging methods by default (env, memory profiling) can be enabled with enable_advanced_debugging_tools.
- [FIX] when conditionally requiring rack mini profiler, asset precompile could fail
- [FEATURE] `/rack-mini-profiler/requests` can be used to monitor all requests for apps that do not have a UI (like API apps)
- [SECURITY] XSS injection in `?pp=help` via rogue uri

## 1.0.2 - 2019-02-05

- [FIX] correct script injection to work with Rails 6 and above

## 1.0.1 - 2018-12-10

- [FIX] add support for exec_params instrumentation in PG, this method as of PG 1.1.0 no longer
 routes calls to exec / async_exec
- [FIX] add missing started_at on requests
- [UX] amend colors so we pass lighthouse
- [FEATURE] fetch API support
- [FIX] getEntriesByName is missing in iOS, workaround
- [FEATURE] drop support for Ruby 2.2.0 we require 2.3.0 and up (EOL Ruby no longer supported)

## 1.0.0 - 2018-03-29

- [BREAKING CHANGE] Ruby version 2.2.0 or later is required
- [FEATURE] use new web performance API to avoid warning @MikeRogers0
- [FEATURE] store hidden pref regarding showing mini profiler in session @MikeRogers0
- [FIX] correct jQuery 3.0 deprecations @TiSer
- [FIX] JS in IFRAME @naiyt

## 0.10.8 - 2017-12-01

- [FEATURE] Add `# frozen_string_literal: true` to all `lib/**/*.rb` files

## 0.10.7 - 2017-11-24

- [FEATURE] Replace Time.now with Process.clock_gettime(Process::CLOCK_MONOTONIC)
- [FIX] Error with webrick and empty cache control

## 0.10.6 - 2017-10-30

- [FEATURE] Support for vertical positions (top/bottom)
- [FEATURE] Suppress profiler results in print media @Mike Dillon
- [FIX] toggle shortcut not working @lukesilva
- [FEATURE] install generator @yhirano
- [FEATURE] store initial cache control headers in X-MiniProfiler-Original-Cache-Control @mrasu

## 0.10.5 - 2017-05-22

- [FIX] revert PG bind sniffing until it is properly tested

## 0.10.4 - 2017-05-17

- [FEATURE] log binds for pg @neznauy
- [FIX] use async exec pg monkey patch instead of exec
- [FEATURE] nuke less css and use sass instead
- [FIX] use jQuery on instead of bind
- [FIX] ensure redis get_unviewed_ids returns only ids that exist
- [FIX] correctly respect SCRIPT in env if it is sniffed by middleware

## 0.10.2 - 2017-02-08

- [FIX] improve turbolinks support
- [FEATURE] make location of mini_profiler injection customizable

## 0.10.1 - 2016-05-18

- [FEATURE] push forward the security checks so no work is ever done if a valid production
    cookie is not available (@sam)

## 0.9.9.2 - 2016-03-06

- [FEATURE] on pageTransition collapse previously expanded timings

## 0.9.9.1 - 2016-03-06

- [FEATURE] expost MiniProfiler.pageTransition() for use by SPA web apps (@sam)

## 0.9.9 - 2016-03-06

- [FIX] removes alias_method_chain in favor of alias_method until Ruby 1.9.3 (@ayfredlund)
- [FIX] Dont block mongo when already patched for another db (@rrooding @kbrock)
- [FIX] get_profile_script when running under passenger configured with RailsBaseURI (@nspring)
- [FEATURE] Add support for neo4j (@ProGM)
- [FIX] ArgumentError: comparison of String with 200 failed (@paweljw)
- [FEATURE] Add support for Riak (@janx)
- [PERF] GC profiler much faster (@dgynn)
- [FIX] If local storage is disabled don't bomb out (@elia)
- [FIX] Create tmp directory when actually using it (@kbrock)
- [ADDED] Default collapse_results setting that collapses multiple timings on same page to a single one (@sam)
- [ADDED] Rack::MiniProfiler.profile_singleton_method (@kbrock)
- [CHANGE] Added Rack 2.0 support (and dropped support for Rack 1.1) (@dgynn)

## 0.9.8 - 2015-11-27 (Sam Saffron)

- [FEATURE] disable_env_dump config setting (@mathias)
- [FEATURE] set X-MiniProfiler-Ids for all 2XX reqs (@tymagu2)
- [FEATURE] add support for NoBrainer (rethinkdb) profiling (@niv)
- [FEATURE] add oracle enhanced adapter profiling (@rrooding)
- [FEATURE] pp=profile-memory can now parse query params (@dgynn)


## 0.9.7 - 2015-08-03 (Sam Saffron)

- [FEATURE] remove confusing pp=profile-gc-time (Nate Berkopec)
- [FEATURE] truncate strings in pp=analyze-memory (Nate Berkopec)
- [FEATURE] rename pp=profile-gc-ruby-head to pp=profile-memory (Nate Berkopec)

## 0.9.6 - 2015-07-08 (Sam Saffron)

- [FIX] incorrect truncation in pp=analyze-memory

## 0.9.5 - 2015-07-08 (Sam Saffron)

- [FEATURE] improve pp=analyze-memory

## 0.9.4 - 2015-07-08 (Sam Saffron)
- [UX] added a link to "more" actions in profiler
- [FEATURE] pp=help now displays links
- [FEATURE] simple memory report with pp=analyze-memory

## 0.9.2 - 2014-06-26 (Sam Saffron)
- [CHANGE] staging and other environments behave like production (Cedric Felizard)
- [DOC] CHANGELOG reorg (Olivier Lacan)
- [FIXED] Double calls to Rack::MiniProfilerRails.initialize! now raise an exception (Julik Tarkhanov)
- [FIXED] Add no-store header (George Mendoza)

## 0.9.1 - 2014-03-13 (Sam Saffron)
- [ADDED] Added back Ruby 1.8 support (thanks Malet)
- [IMPROVED] Amended Railstie so MiniProfiler can be launched with action view or action controller (Thanks Akira)
- [FIXED] Rails 3.0 support (thanks Zlatko)
- [FIXED] Possible XSS (admin only)
- [FIXED] Corrected Sql patching to avoid setting instance vars on nil which is frozen (thanks Andy, huoxito)

## 0.9.0.pre - 2013-12-05 (Sam Saffron)
- Bumped up version to reflect the stability of the project
- [IMPROVED] Reports for pp=profile-gc
- [IMPROVED] pp=flamegraph&flamegraph_sample_rate=1 , allow you to specify sampling rates

## 2013-09-17 (Ross Wilson)
- [IMPROVED] Instead of supressing all "/assets/" requests we now check the configured
  config.assets.prefix path since developers can rename the path to serve Asset Pipeline
  files from

## 0.1.31 - 2013-09-03
- [IMPROVED] Flamegraph now has much increased fidelity
- [REMOVED] Ripped out flamegraph so it can be isolated into a gem
- [REMOVED] Ripped out pp=sample it just was never really used

## 0.1.30 - 2013-08-30
- [ADDED] Rack::MiniProfiler.counter_method(klass,name) for injecting counters
- [FIXED] Counters were not shifting the table correctly

## 0.1.29 - 2013-08-20
- [ADDED] Implemented exception tracing using TracePoint see pp=trace-exceptions
- [FIXED] SOLR patching had an incorrect monkey patch

## 0.1.28 - 2013-07-30
- [FIXED] Diagnostics in abstract storage was raising not implemented killing
  ?pp=env and others
- [FIXED] SOLR xml unescaped by mistake

## 0.1.27 - 2013-06-26
- [ADDED] Rack::MiniProfiler.config.backtrace_threshold_ms
- [ADDED] jQuery 2.0 support
- [FIXED] Disabled global ajax handlers on MP requests @JP

## 0.1.26 - 2013-04-11
- [IMPROVED] Allow Rack::MiniProfilerRails.initialize!(Rails.application), for post config intialization

## 0.1.25 - 2013-04-08
- [FIXED] Missed flamegraph.html from build

## 0.1.24 - 2013-04-08
- [ADDED] Flame Graph Support see: http://samsaffron.com/archive/2013/03/19/flame-graphs-in-ruby-miniprofiler
- [ADDED] New toggle_shortcut and start_hidden options
- [ADDED] Mongoid support
- [ADDED] Rack::MiniProfiler.counter counter_name {}
- [ADDED] Net:HTTP profiling
- [ADDED] Ruby 1.8.7 support ... grrr
- [IMPROVED] More robust gc profiling
- [IMPROVED] Script tag initialized via data-attributes
- [IMPROVED] Allow usage of existing jQuery if its already loaded
- [IMPROVED] Pre-authorize to run in all non development? and production? modes
- [FIXED] AngularJS support and MooTools
- [FIXED] File retention leak in file_store
- [FIXED] HTML5 implicit <body> tags
- [FIXED] pp=enable

## 0.1.22 - 2012-09-20
- [FIXED] Permission issue in the gem

## 2012-09-17
- [IMPROVED] Allow rack-mini-profiler to be sourced from github
- [IMPROVED] Extracted the pp=profile-gc-time out, the object space profiler needs to disable gc

## 0.1.21 - 2012-09-17
- [ADDED] New MemchacedStore
- [ADDED] Rails 4 support

## 0.1.20 - 2012-09-12 (Sam Saffron)
- [ADDED] pp=profile-gc: allows you to profile the GC in Ruby 1.9.3

## 0.1.19 - 2012-09-10 (Sam Saffron)
- [FIXED] Compatibility issue with Ruby 1.8.7

## 0.1.17 - 2012-09-07 (Sam Saffron)
- [FIXED] pp=sample was bust unless stacktrace was installed

## 0.1.16 - 2012-09-05 (Sam Saffron)
- [IMPROVED] Implemented stacktrace properly
- [FIXED] Long standing problem specs (issue with memory store)
- [FIXED] Issue where profiler would be dumped when you got a 404 in production (and any time rails is bypassed)

## 0.1.15.pre - 2012-09-04 (Sam Saffron)
- [FIXED] Annoying bug where client settings were not sticking
- [FIXED] Long standing issue with Rack::ConditionalGet stopping MiniProfiler from working properly

## 0.1.13.pre - 2012-09-03 (Sam Saffron)
- [ADDED] Setting: config.backtrace_ignores = [] - an array of regexes that match on caller lines that get ignored
- [ADDED] Setting: config.backtrace_includes = [] - an array of regexes that get included in the trace by default
- [ADDED] pp=normal-backtrace to clear the "sticky" state
- [IMPROVED] Cleaned up the way client settings are stored
- [IMPROVED] Made pp=full-backtrace "sticky"
- [IMPROVED] Changed "pp=sample" to work with "caller" no need for stack trace gem
- [FIXED] pg gem prepared statements were not being logged correctly

## 0.1.12.pre - 2012-08-20 (Sam Saffron)
- [IMPROVED] Cap X-MiniProfiler-Ids at 10, otherwise the header can get killed

## 0.1.11.pre - 2012-08-10 (Sam Saffron)
- [ADDED] Basic prepared statement profiling for Postgres

## 0.1.10 - 2012-08-07 (Sam Saffron)
- [ADDED] Option to disable profiler for the current session (pp=disable / pp=enable)
- [ADDED] yajl compatability contributed by Sven Riedel

## 0.1.9 - 2012-07-30 (Sam Saffron)
- [IMPROVED] Made compliant with ancient versions of Rack (including Rack used by Rails2)
- [FIXED] Broken share link
- [FIXED] Crashes on startup (in MemoryStore and FileStore)
- [FIXED] Unicode issue

## 0.1.7 - 2012-07-18 (Sam Saffron)
- [ADDED] First Paint time for Google Chrome
- [FIXED] Ensure non Rails installs have mini profiler

## 0.1.6 - 2012-07-12 (Sam Saffron)
- [ADDED] Native PG and MySql2 interceptors, this gives way more accurate times
- [ADDED] some more client probing built in to rails
- [IMPROVED] Refactored context so its a proper class and not a hash
- [IMPROVED] More tests
- [FIXED] Incorrect profiling steps (was not indenting or measuring start time right

## 0.1.3 - 2012-07-09 (Sam Saffron)
- [ADDED] New option to display full backtraces pp=full-backtrace
- [IMPROVED] Cleaned up mechanism for profiling in production, all you need to do now
  is call Rack::MiniProfiler.authorize_request to get profiling working in
  production
- [IMPROVED] Cleaned up railties, got rid of the post authorize callback

## 0.1.1 - 2012-06-28 (Sam Saffron)
- [ADDED] Started change log
- [ADDED] added MemcacheStore
- [IMPROVED] Corrected profiler so it properly captures POST requests (was supressing non 200s)
- [IMPROVED] Amended Rack.MiniProfiler.config[:user_provider] to use ip addres for identity
- [IMPROVED] Supress all '/assets/' in the rails tie (makes debugging easier)
- [FIXED] Issue where unviewed missing ids never got cleared
- [FIXED] record_sql was mega buggy
