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

NOTE: 
See https://www.apache.org/dev/release-download-pages.html 
for important requirements for download pages for Apache projects.

////
= Apache NetBeans Releases
:jbake-type: page
:jbake-tags: download
:jbake-status: published
:keywords: Apache NetBeans releases
:description: Apache NetBeans Releases Page
:linkattrs:

Apache NetBeans is released four times a year. Our April release is a
long-term support (LTS) release that benefits from our famous NetCAT
community testing process, and will remain available and supported for
a year.  Our other quarterly releases provide early access to new
features. See link:https://cwiki.apache.org/confluence/display/NETBEANS/Release+Schedule[full release schedule].

== Apache NetBeans 11 feature update 2 (NB 11.2)

Latest version of the IDE, released on October 25, 2019.

link:/download/nb112/index.html[Features, role="button"] link:/download/nb112/nb112.html[Download, role="button success"]

== Apache NetBeans 11 LTS (NB 11.0)

Latest LTS version of the IDE, released on April 4, 2019.

link:/download/nb110/index.html[Features, role="button"] link:/download/nb110/nb110.html[Download, role="button success"]

== Older releases

Older Apache NetBeans releases and pre-Apache NetBeans releases can still be
downloaded, but are no longer supported.

link:/download/archive/index.html[Find out more, role="button"]

== Daily builds and building from source

All Apache NetBeans source code is freely available to build yourself, or you can
download (unsupported) daily development builds.

link:/download/dev/index.html[Find out more, role="button"]
