Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
c4be9fc
Initial commit
thokra-nav Nov 25, 2025
0ddc96a
Initial markdown renderer
thokra-nav Nov 25, 2025
f9abf81
navigation
thokra-nav Nov 25, 2025
c7f1a85
More work
thokra-nav Nov 25, 2025
0228f4e
Render pages
thokra-nav Nov 25, 2025
382b73b
mermaid
thokra-nav Nov 26, 2025
ca228f6
Admonition
thokra-nav Nov 26, 2025
2716523
content tabs
thokra-nav Nov 26, 2025
08c079b
Checkbox
thokra-nav Nov 26, 2025
efa0753
sync
thokra-nav Nov 26, 2025
3997d51
def
thokra-nav Nov 26, 2025
7c2f144
fix
thokra-nav Nov 26, 2025
d826a1a
nav fixes
thokra-nav Nov 26, 2025
89335cd
shiki
thokra-nav Nov 26, 2025
845c0da
sidebar
thokra-nav Nov 26, 2025
9f0c6fa
Search
thokra-nav Nov 26, 2025
4cf8da6
gcp-only
thokra-nav Nov 26, 2025
e54bfc7
agent cleanup
thokra-nav Nov 26, 2025
6dcc1d0
theme toggle
thokra-nav Nov 26, 2025
885c005
Static and error
thokra-nav Nov 26, 2025
7fd808f
Fix links and redirects
thokra-nav Nov 26, 2025
d4401d9
annotations
thokra-nav Nov 26, 2025
9a5c9f2
Tags
thokra-nav Nov 26, 2025
9030605
deduplicate and reload
thokra-nav Nov 26, 2025
cbf59c9
Assets and some other stuff
thokra-nav Nov 26, 2025
e089868
deploy
thokra-nav Nov 26, 2025
6eaa1f3
In the fork, remove other workflows
thokra-nav Nov 26, 2025
7d306b5
Fix routes
thokra-nav Nov 26, 2025
d229435
Fix search data
thokra-nav Nov 26, 2025
9c9851f
variables
thokra Nov 26, 2025
353dfbc
Variables
thokra-nav Nov 27, 2025
27a403d
Store state
thokra-nav Nov 27, 2025
bd66791
A bit better with noscript
thokra-nav Nov 28, 2025
f822ba0
More pink variables
thokra-nav Dec 1, 2025
2e489f0
Rethink annotations
thokra-nav Dec 1, 2025
e08bfea
Page metadata
thokra-nav Dec 1, 2025
05a695c
external link icons
thokra-nav Dec 1, 2025
7353abd
Fix timestamps
thokra-nav Dec 1, 2025
8773255
Heading spacings
thokra-nav Dec 1, 2025
08e3624
Collapsible menu
thokra-nav Dec 1, 2025
992475b
Fix chevron
thokra-nav Dec 1, 2025
914b42b
Less space
thokra-nav Dec 1, 2025
fe33ca7
Mobile friendly
thokra-nav Dec 1, 2025
6b928f9
More mobile friendly
thokra-nav Dec 1, 2025
a9c28bf
Build for nav, cleanup env
thokra-nav Dec 1, 2025
0d5a617
Try some css for better spacing
thokra-nav Dec 1, 2025
98f0b5b
Scroll selected into view
thokra-nav Dec 1, 2025
4b43a8a
use tick
thokra-nav Dec 1, 2025
ff8c5d6
blockquote and cleanup
thokra-nav Dec 1, 2025
af23ac4
fix sidebar overflow
thokra-nav Dec 1, 2025
93dc065
Fix code inside alert
thokra-nav Dec 1, 2025
9e35f67
Fix some cards
thokra-nav Dec 2, 2025
3add99c
Run fmt
thokra-nav Dec 2, 2025
9b2ed72
Mermaid fixes and color on codespans
thokra-nav Dec 2, 2025
f53d73a
Hide search/theme toggle when noscript
thokra-nav Dec 2, 2025
bafda24
Tiny bit less spacing
thokra-nav Dec 2, 2025
5b5b958
Rework tags page
thokra-nav Dec 2, 2025
18aca5e
Fix heading id generation
thokra-nav Dec 2, 2025
2d795d0
Fix mermaid links
thokra-nav Dec 2, 2025
e585422
emoji support
thokra-nav Dec 2, 2025
3e40397
Better dl
thokra-nav Dec 2, 2025
b255fd5
Some more definition list work
thokra-nav Dec 2, 2025
6366634
Try to simplify code
thokra-nav Dec 2, 2025
b0addee
Definition list inside lists
thokra-nav Dec 2, 2025
a2cc891
table fixes
thokra-nav Dec 2, 2025
6adbfad
Set favicon
thokra-nav Dec 2, 2025
3efb496
Metadata
thokra-nav Dec 2, 2025
01b2ca0
Initial file filter
thokra-nav Dec 5, 2025
e2f0e68
Try to reduce duplication
thokra-nav Dec 5, 2025
4ae9ae3
Remove use of :octicons-link-external-16: for links
thokra-nav Dec 5, 2025
e7a7338
Fixes for redirects, style and lint
thokra-nav Dec 5, 2025
1b27e7d
New alerts
thokra-nav Dec 9, 2025
12dc36d
Small fixes
thokra-nav Dec 10, 2025
5af9468
Upgrade deps, fix lint and check
thokra-nav Mar 2, 2026
e07b9bf
Upgrades
thokra-nav Apr 20, 2026
68c05fe
sync new redirects
thokra-nav Apr 20, 2026
b46aec8
Remove removed page
thokra-nav Apr 20, 2026
41611d9
Run only on thokra-nav
thokra-nav Apr 20, 2026
fd83f8a
Add tasks to mise and generate svdoc
thokra-nav Apr 28, 2026
1d0e951
Remove mkdocs
thokra-nav Apr 28, 2026
9ebbe83
speedup build
thokra-nav Apr 28, 2026
d2baa85
Remove test workflow
thokra-nav Apr 28, 2026
6768e3f
Fix menu names
thokra-nav Apr 28, 2026
2000241
add back dependabot
thokra-nav Apr 28, 2026
9cd6e43
Remove .vscode dir
thokra-nav Apr 28, 2026
7c38ec2
Merge branch 'main' into ds-svelte
thokra-nav Apr 30, 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
6 changes: 3 additions & 3 deletions .github/agents/technical-writer.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: technical-writer
description: 'Write and edit Nais platform documentation following repo conventions (Diataxis, mkdocs Material, Jinja macros). Use when: creating new docs pages, restructuring existing docs, reviewing docs PRs, converting notes into proper documentation.'
description: 'Write and edit Nais platform documentation following repo conventions (Diataxis, Material for MkDocs-style syntax, template macros rendered by the svdoc SvelteKit site). Use when: creating new docs pages, restructuring existing docs, reviewing docs PRs, converting notes into proper documentation.'
tools: ['read', 'edit', 'search', 'web']
handoffs:
- label: Polish language
Expand Down Expand Up @@ -86,9 +86,9 @@ nav:
- reference
```

## Jinja2 Macros
## Template Macros

This repo uses `<<` and `>>` as Jinja delimiters (NOT `{{` `}}`).
Markdown is rendered by the custom SvelteKit site in `svdoc/`, which supports a Jinja-like template syntax. This repo uses `<<` and `>>` as expression delimiters (NOT `{{` `}}`).

Available macros:

Expand Down
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# GitHub Copilot Custom Instructions for nais/doc

## About this repository
This repository contains the main documentation for the Nais developer platform, structured using the Diátaxis framework: Tutorials, How-To Guides, Explanations, and Reference and using mkdocs with Material for MkDocs as the documentation generator. Nais is a platform that simplifies the deployment and management of applications on Kubernetes (but without having in-depth knowledge of Kubernetes), providing tools and best practices for developers to streamline their workflows.
This repository contains the main documentation for the Nais developer platform, structured using the Diátaxis framework: Tutorials, How-To Guides, Explanations, and Reference. Markdown sources live in `docs/` and are rendered by a custom SvelteKit + Bun site in `svdoc/` (which preserves Material for MkDocs-style syntax such as admonitions, tabs, and `<<tenant()>>` template macros). Tasks are managed with [mise](https://mise.jdx.dev/) — see `mise.toml` for `setup`, `local`, `build`, `check`, and `fmt` tasks. Nais is a platform that simplifies the deployment and management of applications on Kubernetes (but without having in-depth knowledge of Kubernetes), providing tools and best practices for developers to streamline their workflows.

## How should GitHub Copilot behave in this repository?

Expand Down
6 changes: 3 additions & 3 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ updates:
actions:
patterns:
- "*"
- package-ecosystem: "pip" # poetry / pyproject
directory: "/"
- package-ecosystem: "npm" # svdoc (SvelteKit + Bun)
directory: "/svdoc"
schedule:
interval: "weekly"
time: "09:00"
day: "monday"
cooldown:
default-days: 7
groups:
pip:
bun:
patterns:
- "*"
21 changes: 5 additions & 16 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,14 @@ jobs:
with:
fetch-depth: 0 # required for git date plugin

- name: Install poetry
run: pipx install poetry

- name: Setup Python
uses: actions/setup-python@v6
- name: Install mise
uses: jdx/mise-action@v2
with:
python-version: 3.11
architecture: x64
cache: poetry

- name: Install all dependencies
run: |
poetry sync \
--no-interaction \
--ansi
install: true
cache: true

- name: Build documentation
run: |
./build.sh nav ssb test-nais ldir atil ci-nais dev-nais tenant
run: mise run build nav ssb test-nais ldir atil ci-nais dev-nais

- name: Upload generated doc artifact
uses: actions/upload-artifact@v6
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,5 @@ site/

__pycache__/
.direnv/

/out/
1 change: 0 additions & 1 deletion .tool-versions

This file was deleted.

13 changes: 0 additions & 13 deletions Makefile

This file was deleted.

35 changes: 24 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,32 +46,45 @@ Start with `@research-agent` to gather context, hand off to `@technical-writer`

## Local development

## 1. Install Poetry
The documentation site lives in [`svdoc/`](./svdoc) and is built with SvelteKit + Bun. Tasks are managed with [mise](https://mise.jdx.dev/).

### 1. Install mise

Follow the [mise installation guide](https://mise.jdx.dev/getting-started.html). All other tools (such as Bun) are pinned in [`mise.toml`](./mise.toml) and installed automatically.

### 2. Install dependencies

```bash
asdf plugin add poetry
asdf install poetry latest
mise run setup
```

## 2. Install dependencies
### 3. Serve the documentation locally

```bash
make install
mise run local
```
## 3. Serve the documentation locally

This installs dependencies (if needed) and starts the dev server.

### 3a. Serve a tenant-specific version of the documentation

```bash
make local
TENANT=nav NOT_TENANT=not-nav mise run local:dev
```

## 3a. Serve a tenant-specific version of the documentation
### 4. Build the documentation

Build one or more tenant-specific versions into `out/<tenant>/`:

```bash
TENANT=nav make local
mise run build nav nav test-nais
```

## 3b. Do a clean build of the documentation
### Checks and formatting

```bash
make clean-build
mise run check # run lint + svelte-check
mise run check:lint # prettier + eslint
mise run check:svelte-check # svelte-check only
mise run fmt # format with prettier
```
10 changes: 0 additions & 10 deletions build.sh

This file was deleted.

10 changes: 0 additions & 10 deletions custom_theme_overrides/404.html

This file was deleted.

1 change: 0 additions & 1 deletion custom_theme_overrides/main.html

This file was deleted.

6 changes: 3 additions & 3 deletions docs/.pages
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ nav:
- "": ""
- workloads
- build
- auth
- Auth: auth
- observability
- persistence
- Persistence: persistence
- Other services: services
- "": ""
- operate
- Operate: operate
- "": ""
- tags.md
- ...
6 changes: 0 additions & 6 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@ hide:
- footer
- toc
---
<!-- This hides the edit button on the start page -->
<style>
.md-content__button {
display: none;
}
</style>

# :wave: **Welcome to the Nais developer documentation!**

Expand Down
12 changes: 6 additions & 6 deletions docs/auth/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@ See the different scenarios below to identify which service(s) you need for your

Depending on who your users are, you can use the following services to log them in:

:person_standing: Log in _employees_ :octicons-arrow-right-24: [Entra ID]
:standing_person: Log in _employees_ :octicons-arrow-right-24: [Entra ID]

:person_standing: Log in _citizens_ :octicons-arrow-right-24: [ID-porten]
:standing_person: Log in _citizens_ :octicons-arrow-right-24: [ID-porten]

## Validating inbound requests

Expand All @@ -63,9 +63,9 @@ graph TD

The graph above can also be described as:

:material-server::person_standing: Validate requests from _internal_ application acting on behalf of _employee_ :octicons-arrow-right-24: [Entra ID]
:material-server::standing_person: Validate requests from _internal_ application acting on behalf of _employee_ :octicons-arrow-right-24: [Entra ID]

:material-server::person_standing: Validate requests from _internal_ application acting on behalf of _citizen_:octicons-arrow-right-24: [TokenX]
:material-server::standing_person: Validate requests from _internal_ application acting on behalf of _citizen_:octicons-arrow-right-24: [TokenX]

:material-server: Validate requests from _internal_ application :octicons-arrow-right-24: [Entra ID]

Expand All @@ -87,9 +87,9 @@ graph TD

The graph above can also be described as:

:material-server::person_standing: Make requests to _internal_ API on behalf of _employee_ :octicons-arrow-right-24: [Entra ID]
:material-server::standing_person: Make requests to _internal_ API on behalf of _employee_ :octicons-arrow-right-24: [Entra ID]

:material-server::person_standing: Make requests to _internal_ API on behalf of _citizen_ :octicons-arrow-right-24: [TokenX]
:material-server::standing_person: Make requests to _internal_ API on behalf of _citizen_ :octicons-arrow-right-24: [TokenX]

:material-server: Make requests to _internal_ API :octicons-arrow-right-24: [Entra ID]

Expand Down
2 changes: 1 addition & 1 deletion docs/auth/how-to/login.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ Before you begin, ensure that you have:
: The client secret for your application.

4. Optionally, add additional environment variables to the secret to configure the login proxy further.
See the [Wonderwall configuration reference :octicons-link-external-16:](https://github.com/nais/wonderwall/blob/master/docs/configuration.md) for all available options.
See the [Wonderwall configuration reference](https://github.com/nais/wonderwall/blob/master/docs/configuration.md) for all available options.

## Configure your application

Expand Down
8 changes: 4 additions & 4 deletions docs/explanations/under-the-hood.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ In this explanation, we will go through some of the underlying technologies we u

### Runtime implementation

Each _environment_ is its own [Kubernetes :octicons-link-external-16:](https://kubernetes.io) cluster using [Google Kubernetes Engine (GKE) :octicons-link-external-16:](https://cloud.google.com/kubernetes-engine?hl=en).
Each _environment_ is its own [Kubernetes](https://kubernetes.io) cluster using [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine?hl=en).

Inside each environment, every team has their own [namespace :octicons-link-external-16:](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/).
Inside each environment, every team has their own [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/).

A namespace can contain one or more [workloads](../workloads/README.md).
Only members of the team have access to the namespace and its resources.
Expand All @@ -33,13 +33,13 @@ In the example above, the team has an application and a job running in the `dev`

All workloads are deployed in a team namespace.

Every workload is isolated from _all_ other workloads with [Kubernetes network policies :octicons-link-external-16:](https://kubernetes.io/docs/concepts/services-networking/network-policies/).
Every workload is isolated from _all_ other workloads with [Kubernetes network policies](https://kubernetes.io/docs/concepts/services-networking/network-policies/).

Access is denied by default, unless [explicitly allowed](../workloads/explanations/zero-trust.md).

## Google Cloud Platform (GCP) resources

Each team has a dedicated [GCP project :octicons-link-external-16:](https://cloud.google.com/resource-manager/docs/creating-managing-projects) for _each_ environment.
Each team has a dedicated [GCP project](https://cloud.google.com/resource-manager/docs/creating-managing-projects) for _each_ environment.

When your workload requests resources e.g. a bucket, it will be provisioned in the team's project for the matching environment.

Expand Down
2 changes: 2 additions & 0 deletions docs/observability/.pages
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ nav:
- README.md
- 🎯 How-To: how-to
- 📚 Reference: reference
- Frontend: frontend
- Tracing: tracing
- ...
2 changes: 2 additions & 0 deletions docs/persistence/.pages
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
nav:
- README.md
- 💡 Explanations: explanations
- BigQuery: bigquery
- CloudSQL: cloudsql
- ...
2 changes: 1 addition & 1 deletion docs/persistence/opensearch/how-to/create.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This guide will show you how to create a OpenSearch instance for your team using

## Steps

1. Open [Nais Console :octicons-link-external-16:](https://console.<<tenant()>>.cloud.nais.io) in your browser
1. Open [Nais Console](https://console.<<tenant()>>.cloud.nais.io) in your browser
2. Select your team
3. Select **OpenSearch** in the sidebar menu
4. Click the **Create OpenSearch** button
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Ensure that your workload is compatible with the new major version of OpenSearch

### 2. Upgrade the OpenSearch instance

1. Open [Nais Console :octicons-link-external-16:](https://console.<<tenant()>>.cloud.nais.io) in your browser
1. Open [Nais Console](https://console.<<tenant()>>.cloud.nais.io) in your browser
2. Select your team
3. Select **OpenSearch** in the sidebar menu
4. Select the OpenSearch instance you want to upgrade
Expand Down
2 changes: 1 addition & 1 deletion docs/persistence/valkey/how-to/create.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This guide will show you how to create a Valkey instance for your team using [Na

## Steps

1. Open [Nais Console :octicons-link-external-16:](https://console.<<tenant()>>.cloud.nais.io) in your browser
1. Open [Nais Console](https://console.<<tenant()>>.cloud.nais.io) in your browser
2. Select your team
3. Select **Valkey** in the sidebar menu
4. Click the **Create Valkey** button
Expand Down
1 change: 1 addition & 0 deletions docs/services/.pages
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ nav:
- CDN: cdn
- config
- secrets
- Vulnerabilities: vulnerabilities
- feature-toggling.md
- ...
2 changes: 2 additions & 0 deletions docs/services/secrets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Secrets are kept separate from the codebase and configuration files that are usu
There are two types of secrets on the Nais platform:

<div class="grid cards" markdown>

- :construction_worker: **Platform-provided secrets**

---
Expand All @@ -22,6 +23,7 @@ There are two types of secrets on the Nais platform:
</div>

<div class="grid cards" markdown>

- :technologist: **User-defined secrets**

---
Expand Down
2 changes: 1 addition & 1 deletion docs/services/secrets/how-to/console.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This how-to guide shows you how to create and manage a [secret](../README.md) in

## List secrets

1. Open [Nais console :octicons-link-external-16:](https://console.<<tenant()>>.cloud.nais.io) in your browser
1. Open [Nais console](https://console.<<tenant()>>.cloud.nais.io) in your browser
2. Select your team
3. Select the `Secrets` tab

Expand Down
2 changes: 1 addition & 1 deletion docs/services/secrets/reference/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This is the reference documentation for [secrets](../README.md) on the Nais plat

## Console

Visit [Nais Console :octicons-link-external-16:](https://console.<<tenant()>>.cloud.nais.io) to find and manage your team's user-defined secrets.
Visit [Nais Console](https://console.<<tenant()>>.cloud.nais.io) to find and manage your team's user-defined secrets.

## Workloads

Expand Down
4 changes: 2 additions & 2 deletions docs/tutorials/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ Tutorials are lessons that focuses on _learning by doing_.
These give you hands-on experience with various parts of Nais, where we carefully guide you each step of the way.

<div class="grid cards" markdown>
- :octicons-rocket-24:{ .lg .middle } [**Hello Nais**](./hello-nais.md)

- :rocket: [**Hello Nais**](./hello-nais.md)

---

Get your first application up and running on Nais.

</div>
2 changes: 1 addition & 1 deletion docs/workloads/application/how-to/delete.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ tags: [application, how-to]

## Delete your application

1. Open [Nais console :octicons-link-external-16:](https://console.<<tenant()>>.cloud.nais.io) in your browser
1. Open [Nais console](https://console.<<tenant()>>.cloud.nais.io) in your browser
2. Select your team
3. Select the `Apps` tab
4. Select the application that you want to delete
Expand Down
2 changes: 1 addition & 1 deletion docs/workloads/job/how-to/delete.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ tags: [job, how-to]

## Delete your job

1. Open [Nais console :octicons-link-external-16:](https://console.<<tenant()>>.cloud.nais.io) in your browser
1. Open [Nais console](https://console.<<tenant()>>.cloud.nais.io) in your browser
2. Select your team
3. Select the `Job` tab
4. Select the job that you want to delete
Expand Down
Loading