Skip to content

Commit f1619b5

Browse files
committed
Merge branch 'develop'
2 parents 98403f1 + b06a2bd commit f1619b5

19 files changed

Lines changed: 98 additions & 154 deletions

File tree

CHANGELOG.md

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,27 @@
33
Generated by `npm run set:version`.
44
The local changelog is rebuilt from the available `v*` release tags and the current `HEAD` range.
55
The script does not create tags locally.
6-
## v0.50.1 - 2026-04-29
6+
## v0.51.0 - 2026-04-29
77

88
- Release source: local versioning run
9+
- Base ref: `v0.50.1`
10+
- Range: `v0.50.1..HEAD`
11+
- Included commits: 2
12+
13+
### Features (1)
14+
15+
- [core] replace Obsidian with TriliumNext (`07b208b`)
16+
17+
### Fix (1)
18+
19+
- [obsidian] remove wrapper basic auth (`83a4577`)
20+
21+
## v0.50.1 - 2026-04-29
22+
23+
- Release tag: `v0.50.1`
924
- Base ref: `v0.48.2`
10-
- Range: `v0.48.2..HEAD`
11-
- Included commits: 8
25+
- Range: `v0.48.2..v0.50.1`
26+
- Included commits: 9
1227

1328
### Features (2)
1429

@@ -21,11 +36,12 @@ The script does not create tags locally.
2136
- [gitlab] harden root login credentials (`e85c4ea`)
2237
- [workbench] add smoke coverage for dev services (`c6cc58e`)
2338

24-
### CI / Maintenance (3)
39+
### CI / Maintenance (4)
2540

2641
- [release] v0.49.0 (`1fd5e16`)
2742
- [release] v0.49.2 (`fd02bb0`)
2843
- [release] v0.49.4 (`42b5f48`)
44+
- [release] v0.50.1 (`caeb53d`)
2945

3046
## v0.48.2 - 2026-04-24
3147

README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Atlas Lab
22

3-
![Version](https://img.shields.io/badge/version-0.50.1-blue.svg)
3+
![Version](https://img.shields.io/badge/version-0.51.0-blue.svg)
44
![License](https://img.shields.io/badge/license-MIT-22c55e.svg)
55
![Docker Compose](https://img.shields.io/badge/Docker%20Compose-v2-2496ED?logo=docker&logoColor=white)
66
![Gateway](https://img.shields.io/badge/Gateway-Caddy-1F2937?logo=caddy&logoColor=white)
@@ -12,15 +12,15 @@
1212

1313
Atlas Lab is a localhost-first self-hosted platform made of a Node.js/TypeScript CLI, a layered Docker Compose stack, and an operational React dashboard served by Caddy.
1414

15-
It provides a core collaboration layer with GitLab CE, Obsidian, and Penpot, plus optional AI and development layers. Everything is reachable through dedicated HTTPS ports on `localhost`, with persistent state stored in Docker volumes.
15+
It provides a core collaboration layer with GitLab CE, TriliumNext, and Penpot, plus optional AI and development layers. Everything is reachable through dedicated HTTPS ports on `localhost`, with persistent state stored in Docker volumes.
1616

1717
---
1818

1919
## Overview
2020

2121
### What It Gives You
2222

23-
- Always-on core layer with Atlas Dashboard, GitLab CE, Obsidian, and Penpot.
23+
- Always-on core layer with Atlas Dashboard, GitLab CE, TriliumNext, and Penpot.
2424
- Optional AI LLM layer with Open WebUI, Ollama, and n8n.
2525
- Optional workbench layer with browser-based Node and Python environments plus shared PostgreSQL.
2626
- HTTPS-only browser ingress on `localhost`.
@@ -43,7 +43,7 @@ Atlas Lab is split into three explicit layers.
4343

4444
| Layer | Status | Includes | Purpose |
4545
| --- | --- | --- | --- |
46-
| `core` | always on | gateway, Atlas Dashboard, GitLab CE, Obsidian, Penpot, and backing data services | baseline self-hosted platform |
46+
| `core` | always on | gateway, Atlas Dashboard, GitLab CE, TriliumNext, Penpot, and backing data services | baseline self-hosted platform |
4747
| `ai-llm` | optional | Open WebUI, Ollama, n8n, AI gateway | local AI workflows and automation |
4848
| `workbench` | optional | Node Forge, Python Grid, shared PostgreSQL, workbench gateway | browser-based development |
4949

@@ -77,7 +77,7 @@ All browser entry points are exposed over HTTPS on `localhost`.
7777
| Open WebUI | `ai-llm` | `https://localhost:8446/` | only with `--with-ai-llm` |
7878
| Ollama | `ai-llm` | `https://localhost:8447/` | HTTPS API with gateway auth |
7979
| Penpot | `core` | `https://localhost:8448/` | collaborative design workspace |
80-
| Obsidian | `core` | `https://localhost:8449/` | browser knowledge vault |
80+
| TriliumNext | `core` | `https://localhost:8449/` | server-side knowledge base |
8181
| Node Forge | `workbench` | `https://localhost:8450/` | Node / TypeScript workspace |
8282
| Python Grid | `workbench` | `https://localhost:8451/` | Python workspace |
8383
| n8n | `ai-llm` | `https://localhost:8453/` | workflow automation |
@@ -96,7 +96,7 @@ Operational rules:
9696
| Network | Type | Purpose |
9797
| --- | --- | --- |
9898
| `edge-net` | exposed | published ingress ports |
99-
| `apps-net` | internal | GitLab CE, Obsidian, and gateway-routed browser services |
99+
| `apps-net` | internal | GitLab CE, TriliumNext, and gateway-routed browser services |
100100
| `penpot-net` | internal | Penpot application services |
101101
| `ai-llm-net` | internal | Open WebUI, Ollama, and n8n |
102102
| `workbench-net` | internal | workbenches and PostgreSQL |
@@ -121,7 +121,7 @@ Core volumes:
121121
- `gitlab-config`
122122
- `gitlab-logs`
123123
- `gitlab-data`
124-
- `obsidian-config`
124+
- `trilium-data`
125125
- `penpot-assets`
126126
- `penpot-postgres`
127127

@@ -189,12 +189,11 @@ The main runtime configuration lives in:
189189

190190
Key variables include:
191191

192-
- `LAB_HTTPS_PORT`, `GITLAB_HTTPS_PORT`, `PENPOT_HTTPS_PORT`, `OBSIDIAN_HTTPS_PORT`
192+
- `LAB_HTTPS_PORT`, `GITLAB_HTTPS_PORT`, `PENPOT_HTTPS_PORT`, `TRILIUM_HTTPS_PORT`
193193
- `OPENWEBUI_HTTPS_PORT`, `OLLAMA_HTTPS_PORT`, `N8N_HTTPS_PORT`
194194
- `NODE_DEV_HTTPS_PORT`, `PYTHON_DEV_HTTPS_PORT`, `POSTGRES_DEV_HOST_PORT`
195195
- `GITLAB_EXTERNAL_URL`, `GITLAB_URL`
196196
- `GITLAB_ROOT_USERNAME`, `GITLAB_ROOT_PASSWORD`, `GITLAB_ROOT_EMAIL`
197-
- `OBSIDIAN_USERNAME`, `OBSIDIAN_PASSWORD`
198197
- `PENPOT_ROOT_EMAIL`, `PENPOT_ROOT_PASSWORD`
199198
- `N8N_ROOT_EMAIL`, `N8N_ROOT_PASSWORD`
200199
- `OLLAMA_CHAT_MODEL`, `OLLAMA_EMBEDDING_MODEL`, `OLLAMA_RUNTIME_MODELS`
@@ -348,7 +347,7 @@ These credentials are intended for trusted local environments and are configurab
348347
| Open WebUI | `https://localhost:8446/` | `root@openwebui.local / RootOpenWebUI!2026` |
349348
| Ollama | `https://localhost:8447/` | gateway basic auth `root / RootOllama!2026` |
350349
| Penpot | `https://localhost:8448/` | `root@penpot.local / RootPenpot!2026` |
351-
| Obsidian | `https://localhost:8449/` | basic auth `atlas / RootObsidian!2026` |
350+
| TriliumNext | `https://localhost:8449/` | first-run app setup |
352351
| n8n | `https://localhost:8453/` | owner bootstrap `root@n8n.local / RootN8NApp!2026` |
353352
| PostgreSQL host-side | `localhost:15432` | `postgres / RootPostgresDev!2026` |
354353

@@ -481,10 +480,11 @@ For stronger hardening:
481480
- Self-hosted user management: https://docs.n8n.io/hosting/configuration/user-management-self-hosted/
482481
- Docker install: https://docs.n8n.io/hosting/installation/docker/
483482

484-
### Obsidian
483+
### TriliumNext
485484

486-
- Docker Hub image: https://hub.docker.com/r/linuxserver/obsidian
487-
- Source repository: https://github.com/linuxserver/docker-obsidian
485+
- Docker Hub image: https://hub.docker.com/r/triliumnext/trilium
486+
- Source repository: https://github.com/TriliumNext/Trilium
487+
- Docker installation: https://docs.triliumnotes.org/user-guide/setup/server/installation/docker
488488

489489
### Open WebUI
490490

apps/atlas-dashboard/src/entities/dashboard/model/builders/dashboard-core.builder.ts

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -57,39 +57,29 @@ export function createCoreServices(
5757
},
5858
{
5959
action: {
60-
href: config.services.obsidian.url,
61-
label: t('dashboard.services.obsidian.action')
60+
href: config.services.trilium.url,
61+
label: t('dashboard.services.trilium.action')
6262
},
6363
credentials: [
6464
{
6565
label: labels.endpoint,
66-
value: config.services.obsidian.url
66+
value: config.services.trilium.url
6767
},
6868
{
69-
label: labels.username,
70-
value: config.services.obsidian.username,
71-
concealed: true
72-
},
73-
{
74-
label: labels.password,
75-
value: config.services.obsidian.password,
76-
concealed: true
77-
},
78-
{
79-
label: labels.authMode,
80-
value: t('values.basicAuth')
69+
label: labels.accessMode,
70+
value: t('values.directAppLogin')
8171
},
8272
{
8373
label: labels.usage,
8474
value: t('values.knowledgeVault')
8575
}
8676
],
87-
description: t('dashboard.services.obsidian.description'),
77+
description: t('dashboard.services.trilium.description'),
8878
icon: 'host',
89-
id: 'obsidian',
90-
note: t('dashboard.services.obsidian.note'),
79+
id: 'trilium',
80+
note: t('dashboard.services.trilium.note'),
9181
status: t('values.knowledgeVault'),
92-
title: t('dashboard.services.obsidian.title'),
82+
title: t('dashboard.services.trilium.title'),
9383
tone: 'core'
9484
},
9585
{

apps/atlas-dashboard/src/entities/network-map/model/create-network-graph-view-model.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,16 @@ export function createNetworkGraphViewModel(
7878
}),
7979
createNode({
8080
active: true,
81-
description: t('dashboard.services.obsidian.description'),
82-
id: 'obsidian',
81+
description: t('dashboard.services.trilium.description'),
82+
id: 'trilium',
8383
kind: 'service',
8484
labels: [
85-
config.services.obsidian.url,
85+
config.services.trilium.url,
8686
t('values.knowledgeVault'),
8787
t('networkMapDialog.labels.browser')
8888
],
8989
position: [-64, -20, 12],
90-
title: t('dashboard.services.obsidian.title'),
90+
title: t('dashboard.services.trilium.title'),
9191
tone: 'core'
9292
}),
9393
createNode({
@@ -239,7 +239,7 @@ export function createNetworkGraphViewModel(
239239
createLink('gateway', 'deck', 'core', true),
240240
createLink('gateway', 'core-layer', 'core', true),
241241
createLink('core-layer', 'gitlab', 'core', true),
242-
createLink('core-layer', 'obsidian', 'core', true),
242+
createLink('core-layer', 'trilium', 'core', true),
243243
createLink('core-layer', 'penpot', 'core', true),
244244
createLink('gateway', 'ai-layer', 'ai', aiActive),
245245
createLink('ai-layer', 'open-webui', 'ai', aiActive),

apps/atlas-dashboard/src/entities/runtime-config/model/lab-runtime-config.schema.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ const namedAccountSchema = z.object({
1010
url: nonEmptyString
1111
});
1212

13-
const basicAuthServiceSchema = z.object({
14-
password: nonEmptyString,
15-
url: nonEmptyString,
16-
username: nonEmptyString
13+
const urlOnlyServiceSchema = z.object({
14+
url: nonEmptyString
1715
});
1816

1917
export const labRuntimeConfigSchema = z.object({
@@ -52,7 +50,7 @@ export const labRuntimeConfigSchema = z.object({
5250
url: nonEmptyString
5351
}),
5452
openWebUi: namedAccountSchema,
55-
obsidian: basicAuthServiceSchema,
53+
trilium: urlOnlyServiceSchema,
5654
penpot: namedAccountSchema
5755
}),
5856
workbenches: z.object({

apps/atlas-dashboard/src/locales/en.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@
205205
"alwaysOnForge": "always-on forge"
206206
},
207207
"dashboard": {
208-
"coreLayerSummary": "GitLab CE, Obsidian, and Penpot form the always-on core layer of the lab.",
208+
"coreLayerSummary": "GitLab CE, TriliumNext, and Penpot form the always-on core layer of the lab.",
209209
"accessNotes": {
210210
"aiDisabled": "The AI layer no longer starts by default: the deck marks it as optional instead of pretending that it is online.",
211211
"aiEnabled": "Open WebUI, Ollama, and n8n are online and reachable on the dedicated AI gateway ports.",
@@ -257,7 +257,7 @@
257257
"label": "segmentation"
258258
},
259259
"usage": {
260-
"body": "GitLab CE, Obsidian, and Penpot stay on as the core layer; the AI and workbench layers are enabled only when they are actually needed.",
260+
"body": "GitLab CE, TriliumNext, and Penpot stay on as the core layer; the AI and workbench layers are enabled only when they are actually needed.",
261261
"label": "usage"
262262
}
263263
},
@@ -325,11 +325,11 @@
325325
"description": "Self-hosted GitLab CE for repositories, issues, merge requests, CI-ready project governance, and the lab's technical collaboration flow.",
326326
"title": "GitLab CE"
327327
},
328-
"obsidian": {
329-
"action": "Open Obsidian",
330-
"description": "Browser-delivered Obsidian workspace for a local markdown vault, protected with deterministic lab credentials and persisted in a named Docker volume.",
331-
"note": "Obsidian runs through the LinuxServer web container. Use the browser session for vault work, plugins, and markdown editing inside the persisted config volume.",
332-
"title": "Obsidian"
328+
"trilium": {
329+
"action": "Open TriliumNext",
330+
"description": "Self-hosted TriliumNext knowledge base for hierarchical notes, backlinks, protected notes, and long-lived personal documentation.",
331+
"note": "TriliumNext runs as a real server-side web application with its database and backups persisted in the trilium-data Docker volume.",
332+
"title": "TriliumNext"
333333
},
334334
"penpot": {
335335
"action": "Open Penpot",

apps/atlas-dashboard/src/locales/it.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@
205205
"alwaysOnForge": "forge sempre accesa"
206206
},
207207
"dashboard": {
208-
"coreLayerSummary": "GitLab CE, Obsidian e Penpot formano il layer core sempre acceso del lab.",
208+
"coreLayerSummary": "GitLab CE, TriliumNext e Penpot formano il layer core sempre acceso del lab.",
209209
"accessNotes": {
210210
"aiDisabled": "Il layer AI non viene piu acceso di default: il deck lo marca come opzionale invece di fingere che sia online.",
211211
"aiEnabled": "Open WebUI, Ollama e n8n sono online e raggiungibili sulle porte dedicate del gateway AI.",
@@ -257,7 +257,7 @@
257257
"label": "segmentazione"
258258
},
259259
"usage": {
260-
"body": "GitLab CE, Obsidian e Penpot restano sempre attivi nel layer core; i layer AI e workbench vengono abilitati solo quando servono davvero.",
260+
"body": "GitLab CE, TriliumNext e Penpot restano sempre attivi nel layer core; i layer AI e workbench vengono abilitati solo quando servono davvero.",
261261
"label": "uso"
262262
}
263263
},
@@ -325,11 +325,11 @@
325325
"description": "GitLab CE self-hosted per repository, issue, merge request, governance progetto pronta per CI e collaborazione tecnica del lab.",
326326
"title": "GitLab CE"
327327
},
328-
"obsidian": {
329-
"action": "Apri Obsidian",
330-
"description": "Workspace Obsidian via browser per un vault markdown locale, protetto con credenziali deterministiche del lab e persistito in un volume Docker nominato.",
331-
"note": "Obsidian gira tramite il container web LinuxServer. Usa la sessione browser per vault, plugin e modifica markdown dentro il volume config persistente.",
332-
"title": "Obsidian"
328+
"trilium": {
329+
"action": "Apri TriliumNext",
330+
"description": "Knowledge base TriliumNext self-hosted per note gerarchiche, backlink, note protette e documentazione personale persistente.",
331+
"note": "TriliumNext gira come vera web application server-side con database e backup persistiti nel volume Docker trilium-data.",
332+
"title": "TriliumNext"
333333
},
334334
"penpot": {
335335
"action": "Apri Penpot",

config/gateway/templates/Caddyfile.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,6 @@ https://${LAB_PUBLIC_HOST}:${PENPOT_HTTPS_PORT}, https://${LAB_GATEWAY_IP}:${PEN
6262
import service_proxy penpot-frontend:8080
6363
}
6464

65-
https://${LAB_PUBLIC_HOST}:${OBSIDIAN_HTTPS_PORT}, https://${LAB_GATEWAY_IP}:${OBSIDIAN_HTTPS_PORT} {
66-
import service_proxy obsidian:3000
65+
https://${LAB_PUBLIC_HOST}:${TRILIUM_HTTPS_PORT}, https://${LAB_GATEWAY_IP}:${TRILIUM_HTTPS_PORT} {
66+
import service_proxy trilium:8080
6767
}

config/gateway/templates/content/network-map.md.template

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
The deck remains available locally at `${LAB_LOCAL_URL}`. The lab is split into three layers:
66

7-
- `core`: deck, GitLab CE, Penpot, Obsidian, and the base gateway
7+
- `core`: deck, GitLab CE, Penpot, TriliumNext, and the base gateway
88
- `ai-llm`: Open WebUI, Ollama, and n8n
99
- `workbench`: Postgres and code-server environments
1010

@@ -15,7 +15,7 @@ Each layer publishes its HTTPS endpoints on `localhost` through a dedicated gate
1515
- Local deck: `${LAB_LOCAL_URL}`
1616
- GitLab CE: `${GITLAB_URL}`
1717
- Penpot: `${PENPOT_URL}`
18-
- Obsidian: `${OBSIDIAN_URL}`
18+
- TriliumNext: `${TRILIUM_URL}`
1919
- Open WebUI: `${OPENWEBUI_URL}` only when the `ai-llm` layer is enabled
2020
- Ollama: `${OLLAMA_URL}` only when the `ai-llm` layer is enabled
2121
- n8n: `${N8N_URL}` only when the `ai-llm` layer is enabled
@@ -30,7 +30,7 @@ Each layer publishes its HTTPS endpoints on `localhost` through a dedicated gate
3030
- `8446`: Open WebUI, layer `ai-llm`
3131
- `8447`: Ollama, layer `ai-llm`
3232
- `8448`: Penpot
33-
- `8449`: Obsidian
33+
- `8449`: TriliumNext
3434
- `8450`: Node workbench, layer `workbench`
3535
- `8451`: Python workbench, layer `workbench`
3636
- `8453`: n8n, layer `ai-llm`
@@ -44,7 +44,7 @@ The gateway generates a self-signed SAN certificate that covers `localhost` and
4444

4545
## Internal segmentation
4646

47-
- `apps-net`: GitLab CE, Obsidian, and Atlas gateway-routed browser services
47+
- `apps-net`: GitLab CE, TriliumNext, and Atlas gateway-routed browser services
4848
- `ai-llm-net`: n8n, Ollama, and Open WebUI
4949
- `data-net`: infrastructure databases
5050
- `penpot-net`: Penpot application services

config/gateway/templates/runtime/lab-config.json.template

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,8 @@
4545
"rootEmail": "${PENPOT_ROOT_EMAIL}",
4646
"rootPassword": "${PENPOT_ROOT_PASSWORD}"
4747
},
48-
"obsidian": {
49-
"url": "${OBSIDIAN_URL}",
50-
"username": "${OBSIDIAN_USERNAME}",
51-
"password": "${OBSIDIAN_PASSWORD}"
48+
"trilium": {
49+
"url": "${TRILIUM_URL}"
5250
}
5351
},
5452
"workbenches": {

0 commit comments

Comments
 (0)