The former is the correct spelling. The dot (अनुस्वार) in latter is a lazy way of writing first. Ignore any X language vs Y language arguments, since you write languages in a script, and both X and Y are using the same script.

The last letter of each varga (ङ, ञ, ण, न, म) is a nasal letter. Only that letter is a valid transcription of the nasal sound which comes before any letter of the same varga. It takes the least distance travelled by the tongue to pronounce those sounds, and you do that too, you just never knew about it.

The dot is just a placeholder for all nasal sounds and is extremely contextual. Even more now when there is now an implicit n/m contextual heuristics applied by people.

Another example: गंगा is a corrupted transcription. गङ्गा is the exactly correct form. Now notice when you pronounce it and compare it to the pronunciation of हिन्दी. Pay attention to how you are making the nasal sound.

Thus, using the dot everywhere mindlessly is loss of information for a phonetic script like Devanagari. It’s not a mere shortcut. The whole damn point of all Indian scripts is to be exact, in a “what you see is what you pronounce" fashion (WYSIWYP :-P).

The conversion of dot to the letter is even given a specific name. It’s called परसवर्ण सन्धि. While I haven’t studied लघुसिद्धान्तकौमुदि, the relevant sutra can be found here: अनुस्वारस्य ययि परसवर्णः.

The dot should be used only in case of ending म् in word, or in cases like succeeding स (or anything in that varga, or basically those without the last nasal letter).

The corruption is first by people initially, then exacerbated by shitty policy of Government of India, but now due to technological laziness and ignorance by American companies like Google and Facebook. Facebook is so lazy that it just defaults to adding a halant instead of making proper conjuncts. And why should they improve? They’re Americans first. They just want to be legible enough for their products to be used by people.

And this is normalising, because Indians (or aptly called endians) are retarded, and are unable to read in their scripts and use their phones in their own languages. Then endians depend on transliteration tools and want to default to sloppy latin script and expect programs to convert it into native script, but are happy with inexact output (even the use of chandrabindu ( ँ ) is reducing because gboard doesn’t add it and defaults to… अनुस्वार, aka the dot). This then also creates a disincentive to create a better native keyboard, and this cycle propagates. FWIW, the tools like gboard are damn good roughly (yours truly also uses it) when compared to shitty keyboard designs of Devanagari, which then again fuels the cycle.

At least people should use something like m17n’s mostly convenient implementation of ITRANS (on Linux), but then people don’t want to learn anything.