<% set_title(product_name_long, "Native", product_version, "Documentation") %>

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

This documentation describes the Apache Geode Native Client version <%=vars.product_version%>. 
Source files are available from the [Apache Geode-Native Github repository](https://github.com/apache/geode-native) 
and instructions on how to build this documentation are available in the project README file found at that location.

The Apache Geode Native Client is a library that provides access for C++ and Microsoft<sup>®</sup> .NET™ Framework clients to an Apache Geode cluster.

See the API docs for API details:

  - [C++ API docs](/<%=vars.cppapiref_version%>/hierarchy.html)
  - [.NET Framework API docs](/<%=vars.dotnetapiref_version%>/hierarchy.html)

See the [_<%=vars.product_name_long%> User Guide_](<%=vars.serverman%>/about_<%=vars.product_name.downcase%>.html) for information regarding the server.

