The following volunteers have contributed code, documentation, testing and/or support to the Apache Edgent(incubating).

Apache Edgent(incubating) 1.0.0
---------------------
Alex Glikson
Alexander Cook
BJ Hargrave
Cazen Lee
Dale LaBossiere
Daniel John Debrunner
Daniel Takamori
James Mullineux
Julian Hyde
Justin Mclean
Katherine Marsden
Kathy Saunders
Luciano Resende
May Wone
Michael Dye
Mike Spicer
Queenie Ma
Saurabh Jinturkar
Sergey Vlasov
Susan L. Cline
Victor Dogaru
William Marshall
Yaoliang Chen

Many other people have contributed in other ways to the Apache Edgent(incubating) project
by helping out on the mailing list, maintaining the website, adding and editing wiki content,
raising bugs in JIRA, and with many other tasks.

Please check the Apache Edgent website [1], Apache Edgent wiki [2], dev mailing list [3],
Apache Edgent JIRA [4], GitHub mirror [5] for some of these contributions.

If you've missing from any of these lists please get in touch and you'll appear
in future versions of this document.

1. http://edgent.incubator.apache.org/
2. https://cwiki.apache.org/confluence/display/Edgent/Apache+Edgent+Wiki+Home
3. dev@edgent.incubator.apache.org
4. https://issues.apache.org/jira/browse/EDGENT
5. https://github.com/apache/incubator-edgent
