<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Download - CubeCactus</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;800&family=Archivo:wght@300;500;900&display=swap" rel="stylesheet">
<style>
:root {
--primary: #00ff88;
--secondary: #0099ff;
--dark: #0a0e15;
--darker: #050810;
--light: #f0f4f8;
--gray: #6b7280;
--border: rgba(0, 255, 136, 0.2);
--font-display: 'Archivo', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: var(--font-mono);
background: var(--darker);
color: var(--light);
line-height: 1.6;
padding: 6rem 2rem 2rem;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
h1 {
font-family: var(--font-display);
font-size: 4rem;
font-weight: 900;
text-align: center;
margin-bottom: 1rem;
background: linear-gradient(135deg, var(--primary), var(--secondary));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.subtitle {
text-align: center;
color: var(--gray);
font-size: 1.2rem;
margin-bottom: 4rem;
}
.version-badge {
display: inline-block;
background: var(--primary);
color: var(--dark);
padding: 0.5rem 1rem;
border-radius: 20px;
font-weight: 800;
font-size: 0.9rem;
margin-bottom: 3rem;
}
.download-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 2rem;
margin-bottom: 4rem;
}
.download-card {
background: rgba(0, 255, 136, 0.03);
border: 1px solid var(--border);
border-radius: 8px;
padding: 2.5rem;
transition: all 0.3s ease;
}
.download-card:hover {
border-color: var(--primary);
transform: translateY(-5px);
box-shadow: 0 20px 50px rgba(0, 255, 136, 0.15);
}
.download-icon {
font-size: 3rem;
margin-bottom: 1rem;
}
.download-title {
font-family: var(--font-display);
font-size: 1.8rem;
font-weight: 900;
color: var(--light);
margin-bottom: 0.5rem;
}
.download-description {
color: var(--gray);
margin-bottom: 1.5rem;
font-size: 0.95rem;
}
.download-size {
color: var(--gray);
font-size: 0.85rem;
margin-bottom: 1.5rem;
}
.btn-download {
width: 100%;
padding: 1rem;
background: var(--primary);
color: var(--dark);
border: none;
border-radius: 4px;
font-family: var(--font-mono);
font-weight: 800;
cursor: pointer;
transition: all 0.3s ease;
text-decoration: none;
display: block;
text-align: center;
}
.btn-download:hover {
background: var(--secondary);
transform: translateY(-2px);
}
.installation-section {
margin-top: 6rem;
}
h2 {
font-family: var(--font-display);
font-size: 2.5rem;
font-weight: 900;
color: var(--light);
margin-bottom: 2rem;
text-align: center;
}
.platform-tabs {
display: flex;
justify-content: center;
gap: 1rem;
margin-bottom: 2rem;
flex-wrap: wrap;
}
.tab-btn {
padding: 0.8rem 2rem;
background: transparent;
color: var(--gray);
border: 1px solid var(--border);
border-radius: 4px;
font-family: var(--font-mono);
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
}
.tab-btn.active {
background: var(--primary);
color: var(--dark);
border-color: var(--primary);
}
.tab-content {
display: none;
background: var(--dark);
border: 1px solid var(--border);
border-radius: 8px;
padding: 2rem;
margin-bottom: 2rem;
}
.tab-content.active {
display: block;
}
.tab-content pre {
color: var(--primary);
font-size: 0.95rem;
line-height: 1.8;
overflow-x: auto;
}
.changelog {
margin-top: 6rem;
}
.changelog-item {
margin-bottom: 3rem;
padding-bottom: 2rem;
border-bottom: 1px solid var(--border);
}
.changelog-version {
font-family: var(--font-display);
font-size: 1.5rem;
font-weight: 900;
color: var(--primary);
margin-bottom: 0.5rem;
}
.changelog-date {
color: var(--gray);
font-size: 0.9rem;
margin-bottom: 1rem;
}
.changelog-list {
list-style: none;
padding-left: 0;
}
.changelog-list li {
color: var(--gray);
margin-bottom: 0.5rem;
padding-left: 1.5rem;
position: relative;
}
.changelog-list li::before {
content: '→';
position: absolute;
left: 0;
color: var(--primary);
}
</style>
</head>
<body>
<div class="container">
<h1>Download CubeCactus</h1>
<p class="subtitle">Choose your platform and start building</p>
<div style="text-align: center;">
<span class="version-badge">Latest Version: 1.0.0</span>
</div>
<div class="download-grid">
<div class="download-card">
<div class="download-icon">☕</div>
<h3 class="download-title">JAR Binary</h3>
<p class="download-description">
Standalone executable JAR. Requires Java 21+
</p>
<p class="download-size">Size: 45 MB</p>
<a href="#" class="btn-download">Download JAR</a>
</div>
<div class="download-card">
<div class="download-icon">🐳</div>
<h3 class="download-title">Docker Image</h3>
<p class="download-description">
Official Docker image for containerized deployment
</p>
<p class="download-size">docker pull cubecactus/cubecactus:latest</p>
<a href="#" class="btn-download">Docker Hub</a>
</div>
<div class="download-card">
<div class="download-icon">📦</div>
<h3 class="download-title">Source Code</h3>
<p class="download-description">
Build from source with Maven
</p>
<p class="download-size">Clone from GitHub</p>
<a href="https://github.com/cubecactus/cubecactus" class="btn-download">GitHub</a>
</div>
</div>
<div class="installation-section">
<h2>Installation Instructions</h2>
<div class="platform-tabs">
<button class="tab-btn active" onclick="showTab('jar')">JAR</button>
<button class="tab-btn" onclick="showTab('docker')">Docker</button>
<button class="tab-btn" onclick="showTab('k8s')">Kubernetes</button>
<button class="tab-btn" onclick="showTab('source')">Source</button>
</div>
<div id="jar" class="tab-content active">
<pre># Download JAR
wget https://github.com/cubecactus/cubecactus/releases/download/v1.0.0/cubecactus-1.0.0.jar
# Run
java -jar cubecactus-1.0.0.jar \
--node-id=node-1 \
--port=8080
# Verify
curl http://localhost:8080/api/v1/health</pre>
</div>
<div id="docker" class="tab-content">
<pre># Pull image
docker pull cubecactus/cubecactus:latest
# Run single node
docker run -d \
--name cubecactus \
-p 8080:8080 \
-v cubecactus-data:/var/lib/cube/data \
cubecactus/cubecactus:latest
# Run 3-node cluster
docker-compose up -d
# Verify
docker ps
curl http://localhost:8080/api/v1/health</pre>
</div>
<div id="k8s" class="tab-content">
<pre># Download manifests
wget https://github.com/cubecactus/cubecactus/releases/download/v1.0.0/k8s-manifests.tar.gz
tar -xzf k8s-manifests.tar.gz
# Deploy
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/statefulset.yaml
kubectl apply -f k8s/service.yaml
# Verify
kubectl get pods -n cubecactus
kubectl get svc -n cubecactus
# Port forward
kubectl port-forward svc/cubecactus-lb 8080:80 -n cubecactus
# Test
curl http://localhost:8080/api/v1/health</pre>
</div>
<div id="source" class="tab-content">
<pre># Clone repository
git clone https://github.com/cubecactus/cubecactus.git
cd cubecactus
# Build
mvn clean package -DskipTests
# Run
java -jar target/cubecactus-1.0.0.jar \
--node-id=node-1 \
--port=8080
# Run tests
mvn test
# Build Docker image
docker build -t cubecactus:custom .</pre>
</div>
</div>
<div class="changelog">
<h2>Changelog</h2>
<div class="changelog-item">
<div class="changelog-version">v1.0.0</div>
<div class="changelog-date">Released: February 13, 2026</div>
<ul class="changelog-list">
<li><strong>NEW:</strong> Gossip protocol implementation (SWIM-based)</li>
<li><strong>NEW:</strong> Full SQL support (CREATE, SELECT, INSERT, UPDATE, DELETE)</li>
<li><strong>NEW:</strong> LSM storage engine with compaction</li>
<li><strong>NEW:</strong> Tunable consistency levels (ONE, QUORUM, ALL)</li>
<li><strong>NEW:</strong> Automatic replication with hinted handoff</li>
<li><strong>NEW:</strong> Read repair for eventual consistency</li>
<li><strong>NEW:</strong> Docker and Kubernetes support</li>
<li><strong>NEW:</strong> Interactive CubeShell CLI</li>
<li><strong>NEW:</strong> REST API for queries and cluster management</li>
<li><strong>PERF:</strong> 200K reads/sec, 100K writes/sec on 3-node cluster</li>
</ul>
</div>
<div class="changelog-item">
<div class="changelog-version">v0.9.0-beta</div>
<div class="changelog-date">Released: January 20, 2026</div>
<ul class="changelog-list">
<li><strong>NEW:</strong> Initial beta release</li>
<li><strong>NEW:</strong> Basic storage engine</li>
<li><strong>NEW:</strong> CQL parser</li>
<li><strong>NEW:</strong> Single-node deployment</li>
</ul>
</div>
</div>
</div>
<script>
function showTab(tabName) {
// Hide all tabs
document.querySelectorAll('.tab-content').forEach(tab => {
tab.classList.remove('active');
});
document.querySelectorAll('.tab-btn').forEach(btn => {
btn.classList.remove('active');
});
// Show selected tab
document.getElementById(tabName).classList.add('active');
event.target.classList.add('active');
}
</script>
</body>
</html>