Faits:
A. A._, ressortissant égyptien né en 1987, a été arrêté le 20 septembre 2011 et mis en prévention de tentatives de meurtre, voire d'assassinat, pour avoir participé avec au moins cinq autres personnes, le 7 août 2011, à une agression au cours de laquelle B._ a été frappé et poignardé. Il a été reconnu par la victime, mais nie toute participation à cette agression. Il est également mis en cause pour une tentative de meurtre commise le 16 septembre 2011. La détention provisoire a été prolongée jusqu'au 22 décembre 2011, puis jusqu'au 16 mars 2012. Deux demandes de mise en liberté ont été rejetées.
B. Par ordonnance du 13 mars 2012, le Tribunal des mesures de contrainte du canton de Genève (Tmc) a refusé de prolonger une nouvelle fois la détention. Le prévenu avait reconnu s'être trouvé sur les lieux au moment de la première agression, mais contestait toute participation. La victime l'avait identifié, mais était revenue sur ses déclarations lors d'une audience de confrontation. Aucun autre élément ne venait confirmer les charges à l'encontre du prévenu, de sorte que celles-ci apparaissaient insuffisantes.
Par acte du 13 mars 2012, le Ministère public du canton de Genève a déclaré recourir auprès de la Chambre pénale de recours de la Cour de justice contre cette ordonnance. Il demandait le maintien en détention du prévenu, pour trois mois. Invité à se déterminer dans les trois jours, le prévenu a conclu au rejet du recours. A l'invitation de la Chambre pénale de recours, le Ministère public a déposé une réplique le 22 mars 2012, reprenant dans le détail le rôle joué selon lui par chacun des cinq prévenus. S'agissant de A._, il relevait que celui-ci avait admis sa présence sur les lieux de la première agression, et qu'il apparaissait sur les images de vidéosurveillance. Les rétractations de la victime étaient manifestement dictées par la crainte. Cette réplique a été transmise le vendredi 23 mars 2012 au prévenu, pour information. Celui-ci l'a reçue le lundi 26 mars et n'a pas réagi.
C. Par arrêt du 30 mars 2012, la Chambre pénale a admis le recours du Ministère public et ordonné le maintien de la détention provisoire jusqu'au 13 juin 2012. En dépit de l'absence d'éléments nouveaux, les charges suffisantes avaient déjà été reconnues dans des arrêts précédents de la Chambre pénale de recours, dont le Tmc ne pouvait faire abstraction. La présence des prévenus lors de l'agression du 7 août 2011 était attestée par les enregistrements vidéo, A._ y apparaissant en train d'effectuer une reconnaissance des lieux avant l'agression. A._ avait été formellement mis en cause par les deux victimes, avant que celles-ci ne se rétractent par peur des représailles. Des traces ADN appartenant au prévenu avaient été retrouvées sur un couteau cassé dans un appartement qu'il fréquentait avec deux autres personnes, également mises en cause pour la seconde agression.
D. Par acte du 2 mai 2012, A._ forme un recours en matière pénale par lequel il conclut à l'annulation de l'arrêt précité et à sa remise en liberté. Il demande l'assistance judiciaire.
La Chambre pénale de recours persiste dans les termes de son arrêt. Le Ministère public conclut au rejet du recours

Considérant en droit:
1. Selon l'<ref-law>, le recours en matière pénale est ouvert contre les décisions relatives à la détention provisoire ou pour des motifs de sûreté au sens des <ref-law>.
Selon l'art. 81 al. 1 let. a et let. b ch. 1 LTF, le prévenu a qualité pour agir. Le recours est formé en temps utile (<ref-law>) contre une décision rendue en dernière instance cantonale (<ref-law>). Les conclusions présentées sont en soi recevables au regard de l'<ref-law>.
2. Le recourant soulève deux griefs d'ordre formel qu'il y a lieu d'examiner en premier lieu. Dans un premier grief, il se plaint d'une violation de son droit d'être entendu (art. 29 al. 1 Cst. et 6 CEDH). Il reproche à la cour cantonale d'avoir autorisé le Ministère public à déposer une réplique, laquelle lui aurait été remise pour information le 26 mars 2012. L'arrêt attaqué ayant été rendu quatre jours plus tard, le recourant n'aurait pas eu le temps de faire usage de son droit de déposer de nouvelles observations.
2.1 Selon les art. 29 al. 2 Cst. et 3 al. 2 let. c CPP, les parties ont le droit d'être entendues. Cela comprend notamment le droit pour une partie à un procès de prendre connaissance de toute argumentation présentée au tribunal et de se déterminer à son propos, que celle-ci contienne ou non de nouveaux éléments de fait ou de droit, et qu'elle soit ou non concrètement susceptible d'influer sur le jugement à rendre. Il appartient en effet aux parties, et non au juge, de décider si une prise de position ou une pièce nouvellement versée au dossier contient des éléments déterminants qui appellent des observations de leur part. Ce droit à la réplique découle aussi, en matière de détention, de l'art. 5 par. 4 CEDH. Toute prise de position ou pièce nouvelle versée au dossier doit ainsi être communiquée aux parties pour leur permettre de décider si elles veulent ou non faire usage de leur faculté de se déterminer (<ref-ruling> consid. 2.3.1 p. 197; <ref-ruling> consid. 4.5; <ref-ruling> consid. 2.2; <ref-ruling> consid. 3.3.2 - 3.3.4; arrêt 1C_196/2011 du 11 juillet 2011 publié in SJ 2012 I p. 117; CourEDH, arrêt Schaller-Bossert contre Suisse du 28 octobre 2010 § 39 s.).
2.2 En matière de détention provisoire, la jurisprudence précise encore, dans le cadre du droit de réplique garanti par l'art. 5 par. 4 CEDH, qu'une simple remise "pour information" des observations de la partie adverse est insuffisante, et qu'un délai doit être imparti afin de faire valoir le droit de réplique (arrêt 1B_728/2011 du 13 janvier 2012, consid. 2.3 et les arrêts cités).
2.3 En l'occurrence, la réplique du Ministère publique, qui comporte neuf pages, a été remise le 26 mars 2012 à l'avocat du recourant pour information. Aucun délai n'était fixé pour le dépôt d'éventuelles observations. L'avocat du recourant n'a pas réagi. On ne saurait toutefois lui reprocher de ne pas avoir déposé d'écriture spontanée avant le prononcé, quatre jours plus tard, de l'arrêt attaqué, car l'indication "pour information" pouvait de bonne foi être comprise en ce sens qu'aucune écriture supplémentaire n'était autorisée. Il appartenait dès lors à la cour cantonale d'octroyer au recourant un bref délai pour exercer son droit de réplique. Ne l'ayant pas fait, elle a violé le droit d'être entendu.
2.4 La violation du droit d'être entendu ne peut plus être guérie en instance fédérale puisque ce ne sont pas uniquement des questions de droit qui sont controversées mais aussi des questions de fait que le Tribunal fédéral ne peut pas revoir librement (cf. <ref-law>; <ref-ruling> consid. 2 p. 72; arrêt 1C_196/2011 précité, consid. 2.4).
3. Le recours doit dès lors être admis pour ce motif, sans qu'il y ait à examiner le second grief d'ordre formel (motivation insuffisante de l'arrêt attaqué en rapport avec le principe de la proportionnalité) et les griefs de fond (existence de charges suffisantes). La cause doit être renvoyée à la Chambre pénale pour nouvelle décision après avoir permis au recourant d'exercer son droit de réplique. L'admission du recours pour ce motif formel n'a toutefois pas pour conséquence la libération du recourant. En effet, l'ordonnance de mesures provisionnelles par laquelle la cour cantonale a ordonné le maintien en détention du prévenu, demeure en vigueur jusqu'au nouveau prononcé. Conformément à l'art. 68 al. 1 et 2 LTF, le recourant, qui obtient gain de cause, a droit à des dépens à la charge du canton de Genève. Cela rend sans objet la demande d'assistance judiciaire. Conformément à l'<ref-law>, il n'est pas perçu de frais judiciaires.

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est admis; l'arrêt attaqué est annulé et la cause est renvoyée à la Chambre pénale de recours de la Cour de justice du canton de Genève pour nouvelle décision dans le sens des considérants.
2. Une indemnité de dépens de 2'000 fr. est allouée à l'avocat du recourant, à la charge du canton de Genève. La demande d'assistance judiciaire est sans objet.
3. Il n'est pas perçu de frais judiciaires.
4. Le présent arrêt est communiqué au mandataire du recourant, au Ministère public et à la Cour de justice du canton de Genève, Chambre pénale de recours.
Lausanne, le 15 mai 2012
Au nom de la Ire Cour de droit public
du Tribunal fédéral suisse
Le Président: Fonjallaz
Le Greffier: Kurz