Ada perbedaan mendasar sebenarnya antara tanda caret (^) dan tanda (~) pada Composer.json? Mungkin agan-agan pernah bertanya begiut.

Salah penggunaan, bisa berakibat salah versi dependensi.

Apa akibat dari salah dependensi versi tersebut? Paling parah adalah apps yang kita buat tidak berjalan lagi.

Tanda ~ (tilde) mempunyai hasil query di Composer sebagai berikut:

~1.0   berarti >=1.0.0 dan <2.0.0 seperti 1.*
~1.0.0 berarti >=1.0.0 dan <1.1.0 seperti 1.0.*

sedangkan tanda ^ (caret) mempunyai hasil query di Composer sebagai berikut:

^1.0   berarti >=1.0.0 dan <2.0.0 seperti 1.*
^1.0.0 berarti >=1.0.0 dan <2.0.0 seperti 1.*

Sayangnya, Semver (salah satu core library dari Composer) berlaku tidak sempurna jika berlaku untuk versi kurang dari 1.0.

Contohnya, jika target kita ada library dengan versi 0.2 sampai dengan 0.3:
~0.2 berarti >= 0.2.0 dan < 1.0.0

dimana jika memakai tanda ^, inilah yang kita dapat:
^0.2 berarti >= 0.2.0 dan < 0.3.0

Jadi, sebelum terlambat, khususnya jika kita pakai library yang belum stable (< 1.0), silakan gunakan tanda ^ daripada tanda ~.