openssl@3 to openssl@4 migration tracking
Staging branch process
This migration is now being run through the openssl-4-migration-staging branch. New migration PRs should target that branch and use branches in Homebrew/homebrew-core rather than forks.
Work root-first, then trace down the dependent tree. This avoids the mixed openssl@3 / openssl@4 linkage seen when leaf formulae are migrated directly against main. Use brew deps --tree --include-build <formula> / brew deps --graph --dot --include-build <formula> to order follow-up work.
For staging PRs:
- use the labels
openssl-4-migration, staging-branch-pr, and CI-skip-recursive-dependents
- skip routine local brew ops; staging CI is the validation path for this migration
- keep independent formulae split for quick review/merge
- group formulae only when they are small to build and tightly coupled
Current root pipeline PR map
Depth 0 roots / prerequisites
Depth 1 dependents
Depth 2 dependents
Depth 3 dependents
614 formulae depend on openssl@3 (including => :build / => :test deps).
Grouped by dependent count, then by build system. Migrate leaves first. If they break, blast radius is limited.
See OpenSSL 4.0 release notes for breaking changes. Common failure modes:
- C/C++:
ASN1_STRING is now opaque; X509 getters now return const pointers.
- Rust:
openssl-sys v0.10.78 (released 2026-04-19) is the first release supporting OpenSSL 4.
- Some formulae declare
depends_on "openssl@3" but do not actually link it. Verify if we can drop the dependency rather than migrate.
Leaves (0 dependents) (444)
Rust (98)
Go (5)
C/C++ (CMake) (104)
C/C++ (autotools) (147)
Other (90)
1 dependent (58)
Go (1)
C/C++ (CMake) (23)
C/C++ (autotools) (23)
Other (11)
2–5 dependents (67)
Rust (1)
C/C++ (CMake) (18)
C/C++ (autotools) (34)
Other (14)
6+ dependents (45)
Rust (4)
C/C++ (CMake) (9)
C/C++ (autotools) (28)
Other (4)
openssl@3toopenssl@4migration trackingStaging branch process
This migration is now being run through the
openssl-4-migration-stagingbranch. New migration PRs should target that branch and use branches inHomebrew/homebrew-corerather than forks.Work root-first, then trace down the dependent tree. This avoids the mixed
openssl@3/openssl@4linkage seen when leaf formulae are migrated directly againstmain. Usebrew deps --tree --include-build <formula>/brew deps --graph --dot --include-build <formula>to order follow-up work.For staging PRs:
openssl-4-migration,staging-branch-pr, andCI-skip-recursive-dependentsCurrent root pipeline PR map
Depth 0 roots / prerequisites
cmakecmake: migrate to openssl@4 #280820apr-utilapr-util: migrate to openssl@4 #280827asioasio: migrate to openssl@4 #280828dotnetdotnet: migrate to openssl@4 #280829erlangerlang: migrate to openssl@4 #280830freetdsfreetds: migrate to openssl@4 #280831grpcgrpc: migrate to openssl@4 #280832hiredishiredis: migrate to openssl@4 #280833krb5krb5: migrate to openssl@4 #280834libeventlibevent: migrate to openssl@4 #280835libfido2libfido2: migrate to openssl@4 #280836librdkafkalibrdkafka: migrate to openssl@4 #280837libsshlibssh: migrate to openssl@4 #280838libssh2libssh2: use openssl@4 #278658 (existing open PR)mariadb-connector-cmariadb-connector-c: migrate to openssl@4 #280839openldapopenldap: migrate to openssl@4 #280840opusfileopusfile: migrate to openssl@4 #280841python@3.11python@3.11: migrate to openssl@4 #280843python@3.12python@3.12: migrate to openssl@4 #280844python@3.13python@3.13: migrate to openssl@4 #280845python@3.14python@3.14: migrate to openssl@4 #280846srtsrt: migrate to openssl@4 #280847tcl-tktcl-tk: migrate to openssl@4 #280848tcl-tk@8tcl-tk@8: migrate to openssl@4 #280849wgetwget: migrate to openssl@4 #280850Depth 1 dependents
apache-arrowapache-arrow: migrate to openssl@4 #280851bindbind: migrate to openssl@4 #280852curlcurl: migrate to openssl@4 #280853ffmpegffmpeg: migrate to openssl@4 #280854follyfolly: migrate to openssl@4 #280855httpdhttpd: migrate to openssl@4 #280856libpqlibpq: migrate to openssl@4 #280857nodenode: migrate to openssl@4 #280858postgresql@17postgresql@17: migrate to openssl@4 #280859postgresql@18postgresql@18: migrate to openssl@4 #280860pulseaudiopulseaudio: migrate to openssl@4 #280861qtbaseqtbase: migrate to openssl@4 #280862rustrust: migrate to openssl@4 #280863systemdsystemd: migrate to openssl@4 #280864unboundunbound: migrate to openssl@4 #280865Depth 2 dependents
cargo-ccargo-c: migrate to openssl@4 #280867cryptographycryptography: migrate to openssl@4 #280868gdalgdal: migrate to openssl@4 #280870phpphp: migrate to openssl@4 #280871rubyruby: migrate to openssl@4 #280872Depth 3 dependents
gstreamergstreamer: migrate to openssl@4 #280873614 formulae depend on
openssl@3(including=> :build/=> :testdeps).Grouped by dependent count, then by build system. Migrate leaves first. If they break, blast radius is limited.
See OpenSSL 4.0 release notes for breaking changes. Common failure modes:
ASN1_STRINGis now opaque; X509 getters now returnconstpointers.openssl-sys v0.10.78(released 2026-04-19) is the first release supporting OpenSSL 4.depends_on "openssl@3"but do not actually link it. Verify if we can drop the dependency rather than migrate.Leaves (0 dependents) (444)
Rust (98)
anchoranchor: removeopenssl@3dependency #278367ansible@10ansible@9aoeazure-clibbotbtclic2patoolcargo-crevcargo-geigercargo-instrumentscargo-udepsclamavcodannacode-clicode2promptcodeberg-clicodex-acpcondurecookclicookcli: remove openssl dependency #280274crunchy-clidatadog-static-analyzerdurausesopenssl-sys 0.9.72eurekafeludaferoxbusterfindomainforgejo-clifwgerustgit-seriesgit-trimgit-workspacegit-xetgitloguegitnrgittypegituigurkicann-rdapicp-cliintelli-shellironclawkeeper-commanderlakekeeperleetcode-clilegbalocalstacklycheemagikamavsdkmelinetdatanushellpaypdflypdnsrecpgrxpkgxprojectableprowlerproxelarprrpushpinrattler-buildriverrojoroverruby@3.2ruby@3.3saplingscryer-prologsem-clisentry-clisequoia-chameleon-gnupgsequoia-sqsh4d0wupsheldonsigstoresilesniffnetsolanasprocketstellar-clitabiewtectonicteleporttermscptermusictext-embeddings-inferencetoml-bombadiltrunkwallywatchmanwatchman: migrate to openssl@4 #279297weaveyekyozefuzellijGo (5)
aws-sam-cligocryptfsgocryptfs: use openssl@4 #278464mender-artifactmender-artifact: use openssl@4 #278466mender-climender-cli: use openssl@4 #278465ttC/C++ (CMake) (104)
adios2amqp-cppapibdeprecatedawscurlazure-storage-cppbareos-clientbaresipbibtexconvbrpccafcassandra-cpp-driverclickhouse-cppclickhouse-odbcclipboardcnatscolmapcppcmscsounddotnet@6dwarfsdxpyecflow-uiemqxencfsetettercapfastnetmonfluent-bitfreerdph2ohalidehttpinghttping: use openssl@4 #279099juliakcovlastpass-clilibcouchbaselibdpplibjwtliboqslibpulsarlibtinsluvitmanticoresearchmapnikmariadbmariadb-connector-odbcmariadb@10.11mariadb@10.5mariadb@10.6mariadb@11.4mariadb@11.8moneromonetdbmongo-c-driver@1mosquittomusikcubemydumpermysql-client@8.0mysql-client@8.4mysql-connector-c++nemunmailntopngnzbgetopenikedopentelemetry-cpportposslsigncodepercona-server@8.0percona-xtrabackuppercona-xtrabackup@8.0pgbackrestpistachepodofoproxygenqcaqxmppreccretdecrizinrootrtagsrtl_433sagittarius-schemesippsipp: use openssl@4 #279100snapcastsnapcast: use openssl@4 #279107snortssldumpstubbyswi-prologsynergy-coretarantooltdlibthors-anviltrafficserverunshielduuuwdcwdc: use openssl@4 #279102weaviate-cliwowneroxmrigyubico-piv-toolzeekzncC/C++ (autotools) (147)
activemq-cppalpineaqbankingaria2axelbacula-fdbigloobitchxbtfsbtpdburpcadavercfenginecitusconservercoturncouchdbdillodnsdistdnsperfdovecotduo_unixdynomiteejabberdekg2epic5erlang@25erlang@27fetchmailffmpeg@2.8fossilfreeradius-serverfreeswitchgambit-schemegcligerbil-schemeglooxgnupg-pkcs11-scdgotgsoapgtmessheimdalhttrackhttrack: use openssl@4 #279547hydraicecastike-scaniperf3iperf3: use openssl@4 #279551ipmitoolircd-hybridirciiisyncjohn-jumbolassoldapvilftplibcoaplibdaplibexosiplibfreefarelibmowglilibp11libpq@16libpq@17libu2f-serverlighttpdlinkslinks: use openssl@4 #279545lynxlynx: use openssl@4 #279546memtier_benchmarkmftermmidnight-commanderminimal-racketmonitmonitoring-pluginsmuttnagiosnagios: use openssl@4 #279105ncrackneomuttnghttp2ngircdnmhnopollnrpensdntpnutobjfwomniorbopenfortivpnopenfortivpn: use openssl@4 #279549openscopenvpnophcrackpam-u2fpassengerpdnspgbouncerphp@8.1php@8.2php@8.3pjprojectpkcs11-toolspostgresql@12postgresql@13postgresql@14postgresql@15postgresql@16pure-ftpdpwsafepwsafe: use openssl@4 #279003python-freethreadingredwax-toolrethinkdbrpki-clientruby@3.0ruby@3.1s3-backersblim-sfccscamperscryptshairport-syncshellinaboxshibboleth-spsiegesilksipsaksipsak: use openssl@4 #279580slowhttptestslrnsngrepsnobol4snownewsspice-serversqlciphersqlcipher: use openssl@4 #279567squidsstp-clientstrongswanstunnelsylpheedsyslog-ngtcpdumptcpflowtcpflow: use openssl@4 #279556tinctomcat-nativeurwebvarnishvirtuosox3270xaricyafczabbixOther (90)
aircrack-ngamberargyll-cmsarturoborgbackupbozohttpdbozohttpd: use openssl@4 #279137chawancrystal-icrctpvcvsyncdmg2imgdnsvizdrogoneasy-rsaeasy-rsa: use openssl@4 #279129edbrowseeflelectriceralchemyeximfastdfb-clientfelinksflashromforbiddengetxbookgit-cryptgitversiongkrellmhaproxyhaproxy@2.8hashcashhashcash: use openssl@4 #279516hcxtoolshkhttp_loadi2pdimap-uwimapfilterios-webkit-debug-proxyirssijosekeakeydbkorelanraragildidldid-procursusllgomailcatchermakepkgmegatoolsmin-langmonkeyspherenoirnvcheckeropenrtsppdfalyzerpgloaderpicorubyproxytunnelpulledporkpypy3.10pypy3.9rails-mcp-serverrakudo-starreadperedictredis@6.2redis@8.2rpmspectools-nails2geometrysgrspipedsslscansslsplitswtpmteslamatetestssltestssl: use openssl@4 #278463tsducku-boot-toolsuftpuftp: use openssl@4 #279548uwsgivineyardvroomwebfswebfs: use openssl@4 #279093wrkwrk: use openssl@4 #278998x11vncxidelxidel: use openssl@4 #279557zchunkzsign1 dependent (58)
Go (1)
gensio(1 dependents)C/C++ (CMake) (23)
apt(1 dependents)azure-storage-common-cpp(1 dependents)dcmtk(1 dependents)gdcm(1 dependents)getdns(1 dependents)libff(1 dependents) libff: migrate to openssl@4 and fix test #278901libgit2@1.7(1 dependents)libmsquic(1 dependents)libpaho-mqtt(1 dependents)libre(1 dependents)libvncserver(1 dependents)micromamba(1 dependents)mysql(1 dependents)mysql@8.0(1 dependents)mysql@8.4(1 dependents)nuraft(1 dependents)pdal(1 dependents)percona-server(1 dependents)poco(1 dependents)qpid-proton(1 dependents)signalwire-client-c(1 dependents)tiledb(1 dependents)xrootd(1 dependents)C/C++ (autotools) (23)
cups(1 dependents)erlang@24(1 dependents)gwenhywfar(1 dependents)httperf(1 dependents) httperf: use openssl@4 #279517jimtcl(1 dependents)liboauth(1 dependents) liboauth: use openssl@4 #279578libslax(1 dependents)libstrophe(1 dependents)libtorrent-rakshasa(1 dependents)md5sha1sum(1 dependents) md5sha1sum: use openssl@4 #279011memcached(1 dependents)nagios-plugins(1 dependents)nginx(1 dependents)node@18(1 dependents)node@20(1 dependents)oath-toolkit(1 dependents)opensaml(1 dependents)python@3.9(1 dependents)sleuthkit(1 dependents)sofia-sip(1 dependents)softhsm(1 dependents)thrift(1 dependents)yara(1 dependents)Other (11)
apache-serf(1 dependents)etcd-cpp-apiv3(1 dependents)karchive(1 dependents)kmod(1 dependents)libtpms(1 dependents)llama.cpp(1 dependents)mktorrent(1 dependents) mktorrent: use openssl@4 #279081pixiewps(1 dependents)redis(1 dependents)spice-gtk(1 dependents)zookeeper(1 dependents)2–5 dependents (67)
Rust (1)
ruby@3.4(2 dependents)C/C++ (CMake) (18)
awscli(3 dependents)azure-core-cpp(2 dependents)ccache(2 dependents)cpp-httplib(2 dependents) cpp-httplib: migrate to openssl@4 #278380cpprestsdk(3 dependents)davix(2 dependents)dotnet@8(2 dependents)dotnet@9(5 dependents)libks(2 dependents)libtorrent-rasterbar(2 dependents)libwebsockets(3 dependents)mongo-c-driver(4 dependents)mysql-client(3 dependents)qpdf(5 dependents)rabbitmq-c(2 dependents)s2n(2 dependents) s2n: migrate toopenssl@4#280912ttyd(2 dependents)wabt(3 dependents)C/C++ (autotools) (34)
afflib(2 dependents)cyrus-sasl(2 dependents) cyrus-sasl: migrate toopenssl@4#280924erlang@26(2 dependents)gpac(2 dependents)ldns(4 dependents)libewf(2 dependents)libfixbuf(2 dependents)libimobiledevice(3 dependents)libngtcp2(4 dependents)libretls(3 dependents)libshout(4 dependents)libtrace(2 dependents)libxmlsec1(3 dependents)neon(5 dependents)net-snmp(5 dependents)nmap(3 dependents)node@22(5 dependents)node@24(3 dependents)openssh(2 dependents)php@8.4(2 dependents)pkcs11-helper(4 dependents)python@3.10(2 dependents)riemann-client(2 dependents)rsync(4 dependents)samba(2 dependents)socat(5 dependents)srtp(2 dependents)tarsnap(2 dependents)texlive(4 dependents)tor(3 dependents)w3m(5 dependents)xml-security-c(3 dependents)xml-tooling-c(2 dependents)xmlrpc-c(2 dependents)Other (14)
berkeley-db(3 dependents)crystal(5 dependents)fbthrift(3 dependents)fizz(5 dependents)mupdf(3 dependents)mvfst(5 dependents)node-build(2 dependents)pipewire(2 dependents)pyenv(4 dependents)pypy(2 dependents)rtmpdump(5 dependents)ruby-build(2 dependents)valkey(3 dependents)wangle(3 dependents)6+ dependents (45)
Rust (4)
cargo-c(10 dependents)cryptography(110 dependents)gstreamer(12 dependents)ruby(37 dependents)C/C++ (CMake) (9)
apache-arrow(7 dependents)aws-c-cal(7 dependents) aws-c-cal: migrate toopenssl@4#280911dotnet(11 dependents)folly(9 dependents)gdal(9 dependents)grpc(8 dependents)libfido2(9 dependents)libgit2(36 dependents) libgit2: migrate toopenssl@4#280914libssh(14 dependents)mariadb-connector-c(15 dependents)srt(7 dependents)C/C++ (autotools) (28)
apr-util(15 dependents)asio(11 dependents)bind(11 dependents)curl(25 dependents)erlang(18 dependents)ffmpeg(75 dependents)freetds(7 dependents)httpd(9 dependents)krb5(22 dependents)libevent(56 dependents)libpq(51 dependents)librdkafka(6 dependents)libssh2(24 dependents)node(337 dependents)openldap(11 dependents)opusfile(10 dependents)php(22 dependents)postgresql@17(12 dependents)postgresql@18(22 dependents)python@3.11(6 dependents)python@3.12(22 dependents)python@3.13(38 dependents)python@3.14(806 dependents)rust(941 dependents)tcl-tk(19 dependents)tcl-tk@8(13 dependents)unbound(7 dependents)wget(12 dependents)Other (4)
hiredis(7 dependents)pulseaudio(31 dependents)qtbase(108 dependents)systemd(69 dependents)openssl@3#134251