Dart TlsProtocolVersion
last modified October 18, 2026
The TlsProtocolVersion class in Dart represents the TLS protocol
versions supported by dart:io. It is used to configure the minimum
TLS version for secure connections.
TlsProtocolVersion exposes the static constants tls1_2 and
tls1_3. It has no public constructor and does not implement
ordering; versions are compared by equality.
Basic Definition
TlsProtocolVersion is an immutable class representing a TLS version.
Dart's dart:io library currently defines the constants
tls1_2 and tls1_3.
The version is applied through
SecurityContext.minimumTlsProtocolVersion. There is no public API
for constructing arbitrary versions or comparing them with relational
operators.
Basic TlsProtocolVersion Usage
This example shows basic usage of TlsProtocolVersion constants.
import 'dart:io';
void main() {
const tls12 = TlsProtocolVersion.tls1_2;
const tls13 = TlsProtocolVersion.tls1_3;
print('TLS 1.2 available: ${tls12 == TlsProtocolVersion.tls1_2}');
print('TLS 1.3 available: ${tls13 == TlsProtocolVersion.tls1_3}');
print('TLS 1.2 and TLS 1.3 are distinct: ${tls12 != tls13}');
}
We access the built-in constants and compare them with equality. The class does
not provide < or > operators.
$ dart main.dart TLS 1.2 available: true TLS 1.3 available: true TLS 1.2 and TLS 1.3 are distinct: true
Setting the Minimum TLS Version
This example demonstrates configuring the minimum TLS version on a SecurityContext.
import 'dart:io';
void main() {
var context = SecurityContext();
print('Default minimum is TLS 1.2: '
'${context.minimumTlsProtocolVersion == TlsProtocolVersion.tls1_2}');
context.minimumTlsProtocolVersion = TlsProtocolVersion.tls1_3;
print('Minimum is now TLS 1.3: '
'${context.minimumTlsProtocolVersion == TlsProtocolVersion.tls1_3}');
}
A new SecurityContext defaults to TLS 1.2. Assigning
minimumTlsProtocolVersion ensures that older protocol versions are
rejected for new connections.
$ dart main.dart Default minimum is TLS 1.2: true Minimum is now TLS 1.3: true
Checking Version Equality
This example shows how to compare version constants and test membership.
import 'dart:io';
void main() {
var tls12 = TlsProtocolVersion.tls1_2;
var tls13 = TlsProtocolVersion.tls1_3;
var versions = [tls12, tls13];
print('tls12 == tls13: ${tls12 == tls13}');
print('tls12 != tls13: ${tls12 != tls13}');
print('tls12 is in the list: '
'${versions.contains(TlsProtocolVersion.tls1_2)}');
print('Identical tls13 constants: '
'${identical(tls13, TlsProtocolVersion.tls1_3)}');
}
TlsProtocolVersion supports equality and identity comparisons but does not
implement Comparable. Use == or list membership when validating a
version.
$ dart main.dart tls12 == tls13: false tls12 != tls13: true tls12 is in the list: true Identical tls13 constants: true
Using with SecureServerSocket
This example shows TlsProtocolVersion in a real SecureServerSocket context.
import 'dart:io';
void main() async {
var context = SecurityContext()
..useCertificateChain('cert.pem')
..usePrivateKey('key.pem')
..minimumTlsProtocolVersion = TlsProtocolVersion.tls1_3;
var server = await SecureServerSocket.bind(
InternetAddress.loopbackIPv4,
0,
context,
);
print('Server running with TLS 1.3 minimum');
await server.close();
}
We configure a SecurityContext with a certificate chain and private key, set
TLS 1.3 as the minimum version, and bind a SecureServerSocket. TLS version
selection belongs to SecurityContext, not to the ALPN
supportedProtocols list, which takes protocol name strings.
$ dart main.dart Server running with TLS 1.3 minimum
Version Validation
This example demonstrates a security policy based on supported versions.
import 'dart:io';
bool isSupported(TlsProtocolVersion version) {
return version == TlsProtocolVersion.tls1_2 ||
version == TlsProtocolVersion.tls1_3;
}
void main() {
var minimum = TlsProtocolVersion.tls1_3;
var context = SecurityContext()
..minimumTlsProtocolVersion = minimum;
print('TLS 1.2 supported: ${isSupported(TlsProtocolVersion.tls1_2)}');
print('TLS 1.3 supported: ${isSupported(TlsProtocolVersion.tls1_3)}');
print('Minimum policy is TLS 1.3: '
'${context.minimumTlsProtocolVersion == minimum}');
}
We implement a security policy by accepting only the TLS versions that
dart:io supports and by enforcing a minimum on the context. Because
TlsProtocolVersion has no ordering operators, compare it with equality.
$ dart main.dart TLS 1.2 supported: true TLS 1.3 supported: true Minimum policy is TLS 1.3: true
Best Practices
- Use supported constants: Use
tls1_2ortls1_3; arbitrary versions cannot be constructed - Minimum versions: Enforce minimum secure TLS versions
- Comparisons: Compare versions with equality; relational operators are not defined
- SecurityContext: Set
minimumTlsProtocolVersionexplicitly
Source
Dart TlsProtocolVersion Documentation
This tutorial covered Dart's TlsProtocolVersion class with practical examples showing version handling, comparison, and secure socket configuration.
Author
List all Dart tutorials.