Nineteen young children and two adults have died in a shooting at a primary school in south Texas.

The 18-year-old gunman opened fire at Robb Elementary School in the city of Uvalde before he was killed by law enforcement, officials said.

Investigators say the suspect was armed with a handgun, an AR-15 semi-automatic rifle and high-capacity magazines.

The teenager is suspected of shooting his grandmother at the start of the rampage.

Local media report he may have been a high school student in the area.

Uvalde Consolidated Independent School District Chief of Police Pete Arredondo said the shooting began at 11:32 local time on Tuesday, and that investigators believe the attacker “did act alone during this heinous crime”.

Texas Governor Greg Abbott said the shooter abandoned a vehicle before entering the school to “horrifically, incomprehensibly” open fire.

One of the adults killed was a teacher, who has been named in US media as Eva Mireles. Her page on the school district’s website said she has a daughter in college and loved running and hiking.

The Associated Press news agency reports that a US Border Patrol official who was nearby when the shooting began rushed into the school and shot and killed the gunman, who was behind a barricade.

Border Patrol is a federal agency that guards US ports of entry. Uvalde, which is fewer than 80 miles from the border with Mexico, is home to a Border Patrol station.

Two border agents were reportedly shot in an exchange with the gunman. One agent was shot in the head, officials say, adding that both were now in a stable condition in hospital.

According to CBS News, the attacker was wearing body armour as he carried out the attack.