.. ..

	<!---
    Licensed to the Apache Software Foundation (ASF) under one or more
	contributor license agreements.  See the NOTICE file distributed with
	this work for additional information regarding copyright ownership.
	The ASF licenses this file to You under the Apache License, Version 2.0
	(the "License"); you may not use this file except in compliance with
	the License.  You may obtain a copy of the License at

	  http://www.apache.org/licenses/LICENSE-2.0

	Unless required by applicable law or agreed to in writing, software
	distributed under the License is distributed on an "AS IS" BASIS,
	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	See the License for the specific language governing permissions and
	limitations under the License. 
	--->

.. _authors:

Apache Distill is written and maintained by various contributors:

Development Leads:
``````````````````

- Joshua Poore <jpoore@apache.org>
- Kelsey Rassmann

Contributors:
`````````````
- Grant Tamrakar
- Alex Veerasammy
- Amir Ghaemi

Inspired by Previous Contributors:
``````````````````````````````````

- Michelle Beard <msbeard@apache.org>
- Laura Mariano <lmariano@apache.org>
- Ryan Brill
- Clay Gimenez <cgimenez@dapache.org>
- Arthi Vezhavendan <avezhavendan@apache.org>
