NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #573 most downloaded on NuGet
C# port of Google's common Java, C++ and Javascript library for parsing, formatting, storing and validating international phone numbers. https://github.com/google/libphonenumber
Last release 14 days ago
24 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Some releases are documented
notes for 29 of the last 60 stable releases
4 versions withdrawn
withdrawn after publishing
127 years old
259 releases · first in 1900
libphonenumber-csharp 9.0.40 · libphonenumber-csharp.extensions 9.0.40 · upstream v9.0.40
libphonenumber-csharp 9.0.40 · libphonenumber-csharp.extensions 9.0.40 · upstream v9.0.40
Full Changelog: v9.0.39...v9.0.40
One column per quarter.
Includes the metadata sync to upstream libphonenumber v9.0.40 plus other changes merged to main since the last release — see the compare link above for the full diff.
libphonenumber-csharp 9.0.39 · libphonenumber-csharp.extensions 9.0.39 · upstream v9.0.39
libphonenumber-csharp 9.0.39 · libphonenumber-csharp.extensions 9.0.39 · upstream v9.0.39
Full Changelog: v9.0.38...v9.0.39
Includes the metadata sync to upstream libphonenumber v9.0.39 plus other changes merged to main since the last release — see the compare link above for the full diff.
libphonenumber-csharp 9.0.38 · libphonenumber-csharp.extensions 9.0.38 · upstream v9.0.38
libphonenumber-csharp 9.0.38 · libphonenumber-csharp.extensions 9.0.38 · upstream v9.0.38
Full Changelog: v9.0.37...v9.0.38
A larger-than-usual release: the metadata-sync automation itself was reworked, alongside a batch of Extensions API additions, security/hardening fixes, and a large internal code-quality pass.
PhoneNumber.TryParse/TryParseValid 2-argument overloads matching the conventional
.NET TryParse shape; PhoneNumberTypeConverter for TypeConverter-based binding (config
binding, PropertyGrid, etc.); PhoneNumberAttribute, a DataAnnotations ValidationAttribute
backed by real validation (PhoneNumberUtil.IsValidNumber) instead of the framework's loose
[Phone] regex. (#405)PhoneNumbers.Fuzz, not part of
the solution, run weekly by fuzz.yml). (#392)libphonenumber-csharp-bot
account, not the ambient GITHUB_TOKEN) and auto-merges it, instead of pushing straight to main.
(#431, #434) finalize_metadata_release.yml then tags the merge commit and dispatches the NuGet
publish. This CHANGELOG's own entries are now written into that same commit by the sync script..slnx format. (#388)AngleSharp advisory (GHSA-pgww-w46g-26qg). (#398)LocaleNames (mirrors the phone/short-number/geocoding "binary metadata" move
from v9.0.29–v9.0.32, below); LocaleData still exposes the whole table for callers outside the
library. (#395)NuGetAudit and pinned-exact-versions-in-Directory.Packages.props
do the job restore locking was meant for. (#396) Package-validation baselines for both packable
projects now compare against the 9.0.37 release. (#394)is-null pattern matching, TryGetValue,
LINQ Select/Where, ??=, sealing singleton-style types, BinaryPrimitives in ByteBuffer) and
CodeQL-driven fixes (redundant ToString()/GetHashCode() calls, GetType() comparisons,
invariant-culture formatting) — no behavior change. (#409, #412–#421, #424 and others)obj/ output.
(#407, #423)BuildLocaleNames and an uncaught parse exception in
PhoneNumberTypeConverter. (#428)NumberParseException (rather than ArgumentOutOfRangeException) on malformed RFC3966
phone-context ordering. (#406)PhoneNumberMatcher/AsYouTypeFormatter parity gaps against the upstream Java source,
including formattingRuleHasFirstGroupOnly and containsMoreThanOneSlashInNationalNumber. (#408)AsYouTypeFormatter and missing null-guards in PhoneNumberUtil. (#402)FormatOutOfCountryKeepingAlphaChars no longer throws when region metadata is missing.Todo sections and refreshed documentation for the binary-metadata, build, and CI
changes made across v9.0.29–v9.0.38.libphonenumber-csharp 9.0.37 · libphonenumber-csharp.extensions 9.0.37 · upstream v9.0.37
libphonenumber-csharp 9.0.37 · libphonenumber-csharp.extensions 9.0.37 · upstream v9.0.37
Full Changelog: v9.0.36...v9.0.37
A dedicated performance-optimization release, alongside build-reproducibility and package-validation work and new benchmark coverage.
Normalize stack buffer to the input instead of a fixed allocation.#425).EnablePackageValidation on both packable projects (PhoneNumbers, PhoneNumbers.Extensions).Directory.Build.props and package versions into
Directory.Packages.props (Central Package Management) — the structure CLAUDE.md now documents.net9.0 target framework and the netframework4.8 test target; guarded
nullable annotations by TFM name rather than by .NET version.NuGetAudit findings no longer fail the build outright.GetSupportedRegions returned a mutable reference instead of a copy; region sets are now frozen.Normalize.PhoneNumberUtil now format with invariant culture and name their arguments.libphonenumber-csharp 9.0.36 · libphonenumber-csharp.extensions 9.0.36 · upstream v9.0.36
libphonenumber-csharp 9.0.36 · libphonenumber-csharp.extensions 9.0.36 · upstream v9.0.36
Full Changelog: v9.0.35...v9.0.36
lib/github-actions-metadata-update.sh gained a --dry-run option, opt-in overrides for the
java/proto-file check, hardening for bash 3.2, scoped git identity, and no longer hard-codes the
target repository.publish_nuget.yml is dispatched only after the release tag is created; CI now
verifies release packaging directly.libphonenumber-csharp 9.0.35 · libphonenumber-csharp.extensions 9.0.35 · upstream v9.0.35
Metadata release; the metadata-update script's temporary java-file-check override from the previous release was restored to its normal (enforcing) state.
libphonenumber-csharp 9.0.34 · libphonenumber-csharp.extensions 9.0.34 · upstream v9.0.34
libphonenumber-csharp 9.0.34 · libphonenumber-csharp.extensions 9.0.34 · upstream v9.0.34
Full Changelog: v9.0.33...v9.0.34
Minor CI/tooling release: rotated the NuGet API key, moved AppVeyor to VS2026 with .NET 10, and temporarily relaxed the metadata script's java-file check to let this sync through (restored the next release, above).
libphonenumber-csharp 9.0.33 · libphonenumber-csharp.extensions 9.0.33 · upstream v9.0.33
libphonenumber-csharp 9.0.33 · libphonenumber-csharp.extensions 9.0.33 · upstream v9.0.33
Full Changelog: v9.0.32...v9.0.33
Security- and process-hardening release, alongside two metadata-parity fixes.
SECURITY.md, CODE_OF_CONDUCT.md, and CODEOWNERS.scorecard.yml), running on main
and on branch-protection changes.BuildMetadataFromXml, used by the legacy
PhoneNumberUtil(Stream) constructor) against XXE (XML External Entity) attacks.libphonenumber-csharp 9.0.32 · libphonenumber-csharp.extensions 9.0.32 · upstream v9.0.32
libphonenumber-csharp 9.0.32 · libphonenumber-csharp.extensions 9.0.32 · upstream v9.0.32
Full Changelog: v9.0.31...v9.0.32
This release shipped a new target framework, AOT compatibility, and a redesigned demo site.
net10.0 target framework. (#328)IsAotCompatible, trim/AOT analyzer warnings now build errors on
modern TFMs) — the Blazor WASM demo depends on this too.System.IO.Compression after an
earlier removal attempt (v9.0.31, below) needed it back.libphonenumber-csharp 9.0.31 · libphonenumber-csharp.extensions 9.0.31 · upstream v9.0.31
libphonenumber-csharp 9.0.31 · libphonenumber-csharp.extensions 9.0.31 · upstream v9.0.31
Full Changelog: v9.0.30...v9.0.31
PhoneNumbers.Demo), deployed to GitHub Pages by
deploy-demo.yml — doubles as proof the library works trimmed under WASM. (#342, #343)DataModelsAndExceptions and BuildPrefixMapFromBin. (#337)System.IO.Compression package reference. (#339)libphonenumber-csharp 9.0.30 · libphonenumber-csharp.extensions 9.0.30 · upstream v9.0.30
libphonenumber-csharp 9.0.30 · libphonenumber-csharp.extensions 9.0.30 · upstream v9.0.30
Full Changelog: v9.0.29...v9.0.30
The architectural turning point behind most of CLAUDE.md's "Singleton + metadata loading" notes: phone
metadata moved from parsed XML to binary files generated at build time and embedded in the assembly.
(net10.0 landed the release after this one — v9.0.32, above.)
IMetadataLoader + a lazy MetadataSource, with EmbeddedResourceMetadataLoader as the default
implementation reading per-region binary files generated at build time by the new
PhoneNumbers.MetadataBuilder project.PhoneNumberToCarrierMapper, matching a feature already present in the Java library. (#317)BuildMetadataFromXml and the geocoding/timezone text metadata are
now converted to per-region binary files at build time (BuildBinaryMetadata, BuildGeocodingBins,
BuildTimezoneBin MSBuild targets) and read from embedded, gzip-compressed resources at runtime —
XML is no longer parsed on the default load path. PhoneNumberUtil/MetadataManager switched to
the new lazy MetadataSource; the old RegexCache-based approach was removed where superseded.
Made the multi-TFM build of the binary metadata race-free.intlFormat instead of emitting a literal "NA" when the upstream XML value is NA. (#97)GetOrAdd factory delegates in the
metadata and regex caches; shared the national-significant-number string between region lookup and
validation instead of recomputing it; skipped a redundant StringBuilder copy in
MaybeExtractCountryCode.libphonenumber-csharp 9.0.29 · libphonenumber-csharp.extensions 9.0.29 · upstream v9.0.29
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
20 releases. Upstream metadata syncs, several bundled only a mechanical LocaleData.cs regeneration, plus routine Dependabot CI bumps (codecov-action,
20 releases. Upstream metadata syncs, several bundled only a mechanical LocaleData.cs regeneration,
plus routine Dependabot CI bumps (codecov-action, actions/checkout, actions/setup-dotnet,
github/codeql-action) and NuGet test-project dependency groups. No changes to the library's own
source.
Fixed a test failure caused by a System.Collections.Immutable behavior change by upgrading the package.
System.Collections.Immutable behavior change by upgrading the
package. (#297)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
7 releases, metadata syncs plus a codecov-action version bump and mechanical LocaleData.cs regenerations. No source changes.
7 releases, metadata syncs plus a codecov-action version bump and mechanical LocaleData.cs
regenerations. No source changes.
Reverted the assembly strong-name signing added one release earlier in v9.0.0 (below), after it caused problems for consumers.
Breaking: both packages' assemblies are strong-name signed. (#288) Bumped the major version because it changes assembly identity — reverted the very n
Please find the new JARs on the maven site here .
a38d516
Hi all,
Please find the new JARs on the maven site here .
The new release contains mostly metadata changes . Thanks to all those who contributed by providing issue reports! See detailed release notes .
Want to be notified of future releases? Join the discussion group !
Nothing published for this version
Nothing published for this version
Nothing published for this version
5 releases, mostly metadata syncs and routine Dependabot/codecov-action bumps. CodeQL's build step picked up .NET 8. (#274) One doc fix: the bug-repor
5 releases, mostly metadata syncs and routine Dependabot/codecov-action bumps. CodeQL's build step
picked up .NET 8. (#274) One doc fix: the bug-report issue template was updated to ask reporters for
more detail. (#278)
Added: net9.0 target framework (dropped again once out of support — see v9.0.36–v9.0.37 above).
net9.0 target framework (dropped again once out of support — see v9.0.36–v9.0.37 above).
(#273)Metadata-only release. No source changes.
Metadata-only release. No source changes.
Updated the JSON library dependency used by the libphonenumber-csharp.extensions package.
libphonenumber-csharp.extensions package.Nothing published for this version
Nothing published for this version
3 releases, metadata syncs plus routine Dependabot test-dependency bumps (Microsoft.NET.Test.Sdk) and one mechanical LocaleData.cs regeneration. No so
3 releases, metadata syncs plus routine Dependabot test-dependency bumps (Microsoft.NET.Test.Sdk)
and one mechanical LocaleData.cs regeneration. No source changes.
Added: net8.0 target framework; dropped net7.0.
net8.0 target framework; dropped net7.0. (#264)Nothing published for this version
2 releases, metadata syncs plus routine Dependabot test-dependency bumps. No source changes.
2 releases, metadata syncs plus routine Dependabot test-dependency bumps. No source changes.
Bumped System.Text.Json in libphonenumber-csharp.extensions.
System.Text.Json in libphonenumber-csharp.extensions. (#258)Fixed: area-code information was lost for all Mexican (MX) numbers.
Nothing published for this version
2 releases, metadata syncs plus routine Dependabot/codecov-action bumps. No source changes.
2 releases, metadata syncs plus routine Dependabot/codecov-action bumps. No source changes.
Code coverage now runs and uploads on every PR, not only on main; removed the now-redundant standalone coverage workflow.
main; removed the now-redundant
standalone coverage workflow. (#250)Your coding agent can read these notes before it upgrades. Set up the MCP server →