Title: Public Records
license: https://www.apache.org/licenses/LICENSE-2.0

The Apache Software Foundation, a Delaware chartered 501C3 membership 
corporation, publishes a wide variety of operational records 
about the corporate operations of the Foundation, as well as 
an [overview of corporate governance procedures](/foundation/governance/).

The Board of Directors publishes a **[formal Board Calendar and Minutes](../board/calendar.html)** 
of our monthly meetings.  An alternate [categorized listing of 
all past Board minutes](https://whimsy.apache.org/board/minutes/) is also available.

# Bylaws And Original Incorporation Records  {#bylaws}

- The [Certificate of Incorporation](certificate.html) for The Apache
Software Foundation

- The [Certificate for Renewal](certificate.html) for The Apache Software
Foundation

- The [Incorporator's Written Consent](incorporator.html) for The Apache
Software Foundation

- The [Bylaws](../bylaws.html) of The Apache Software Foundation

# US Internal Revenue Service Filings and Notices  {#irs}

- IRS Form 8718 - [User Fee for Exempt Organization Determination Letter
Request](ASF-8718.pdf) for The Apache Software Foundation

- IRS Form 1023 - [Application for Recognition of Exemption](ASF-1023.pdf)
for The Apache Software Foundation

-  [Amendments to IRS 1023 Application](ASF-1023-Amendments.pdf) for The
Apache Software Foundation

-  [Definitive Ruling by Internal Revenue Service of 501(c)3
status](ASF-501c3.pdf) for The Apache Software Foundation

The Apache Software Foundation (ASF) filed the below annual Form 990 tax 
returns with the IRS. 

-  [Fiscal Year 2016-2017 Annual Report](990-2016.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2015-2016 Annual Report](990-2015.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2014-2015 Annual Report](990-2014.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2013-2014 Annual Report](990-2013.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2012-2013 Annual Report](990-2012.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2011-2012 Annual Report](990-2011.pdf) for the Apache
Software Foundation

-  [Fiscal Year 2010-2011 Annual Report](990-2010.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2009-2010 Annual Report](990-2009.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2008-2009 Annual Report](990-2008.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2007-2008 Annual Report](990-2007.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2006-2007 Annual Report](990-2006.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2005-2006 Annual Report](990-2005.pdf) for The Apache
Software Foundation

-  For the fiscal years ended in 2004 and 2005, we 
were not required to file an annual return with the IRS because our annual 
gross receipts were less than $25,000.

-  [Fiscal Year 2002-2003 Annual Report](990-2002.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2001-2002 Annual Report](990-2001.pdf) for The Apache
Software Foundation

# Delaware Secretary of State Filings and Notices  {#delaware}

-  [Fiscal Year 2010-2011 Delaware Annual Report](Delaware_e-filing_2011.pdf) for The Apache
Software Foundation

-  [Fiscal Year 2009-2010 Delaware Annual Report](Delaware_e-filing_2010.pdf) for The Apache
Software Foundation


# Other Organizational Records  {#other}

- Records and policies of the [Legal Affairs committee](../../legal/) including licensing information.

- Information about the ASF's [position on the JCP](../../jcp/) (Note: the ASF does not formally participate in the JCP).

- Information on [Export Classifications](../../licenses/exports/) and ECCNs of
Apache products related to cryptography.

- The [Official Foundation blog](http://blogs.apache.org/foundation/) with
press releases and other important news.

- The record of and license for [IBM](http://ibm.com/)'s donation of the
XML4J, XML4C, XML4P, and LotusXSL software packages (in
[PDF](IBM-XML-Licence-Grant.pdf) and [TIFF](IBM-XML-Licence-Grant.tif)
formats)

# Project-Related and Technical Records #

Apache projects perform all of their technical work using open, publicly
archived mailing lists. Please review our [overall mailing list information
page](../mailinglists.html).  We have an [overview of all Apache projects](https://projects.apache.org/).
