---
title:  Prerequisites and Installation Instructions
---

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

Each host of Apache Geode that meets a small set of prerequisites may follow the provided installation instructions.

-   **[Host Machine Requirements](getting_started/system_requirements/host_machine.html)**

    Host machines must meet a set of requirements for Apache Geode.

-   **[How to Install](getting_started/installation/install_standalone.html)**

    Build from source or use the ZIP or TAR distribution to install Apache Geode on every physical and virtual machine that will run Apache Geode.

-   **[Setting Up the CLASSPATH](getting_started/setup_classpath.html)**

    This topic describes how Geode processes set their CLASSPATH.

-   **[How to Uninstall](getting_started/uninstall_geode.html)**

    This section describes how to remove Geode.


