Faits : A. La Fondation Z._ exploite un établissement médico-social à Renens. X._ est entrée à son service dès le 2 décembre 2002, d'abord en qualité d'aide-infirmière, puis d'auxiliaire de santé à temps complet. Au mois d'avril 2013, son salaire mensuel brut s'élevait à 4'724 francs. Le 22 de ce mois, l'employée fut appelée dans le bureau du directeur. En présence de deux cadres-infirmiers, celui-ci l'interrogea au sujet d'un vol d'argent qu'un résident de l'établissement, U._, disait avoir récemment subi. Par lettre du même jour, la Fondation a licencié l'employée avec effet au 31 juillet 2013 et elle l'a incontinent libérée de l'obligation de travailler. Le congé était motivé par le vol que U._ avait dénoncé : «... à la suite des accusations de vol portées à votre encontre par un résident, après l'avoir entendu et après un entretien pour entendre vos explications, nous avons formé notre conviction et le lien de confiance est définitivement rompu. » L'employée a répondu pour contester cette accusation; plus tard, le 31 juillet 2013, elle a formé opposition au congé, qu'elle tenait pour abusif. B. Sur plainte de U._, une enquête pénale a été ouverte contre X._. Par ordonnance du 15 septembre 2014, le Ministère public de l'arrondissement de Lausanne a classé cette affaire au motif que l'accusation était contestée, que plusieurs personnes se trouvaient sur le lieu du vol et qu'aucune mesure d'instruction ne paraissait apte à orienter les recherches. C. Dans l'intervalle, le 28 novembre 2013, X._ avait intenté action à la Fondation Z._ devant le Tribunal de prud'hommes du même arrondissement. La défenderesse devait être condamnée à payer 30'000 fr. à titre d'indemnités diverses, en particulier pour licenciement abusif. La défenderesse a conclu au rejet de l'action. Après avoir interrogé les parties et divers témoins, le tribunal s'est prononcé le 28 octobre 2014. Accueillant partiellement l'action, il a condamné la défenderesse à payer 19'000 fr. à titre d'indemnité pour licenciement abusif, avec intérêts au taux de 5% par an dès le 28 novembre 2013. Le tribunal a notamment retenu que l'accusation portée contre la demanderesse n'était pas justifiée. La Cour d'appel civile du Tribunal cantonal a statué le 28 août 2015 sur l'appel de la défenderesse. Elle a accueilli l'appel et rejeté l'action. Selon la Cour, cette partie-ci a motivé le licenciement de l'autre partie par les indices sérieux d'un vol perpétré par elle, de sorte que ce congé n'est pas abusif. D. Agissant par la voie du recours en matière civile, la demanderesse requiert le Tribunal fédéral de confirmer le jugement prud'homal. Par ordonnance du 15 février 2016, le Tribunal fédéral a accueilli une demande d'assistance judiciaire jointe au recours et il a désigné Me Boris Heinzer en qualité d'avocat d'office de la demanderesse. Invitée à répondre, la défenderesse a conclu au rejet du recours.