Wasat ChangeLog
v1.9.1
Released: 2026-09-05
- Fixed Titan upload handling in
Client.uploadto concurrently read the server's response while streaming payload data. (#65) - Added timeout handling to response line reading during requests to ensure
unresponsive servers cleanly raise
ConnectionErrorrather than stalling. (#65) - Added timeout enforcement when closing connections to prevent indefinite
hangs on
wait_closed()when servers reject uploads without completing a TLS shutdown handshake. (#66)
v1.9.0
Released: 2026-09-05
- Added support for the proposed Titan edit extension (
titan://...;edit). (#63) - Added
is_editproperty andwith_editmethod toTitanURI, and updatedTitanURI.replaceto acceptedit: bool. (#63) - Enforced parameter mutual exclusivity between
editandsizeonTitanURI. (#63) - Added
edit: bool = Falseparameter toGeminiURI.to_titan. (#63) - Added
Client.editmethod to fetch raw editable content and acquire edit locks. (#63) - Updated the CLI with
-e/--editoption to fetch raw content for editing, and resolved an issue where requesting atitan://edit URI directly prompted for upload data instead of retrieving content. (#63)
v1.8.1
Released: 2026-09-04
- Fixed
TitanURIpath parameter parsing to strictly apply parameters to the terminal path segment, preventing truncation of directory paths that contain semicolons. (#61) - Fixed
TitanURIparsing to support semicolon parameters immediately following the authority without an explicit path slash. (#61) - Updated
Client.uploadand Titan redirect handling to ignore existing parameters on target and redirect URIs in compliance with the Titan specification. (#61) - Fixed
Client.deleteto avoid appending a default MIME type parameter on zero-byte payload requests. (#61) - Updated
Client.requestto raiseRedirectErrorwhen following a redirect from a Gemini request to a Titan upload URI with size > 0. (#61) - Updated the CLI to prompt for interactive input or read from standard
input when a Titan URI is requested without
--upload,--data, or--delete. (#61)
v1.8.0
Released: 2026-09-03
- Added Titan protocol support (
titan://), includingTitanURIrepresentation, URI conversions (to_titan,to_gemini), and parameter parsing (size,mime,token). (#59) - Added Titan upload (
Client.upload) and deletion (Client.delete) methods toClient. (#59) - Updated the CLI with
--upload,--data,--delete,--mime, and--tokenoptions. (#59)
v1.7.0
Released: 2026-08-30
- Added
forgetasynchronous method to theTrustStoreprotocol andFileTrustStoreimplementation to remove stored certificate fingerprints for a given host and port. (#57)
v1.6.0
Released: 2026-08-27
- Added
client_certandclient_key_pathproperties toResponseto allow inspecting the client TLS certificate and key used for the request.client_certlazily loads and caches theClientCertificateinstance. (#55) - Updated the CLI (
wasat)--show-certoption to display client certificate details alongside server certificate information when a client certificate was used. (#55)
v1.5.0
Released: 2026-08-24
- Added
ClientCertificate.from_pemconstructor to instantiate client certificates from in-memory PEM text or bytes, supporting combined bundles, separate certificate and private key inputs, or certificate-only data. (#52) - Updated
ClientCertificate.from_fileto automatically detect and extract private keys from single combined.pemfiles whenkey_pathis omitted. (#52) - Added
ClientCertificate.to_combined_pemmethod to serialise certificate and private key pairs into a single PEM byte sequence. (#52) - Added
ClientCertificate.exportmethod to export certificates and private keys to disk with restricted permissions (0600) on private keys. (#52) - Added
import_certificatemethod toClientCertificateStoreprotocol andFileClientCertificateStoreimplementation to import certificates from file paths, raw PEM bytes or strings, orClientCertificateinstances, with optional scope associations and safe file permissions. (#52) - Added
export_certificatemethod toClientCertificateStoreprotocol andFileClientCertificateStoreimplementation to look up certificates by fingerprint, common name, file stem, or scope and export them as combined bundles or separate files. (#52) - Enhanced
FileClientCertificateStore.get_certificateto support lookup by certificate subject Common Name and file stem. (#52) - Fixed an issue where unscoped transient certificates were omitted from
list_certificatesinFileClientCertificateStoreand could not be retrieved or managed viaget_certificate,associate_scope, ordelete_certificate. (#51)
v1.4.0
Released: 2026-08-23
- Added
ClientCertificateclass representing client TLS certificates and private keys with full access to parsed subject attributes (Common Name, email, user ID, organisation, country), issuer, validity timestamps, expiration and self-signed checks, public key information, SHA-256 fingerprint, and associated scopes. ExportedClientCertificateas a public type at the top level. (#48) - Added
normalize_scopehelper function to normalise Gemini URIs and scope strings into canonicalhost:port/pathformat, and exported it at the top level. (#48) - Added
list_certificatesmethod to theClientCertificateStoreprotocol andFileClientCertificateStoreimplementation to enumerate all stored and transient client certificates along with their associated scopes. (#48) - Added
get_certificatemethod toClientCertificateStoreprotocol andFileClientCertificateStoreimplementation to retrieve client certificates by URI, scope, SHA-256 fingerprint, or file path/name. (#48) - Added
create_certificatemethod toClientCertificateStoreprotocol andFileClientCertificateStoreimplementation to allow generating standalone identities or associating certificates with multiple scopes. (#48) - Added
associate_scopeanddisassociate_scopemethods toClientCertificateStoreprotocol andFileClientCertificateStoreimplementation to allow dynamically managing scope bindings for existing certificates without duplicating certificate files on disk. (#48) - Added
delete_certificateanddelete_exact_scopemethods toClientCertificateStoreprotocol andFileClientCertificateStoreimplementation for deleting certificates and unbinding specific scopes safely. (#48)
v1.3.1
Released: 2026-07-30
- Added
ServerCertificateclass andResponse.server_certproperty to provide high-level access to parsed server TLS certificate attributes (subject/issuer CNs, validity dates, SANs, serial number, fingerprint, and status checks). ExportedServerCertificateas a public type at the top level. (#45) - Updated the CLI (
wasat) to add a--show-certflag for displaying detailed server TLS certificate information. (#45)
v1.3.0
Released: 2026-07-30
- Refined
hybridcertificate verification mode to only fall back to TOFU when CA validation fails due to an untrusted root or self-signed certificate. Certificate failures caused by expiration, hostname mismatch, or revocation now immediately raiseSecurityError. (#41) - Added
VerifyModeas a type and exported it at the top level. (#41) - Added
server_cert_der,server_cert_fingerprint, andverification_methodproperties toResponseto expose server TLS certificate details and the verification method used. (#43) - Added
VerificationMethodtype alias and exported it at the top level. (#43) - Updated the CLI (
wasat) to displayVerification MethodandCertificate Fingerprintwhen running in verbose (-v/--verbose) mode. (#43)
v1.2.0
Released: 2026-07-30
- Added
--verify-modeto the CLI of the library so the certificate verification mode can be tested. (#39) - Added
hybridcertificate verification mode toClientto combine system CA validation with TOFU fallback. (#39)
v1.0.1
Released: 2026-07-21
- Fixed unhandled
ssl.SSLEOFError,ssl.SSLError, andOSErrorexceptions during request dispatch and response header reading by mapping them toConnectionError. (#36)
v1.0.0
Released: 2026-07-21
- Promoted to "stable". (#34)
v0.8.0
Released: 2026-07-18
v0.7.0
Released: 2026-07-16
- Added
GeminiURI.MAXIMUM_LENGTH. (#29) - Added
lensupport toGeminiURI(reports the byte length of the URI). (#29) - Added
GeminiURI.bytes_left. (#29) - Added
GeminiURI.too_long. (#29)
v0.6.1
Released: 2026-07-14
- Fixed
GeminiURI.with_default_schemetreatingexample.cominexample.com:1966as a scheme. (#27)
v0.6.0
Released: 2026-07-14
- Relaxed the type of the parameters for
GeminiURI.__init__. (#24) - Added
GeminiURI.with_default_scheme(#25)
v0.5.0
Released: 2026-07-13
- Added
get_hostsasynchronous method to theTrustStoreprotocol andFileTrustStoreimplementation to retrieve all stored host and port combinations from the trust store. (#22) - Added
trust_storepublic property to theClientclass to expose the underlying trust store. (#22)
v0.4.0
Released: 2026-07-12
- Added a new
replacemethod toGeminiURIto allow creating a copy of a URI with specified components replaced, including removing optional components like path or query by setting them toNone. (#19) - Added component-specific builder methods
with_host,with_port, andwith_pathtoGeminiURI. (#19) - Updated
with_queryonGeminiURIto allow setting, replacing, or clearing (by passingNone) the query parameter. (#19) - Updated
GeminiURIconstructor's internal error handling to catchValueErrorand other parsing anomalies (e.g. from negative/out-of-range ports) raised byurlparse, converting them intoURIError. (#19)
v0.3.2
Released: 2026-07-11
- Updated redirect certificate handling to automatically register/re-bind an inherited client certificate to the final landing URI's scope upon successful completion (status code 2x or 3x) of a redirect chain. This allows future direct requests to the target URI to automatically reuse the certificate without going through the initial redirect flow again. (#17)
v0.3.1
Released: 2026-07-11
- Fixed client certificate handling during redirects on the same host and port. If a client certificate was successfully used for a request in a redirect chain, the client automatically retrieves and reuses it for any subsequent redirected requests targeting the same host and port, preventing certificate information loss on sibling paths. (#14)
- Added
register_credentialsto theClientCertificateStoreprotocol andFileClientCertificateStoreimplementation to allow programmatically registering/associating existing client certificate files with a new URI scope. (#14) - Updated the client connection logic to skip generating a new certificate
if the
on_client_certificate_requiredcallback has already registered exact credentials for the URI, allowing manual registration in the callback. (#14)
v0.3.0
Released: 2026-07-11
- Added
client_cert_pathandclient_cert_usedproperties toResponseto expose the path to the client certificate and a boolean flag indicating if one was used for the connection. (#11)
v0.2.1
Released: 2026-07-10
- Fixed client certificate path prefix matching in
get_candidate_scopesto support both trailing and non-trailing slash parent directory paths, ensuring certificates registered for paths like/foo/bar(no trailing slash) are correctly matched and offered for subpaths (e.g./foo/bar/baz). (#9) - Added
has_exact_credentialsto theClientCertificateStoreprotocol andFileClientCertificateStoreimplementation. (#9) - Updated the client connection logic to use
has_exact_credentialswhen checking whether a client certificate requirement is new/fresh, ensuring the client correctly prompts the user for a new certificate if a parent certificate is rejected by the server, while avoiding infinite loops. (#9)
v0.2.0
Released: 2026-07-10
- Allowed passing
Nonetovalid_daysingenerate_self_signed_certandcreate_credentialsto generate client certificates that expire on9999-12-31. (#7)
v0.1.0
Released: 2026-06-24
- Added support for generating and storing client certificates. (#3)
- Added support for handling Gemini Protocol input requests (status codes 10 and 11) in the CLI. (#4)
- Added
uriproperty toResponseto expose the target URI of the request. (#5) - Added
historyproperty toResponseto expose any redirection history. (#5) - Added
requested_uriproperty toResponseto expose the originally-requested URI in any response. (#5) - Updated the CLI to show the originally-requested URI and the redirection history, in verbose mode, if there was a redirection. (#5)
v0.0.1
Released: 2026-06-17
- Initial version of the library.