All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.0 - 2026-09-07
Initial release.
Added
Mutare.Plug.Halt(:plug_halt) — removesPlug.Conn.halt/1, pipe-aware (halt(conn)→conn; a piped stage →Function.identity()).Mutare.Plug.Status(:http_status) — swaps the atom status ofPlug.Conn.put_status/2,send_resp/3,resp/3,send_chunked/2, andsend_file/3,4,5for a curated same-family sibling; per-instance configurable via{module, swaps: %{...}}.Mutare.Plug.Session(:plug_session) — removesPlug.Conn.put_session/3,delete_session/2,clear_session/1, andconfigure_session/2(removingconfigure_session(conn, renew: true)on login is the classic session-fixation bypass).Mutare.Plug.Header(:resp_header) — removesPlug.Conn.put_resp_header/3,delete_resp_header/2, andput_resp_content_type/2,3.Mutare.Plug.Cookie(:resp_cookie) — removesPlug.Conn.put_resp_cookie/3,4anddelete_resp_cookie/2,3, flips/drops explicit stringsame_site:cookie policy options, and drops themax_age:option ofput_resp_cookie/4(persistent cookie → session cookie).Mutare.Plug.Body(:resp_body) — blanks the body argument ofPlug.Conn.send_resp/3andresp/3to""("does any test read the response body?"); on a literal body its whole-call rewrite supersedes the built-in string family's sentinel leaves via Mutare's overlap pruning.Mutare.Plug.all/0for splicing all six families into a:mutatorslist.