notbugAs an Amazon Associate I earn from qualifying purchases.
Want a good read? Try FreeBSD Mastery: Jails (IT Mastery Book 15)
Want a good monitor light? See my photos
All times are UTC
Ukraine
The recently imposed "must be logged in" restriction is a response to increased bot traffic on the site. This affects search, commits, and vuxml pages.
Search engines are not blocked. Try using "site:www.freshports.org" and your search terms.
Port details
py-utls Drop-in ssl stdlib library using BoringSSL with first-class fingerprint impersonation
2026.7.8 securitynew! on this many watch lists=0 search for ports that depend on this port Find issues related to this port Report an issue related to this port View this port on Repology. pkg-fallout Package not present on quarterly.This port was created during this quarter. It will be in the next quarterly branch but not the current one.
Maintainer: sunpoet@FreeBSD.org search for ports maintained by this maintainer
Port Added: 2026-07-08 13:39:43
Last Update: 2026-07-11 12:21:26
Commit Hash: cf2e942
Also Listed In: python
License: MIT
WWW:
https://github.com/jawah/utls
Description:
Drop-in replacement for the ssl stdlib with a Fingerprint API for Chrome impersonation. Built on stock BoringSSL through boring-sys - no vendored patches, no curl-impersonate, no Go runtime at import time. Use it with any known Python http client you like or used to.
Homepage    cgit ¦ Codeberg ¦ GitHub ¦ GitLab ¦ SVNWeb - no subversion history for this port

Manual pages:
FreshPorts has no man page information for this port.
pkg-plist: as obtained via: make generate-plist
There is no configure plist information for this port.
USE_RC_SUBR (Service Scripts)
  • no SUBR information found for this port
Dependency lines:
  • ${PYTHON_PKGNAMEPREFIX}utls>0:security/py-utls@${PY_FLAVOR}
To install the port:
cd /usr/ports/security/py-utls/ && make install clean
To add the package, run one of these commands:
  • pkg install security/py-utls
  • pkg install py312-utls
NOTE: If this package has multiple flavors (see below), then use one of them instead of the name specified above.
NOTE: This is a Python port. Instead of py312-utls listed in the above command, you can pick from the names under the Packages section.
PKGNAME: py312-utls
Package flavors (<flavor>: <package>)
  • py312: py312-utls
distinfo:
TIMESTAMP = 1783564138 SHA256 (utls-2026.7.8.tar.gz) = 5e064d516862d4afc05138e096224fa5b805dc3591096a9d7f57a0fc026d9fd3 SIZE (utls-2026.7.8.tar.gz) = 117702

Expand this list (102 items)

Collapse this list.

SHA256 (rust/crates/aho-corasick-1.1.4.crate) = ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301 SIZE (rust/crates/aho-corasick-1.1.4.crate) = 184015 SHA256 (rust/crates/alloc-no-stdlib-2.0.4.crate) = cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3 SIZE (rust/crates/alloc-no-stdlib-2.0.4.crate) = 10105 SHA256 (rust/crates/alloc-stdlib-0.2.4.crate) = 0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195 SIZE (rust/crates/alloc-stdlib-0.2.4.crate) = 6730 SHA256 (rust/crates/bindgen-0.72.1.crate) = 993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895 SIZE (rust/crates/bindgen-0.72.1.crate) = 246071 SHA256 (rust/crates/bitflags-2.13.0.crate) = b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8 SIZE (rust/crates/bitflags-2.13.0.crate) = 51280 SHA256 (rust/crates/brotli-8.0.4.crate) = 5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3 SIZE (rust/crates/brotli-8.0.4.crate) = 751794 SHA256 (rust/crates/brotli-decompressor-5.0.3.crate) = 3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583 SIZE (rust/crates/brotli-decompressor-5.0.3.crate) = 197262 SHA256 (rust/crates/cc-1.2.66.crate) = f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996 SIZE (rust/crates/cc-1.2.66.crate) = 95653 SHA256 (rust/crates/cexpr-0.6.0.crate) = 6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766 SIZE (rust/crates/cexpr-0.6.0.crate) = 17966 SHA256 (rust/crates/cfg-if-1.0.4.crate) = 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801 SIZE (rust/crates/cfg-if-1.0.4.crate) = 9360 SHA256 (rust/crates/clang-sys-1.8.1.crate) = 0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4 SIZE (rust/crates/clang-sys-1.8.1.crate) = 44009 SHA256 (rust/crates/cmake-0.1.58.crate) = c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678 SIZE (rust/crates/cmake-0.1.58.crate) = 20474 SHA256 (rust/crates/either-1.16.0.crate) = 91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e SIZE (rust/crates/either-1.16.0.crate) = 21248 SHA256 (rust/crates/find-msvc-tools-0.1.9.crate) = 5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582 SIZE (rust/crates/find-msvc-tools-0.1.9.crate) = 31493 SHA256 (rust/crates/fs_extra-1.3.0.crate) = 42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c SIZE (rust/crates/fs_extra-1.3.0.crate) = 31298 SHA256 (rust/crates/fslock-0.2.1.crate) = 04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb SIZE (rust/crates/fslock-0.2.1.crate) = 13463 SHA256 (rust/crates/glob-0.3.3.crate) = 0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280 SIZE (rust/crates/glob-0.3.3.crate) = 22861 SHA256 (rust/crates/heck-0.5.0.crate) = 2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea SIZE (rust/crates/heck-0.5.0.crate) = 11517 SHA256 (rust/crates/itertools-0.13.0.crate) = 413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186 SIZE (rust/crates/itertools-0.13.0.crate) = 146261 SHA256 (rust/crates/libc-0.2.186.crate) = 68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66 SIZE (rust/crates/libc-0.2.186.crate) = 821883 SHA256 (rust/crates/libloading-0.8.9.crate) = d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55 SIZE (rust/crates/libloading-0.8.9.crate) = 30222 SHA256 (rust/crates/memchr-2.8.3.crate) = cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98 SIZE (rust/crates/memchr-2.8.3.crate) = 99165 SHA256 (rust/crates/minimal-lexical-0.2.1.crate) = 68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a SIZE (rust/crates/minimal-lexical-0.2.1.crate) = 94841 SHA256 (rust/crates/nom-7.1.3.crate) = d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a SIZE (rust/crates/nom-7.1.3.crate) = 117570 SHA256 (rust/crates/once_cell-1.21.4.crate) = 9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50 SIZE (rust/crates/once_cell-1.21.4.crate) = 35010 SHA256 (rust/crates/portable-atomic-1.13.1.crate) = c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49 SIZE (rust/crates/portable-atomic-1.13.1.crate) = 197001 SHA256 (rust/crates/proc-macro2-1.0.106.crate) = 8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934 SIZE (rust/crates/proc-macro2-1.0.106.crate) = 59765 SHA256 (rust/crates/pyo3-0.28.3.crate) = 91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12 SIZE (rust/crates/pyo3-0.28.3.crate) = 1204476 SHA256 (rust/crates/pyo3-build-config-0.28.3.crate) = e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e SIZE (rust/crates/pyo3-build-config-0.28.3.crate) = 35961 SHA256 (rust/crates/pyo3-ffi-0.28.3.crate) = 7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e SIZE (rust/crates/pyo3-ffi-0.28.3.crate) = 80881 SHA256 (rust/crates/pyo3-macros-0.28.3.crate) = df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813 SIZE (rust/crates/pyo3-macros-0.28.3.crate) = 8963 SHA256 (rust/crates/pyo3-macros-backend-0.28.3.crate) = c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb SIZE (rust/crates/pyo3-macros-backend-0.28.3.crate) = 88063 SHA256 (rust/crates/python3-dll-a-0.2.15.crate) = d80ba7540edb18890d444c5aa8e1f1f99b1bdf26fb26ae383135325f4a36042b SIZE (rust/crates/python3-dll-a-0.2.15.crate) = 104255 SHA256 (rust/crates/quote-1.0.46.crate) = dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368 SIZE (rust/crates/quote-1.0.46.crate) = 31628 SHA256 (rust/crates/regex-1.12.4.crate) = f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba SIZE (rust/crates/regex-1.12.4.crate) = 153468 SHA256 (rust/crates/regex-automata-0.4.14.crate) = 6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f SIZE (rust/crates/regex-automata-0.4.14.crate) = 618012 SHA256 (rust/crates/regex-syntax-0.8.11.crate) = d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4 SIZE (rust/crates/regex-syntax-0.8.11.crate) = 359055 SHA256 (rust/crates/rustc-hash-2.1.3.crate) = 6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d SIZE (rust/crates/rustc-hash-2.1.3.crate) = 14811 SHA256 (rust/crates/shlex-1.3.0.crate) = 0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64 SIZE (rust/crates/shlex-1.3.0.crate) = 18713 SHA256 (rust/crates/shlex-2.0.1.crate) = f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba SIZE (rust/crates/shlex-2.0.1.crate) = 19332 SHA256 (rust/crates/syn-2.0.118.crate) = 1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422 SIZE (rust/crates/syn-2.0.118.crate) = 305533 SHA256 (rust/crates/target-lexicon-0.13.5.crate) = adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca SIZE (rust/crates/target-lexicon-0.13.5.crate) = 26928 SHA256 (rust/crates/thiserror-1.0.69.crate) = b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52 SIZE (rust/crates/thiserror-1.0.69.crate) = 22198 SHA256 (rust/crates/thiserror-impl-1.0.69.crate) = 4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1 SIZE (rust/crates/thiserror-impl-1.0.69.crate) = 18365 SHA256 (rust/crates/unicode-ident-1.0.24.crate) = e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75 SIZE (rust/crates/unicode-ident-1.0.24.crate) = 49298 SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419 SIZE (rust/crates/winapi-0.3.9.crate) = 1200382 SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6 SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815 SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998 SHA256 (rust/crates/windows-link-0.2.1.crate) = f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5 SIZE (rust/crates/windows-link-0.2.1.crate) = 6133 SHA256 (cloudflare-boring-931385ed41df448c82d150219f69af56e3c8399f_GH0.tar.gz) = cc7b97c7a9fd7fd11a10c423652f3808102f464b5cc9daf55853c1600edf5a2e SIZE (cloudflare-boring-931385ed41df448c82d150219f69af56e3c8399f_GH0.tar.gz) = 319654 SHA256 (google-boringssl-e2a57cf_GH0.tar.gz) = 31f64e261fc40c2b9dc6dcd3d7f7da9e23fca2ea22acafa953826af01802e7e3 SIZE (google-boringssl-e2a57cf_GH0.tar.gz) = 70389184

Collapse this list.


Packages (timestamps in pop-ups are UTC):
py312-utls
ABIaarch64amd64armv6armv7i386powerpcpowerpc64powerpc64le
FreeBSD:13:latest-----n/an/an/a
FreeBSD:13:quarterly-----n/an/an/a
FreeBSD:14:latest-2026.5.30------
FreeBSD:14:quarterly2026.5.302026.5.30------
FreeBSD:15:latest2026.5.302026.5.30n/a-n/an/a--
FreeBSD:15:quarterly2026.5.302026.5.30n/a-n/an/a--
FreeBSD:16:latest2026.5.302026.5.30n/a-n/an/a--
Dependencies
NOTE: FreshPorts displays only information on required and default dependencies. Optional dependencies are not covered.
Build dependencies:
  1. git : devel/git
  2. py312-maturin>=1.7 : devel/py-maturin@py312
  3. rust>=1.96.0 : lang/rust
  4. cmake : devel/cmake-core
  5. llvm-config19 : devel/llvm19
  6. python3.12 : lang/python312
  7. py312-build>=0 : devel/py-build@py312
  8. py312-installer>=0 : devel/py-installer@py312
Test dependencies:
  1. python3.12 : lang/python312
Runtime dependencies:
  1. py312-wassima>=1<3 : security/py-wassima@py312
  2. python3.12 : lang/python312
There are no ports dependent upon this port

Configuration Options:
No options to configure
Options name:
security_py-utls
USES:
cargo llvm:build python
FreshPorts was unable to extract/find any pkg message
Master Sites:
Expand this list (2 items)
Collapse this list.
  1. https://files.pythonhosted.org/packages/source/u/utls/
  2. https://pypi.org/packages/source/u/utls/
Collapse this list.

Number of commits found: 2

Commit History - (may be incomplete: for full details, see links to repositories near top of page)
CommitCreditsLog message
2026.7.8
11 Jul 2026 12:21:26
commit hash: cf2e942e8c229efe4c47d51e58bd88e9f3a76e21commit hash: cf2e942e8c229efe4c47d51e58bd88e9f3a76e21commit hash: cf2e942e8c229efe4c47d51e58bd88e9f3a76e21commit hash: cf2e942e8c229efe4c47d51e58bd88e9f3a76e21 files touched by this commit
Po-Chuan Hsieh (sunpoet) search for other commits by this committer
security/py-utls: Update to 2026.7.8

Changes:	https://github.com/jawah/utls/releases
2026.5.30
08 Jul 2026 13:30:19
commit hash: aa043659e0936789099d7ef1ffbae70a7b64ac1bcommit hash: aa043659e0936789099d7ef1ffbae70a7b64ac1bcommit hash: aa043659e0936789099d7ef1ffbae70a7b64ac1bcommit hash: aa043659e0936789099d7ef1ffbae70a7b64ac1b files touched by this commit
Po-Chuan Hsieh (sunpoet) search for other commits by this committer
security/py-utls: Add py-utls 2026.5.30

Drop-in replacement for the ssl stdlib with a Fingerprint API for Chrome
impersonation. Built on stock BoringSSL through boring-sys - no vendored
patches, no curl-impersonate, no Go runtime at import time. Use it with any
known Python http client you like or used to.

Number of commits found: 2