Sachverhalt: A. A._ nahm am 10. September 2011 an einer unbewilligten Demonstration in Diepoldsau/Widnau teil. Als die Polizei die Teilnehmer kontrollieren wollte, gelangte er über einen Zaun auf das Werkareal des Rheinunternehmens Widnau. B. Das Kreisgericht Rheintal verurteilte A._ am 29. März 2012 wegen Hausfriedensbruchs und Teilnahme an einer unbewilligten Demonstration zu einer Geldstrafe von 20 Tagessätzen zu Fr. 20.-- und zu einer Busse von Fr. 200.--. Die Berufung des Verurteilten wies das Kantonsgericht St. Gallen am 22. November 2012 ab. C. A._ führt Beschwerde in Strafsachen und beantragt, der angefochtene Entscheid sei aufzuheben und die Sache zur neuen Beurteilung an die Vorinstanz zurückzuweisen. Das Kantonsgericht hat auf eine Vernehmlassung verzichtet (act. 14). Die Staatsanwaltschaft des Kantons St. Gallen hat sich nicht vernehmen lassen.