Comparison
Phone Input vs intl-tel-input
Measured, not claimed. Sizes are minified and gzipped, against the versions and date shown in the table. Feature notes reflect each project's documentation and public issue tracker on that date — if something has changed, tell us and we'll update this page.
| Measure | Phone Input | intl-tel-input |
|---|---|---|
| Measured on | 2026-09-12 | 2026-09-11 |
| Version | 1.2.0 | 29.2.3 |
| Widget JS, gzip (esbuild --minify, gzip -9) | 17.4 KB | 17.4 KB |
| Validation data, gzip | ~0.5 KB per country used (48 KB for all) | 60.0 KB (utils.js, all countries) |
| Typical first load for one country | ≈ 17.9 KB | ≈ 77 KB |
| Flag assets | Built-in SVG, ~14 KB lazy | WebP sprite 38.6 KB (+ @2x 88.7 KB) |
| Runtime dependencies | 0 | 0 |
Features
| Feature | Phone Input | intl-tel-input |
|---|---|---|
| Validation from libphonenumber metadata | ||
| Validation rules loaded per country (not one file for all) | ||
| Country detection without a network request | ||
| Flags included without a separate sprite image | ||
| Form-associated web component | ||
| React, Vue and Svelte | ||
| Angular wrapper |
Migrating from intl-tel-input
title: Migrating from intl-tel-input section: Guides order: 5
Most options map one-to-one.
| intl-tel-input | Devix Phone Input |
|---|---|
intlTelInput(input, options) |
createPhoneInput(input, options) |
initialCountry: "auto" + geoIpLookup |
initialCountry: 'auto' + lookupCountry (optional — time zone detection needs no request) |
countryOrder / preferredCountries |
preferredCountries |
onlyCountries, excludeCountries |
same names |
separateDialCode: true |
separateDialCode: true (the default) |
strictMode |
strict (the default) |
loadUtils / utilsScript |
not needed — rules load per country automatically |
iti.getNumber() |
phone.getNumber() |
iti.isValidNumber() |
phone.isValid() |
iti.getValidationError() → number |
phone.getValidationReason() → readable string |
iti.setCountry('gb') |
phone.setCountry('gb') |
iti.setNumber('+44…') |
phone.setNumber('+44…') |
countrychange event |
dx:countrychange event |
hiddenInput: () => ({ phone: 'full' }) |
hiddenInput: 'full' |
jQuery sites
// Before
$('#phone').intlTelInput({ initialCountry: 'ae' });
// After
$('#phone').phoneInput({ initialCountry: 'ae' });
Remove the intl-tel-input CSS, flag sprites and utils.js — none of them are needed.
intl-tel-input is a trademark of its respective owners. Visit intl-tel-input.