<!DOCTYPE html>

<html>
	<head>
		<title>Apache Arrow Cookbook for Arrow Nightlies version</title>
		<style>
			body {
				color: rgb(51, 51, 51);
				font-family: sans-serif;
				line-height: 1.65;
				padding: 25px;
				max-width: 900px;
				margin-left: auto;
				margin-right: auto;
			}

			a {
				color: rgb(0, 91, 129);
			}

			#logo {
				width: 50%;
				margin-left: auto;
				margin-right: auto;
			}

			#logo > img {
				width: 100%;
			}
		</style>
		<!-- Matomo -->
		<script>
			var _paq = window._paq = window._paq || [];
			/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
			/* We explicitly disable cookie tracking to avoid privacy issues */
			_paq.push(['disableCookies']);
			_paq.push(['trackPageView']);
			_paq.push(['enableLinkTracking']);
			(function() {
				var u="https://analytics.apache.org/";
				_paq.push(['setTrackerUrl', u+'matomo.php']);
				_paq.push(['setSiteId', '20']);
				var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
				g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
			})();
		</script>
		<!-- End Matomo Code -->
	</head>
	<body>
		<div id="logo"><img src="arrow.png"/></div>
		<h1>Apache Arrow Cookbook for Arrow Nightlies</h1>
		<p>The cookbook is a collection of Apache Arrow recipes for
		   the languages and platforms supported by Arrow.<br/>
		   Most recipes will be common to all platforms, 
		   but some are specific to the language and environment in use.<br/>
		   This uses the Apache Arrow nightlies version. Click on the link
		   if you want to use the latest
		   <a href="../index.html">stable Apache Arrow Cookbook</a>.
		</p>
		<ul>
			<li><a href="cpp/index.html">C++ Cookbook</a></li>
			<li><a href="java/index.html">Java Cookbook</a></li>
			<li><a href="py/index.html">Python Cookbook</a></li>
			<li><a href="r/index.html">R Cookbook</a></li>
			<li><a href="https://github.com/apache/arrow-rs/tree/master/arrow/examples">Rust Examples</a></li>
		</ul>
		<p>If you are looking for the Apache Arrow Documentation itself
		   or the API reference, those are available at
		   <a href="https://arrow.apache.org/docs/">https://arrow.apache.org/docs/</a>
		</p>
	</body>
</html>
