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

# {{title}}

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 2021-2022 Annual Report](990-2021.pdf) for the Apache
Software Foundation

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

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

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

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

-  [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/).
