Skip to content
Devix Open Source

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.

MeasurePhone Inputintl-tel-input
Measured on2026-09-122026-09-11
Version1.2.029.2.3
Widget JS, gzip (esbuild --minify, gzip -9)17.4 KB17.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 assetsBuilt-in SVG, ~14 KB lazyWebP sprite 38.6 KB (+ @2x 88.7 KB)
Runtime dependencies00

Features

FeaturePhone Inputintl-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.