=pod

=encoding utf-8

=head1 NAME

Type::Tiny::Manual::Policies - Type::Tiny policies

=head1 MANUAL

=head2 Type::Tiny Stability Policy

Type::Tiny 1.000000+ is considered stable. Any changes to the API that
are big enough to I<require> changes to the test suite will be preceded
by a I<< six month >> notice period, with the following exceptions:

=over

=item *

Any changes which are necessary to maintain compatibility with new
releases of L<Moose>, L<Moo>, and other software that Type::Tiny needs
to integrate with.

=item *

Changes to maintain compatibility with future versions of Perl itself.

=item *

Where a change fixes a contradiction between the implementation and
documentation of Type::Tiny.

=item *

Where a feature is explicitly documented as being "experimental" or
"unstable".

=item *

Improvements to the text of error messages.

=back

=head2 Notice: Planned Changes in Type::Tiny 3

Type::Tiny 3 is expected to be released in the second half of 2026. It is likely
to introduce coercions to some common type constraints such as B<HashRef>,
B<ArrayRef>, and B<Str>. If your code specifically relies on these types
not having coercions, you may need to change your code. (The C<no_coercions>
method can give you a copy of any type minus all coercions.)

=head2 Experimental and Unstable Type::Tiny Features

The following list is currently non-exhaustive.

=over

=item *

The following type checks result may vary based on your version of
Perl and whether Type::Tiny::XS is installed. Their outcome is currently
considered undefined, and may change in future versions.

=over

=item *

Using B<Object> and similar type checks on unblessed regular expression
references, the outcome is undefined.

=item *

On all current versions of Perl, false (C<< !!0 >>) stringifies to the
empty string (but using Devel::Peek you can tell the difference between
this value and a normal empty string), so B<Int> and subtypes of B<Int>
do not consider it to be an integer. If Perl's behaviour ever changes,
you might not be able to rely on this outcome. True (C<< !!1 >>)
stringifies as "1", so is considered an integer.

=item *

A glob (not a globref but an actual glob) currently passes the
B<StringLike> type constraint but not the B<Str> type constraint.

=item *

The  B<BoolLike> type is intended to extend B<Bool> to cover overloaded
boolean objects, but the exact mechanism it uses may change.

=back

=item *

L<Type::Tiny>'s C<my_methods> attribute and the functionality it
provides is experimental.

=item *

The L<parameterizable coercion API|Type::Coercion> is subject to change.

=item *

The interaction of deep coercions and mutable coercions currently results
in ill-defined behaviour. This could change at any time.

=item *

L<Type::Registry>'s ability to import L<MooseX::Types> and L<MouseX::Types>
type libraries is experimental.

=item *

The C<signature_for_func> and C<signature_for_method> keywords provided by
L<Type::Params> may change their behaviour slightly in the future. Once
stable, they are expected to be added to L<Types::Common>'s exports.

=item *

The C<Types::Standard::Dict::combine> function.

=item *

These modules are considered part of Type::Tiny's internals, and not
covered by the stability policy:
L<Devel::TypeTiny::Perl58Compat>,
L<Type::Coercion::FromMoose>,
L<Type::Params::Alternatives>,
L<Type::Params::Parameter>,
L<Type::Params::Signature>,
L<Type::Tiny::_HalfOp>,
L<Types::Standard::ArrayRef>,
L<Types::Standard::CycleTuple>,
L<Types::Standard::Dict>,
L<Types::Standard::HashRef>,
L<Types::Standard::Map>,
L<Types::Standard::ScalarRef>,
L<Types::Standard::StrMatch>,
L<Types::Standard::Tied>, and
L<Types::Standard::Tuple>.

=item *

The use of some of the modules in the previous list item as exporters of
shortcuts for parameterized types is not stable yet.

=item *

L<Reply::Plugin::TypeTiny> is not covered by the stability policy.

=back

=head2 Type::Tiny Security Policy

The L<latest stable release on CPAN|https://metacpan.org/release/Type-Tiny>
is supported for security updates. (By convention, releases with an underscore
in their version number are not considered to be stable releases.)

If you are using an older release, you are advised to upgrade.

A list of changes between versions can be found in
L<the Changes file on CPAN|https://metacpan.org/changes/distribution/Type-Tiny>
with security-related changes tagged "SECURITY" in capital letters.

=head3 Reporting a Vulnerability

Please report any issues via
L<GitHub Issues|https://github.com/tobyink/p5-type-tiny/issues>.

If you are concerned that some of the details of your report may lead to an
exploit being made public, then keep your issue report vague, and email the
details to me directly. My email address can be found on my
L<GitHub profile|https://github.com/tobyink>.

=head2 Type::Tiny Versioning Policy

As of 1.000000, this distribution follows a versioning scheme similar
to L<Moo>, which is based on a L<semver|http://semver.org/>-like three
component version number, but with the last two components each
represented by three decimal digits in the fractional part of the
version number. That is, version 1.003002 of the software represents
"1.3.2".

Additionally, releases where the second component is an odd number will
be considered unstable/trial releases. (These will also include an
underscore in the version number as per the usual CPAN convention.)

=head2 Perl Version Support

Type::Tiny 0.000_01 to Type::Tiny 0.015_04 required Perl 5.8.1.

Type::Tiny 0.015_05+ and Type::Tiny 1.000000+ requires Perl 5.6.1.

Type::Tiny 2.000000+ will require Perl 5.8.1.

=head1 NEXT STEPS

Here's your next step:

=over

=item * L<Type::Tiny::Manual::Contributing>

Contributing to Type::Tiny development.

=back

=head1 AUTHOR

Toby Inkster E<lt>tobyink@cpan.orgE<gt>.

=head1 COPYRIGHT AND LICENCE

This software is copyright (c) 2013-2014, 2017-2025 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=head1 DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

=cut

