Skip to content
Open
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
b1fca46
Replace the docs-style Overview homepage with a structured landing page
sarhiri Jun 29, 2026
0c4b126
Updating website readme to match structure of code
sarhiri Jun 29, 2026
c34089a
Refine What is Armada section
sarhiri Jun 30, 2026
0523e2a
combining what armada does with features into one section
sarhiri Jun 30, 2026
8499f99
added use cases section
sarhiri Jun 30, 2026
6d6709d
Add cncf logo color svg, use cases section on landing page
sarhiri Jun 30, 2026
0f6e544
added transitions to cards on homepage
sarhiri Jun 30, 2026
29c763c
formatted GR section
sarhiri Jun 30, 2026
6dd7a4d
Landing page UI update MVP, old docs commented out until I get aprova…
sarhiri Jul 1, 2026
f598f85
Finalized code structure, ran in dev environment. Needs content revie…
sarhiri Jul 7, 2026
e0039e5
Navigation: Moved all documentation into designated 'docs' section
sarhiri Jul 7, 2026
8934d39
Updated navigation nesting for community
sarhiri Jul 7, 2026
726e09f
updated Readme with nav instructions
sarhiri Jul 7, 2026
41dca1d
docs: restructure developer guide into local development setup
sarhiri Jul 13, 2026
ac3de01
Fix unhandled clipboard rejection in CopyIconButton (#4988)
mauriceyap Jun 30, 2026
25e67f2
Fix unhandled rejection on the Job Sets page; migrate JobSetsContaine…
mauriceyap Jun 30, 2026
3738e5f
Create observability package introducing OTEL (#4975)
nikola-jokic Jul 2, 2026
6e8e242
Add tgucks to Armada maintainers list (#4991)
JamesMurkin Jul 3, 2026
6cc0ea2
Add flags to disable scheduling preemption by type (#4989)
tgucks Jul 3, 2026
346b6e2
feat(scheduler): Extract short job penalty service (#4969)
tgucks Jul 3, 2026
fa1295a
Add OTEL config and wrappers (#4985)
nikola-jokic Jul 6, 2026
02ba2d2
Improve the main scheduler loop (#4993)
JamesMurkin Jul 6, 2026
fee8641
Hot cold local dev (#4899)
dslear Jul 7, 2026
1535361
Fix cross-partition duplicate job rows in Lookout ingester (experimen…
mauriceyap Jul 7, 2026
ba52254
Bump mage to 1.17.2 everywhere, guard dev:up against old mage version…
dejanzele Jul 7, 2026
55a9431
Drop legacy submit_message & groups columns from jobs (#4984)
tgucks Jul 8, 2026
9ec36db
Fix RangeError when null dates passed to DateTimePicker (#4997)
mauriceyap Jul 8, 2026
a8bef5d
Bump next from 15.5.10 to 15.5.18 in /website (#5003)
dependabot[bot] Jul 9, 2026
a715554
Scheduler: for testing, support not publishing to pulsar (#5013)
robertdavidsmith Jul 13, 2026
4afefea
Add configurable Query API query mirroring to a second database (#5016)
mauriceyap Jul 13, 2026
f78d032
fix: add missing meta.json for understanding-armada section
sarhiri Jul 13, 2026
6d41761
Docs: updated local development guide to focus on goreman installation
sarhiri Jul 17, 2026
a453229
Add configurable client-side request mirroring to Lookout UI (#5014)
mauriceyap Jul 14, 2026
7dceb0c
Remove X-Mirrored-Request header from Lookout requests (#5017)
mauriceyap Jul 14, 2026
a07cf3f
Fix mage testsuite failures behind a TLS-intercepting proxy (#5019)
ianhockett Jul 15, 2026
f17dc2f
limit reason length on submit api (#5005)
williamvega Jul 17, 2026
4d2263b
typos
sarhiri Jul 17, 2026
37caf89
fix: resolve broken links flagged by content check.
sarhiri Jul 17, 2026
db2123e
fix: update remaining stale links not passing checks
sarhiri Jul 17, 2026
930cab6
typo
sarhiri Jul 17, 2026
7257b64
Merge remote-tracking branch 'upstream/master' into website-nav-cleanup
sarhiri Jul 27, 2026
9dd5ec2
docs: archive deprecated pages, fix internal links for new nav structure
sarhiri Jul 27, 2026
8eebd1c
docs: archive deprecated pages, fix internal links, formatting, and s…
sarhiri Jul 27, 2026
66adcff
fix: resolve community card to absolute /contribute/community path
sarhiri Jul 27, 2026
5d26bbd
Merge branch 'master' into website-nav-cleanup
sarhiri Jul 28, 2026
43a23eb
Merge branch 'master' into website-nav-cleanup
sarhiri Jul 29, 2026
6ce9b8f
Merge remote-tracking branch 'upstream/master' into website-nav-cleanup
sarhiri Jul 29, 2026
f9b96c5
fix /contribute/community path
sarhiri Jul 29, 2026
d97d30a
Merge remote-tracking branch 'origin/website-nav-cleanup' into websit…
sarhiri Jul 29, 2026
67fefaf
Merge branch 'master' into website-nav-cleanup
sarhiri Jul 30, 2026
c1cd6c4
Merge branch 'master' into website-nav-cleanup
sarhiri Jul 30, 2026
0589e6e
Merge remote-tracking branch 'upstream/master' into website-nav-cleanup
sarhiri Jul 30, 2026
f6a51b1
reroute for new nav
sarhiri Jul 30, 2026
c80feda
Merge remote-tracking branch 'origin/website-nav-cleanup' into websit…
sarhiri Jul 30, 2026
d9ec018
updated broken links for new routing in community.mdx & contributor-g…
sarhiri Jul 30, 2026
32906ec
greptile routing fixes
sarhiri Jul 30, 2026
ac1fd38
chore(website): skip route-shaped links in remark link validation. ya…
sarhiri Jul 30, 2026
77c197a
Merge branch 'master' into website-nav-cleanup
sarhiri Aug 4, 2026
970ea62
Merge branch 'master' into website-nav-cleanup
sarhiri Aug 4, 2026
29f7ba6
Merge branch 'master' into website-nav-cleanup
sarhiri Aug 11, 2026
628d427
docs: address PR review comments on README - Reframe gang scheduling …
sarhiri Aug 11, 2026
8d5d581
Merge branch 'master' into website-nav-cleanup
sarhiri Aug 18, 2026
ff66922
Merge branch 'master' into website-nav-cleanup
sarhiri Aug 21, 2026
8071121
Merge branch 'master' into website-nav-cleanup
sarhiri Aug 24, 2026
70c5300
Merge branch 'master' into website-nav-cleanup
sarhiri Aug 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 173 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,176 @@
<div align="center">
<img src="./logo.svg" alt="Armada logo" width="200"/>

<h3>One API. Any number of clusters. Millions of jobs.</h3>
<p>The open-source batch job meta-scheduler that makes Kubernetes work at scale.</p>

<p>
<a href="https://circleci.com/gh/armadaproject/armada"><img src="https://circleci.com/gh/armadaproject/armada.svg?style=shield" alt="CircleCI"></a>
<a href="https://goreportcard.com/report/github.com/armadaproject/armada"><img src="https://goreportcard.com/badge/github.com/armadaproject/armada" alt="Go Report Card"></a>
<a href="https://artifacthub.io/packages/helm/gresearch/armada" title="Go to Artifact Hub"><img src="https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/armada" alt="Artifact Hub"></a>
<a href="https://insights.linuxfoundation.org/project/armada" title="Click to view project insights and health checks"><img src="https://insights.linuxfoundation.org/api/badge/health-score?project=armada" alt="LFX Health Score"></a>
<a href="https://www.bestpractices.dev/projects/11485"><img src="https://www.bestpractices.dev/projects/11485/badge" alt="OpenSSF Best Practices"></a>
</p>

<p>
<a href="https://armadaproject.io">Website</a> ·
<a href="https://armadaproject.io/quickstart">Quickstart</a> ·
<a href="https://armadaproject.io/docs">Documentation</a> ·
<a href="https://cloud-native.slack.com/archives/C03T9CBCEMC">Slack</a>
</p>
</div>

---

## What is Armada?

Kubernetes was built for services. Armada was built for batch.

When your job volume exceeds what a single cluster can handle, you need a control plane that sits above your fleet — routing jobs intelligently, fairly, and at scale. Armada is that layer.

**Armada solves the problems Kubernetes wasn't designed to handle:**

- **No job queue** — Kubernetes has no concept of ordering. Jobs compete for resources with no fairness guarantees. Armada adds a proper queue with priority, fair-share, and rate limiting.
- **No multi-cluster coordination** — Each Kubernetes cluster is an island. Armada routes jobs across as many clusters as you need from a single API.
- **No gang scheduling** — Distributed jobs that need all workers to start simultaneously (MPI, PyTorch, Spark) have no atomic startup guarantee in vanilla Kubernetes. Armada either starts the whole group or holds it.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably reword this as k8s is adding support - https://kubernetes.io/docs/concepts/scheduling-eviction/gang-scheduling/

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in next commit

- **No fairness across teams** — One team can starve everyone else. Armada enforces fair-share scheduling so heavy users don't permanently dominate shared infrastructure.

Armada is used in production at [G-Research](https://www.gresearch.co.uk/) since 2020, processing **millions of batch jobs per day** across tens of thousands of nodes.

---

## Features

| Feature | Description |
|---|---|
| 🌐 **Multi-cluster scheduling** | One API across unlimited Kubernetes clusters |
| ⚖️ **Fair-share queuing** | Dominant resource fairness across teams and queues |
| 🔗 **Gang scheduling** | Atomic startup for distributed workloads |
| ⚡ **Preemption** | Urgent jobs bump lower-priority work automatically |
| 📊 **Prometheus metrics** | Full observability into queue health and cluster utilisation |
| 🔭 **Lookout UI** | Web interface for monitoring jobs, queues, and clusters |
| 🔒 **Enterprise-ready** | Secure, highly available, OIDC authentication support |

---

## Getting started

The fastest way to get Armada running locally is with the [Armada Operator](https://github.com/armadaproject/armada-operator):

```bash
git clone https://github.com/armadaproject/armada-operator.git
cd armada-operator
make kind-all
```

→ **[Full quickstart guide](https://armadaproject.io/quickstart)** — get up and running in under 15 minutes.

### armadactl

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Armada Operator and make kind-all already installs and wires up armadactl

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in next commit


Armada's CLI for interacting with the system:

```bash
# download via script
scripts/get-armadactl.sh

# or grab the binary from the releases page
https://github.com/armadaproject/armada/releases/latest
```

---

## Local development

Armada runs locally via [Goreman](https://github.com/mattn/goreman) — dependencies (Redis, Postgres, Pulsar) run in containers, Armada components run as host processes built from source. Iteration is fast and debuggers attach directly.

```bash
mage kind # one-time: create local Kubernetes cluster
export KUBECONFIG=.kube/external/config

mage dev:up # default — no auth
mage dev:up auth # with OIDC via Keycloak
mage dev:up fake-executor # no Kubernetes cluster needed
mage dev:down # stop dependency containers
```

→ **[Full local development guide](https://armadaproject.io/docs/developer-guide)** — profiles, procfiles, service ports, authentication, and debugging.

---

## Use cases

Armada is used wherever batch jobs are too large, too many, or too complex for a single Kubernetes cluster:

- **Quantitative finance & HPC** — millions of short-lived simulations per day with fair-share across research teams
- **ML and AI training** — distributed GPU training with gang scheduling across clusters
- **Platform engineering** — multi-tenant batch infrastructure with a single API surface
- **SLURM migration** — familiar scheduling semantics (queues, priorities, preemption) on Kubernetes-native infrastructure
- **CI/CD at scale** — priority control so critical merges always run first

---

## In production

Armada has been running in production at [G-Research](https://www.gresearch.co.uk/) since 2020.

**Running Armada in production?** Open a PR to add yourself to [ADOPTERS.md](./ADOPTERS.md) 🙌

---

## Community

Everyone is welcome — come and say hi! 👋

- 💬 **Slack** — [#armada on CNCF Slack](https://cloud-native.slack.com/archives/C03T9CBCEMC) — fastest way to get help and talk to maintainers
- 💡 **GitHub Discussions** — [longer-form questions and ideas](https://github.com/armadaproject/armada/discussions)
- 🐛 **GitHub Issues** — [bug reports and feature requests](https://github.com/armadaproject/armada/issues)
- 📅 **Community meetings** — bi-weekly, open to all. Join [#armada on Slack](https://cloud-native.slack.com/archives/C03T9CBCEMC) for the invite link
- ⭐ **Star the repo** — helps more people find Armada

---

## Contributing

We'd love your contributions — code, docs, bug reports, or ideas. All are welcome.

- Read [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines
- Check [good first issues](https://github.com/armadaproject/armada/labels/good%20first%20issue) for a starting point
- All commits require a [DCO sign-off](https://developercertificate.org/): `git commit -s`
- Please review [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md) before contributing

---

## Documentation

| Resource | Link |
|---|---|
| Website & overview | [armadaproject.io](https://armadaproject.io) |
| Quickstart | [armadaproject.io/quickstart](https://armadaproject.io/quickstart) |
| Architecture | [armadaproject.io/docs/architecture](https://armadaproject.io/docs/architecture) |
| API reference | [armadaproject.io/docs/api](https://armadaproject.io/docs/api) |
| Developer guide | [armadaproject.io/docs/developer-guide](https://armadaproject.io/docs/developer-guide) |
| Release notes | [github.com/armadaproject/armada/releases](https://github.com/armadaproject/armada/releases) |

---

## Talks and videos

- [Armada — high-throughput batch scheduling](https://www.youtube.com/watch?v=FT8pXYciD9A)
- [Building Armada — Running Batch Jobs at Massive Scale on Kubernetes](https://www.youtube.com/watch?v=B3WPxw3OUl4)

---

<div align="center">
<br/>
<img src="https://raw.githubusercontent.com/cncf/artwork/master/other/cncf/horizontal/color/cncf-color.png" width="180" alt="CNCF logo"/>
<br/>
<sub>Armada is a <a href="https://www.cncf.io/">Cloud Native Computing Foundation</a> Sandbox project 🚀</sub>
<br/>
<sub>Apache 2.0 License</sub>
</div>


<!-- <div align="center">
<img src="./logo.svg" alt="Armada logo" width="200"/>
<p>
<a href="https://circleci.com/gh/armadaproject/armada"><img src="https://circleci.com/gh/armadaproject/armada.svg?style=shield" alt="CircleCI"></a>
Expand Down Expand Up @@ -107,4 +279,4 @@ For more information about contributing to Armada see [CONTRIBUTING.md](https://

## Discussion

If you are interested in discussing Armada you can find us on [![slack](https://img.shields.io/badge/slack-armada-brightgreen.svg?logo=slack)](https://cloud-native.slack.com/?redir=%2Farchives%2FC03T9CBCEMC)
If you are interested in discussing Armada you can find us on [![slack](https://img.shields.io/badge/slack-armada-brightgreen.svg?logo=slack)](https://cloud-native.slack.com/?redir=%2Farchives%2FC03T9CBCEMC) -->
3 changes: 3 additions & 0 deletions website/.remarkignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ tmp.*
# Auto-generated files
python-airflow-operator.md
python-armada-client.md

# Archived files
_archive/
14 changes: 13 additions & 1 deletion website/.remarkrc-md.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,19 @@ const remarkConfig = {
plugins: [
'remark-preset-lint-consistent',
'remark-frontmatter',
'remark-validate-links',
[
'remark-validate-links',
{
// Internal links use absolute Next.js routes (e.g. /docs/clients),
// not file paths. remark-validate-links resolves paths from the git
// root and has no extension resolution, so it can't check these.
// Skip route-shaped links; relative links and heading anchors are
// still validated.
// TODO: add a post-build link check against the static export to
// properly validate routes (see check-links.sh).
skipPathPatterns: [/\/[^/.]+\/?(#[^/]*)?$/],
},
],
[
'remark-lint-no-dead-urls',
{
Expand Down
14 changes: 13 additions & 1 deletion website/.remarkrc-mdx.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,19 @@ const remarkConfig = {
plugins: [
'remark-mdx',
'remark-mdx-frontmatter',
'remark-validate-links',
[
'remark-validate-links',
{
// Internal links use absolute Next.js routes (e.g. /docs/clients),
// not file paths. remark-validate-links resolves paths from the git
// root and has no extension resolution, so it can't check these.
// Skip route-shaped links; relative links and heading anchors are
// still validated.
// TODO: add a post-build link check against the static export to
// properly validate routes (see check-links.sh).
skipPathPatterns: [/\/[^/.]+\/?(#[^/]*)?$/],
},
],
[
'remark-lint-no-dead-urls',
{
Expand Down
114 changes: 95 additions & 19 deletions website/README.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,118 @@
# Armada - documentation website
# Armada Website Readme

This is a [Next.js](https://nextjs.org) project, based on the [Fumadocs](https://fumadocs.dev) framework, bootstrapped
using:

- [`npx create-next-app@latest`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
- [`yarn create fumadocs-app`](https://github.com/fuma-nama/fumadocs).
The Armada documentation site is built with [Next.js](https://nextjs.org) and [Fumadocs](https://fumadocs.dev). All content is written in MDX, Markdown that can include React components.

## Requirements

- Node.js >= 20.x
- Yarn ~1.22.22
Before you start, make sure you have the following installed:

- **Node.js** >= 20.x — [Download](https://nodejs.org)
- **Yarn** ~1.22.22 — install with `npm install -g yarn` if you don't have it

## Getting started

## Installation
All commands should be run from inside the `website/` folder. If you are at the root of the `armada` repository, navigate there first:

```shell
```bash
cd website
```

### Install dependencies

```bash
yarn install
```

## Local Development
### Start the local dev server

```bash
yarn dev
```

Open http://localhost:3000 on your browser to see the result.
Open [http://localhost:3000](http://localhost:3000) in your browser. The page will hot-reload as you edit files — you do not need to restart the server after making changes to content or components.

## Build and Preview
### GitHub Pages base path

To build the project for production and preview it, run:
The live site is deployed to GitHub Pages under a base path. If your changes involve links, images, or assets and you want to make sure they resolve correctly in that environment, copy `.env.example` to `.env.local` and set the base path before running the preview:

```bash
yarn build
# then
yarn preview
cp .env.example .env.local
```

Then open `.env.local` and follow the instructions inside. You do not need this for most content changes: only if you are working on routing, assets, or the Next.js config itself.

## How the site works

Every page on the site is an `.mdx` file under `content/`. MDX is Markdown that can also use React components. You write normal Markdown and drop in components (cards, callouts, custom JSX) where you need them.

### Content structure

content/
├── index.mdx # Homepage / landing page
├── getting-started.mdx # Quickstart guide
├── meta.json # Root nav configuration
├── docs/ # All documentation pages
│ ├── meta.json
│ ├── core-concepts.mdx
│ ├── developer-guide.mdx
│ └── ...
└── contribute/ # Contributing section
├── meta.json
└── ...

### How the left sidebar nav works

The left sidebar is driven entirely by `meta.json` files — Fumadocs reads them at build time and constructs the page tree from them.

**Root nav — `content/meta.json`**

**Section nav — `content/docs/meta.json`**

A `meta.json` inside a folder controls that section's title, page order, and which pages appear.

**To add a page to the nav:**

1. Create the `.mdx` file in the right folder
2. Add the filename (without `.mdx`) to the relevant `meta.json` pages array

**To remove a page from the nav:**
Remove it from `meta.json`.

**To reorder pages:**
Change the order in the `meta.json` pages array. Top to bottom = top to bottom in the sidebar.

**Important:** A folder with no `meta.json` is completely invisible to the nav. The pages exist and are routable URLs but won't appear in the sidebar. If a page you created isn't showing up, check whether its folder has a `meta.json` and whether that file is listed in it.

### Right TOC

Generated automatically from `##` and `###` Markdown headings only. JSX elements and styled `<div>`/`<span>` tags do not appear in the TOC regardless of how they look visually.

### The homepage

The homepage is `content/index.mdx` — a content page like any other, served by the `[[...slug]]` catch-all route. The `_(home)` route group in `src/app/` handles the root `/` path and renders `index.mdx` directly.

### The `not-prose` rule

Fumadocs applies typography styles to all MDX content by default. Any custom JSX layout block — a hero section, a card grid, a CTA — needs the `not-prose` class on its outermost element, otherwise Fumadocs' prose styles will override your custom styles:

```mdx
<div className='not-prose flex flex-col items-center'>
{/* your custom layout here */}
</div>
```

The preview server will start on http://localhost:3000 by default. It also supports base path configuration to mimic
the GitHub Pages environment. Check the `.env.example` file to see how to set it up.
### Markdown links inside JSX

Markdown link syntax (`[text](url)`) does not render inside JSX elements. Use anchor tags instead:

```mdx
{/* This won't work inside a JSX div */}
[CNCF](https://cncf.io)

{/* Use this instead */}

<a href='https://cncf.io'>CNCF</a>
```

## Format, Lint Content, Lint Code and Spell Check

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Comment thread
sarhiri marked this conversation as resolved.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Armada consists of several components that work together:
- **Lookout**: Provides job monitoring and web UI
- **Supporting services**: Pulsar (message broker), PostgreSQL, and Redis

For a detailed explanation of how these components interact, see the [Architecture documentation](./understanding-armada/architecture.mdx).
For a detailed explanation of how these components interact, see the [Architecture documentation](docs/architecture.mdx).

## Local Installation

Expand Down Expand Up @@ -449,11 +449,11 @@ If you encounter issues not covered here:

- **GitHub Issues**: Report bugs and request features at [github.com/armadaproject/armada/issues](https://github.com/armadaproject/armada/issues)
- **Community Slack**: Join discussions on [CNCF Slack](https://cloud-native.slack.com/?redir=%2Farchives%2FC03T9CBCEMC)
- **Documentation**: Check the [Architecture documentation](./understanding-armada/architecture.mdx) for system design details
- **Documentation**: Check the [Architecture documentation](docs/architecture.mdx) for system design details

## Additional Resources

- [Architecture Overview](./understanding-armada/architecture.mdx) - Understand how Armada components work
- [Architecture Overview](docs/architecture.mdx) - Understand how Armada components work
- [User Guide](./user-guide) - Learn how to submit and manage jobs
- [Armada Operator](https://github.com/armadaproject/armada-operator) - Kubernetes-native deployment option
- [Helm Charts Documentation](https://github.com/armadaproject/armada/tree/master/deployment) - Detailed Helm configuration reference
Expand Down
File renamed without changes.
Loading
Loading