@@ -168,7 +170,6 @@
-
diff --git a/apps/server/src/routes/api/clipper.spec.ts b/apps/server/src/routes/api/clipper.spec.ts
index 1efa6915e5..17b43f3b9e 100644
--- a/apps/server/src/routes/api/clipper.spec.ts
+++ b/apps/server/src/routes/api/clipper.spec.ts
@@ -1,4 +1,5 @@
import { BNote } from "../../services/backend_script_entrypoint";
+import cls from "../../services/cls";
import { buildNote } from "../../test/becca_easy_mocking";
import { processContent } from "./clipper";
@@ -6,7 +7,9 @@ let note!: BNote;
describe("processContent", () => {
beforeAll(() => {
- note = buildNote({});
+ note = buildNote({
+ content: "Hi there"
+ });
note.saveAttachment = () => {};
vi.mock("../../services/image.js", () => ({
default: {
@@ -21,29 +24,29 @@ describe("processContent", () => {
});
it("processes basic note", () => {
- const processed = processContent([], note, "
Hello world.
");
+ const processed = cls.init(() => processContent([], note, "
Hello world.
"));
expect(processed).toStrictEqual("
Hello world.
")
});
it("processes plain text", () => {
- const processed = processContent([], note, "Hello world.");
+ const processed = cls.init(() => processContent([], note, "Hello world."));
expect(processed).toStrictEqual("
Hello world.
")
});
it("replaces images", () => {
- const processed = processContent(
+ const processed = cls.init(() => processContent(
[{"imageId":"OKZxZA3MonZJkwFcEhId","src":"inline.png","dataUrl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAF0lEQVQoU2P8DwQMBADjqKLRIGAgKggAzHs/0SoYCGwAAAAASUVORK5CYII="}],
note, `
`
- );
+ ));
expect(processed).toStrictEqual(`
`);
});
it("skips over non-data images", () => {
for (const url of [ "foo", "" ]) {
- const processed = processContent(
+ const processed = cls.init(() => processContent(
[{"imageId":"OKZxZA3MonZJkwFcEhId","src":"inline.png","dataUrl": url}],
note, `
`
- );
+ ));
expect(processed).toStrictEqual(`
`);
}
});
diff --git a/apps/server/src/routes/api/llm.spec.ts b/apps/server/src/routes/api/llm.spec.ts
index 69ea34ab0f..f8afddfa66 100644
--- a/apps/server/src/routes/api/llm.spec.ts
+++ b/apps/server/src/routes/api/llm.spec.ts
@@ -3,7 +3,7 @@ import { beforeAll, describe, expect, it, vi, beforeEach, afterEach } from "vite
import supertest from "supertest";
import config from "../../services/config.js";
import { refreshAuth } from "../../services/auth.js";
-import type { WebSocket } from 'ws';
+import { sleepFor } from "@triliumnext/commons";
// Mock the CSRF protection middleware to allow tests to pass
vi.mock("../csrf_protection.js", () => ({
@@ -16,7 +16,8 @@ vi.mock("../../services/ws.js", () => ({
default: {
sendMessageToAllClients: vi.fn(),
sendTransactionEntityChangesToAllClients: vi.fn(),
- setLastSyncedPush: vi.fn()
+ setLastSyncedPush: vi.fn(),
+ syncFailed() {}
}
}));
@@ -71,7 +72,11 @@ vi.mock("../../services/options.js", () => ({
getOptionMap: vi.fn(() => new Map()),
createOption: vi.fn(),
getOption: vi.fn(() => '0'),
- getOptionOrNull: vi.fn(() => null)
+ getOptionOrNull: vi.fn(() => null),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -81,7 +86,7 @@ async function loginWithSession(app: Application) {
.post("/login")
.send({ password: "demo1234" })
.expect(302);
-
+
const setCookieHeader = response.headers["set-cookie"][0];
expect(setCookieHeader).toBeTruthy();
return setCookieHeader;
@@ -91,14 +96,14 @@ async function loginWithSession(app: Application) {
async function getCsrfToken(app: Application, sessionCookie: string) {
const response = await supertest(app)
.get("/")
-
+
.expect(200);
-
+
const csrfTokenMatch = response.text.match(/csrfToken: '([^']+)'/);
if (csrfTokenMatch) {
return csrfTokenMatch[1];
}
-
+
throw new Error("CSRF token not found in response");
}
@@ -154,7 +159,7 @@ describe("LLM API Tests", () => {
expect(response.body).toHaveProperty('sessions');
expect(Array.isArray(response.body.sessions)).toBe(true);
-
+
if (response.body.sessions.length > 0) {
expect(response.body.sessions[0]).toMatchObject({
id: expect.any(String),
@@ -171,18 +176,18 @@ describe("LLM API Tests", () => {
// Create a chat first if we don't have one
const createResponse = await supertest(app)
.post("/api/llm/chat")
-
+
.send({
title: "Test Retrieval Chat"
})
.expect(200);
-
+
createdChatId = createResponse.body.id;
}
const response = await supertest(app)
.get(`/api/llm/chat/${createdChatId}`)
-
+
.expect(200);
expect(response.body).toMatchObject({
@@ -202,7 +207,7 @@ describe("LLM API Tests", () => {
title: "Test Update Chat"
})
.expect(200);
-
+
createdChatId = createResponse.body.id;
}
@@ -224,7 +229,7 @@ describe("LLM API Tests", () => {
it("should return 404 for non-existent chat session", async () => {
await supertest(app)
.get("/api/llm/chat/nonexistent-chat-id")
-
+
.expect(404);
});
});
@@ -240,7 +245,7 @@ describe("LLM API Tests", () => {
title: "Message Test Chat"
})
.expect(200);
-
+
testChatId = createResponse.body.id;
});
@@ -260,10 +265,10 @@ describe("LLM API Tests", () => {
// The response depends on whether AI is actually configured
// We should get either a successful response or an error about AI not being configured
expect([200, 400, 500]).toContain(response.status);
-
+
// All responses should have some body
expect(response.body).toBeDefined();
-
+
// Either success with response or error
if (response.body.response) {
expect(response.body).toMatchObject({
@@ -310,10 +315,10 @@ describe("LLM API Tests", () => {
beforeEach(async () => {
// Reset all mocks
vi.clearAllMocks();
-
+
// Import options service to access mock
const options = (await import("../../services/options.js")).default;
-
+
// Setup default mock behaviors
(options.getOptionBool as any).mockReturnValue(true); // AI enabled
mockAiServiceManager.getOrCreateAnyService.mockResolvedValue({});
@@ -321,7 +326,7 @@ describe("LLM API Tests", () => {
model: 'test-model',
provider: 'test-provider'
});
-
+
// Create a fresh chat for each test
const mockChat = {
id: 'streaming-test-chat',
@@ -331,15 +336,15 @@ describe("LLM API Tests", () => {
};
mockChatStorage.createChat.mockResolvedValue(mockChat);
mockChatStorage.getChat.mockResolvedValue(mockChat);
-
+
const createResponse = await supertest(app)
.post("/api/llm/chat")
-
+
.send({
title: "Streaming Test Chat"
})
.expect(200);
-
+
testChatId = createResponse.body.id;
});
@@ -358,7 +363,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "Tell me a short story",
useAdvancedContext: false,
@@ -372,17 +377,17 @@ describe("LLM API Tests", () => {
success: true,
message: "Streaming initiated successfully"
});
-
+
// Import ws service to access mock
const ws = (await import("../../services/ws.js")).default;
-
+
// Verify WebSocket messages were sent
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
chatNoteId: testChatId,
thinking: undefined
});
-
+
// Verify streaming chunks were sent
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
@@ -390,7 +395,7 @@ describe("LLM API Tests", () => {
content: 'Hello',
done: false
});
-
+
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
chatNoteId: testChatId,
@@ -402,7 +407,7 @@ describe("LLM API Tests", () => {
it("should handle empty content for streaming", async () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "",
useAdvancedContext: false,
@@ -419,7 +424,7 @@ describe("LLM API Tests", () => {
it("should handle whitespace-only content for streaming", async () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: " \n\t ",
useAdvancedContext: false,
@@ -436,7 +441,7 @@ describe("LLM API Tests", () => {
it("should handle invalid chat ID for streaming", async () => {
const response = await supertest(app)
.post("/api/llm/chat/invalid-chat-id/messages/stream")
-
+
.send({
content: "Hello",
useAdvancedContext: false,
@@ -467,7 +472,7 @@ describe("LLM API Tests", () => {
// Verify mention content is included
expect(input.query).toContain('Tell me about this note');
expect(input.query).toContain('Root note content for testing');
-
+
const callback = input.streamCallback;
await callback('The root note contains', false, {});
await callback(' important information.', true, {});
@@ -475,7 +480,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "Tell me about this note",
useAdvancedContext: true,
@@ -493,11 +498,12 @@ describe("LLM API Tests", () => {
success: true,
message: "Streaming initiated successfully"
});
-
+
// Import ws service to access mock
const ws = (await import("../../services/ws.js")).default;
-
+
// Verify thinking message was sent
+ await sleepFor(1_000);
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
chatNoteId: testChatId,
@@ -517,7 +523,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "What is the meaning of life?",
useAdvancedContext: false,
@@ -525,10 +531,10 @@ describe("LLM API Tests", () => {
});
expect(response.status).toBe(200);
-
+
// Import ws service to access mock
const ws = (await import("../../services/ws.js")).default;
-
+
// Verify thinking messages
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
@@ -536,7 +542,7 @@ describe("LLM API Tests", () => {
thinking: 'Analyzing the question...',
done: false
});
-
+
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
chatNoteId: testChatId,
@@ -564,7 +570,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "What is 2 + 2?",
useAdvancedContext: false,
@@ -572,10 +578,10 @@ describe("LLM API Tests", () => {
});
expect(response.status).toBe(200);
-
+
// Import ws service to access mock
const ws = (await import("../../services/ws.js")).default;
-
+
// Verify tool execution message
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
@@ -597,7 +603,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "This will fail",
useAdvancedContext: false,
@@ -605,10 +611,10 @@ describe("LLM API Tests", () => {
});
expect(response.status).toBe(200); // Still returns 200
-
+
// Import ws service to access mock
const ws = (await import("../../services/ws.js")).default;
-
+
// Verify error message was sent via WebSocket
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
@@ -625,7 +631,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "Hello AI",
useAdvancedContext: false,
@@ -633,10 +639,10 @@ describe("LLM API Tests", () => {
});
expect(response.status).toBe(200);
-
+
// Import ws service to access mock
const ws = (await import("../../services/ws.js")).default;
-
+
// Verify error message about AI being disabled
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream',
@@ -655,7 +661,7 @@ describe("LLM API Tests", () => {
await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "Save this response",
useAdvancedContext: false,
@@ -680,10 +686,10 @@ describe("LLM API Tests", () => {
});
// Send multiple requests rapidly
- const promises = Array.from({ length: 3 }, (_, i) =>
+ const promises = Array.from({ length: 3 }, (_, i) =>
supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: `Request ${i + 1}`,
useAdvancedContext: false,
@@ -692,7 +698,7 @@ describe("LLM API Tests", () => {
);
const responses = await Promise.all(promises);
-
+
// All should succeed
responses.forEach(response => {
expect(response.status).toBe(200);
@@ -716,7 +722,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post(`/api/llm/chat/${testChatId}/messages/stream`)
-
+
.send({
content: "Generate large response",
useAdvancedContext: false,
@@ -724,10 +730,10 @@ describe("LLM API Tests", () => {
});
expect(response.status).toBe(200);
-
+
// Import ws service to access mock
const ws = (await import("../../services/ws.js")).default;
-
+
// Verify multiple chunks were sent
const streamCalls = (ws.sendMessageToAllClients as any).mock.calls.filter(
call => call[0].type === 'llm-stream' && call[0].content
@@ -741,7 +747,7 @@ describe("LLM API Tests", () => {
const response = await supertest(app)
.post("/api/llm/chat")
.set('Content-Type', 'application/json')
-
+
.send('{ invalid json }');
expect([400, 500]).toContain(response.status);
@@ -750,7 +756,7 @@ describe("LLM API Tests", () => {
it("should handle missing required fields", async () => {
const response = await supertest(app)
.post("/api/llm/chat")
-
+
.send({
// Missing required fields
});
@@ -762,7 +768,7 @@ describe("LLM API Tests", () => {
it("should handle invalid parameter types", async () => {
const response = await supertest(app)
.post("/api/llm/chat")
-
+
.send({
title: "Test Chat",
temperature: "invalid", // Should be number
@@ -786,4 +792,4 @@ describe("LLM API Tests", () => {
}
}
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/routes/index.ts b/apps/server/src/routes/index.ts
index 430c27d0f5..6bede94d7b 100644
--- a/apps/server/src/routes/index.ts
+++ b/apps/server/src/routes/index.ts
@@ -14,6 +14,7 @@ import { generateToken as generateCsrfToken } from "./csrf_protection.js";
import type { Request, Response } from "express";
import type BNote from "../becca/entities/bnote.js";
+import { getCurrentLocale } from "../services/i18n.js";
function index(req: Request, res: Response) {
const options = optionService.getOptionMap();
@@ -57,7 +58,8 @@ function index(req: Request, res: Response) {
maxContentWidth: Math.max(640, parseInt(options.maxContentWidth)),
triliumVersion: packageJson.version,
assetPath: assetPath,
- appPath: appPath
+ appPath: appPath,
+ currentLocale: getCurrentLocale()
});
}
diff --git a/apps/server/src/routes/login.ts b/apps/server/src/routes/login.ts
index 2acb3a4d5f..1126d9a7ff 100644
--- a/apps/server/src/routes/login.ts
+++ b/apps/server/src/routes/login.ts
@@ -11,9 +11,10 @@ import totp from '../services/totp.js';
import recoveryCodeService from '../services/encryption/recovery_codes.js';
import openID from '../services/open_id.js';
import openIDEncryption from '../services/encryption/open_id_encryption.js';
+import { getCurrentLocale } from "../services/i18n.js";
function loginPage(req: Request, res: Response) {
- // Login page is triggered twice. Once here, and another time if the password is failed.
+ // Login page is triggered twice. Once here, and another time (see sendLoginError) if the password is failed.
res.render('login', {
wrongPassword: false,
wrongTotp: false,
@@ -24,6 +25,7 @@ function loginPage(req: Request, res: Response) {
assetPath: assetPath,
assetPathFragment: assetUrlFragment,
appPath: appPath,
+ currentLocale: getCurrentLocale()
});
}
@@ -31,7 +33,8 @@ function setPasswordPage(req: Request, res: Response) {
res.render("set_password", {
error: false,
assetPath,
- appPath
+ appPath,
+ currentLocale: getCurrentLocale()
});
}
@@ -56,7 +59,8 @@ function setPassword(req: Request, res: Response) {
res.render("set_password", {
error,
assetPath,
- appPath
+ appPath,
+ currentLocale: getCurrentLocale()
});
return;
}
@@ -175,6 +179,7 @@ function sendLoginError(req: Request, res: Response, errorType: 'password' | 'to
assetPath: assetPath,
assetPathFragment: assetUrlFragment,
appPath: appPath,
+ currentLocale: getCurrentLocale()
});
}
diff --git a/apps/server/src/routes/setup.ts b/apps/server/src/routes/setup.ts
index 5bb0f56c91..4a2a8699ab 100644
--- a/apps/server/src/routes/setup.ts
+++ b/apps/server/src/routes/setup.ts
@@ -6,6 +6,7 @@ import { isElectron } from "../services/utils.js";
import assetPath from "../services/asset_path.js";
import appPath from "../services/app_path.js";
import type { Request, Response } from "express";
+import { getCurrentLocale } from "../services/i18n.js";
function setupPage(req: Request, res: Response) {
if (sqlInit.isDbInitialized()) {
@@ -30,7 +31,8 @@ function setupPage(req: Request, res: Response) {
res.render("setup", {
syncInProgress: syncInProgress,
assetPath: assetPath,
- appPath: appPath
+ appPath: appPath,
+ currentLocale: getCurrentLocale()
});
}
@@ -39,7 +41,7 @@ async function handleElectronRedirect() {
const { app } = await import("electron");
// Wait for the main window to be created before closing the setup window to prevent triggering `window-all-closed`.
- await windowService.createMainWindow(app);
+ await windowService.createMainWindow(app);
windowService.closeSetupWindow();
const tray = (await import("../services/tray.js")).default;
diff --git a/apps/server/src/services/builtin_attributes.ts b/apps/server/src/services/builtin_attributes.ts
index 2d35992aaa..293bc6b5d9 100644
--- a/apps/server/src/services/builtin_attributes.ts
+++ b/apps/server/src/services/builtin_attributes.ts
@@ -66,6 +66,7 @@ export default [
{ type: "label", name: "shareDisallowRobotIndexing" },
{ type: "label", name: "shareCredentials" },
{ type: "label", name: "shareIndex" },
+ { type: "label", name: "shareHtmlLocation" },
{ type: "label", name: "displayRelations" },
{ type: "label", name: "hideRelations" },
{ type: "label", name: "titleTemplate", isDangerous: true },
@@ -105,6 +106,7 @@ export default [
{ type: "relation", name: "renderNote", isDangerous: true },
{ type: "relation", name: "shareCss" },
{ type: "relation", name: "shareJs" },
+ { type: "relation", name: "shareHtml" },
{ type: "relation", name: "shareTemplate" },
{ type: "relation", name: "shareFavicon" }
];
diff --git a/apps/server/src/services/date_notes.ts b/apps/server/src/services/date_notes.ts
index afec6c882b..7b8849b2d8 100644
--- a/apps/server/src/services/date_notes.ts
+++ b/apps/server/src/services/date_notes.ts
@@ -16,10 +16,12 @@ import searchService from "../services/search/services/search.js";
import sql from "./sql.js";
import { t } from "i18next";
import { ordinal } from "./i18n.js";
+import isoWeek from "dayjs/plugin/isoWeek.js";
dayjs.extend(isSameOrAfter);
dayjs.extend(quarterOfYear);
dayjs.extend(advancedFormat);
+dayjs.extend(isoWeek);
const CALENDAR_ROOT_LABEL = "calendarRoot";
const YEAR_LABEL = "yearNote";
@@ -295,88 +297,16 @@ function getMonthNote(dateStr: string, _rootNote: BNote | null = null): BNote {
}
function getWeekStartDate(date: Dayjs): Dayjs {
- const day = date.day();
- let diff: number;
-
- if (optionService.getOption("firstDayOfWeek") === "0") { // Sunday
- diff = date.date() - day + (day === 0 ? -6 : 1); // adjust when day is sunday
- } else { // Monday
- diff = date.date() - day;
- }
-
- const startDate = date.clone().date(diff);
- return startDate;
+ const firstDayISO = parseInt(optionService.getOptionOrNull("firstDayOfWeek") ?? "1", 10);
+ const day = date.isoWeekday();
+ const diff = (day - firstDayISO + 7) % 7;
+ return date.clone().subtract(diff, "day").startOf("day");
}
-// TODO: Duplicated with getWeekNumber in src/public/app/widgets/buttons/calendar.ts
-// Maybe can be merged later in monorepo setup
function getWeekNumberStr(date: Dayjs): string {
- const year = date.year();
- const dayOfWeek = (day: number) =>
- (day - parseInt(optionService.getOption("firstDayOfWeek")) + 7) % 7;
-
- // Get first day of the year and adjust to first week start
- const jan1 = date.clone().year(year).month(0).date(1);
- const jan1Weekday = jan1.day();
- const dayOffset = dayOfWeek(jan1Weekday);
- let firstWeekStart = jan1.clone().subtract(dayOffset, "day");
-
- // Adjust based on week rule
- switch (parseInt(optionService.getOption("firstWeekOfYear"))) {
- case 1: { // ISO 8601: first week contains Thursday
- const thursday = firstWeekStart.clone().add(3, "day"); // Monday + 3 = Thursday
- if (thursday.year() < year) {
- firstWeekStart = firstWeekStart.add(7, "day");
- }
- break;
- }
- case 2: { // minDaysInFirstWeek rule
- const daysInFirstWeek = 7 - dayOffset;
- if (daysInFirstWeek < parseInt(optionService.getOption("minDaysInFirstWeek"))) {
- firstWeekStart = firstWeekStart.add(7, "day");
- }
- break;
- }
- // default case 0: week containing Jan 1 → already handled
- }
-
- const diffDays = date.startOf("day").diff(firstWeekStart.startOf("day"), "day");
- const weekNumber = Math.floor(diffDays / 7) + 1;
-
- // Handle case when date is before first week start → belongs to last week of previous year
- if (weekNumber <= 0) {
- return getWeekNumberStr(date.subtract(1, "day"));
- }
-
- // Handle case when date belongs to first week of next year
- const nextYear = year + 1;
- const jan1Next = date.clone().year(nextYear).month(0).date(1);
- const jan1WeekdayNext = jan1Next.day();
- const offsetNext = dayOfWeek(jan1WeekdayNext);
- let nextYearWeekStart = jan1Next.clone().subtract(offsetNext, "day");
-
- switch (parseInt(optionService.getOption("firstWeekOfYear"))) {
- case 1: {
- const thursday = nextYearWeekStart.clone().add(3, "day");
- if (thursday.year() < nextYear) {
- nextYearWeekStart = nextYearWeekStart.add(7, "day");
- }
- break;
- }
- case 2: {
- const daysInFirstWeek = 7 - offsetNext;
- if (daysInFirstWeek < parseInt(optionService.getOption("minDaysInFirstWeek"))) {
- nextYearWeekStart = nextYearWeekStart.add(7, "day");
- }
- break;
- }
- }
-
- if (date.isSameOrAfter(nextYearWeekStart)) {
- return `${nextYear}-W01`;
- }
-
- return `${year}-W${weekNumber.toString().padStart(2, "0")}`;
+ const isoYear = date.isoWeekYear();
+ const isoWeekNum = date.isoWeek();
+ return `${isoYear}-W${isoWeekNum.toString().padStart(2, "0")}`;
}
function getWeekFirstDayNote(dateStr: string, rootNote: BNote | null = null) {
diff --git a/apps/server/src/services/hidden_subtree.spec.ts b/apps/server/src/services/hidden_subtree.spec.ts
index 811aebe9b4..86b5fc344b 100644
--- a/apps/server/src/services/hidden_subtree.spec.ts
+++ b/apps/server/src/services/hidden_subtree.spec.ts
@@ -9,13 +9,13 @@ import { changeLanguage } from "./i18n.js";
import { deferred } from "./utils.js";
describe("Hidden Subtree", () => {
- describe("Launcher movement persistence", () => {
- beforeAll(async () => {
- sql_init.initializeDb();
- await sql_init.dbReady;
- cls.init(() => hiddenSubtreeService.checkHiddenSubtree());
- });
+ beforeAll(async () => {
+ sql_init.initializeDb();
+ await sql_init.dbReady;
+ cls.init(() => hiddenSubtreeService.checkHiddenSubtree());
+ });
+ describe("Launcher movement persistence", () => {
it("should persist launcher movement between visible and available after integrity check", () => {
// Move backend log to visible launchers.
const backendLogBranch = becca.getBranchFromChildAndParent("_lbBackendLog", "_lbAvailableLaunchers");
@@ -119,4 +119,14 @@ describe("Hidden Subtree", () => {
await done;
});
});
+
+ describe("Hidden subtree", () => {
+ it("cleans up exclude from note map at the root", async () => {
+ const hiddenSubtree = becca.getNoteOrThrow("_hidden");
+ cls.init(() => hiddenSubtree.addLabel("excludeFromNoteMap"));
+ expect(hiddenSubtree.hasLabel("excludeFromNoteMap")).toBeTruthy();
+ cls.init(() => hiddenSubtreeService.checkHiddenSubtree());
+ expect(hiddenSubtree.hasLabel("excludeFromNoteMap")).toBeFalsy();
+ });
+ });
});
diff --git a/apps/server/src/services/hidden_subtree.ts b/apps/server/src/services/hidden_subtree.ts
index 0fbe764971..5d8854aaa5 100644
--- a/apps/server/src/services/hidden_subtree.ts
+++ b/apps/server/src/services/hidden_subtree.ts
@@ -40,8 +40,8 @@ function buildHiddenSubtreeDefinition(helpSubtree: HiddenSubtreeItem[]): HiddenS
// we want to keep the hidden subtree always last, otherwise there will be problems with e.g., keyboard navigation
// over tree when it's in the middle
notePosition: 999_999_999,
+ enforceAttributes: true,
attributes: [
- { type: "label", name: "excludeFromNoteMap", isInheritable: true },
{ type: "label", name: "docName", value: "hidden" }
],
children: [
@@ -441,6 +441,15 @@ function checkHiddenSubtreeRecursively(parentNoteId: string, item: HiddenSubtree
}
}
+ // Enforce attribute structure if needed.
+ if (item.enforceAttributes) {
+ for (const attribute of note.getAttributes()) {
+ if (!attrs.some(a => a.name === attribute.name)) {
+ attribute.markAsDeleted();
+ }
+ }
+ }
+
for (const attr of attrs) {
const attrId = note.noteId + "_" + attr.type.charAt(0) + attr.name;
diff --git a/apps/server/src/services/html_sanitizer.ts b/apps/server/src/services/html_sanitizer.ts
index 79d80033f1..52e24a691f 100644
--- a/apps/server/src/services/html_sanitizer.ts
+++ b/apps/server/src/services/html_sanitizer.ts
@@ -1,17 +1,7 @@
import sanitizeHtml from "sanitize-html";
import { sanitizeUrl } from "@braintree/sanitize-url";
import optionService from "./options.js";
-import { SANITIZER_DEFAULT_ALLOWED_TAGS } from "@triliumnext/commons";
-
-// Be consistent with `ALLOWED_PROTOCOLS` in `src\public\app\services\link.js`
-// TODO: Deduplicate with client once we can.
-export const ALLOWED_PROTOCOLS = [
- 'http', 'https', 'ftp', 'ftps', 'mailto', 'data', 'evernote', 'file', 'facetime', 'gemini', 'git',
- 'gopher', 'imap', 'irc', 'irc6', 'jabber', 'jar', 'lastfm', 'ldap', 'ldaps', 'magnet', 'message',
- 'mumble', 'nfs', 'onenote', 'pop', 'rmi', 's3', 'sftp', 'skype', 'sms', 'spotify', 'steam', 'svn', 'udp',
- 'view-source', 'vlc', 'vnc', 'ws', 'wss', 'xmpp', 'jdbc', 'slack', 'tel', 'smb', 'zotero', 'geo',
- 'mid'
-];
+import { ALLOWED_PROTOCOLS, SANITIZER_DEFAULT_ALLOWED_TAGS } from "@triliumnext/commons";
// intended mainly as protection against XSS via import
// secondarily, it (partly) protects against "CSS takeover"
diff --git a/apps/server/src/services/i18n.spec.ts b/apps/server/src/services/i18n.spec.ts
index 050cc2cd1f..00dfd113b2 100644
--- a/apps/server/src/services/i18n.spec.ts
+++ b/apps/server/src/services/i18n.spec.ts
@@ -1,11 +1,12 @@
import { LOCALES } from "@triliumnext/commons";
import { readFileSync } from "fs";
import { join } from "path";
+import { DAYJS_LOADER } from "./i18n";
describe("i18n", () => {
it("translations are valid JSON", () => {
for (const locale of LOCALES) {
- if (locale.contentOnly) {
+ if (locale.contentOnly || locale.id === "en_rtl") {
continue;
}
@@ -15,4 +16,13 @@ describe("i18n", () => {
.not.toThrow();
}
});
+
+ it("all dayjs locales are valid", async () => {
+ for (const locale of LOCALES) {
+ const dayjsLoader = DAYJS_LOADER[locale.id];
+ expect(dayjsLoader, `Locale ${locale.id} missing.`).toBeDefined();
+
+ await dayjsLoader();
+ }
+ });
});
diff --git a/apps/server/src/services/i18n.ts b/apps/server/src/services/i18n.ts
index edc2115b89..a23ff7ea27 100644
--- a/apps/server/src/services/i18n.ts
+++ b/apps/server/src/services/i18n.ts
@@ -7,11 +7,12 @@ import hidden_subtree from "./hidden_subtree.js";
import { LOCALES, type Locale, type LOCALE_IDS } from "@triliumnext/commons";
import dayjs, { Dayjs } from "dayjs";
-const DAYJS_LOADER: Record
Promise> = {
+export const DAYJS_LOADER: Record Promise> = {
"ar": () => import("dayjs/locale/ar.js"),
"cn": () => import("dayjs/locale/zh-cn.js"),
"de": () => import("dayjs/locale/de.js"),
"en": () => import("dayjs/locale/en.js"),
+ "en_rtl": () => import("dayjs/locale/en.js"),
"es": () => import("dayjs/locale/es.js"),
"fa": () => import("dayjs/locale/fa.js"),
"fr": () => import("dayjs/locale/fr.js"),
@@ -19,6 +20,7 @@ const DAYJS_LOADER: Record Promise import("dayjs/locale/ja.js"),
"ku": () => import("dayjs/locale/ku.js"),
"pt_br": () => import("dayjs/locale/pt-br.js"),
+ "pt": () => import("dayjs/locale/pt.js"),
"ro": () => import("dayjs/locale/ro.js"),
"ru": () => import("dayjs/locale/ru.js"),
"tw": () => import("dayjs/locale/zh-tw.js"),
@@ -74,3 +76,10 @@ export async function changeLanguage(locale: string) {
await i18next.changeLanguage(locale);
hidden_subtree.checkHiddenSubtree(true, { restoreNames: true });
}
+
+export function getCurrentLocale() {
+ const localeId = options.getOptionOrNull("locale") ?? "en";
+ const currentLocale = LOCALES.find(l => l.id === localeId);
+ if (!currentLocale) return LOCALES.find(l => l.id === "en")!;
+ return currentLocale;
+}
diff --git a/apps/server/src/services/llm/ai_service_manager.spec.ts b/apps/server/src/services/llm/ai_service_manager.spec.ts
index c31d90d26b..14305cf6b2 100644
--- a/apps/server/src/services/llm/ai_service_manager.spec.ts
+++ b/apps/server/src/services/llm/ai_service_manager.spec.ts
@@ -12,7 +12,11 @@ import type { AIService, ChatCompletionOptions, Message } from './ai_interface.j
vi.mock('../options.js', () => ({
default: {
getOption: vi.fn(),
- getOptionBool: vi.fn()
+ getOptionBool: vi.fn(),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -110,26 +114,26 @@ describe('AIServiceManager', () => {
describe('getSelectedProviderAsync', () => {
it('should return the selected provider', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce('openai');
-
+
const result = await manager.getSelectedProviderAsync();
-
+
expect(result).toBe('openai');
expect(configHelpers.getSelectedProvider).toHaveBeenCalled();
});
it('should return null if no provider is selected', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce(null);
-
+
const result = await manager.getSelectedProviderAsync();
-
+
expect(result).toBeNull();
});
it('should handle errors and return null', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockRejectedValueOnce(new Error('Config error'));
-
+
const result = await manager.getSelectedProviderAsync();
-
+
expect(result).toBeNull();
});
});
@@ -141,9 +145,9 @@ describe('AIServiceManager', () => {
errors: [],
warnings: []
});
-
+
const result = await manager.validateConfiguration();
-
+
expect(result).toBeNull();
});
@@ -153,9 +157,9 @@ describe('AIServiceManager', () => {
errors: ['Missing API key', 'Invalid model'],
warnings: []
});
-
+
const result = await manager.validateConfiguration();
-
+
expect(result).toContain('There are issues with your AI configuration');
expect(result).toContain('Missing API key');
expect(result).toContain('Invalid model');
@@ -167,9 +171,9 @@ describe('AIServiceManager', () => {
errors: [],
warnings: ['Model not optimal']
});
-
+
const result = await manager.validateConfiguration();
-
+
expect(result).toBeNull();
});
});
@@ -178,21 +182,21 @@ describe('AIServiceManager', () => {
it('should create and return the selected provider service', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce('openai');
vi.mocked(options.getOption).mockReturnValueOnce('test-api-key');
-
+
const mockService = {
isAvailable: vi.fn().mockReturnValue(true),
generateChatCompletion: vi.fn()
};
vi.mocked(OpenAIService).mockImplementationOnce(() => mockService as any);
-
+
const result = await manager.getOrCreateAnyService();
-
+
expect(result).toBe(mockService);
});
it('should throw error if no provider is selected', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce(null);
-
+
await expect(manager.getOrCreateAnyService()).rejects.toThrow(
'No AI provider is selected'
);
@@ -201,7 +205,7 @@ describe('AIServiceManager', () => {
it('should throw error if selected provider is not available', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce('openai');
vi.mocked(options.getOption).mockReturnValueOnce(''); // No API key
-
+
await expect(manager.getOrCreateAnyService()).rejects.toThrow(
'Selected AI provider (openai) is not available'
);
@@ -211,17 +215,17 @@ describe('AIServiceManager', () => {
describe('isAnyServiceAvailable', () => {
it('should return true if any provider is available', () => {
vi.mocked(options.getOption).mockReturnValueOnce('test-api-key');
-
+
const result = manager.isAnyServiceAvailable();
-
+
expect(result).toBe(true);
});
it('should return false if no providers are available', () => {
vi.mocked(options.getOption).mockReturnValue('');
-
+
const result = manager.isAnyServiceAvailable();
-
+
expect(result).toBe(false);
});
});
@@ -232,18 +236,18 @@ describe('AIServiceManager', () => {
.mockReturnValueOnce('openai-key')
.mockReturnValueOnce('anthropic-key')
.mockReturnValueOnce(''); // No Ollama URL
-
+
const result = manager.getAvailableProviders();
-
+
expect(result).toEqual(['openai', 'anthropic']);
});
it('should include already created services', () => {
// Mock that OpenAI has API key configured
vi.mocked(options.getOption).mockReturnValueOnce('test-api-key');
-
+
const result = manager.getAvailableProviders();
-
+
expect(result).toContain('openai');
});
});
@@ -255,23 +259,23 @@ describe('AIServiceManager', () => {
it('should generate completion with selected provider', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce('openai');
-
+
// Mock the getAvailableProviders to include openai
vi.mocked(options.getOption)
.mockReturnValueOnce('test-api-key') // for availability check
.mockReturnValueOnce('') // for anthropic
.mockReturnValueOnce('') // for ollama
.mockReturnValueOnce('test-api-key'); // for service creation
-
+
const mockResponse = { content: 'Hello response' };
const mockService = {
isAvailable: vi.fn().mockReturnValue(true),
generateChatCompletion: vi.fn().mockResolvedValueOnce(mockResponse)
};
vi.mocked(OpenAIService).mockImplementationOnce(() => mockService as any);
-
+
const result = await manager.generateChatCompletion(messages);
-
+
expect(result).toBe(mockResponse);
expect(mockService.generateChatCompletion).toHaveBeenCalledWith(messages, {});
});
@@ -283,28 +287,28 @@ describe('AIServiceManager', () => {
modelId: 'gpt-4',
fullIdentifier: 'openai:gpt-4'
});
-
+
// Mock the getAvailableProviders to include openai
vi.mocked(options.getOption)
.mockReturnValueOnce('test-api-key') // for availability check
.mockReturnValueOnce('') // for anthropic
.mockReturnValueOnce('') // for ollama
.mockReturnValueOnce('test-api-key'); // for service creation
-
+
const mockResponse = { content: 'Hello response' };
const mockService = {
isAvailable: vi.fn().mockReturnValue(true),
generateChatCompletion: vi.fn().mockResolvedValueOnce(mockResponse)
};
vi.mocked(OpenAIService).mockImplementationOnce(() => mockService as any);
-
- const result = await manager.generateChatCompletion(messages, {
- model: 'openai:gpt-4'
+
+ const result = await manager.generateChatCompletion(messages, {
+ model: 'openai:gpt-4'
});
-
+
expect(result).toBe(mockResponse);
expect(mockService.generateChatCompletion).toHaveBeenCalledWith(
- messages,
+ messages,
{ model: 'gpt-4' }
);
});
@@ -317,7 +321,7 @@ describe('AIServiceManager', () => {
it('should throw error if no provider selected', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce(null);
-
+
await expect(manager.generateChatCompletion(messages)).rejects.toThrow(
'No AI provider is selected'
);
@@ -330,13 +334,13 @@ describe('AIServiceManager', () => {
modelId: 'claude-3',
fullIdentifier: 'anthropic:claude-3'
});
-
+
// Mock that openai is available
vi.mocked(options.getOption)
.mockReturnValueOnce('test-api-key') // for availability check
.mockReturnValueOnce('') // for anthropic
.mockReturnValueOnce(''); // for ollama
-
+
await expect(
manager.generateChatCompletion(messages, { model: 'anthropic:claude-3' })
).rejects.toThrow(
@@ -348,9 +352,9 @@ describe('AIServiceManager', () => {
describe('getAIEnabledAsync', () => {
it('should return AI enabled status', async () => {
vi.mocked(configHelpers.isAIEnabled).mockResolvedValueOnce(true);
-
+
const result = await manager.getAIEnabledAsync();
-
+
expect(result).toBe(true);
expect(configHelpers.isAIEnabled).toHaveBeenCalled();
});
@@ -359,9 +363,9 @@ describe('AIServiceManager', () => {
describe('getAIEnabled', () => {
it('should return AI enabled status synchronously', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(true);
-
+
const result = manager.getAIEnabled();
-
+
expect(result).toBe(true);
expect(options.getOptionBool).toHaveBeenCalledWith('aiEnabled');
});
@@ -370,17 +374,17 @@ describe('AIServiceManager', () => {
describe('initialize', () => {
it('should initialize if AI is enabled', async () => {
vi.mocked(configHelpers.isAIEnabled).mockResolvedValueOnce(true);
-
+
await manager.initialize();
-
+
expect(configHelpers.isAIEnabled).toHaveBeenCalled();
});
it('should not initialize if AI is disabled', async () => {
vi.mocked(configHelpers.isAIEnabled).mockResolvedValueOnce(false);
-
+
await manager.initialize();
-
+
expect(configHelpers.isAIEnabled).toHaveBeenCalled();
});
});
@@ -388,36 +392,36 @@ describe('AIServiceManager', () => {
describe('getService', () => {
it('should return service for specified provider', async () => {
vi.mocked(options.getOption).mockReturnValueOnce('test-api-key');
-
+
const mockService = {
isAvailable: vi.fn().mockReturnValue(true),
generateChatCompletion: vi.fn()
};
vi.mocked(OpenAIService).mockImplementationOnce(() => mockService as any);
-
+
const result = await manager.getService('openai');
-
+
expect(result).toBe(mockService);
});
it('should return selected provider service if no provider specified', async () => {
vi.mocked(configHelpers.getSelectedProvider).mockResolvedValueOnce('anthropic');
vi.mocked(options.getOption).mockReturnValueOnce('test-api-key');
-
+
const mockService = {
isAvailable: vi.fn().mockReturnValue(true),
generateChatCompletion: vi.fn()
};
vi.mocked(AnthropicService).mockImplementationOnce(() => mockService as any);
-
+
const result = await manager.getService();
-
+
expect(result).toBe(mockService);
});
it('should throw error if specified provider not available', async () => {
vi.mocked(options.getOption).mockReturnValueOnce(''); // No API key
-
+
await expect(manager.getService('openai')).rejects.toThrow(
'Specified provider openai is not available'
);
@@ -427,17 +431,17 @@ describe('AIServiceManager', () => {
describe('getSelectedProvider', () => {
it('should return selected provider synchronously', () => {
vi.mocked(options.getOption).mockReturnValueOnce('anthropic');
-
+
const result = manager.getSelectedProvider();
-
+
expect(result).toBe('anthropic');
});
it('should return default provider if none selected', () => {
vi.mocked(options.getOption).mockReturnValueOnce('');
-
+
const result = manager.getSelectedProvider();
-
+
expect(result).toBe('openai');
});
});
@@ -446,18 +450,18 @@ describe('AIServiceManager', () => {
it('should return true if provider service is available', () => {
// Mock that OpenAI has API key configured
vi.mocked(options.getOption).mockReturnValueOnce('test-api-key');
-
+
const result = manager.isProviderAvailable('openai');
-
+
expect(result).toBe(true);
});
it('should return false if provider service not created', () => {
// Mock that OpenAI has no API key configured
vi.mocked(options.getOption).mockReturnValueOnce('');
-
+
const result = manager.isProviderAvailable('openai');
-
+
expect(result).toBe(false);
});
});
@@ -467,13 +471,13 @@ describe('AIServiceManager', () => {
// Since getProviderMetadata only returns metadata for the current active provider,
// and we don't have a current provider set, it should return null
const result = manager.getProviderMetadata('openai');
-
+
expect(result).toBeNull();
});
it('should return null for non-existing provider', () => {
const result = manager.getProviderMetadata('openai');
-
+
expect(result).toBeNull();
});
});
@@ -485,4 +489,4 @@ describe('AIServiceManager', () => {
expect(manager).toBeDefined();
});
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/llm/chat/rest_chat_service.spec.ts b/apps/server/src/services/llm/chat/rest_chat_service.spec.ts
index 61edd71ca8..03e52887dc 100644
--- a/apps/server/src/services/llm/chat/rest_chat_service.spec.ts
+++ b/apps/server/src/services/llm/chat/rest_chat_service.spec.ts
@@ -15,7 +15,11 @@ vi.mock('../../log.js', () => ({
vi.mock('../../options.js', () => ({
default: {
getOption: vi.fn(),
- getOptionBool: vi.fn()
+ getOptionBool: vi.fn(),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -66,14 +70,14 @@ describe('RestChatService', () => {
beforeEach(async () => {
vi.clearAllMocks();
-
+
// Get mocked modules
mockOptions = (await import('../../options.js')).default;
mockAiServiceManager = (await import('../ai_service_manager.js')).default;
mockChatStorageService = (await import('../chat_storage_service.js')).default;
-
+
restChatService = (await import('./rest_chat_service.js')).default;
-
+
// Setup mock request and response
mockReq = {
params: {},
@@ -81,7 +85,7 @@ describe('RestChatService', () => {
query: {},
method: 'POST'
};
-
+
mockRes = {
status: vi.fn().mockReturnThis(),
json: vi.fn().mockReturnThis(),
@@ -240,7 +244,7 @@ describe('RestChatService', () => {
it('should handle GET request with stream parameter', async () => {
mockReq.method = 'GET';
- mockReq.query = {
+ mockReq.query = {
stream: 'true',
useAdvancedContext: 'true',
showThinking: 'false'
@@ -419,4 +423,4 @@ describe('RestChatService', () => {
expect(mockChatStorageService.getChat).toHaveBeenCalledWith('chat-123');
});
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/llm/config/configuration_helpers.spec.ts b/apps/server/src/services/llm/config/configuration_helpers.spec.ts
index 82d9123019..7ea5c94203 100644
--- a/apps/server/src/services/llm/config/configuration_helpers.spec.ts
+++ b/apps/server/src/services/llm/config/configuration_helpers.spec.ts
@@ -18,7 +18,11 @@ vi.mock('./configuration_manager.js', () => ({
vi.mock('../../options.js', () => ({
default: {
getOption: vi.fn(),
- getOptionBool: vi.fn()
+ getOptionBool: vi.fn(),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -42,26 +46,26 @@ describe('configuration_helpers', () => {
describe('getSelectedProvider', () => {
it('should return the selected provider', async () => {
vi.mocked(optionService.getOption).mockReturnValueOnce('openai');
-
+
const result = await configHelpers.getSelectedProvider();
-
+
expect(result).toBe('openai');
expect(optionService.getOption).toHaveBeenCalledWith('aiSelectedProvider');
});
it('should return null if no provider is selected', async () => {
vi.mocked(optionService.getOption).mockReturnValueOnce('');
-
+
const result = await configHelpers.getSelectedProvider();
-
+
expect(result).toBeNull();
});
it('should handle invalid provider and return null', async () => {
vi.mocked(optionService.getOption).mockReturnValueOnce('invalid-provider');
-
+
const result = await configHelpers.getSelectedProvider();
-
+
expect(result).toBe('invalid-provider' as ProviderType);
});
});
@@ -69,7 +73,7 @@ describe('configuration_helpers', () => {
describe('parseModelIdentifier', () => {
it('should parse model identifier directly', () => {
const result = configHelpers.parseModelIdentifier('openai:gpt-4');
-
+
expect(result).toStrictEqual({
provider: 'openai',
modelId: 'gpt-4',
@@ -79,7 +83,7 @@ describe('configuration_helpers', () => {
it('should handle model without provider', () => {
const result = configHelpers.parseModelIdentifier('gpt-4');
-
+
expect(result).toStrictEqual({
modelId: 'gpt-4',
fullIdentifier: 'gpt-4'
@@ -88,7 +92,7 @@ describe('configuration_helpers', () => {
it('should handle empty model string', () => {
const result = configHelpers.parseModelIdentifier('');
-
+
expect(result).toStrictEqual({
modelId: '',
fullIdentifier: ''
@@ -98,7 +102,7 @@ describe('configuration_helpers', () => {
// Tests for special characters in model names
it('should handle model names with periods', () => {
const result = configHelpers.parseModelIdentifier('gpt-4.1-turbo-preview');
-
+
expect(result).toStrictEqual({
modelId: 'gpt-4.1-turbo-preview',
fullIdentifier: 'gpt-4.1-turbo-preview'
@@ -107,7 +111,7 @@ describe('configuration_helpers', () => {
it('should handle model names with provider prefix and periods', () => {
const result = configHelpers.parseModelIdentifier('openai:gpt-4.1-turbo');
-
+
expect(result).toStrictEqual({
provider: 'openai',
modelId: 'gpt-4.1-turbo',
@@ -117,7 +121,7 @@ describe('configuration_helpers', () => {
it('should handle model names with multiple colons', () => {
const result = configHelpers.parseModelIdentifier('custom:model:v1.2:latest');
-
+
expect(result).toStrictEqual({
modelId: 'custom:model:v1.2:latest',
fullIdentifier: 'custom:model:v1.2:latest'
@@ -126,7 +130,7 @@ describe('configuration_helpers', () => {
it('should handle Ollama model names with colons', () => {
const result = configHelpers.parseModelIdentifier('ollama:llama3.1:70b-instruct-q4_K_M');
-
+
expect(result).toStrictEqual({
provider: 'ollama',
modelId: 'llama3.1:70b-instruct-q4_K_M',
@@ -136,7 +140,7 @@ describe('configuration_helpers', () => {
it('should handle model names with slashes', () => {
const result = configHelpers.parseModelIdentifier('library/mistral:7b-instruct');
-
+
expect(result).toStrictEqual({
modelId: 'library/mistral:7b-instruct',
fullIdentifier: 'library/mistral:7b-instruct'
@@ -146,7 +150,7 @@ describe('configuration_helpers', () => {
it('should handle complex model names with special characters', () => {
const complexName = 'org/model-v1.2.3:tag@version#variant';
const result = configHelpers.parseModelIdentifier(complexName);
-
+
expect(result).toStrictEqual({
modelId: complexName,
fullIdentifier: complexName
@@ -155,7 +159,7 @@ describe('configuration_helpers', () => {
it('should handle model names with @ symbols', () => {
const result = configHelpers.parseModelIdentifier('claude-3.5-sonnet@20241022');
-
+
expect(result).toStrictEqual({
modelId: 'claude-3.5-sonnet@20241022',
fullIdentifier: 'claude-3.5-sonnet@20241022'
@@ -165,7 +169,7 @@ describe('configuration_helpers', () => {
it('should not modify or encode special characters', () => {
const specialChars = 'model!@#$%^&*()_+-=[]{}|;:\'",.<>?/~`';
const result = configHelpers.parseModelIdentifier(specialChars);
-
+
expect(result).toStrictEqual({
modelId: specialChars,
fullIdentifier: specialChars
@@ -176,7 +180,7 @@ describe('configuration_helpers', () => {
describe('createModelConfig', () => {
it('should create model config directly', () => {
const result = configHelpers.createModelConfig('gpt-4', 'openai');
-
+
expect(result).toStrictEqual({
provider: 'openai',
modelId: 'gpt-4',
@@ -186,7 +190,7 @@ describe('configuration_helpers', () => {
it('should handle model with provider prefix', () => {
const result = configHelpers.createModelConfig('openai:gpt-4');
-
+
expect(result).toStrictEqual({
provider: 'openai',
modelId: 'gpt-4',
@@ -196,7 +200,7 @@ describe('configuration_helpers', () => {
it('should fallback to openai provider when none specified', () => {
const result = configHelpers.createModelConfig('gpt-4');
-
+
expect(result).toStrictEqual({
provider: 'openai',
modelId: 'gpt-4',
@@ -208,27 +212,27 @@ describe('configuration_helpers', () => {
describe('getDefaultModelForProvider', () => {
it('should return default model for provider', async () => {
vi.mocked(optionService.getOption).mockReturnValue('gpt-4');
-
+
const result = await configHelpers.getDefaultModelForProvider('openai');
-
+
expect(result).toBe('gpt-4');
expect(optionService.getOption).toHaveBeenCalledWith('openaiDefaultModel');
});
it('should return undefined if no default model', async () => {
vi.mocked(optionService.getOption).mockReturnValue('');
-
+
const result = await configHelpers.getDefaultModelForProvider('anthropic');
-
+
expect(result).toBeUndefined();
expect(optionService.getOption).toHaveBeenCalledWith('anthropicDefaultModel');
});
it('should handle ollama provider', async () => {
vi.mocked(optionService.getOption).mockReturnValue('llama2');
-
+
const result = await configHelpers.getDefaultModelForProvider('ollama');
-
+
expect(result).toBe('llama2');
expect(optionService.getOption).toHaveBeenCalledWith('ollamaDefaultModel');
});
@@ -237,27 +241,27 @@ describe('configuration_helpers', () => {
it('should handle OpenAI model names with periods', async () => {
const modelName = 'gpt-4.1-turbo-preview';
vi.mocked(optionService.getOption).mockReturnValue(modelName);
-
+
const result = await configHelpers.getDefaultModelForProvider('openai');
-
+
expect(result).toBe(modelName);
});
it('should handle Anthropic model names with periods and @ symbols', async () => {
const modelName = 'claude-3.5-sonnet@20241022';
vi.mocked(optionService.getOption).mockReturnValue(modelName);
-
+
const result = await configHelpers.getDefaultModelForProvider('anthropic');
-
+
expect(result).toBe(modelName);
});
it('should handle Ollama model names with colons and slashes', async () => {
const modelName = 'library/llama3.1:70b-instruct-q4_K_M';
vi.mocked(optionService.getOption).mockReturnValue(modelName);
-
+
const result = await configHelpers.getDefaultModelForProvider('ollama');
-
+
expect(result).toBe(modelName);
});
});
@@ -268,9 +272,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // openaiApiKey
.mockReturnValueOnce('https://api.openai.com') // openaiBaseUrl
.mockReturnValueOnce('gpt-4'); // openaiDefaultModel
-
+
const result = await configHelpers.getProviderSettings('openai');
-
+
expect(result).toStrictEqual({
apiKey: 'test-key',
baseUrl: 'https://api.openai.com',
@@ -283,9 +287,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('anthropic-key') // anthropicApiKey
.mockReturnValueOnce('https://api.anthropic.com') // anthropicBaseUrl
.mockReturnValueOnce('claude-3'); // anthropicDefaultModel
-
+
const result = await configHelpers.getProviderSettings('anthropic');
-
+
expect(result).toStrictEqual({
apiKey: 'anthropic-key',
baseUrl: 'https://api.anthropic.com',
@@ -297,9 +301,9 @@ describe('configuration_helpers', () => {
vi.mocked(optionService.getOption)
.mockReturnValueOnce('http://localhost:11434') // ollamaBaseUrl
.mockReturnValueOnce('llama2'); // ollamaDefaultModel
-
+
const result = await configHelpers.getProviderSettings('ollama');
-
+
expect(result).toStrictEqual({
baseUrl: 'http://localhost:11434',
defaultModel: 'llama2'
@@ -308,7 +312,7 @@ describe('configuration_helpers', () => {
it('should return empty object for unknown provider', async () => {
const result = await configHelpers.getProviderSettings('unknown' as ProviderType);
-
+
expect(result).toStrictEqual({});
});
});
@@ -316,18 +320,18 @@ describe('configuration_helpers', () => {
describe('isAIEnabled', () => {
it('should return true if AI is enabled', async () => {
vi.mocked(optionService.getOptionBool).mockReturnValue(true);
-
+
const result = await configHelpers.isAIEnabled();
-
+
expect(result).toBe(true);
expect(optionService.getOptionBool).toHaveBeenCalledWith('aiEnabled');
});
it('should return false if AI is disabled', async () => {
vi.mocked(optionService.getOptionBool).mockReturnValue(false);
-
+
const result = await configHelpers.isAIEnabled();
-
+
expect(result).toBe(false);
expect(optionService.getOptionBool).toHaveBeenCalledWith('aiEnabled');
});
@@ -339,9 +343,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // openaiApiKey
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.isProviderConfigured('openai');
-
+
expect(result).toBe(true);
});
@@ -350,9 +354,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('') // openaiApiKey (empty)
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.isProviderConfigured('openai');
-
+
expect(result).toBe(false);
});
@@ -361,9 +365,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('anthropic-key') // anthropicApiKey
.mockReturnValueOnce('') // anthropicBaseUrl
.mockReturnValueOnce(''); // anthropicDefaultModel
-
+
const result = await configHelpers.isProviderConfigured('anthropic');
-
+
expect(result).toBe(true);
});
@@ -371,15 +375,15 @@ describe('configuration_helpers', () => {
vi.mocked(optionService.getOption)
.mockReturnValueOnce('http://localhost:11434') // ollamaBaseUrl
.mockReturnValueOnce(''); // ollamaDefaultModel
-
+
const result = await configHelpers.isProviderConfigured('ollama');
-
+
expect(result).toBe(true);
});
it('should return false for unknown provider', async () => {
const result = await configHelpers.isProviderConfigured('unknown' as ProviderType);
-
+
expect(result).toBe(false);
});
});
@@ -391,17 +395,17 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // openaiApiKey
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.getAvailableSelectedProvider();
-
+
expect(result).toBe('openai');
});
it('should return null if no provider selected', async () => {
vi.mocked(optionService.getOption).mockReturnValueOnce('');
-
+
const result = await configHelpers.getAvailableSelectedProvider();
-
+
expect(result).toBeNull();
});
@@ -411,9 +415,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('') // openaiApiKey (empty)
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.getAvailableSelectedProvider();
-
+
expect(result).toBeNull();
});
});
@@ -427,9 +431,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // openaiApiKey
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce('gpt-4'); // openaiDefaultModel
-
+
const result = await configHelpers.validateConfiguration();
-
+
expect(result).toStrictEqual({
isValid: true,
errors: [],
@@ -439,9 +443,9 @@ describe('configuration_helpers', () => {
it('should return warning when AI is disabled', async () => {
vi.mocked(optionService.getOptionBool).mockReturnValue(false);
-
+
const result = await configHelpers.validateConfiguration();
-
+
expect(result).toStrictEqual({
isValid: true,
errors: [],
@@ -452,9 +456,9 @@ describe('configuration_helpers', () => {
it('should return error when no provider selected', async () => {
vi.mocked(optionService.getOptionBool).mockReturnValue(true);
vi.mocked(optionService.getOption).mockReturnValue(''); // no aiSelectedProvider
-
+
const result = await configHelpers.validateConfiguration();
-
+
expect(result).toStrictEqual({
isValid: false,
errors: ['No AI provider selected'],
@@ -469,9 +473,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('') // openaiApiKey (empty)
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.validateConfiguration();
-
+
expect(result).toStrictEqual({
isValid: true,
errors: [],
@@ -495,9 +499,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // openaiApiKey
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.getValidModelConfig('openai');
-
+
expect(result).toStrictEqual({
model: modelName,
provider: 'openai'
@@ -511,9 +515,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('anthropic-key') // anthropicApiKey
.mockReturnValueOnce('') // anthropicBaseUrl
.mockReturnValueOnce(''); // anthropicDefaultModel
-
+
const result = await configHelpers.getValidModelConfig('anthropic');
-
+
expect(result).toStrictEqual({
model: modelName,
provider: 'anthropic'
@@ -526,9 +530,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce(modelName) // ollamaDefaultModel
.mockReturnValueOnce('http://localhost:11434') // ollamaBaseUrl
.mockReturnValueOnce(''); // ollamaDefaultModel
-
+
const result = await configHelpers.getValidModelConfig('ollama');
-
+
expect(result).toStrictEqual({
model: modelName,
provider: 'ollama'
@@ -545,9 +549,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // openaiApiKey
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.getSelectedModelConfig();
-
+
expect(result).toStrictEqual({
model: modelName,
provider: 'openai'
@@ -562,9 +566,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // openaiApiKey
.mockReturnValueOnce('') // openaiBaseUrl
.mockReturnValueOnce(''); // openaiDefaultModel
-
+
const result = await configHelpers.getSelectedModelConfig();
-
+
expect(result).toStrictEqual({
model: modelName,
provider: 'openai'
@@ -578,9 +582,9 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce(modelName) // ollamaDefaultModel
.mockReturnValueOnce('http://localhost:11434') // ollamaBaseUrl
.mockReturnValueOnce(''); // ollamaDefaultModel
-
+
const result = await configHelpers.getSelectedModelConfig();
-
+
expect(result).toStrictEqual({
model: modelName,
provider: 'ollama'
@@ -595,13 +599,13 @@ describe('configuration_helpers', () => {
.mockReturnValueOnce('test-key') // anthropicApiKey
.mockReturnValueOnce('') // anthropicBaseUrl
.mockReturnValueOnce(''); // anthropicDefaultModel
-
+
const result = await configHelpers.getSelectedModelConfig();
-
+
expect(result).toStrictEqual({
model: modelName,
provider: 'anthropic'
});
});
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/llm/providers/anthropic_service.spec.ts b/apps/server/src/services/llm/providers/anthropic_service.spec.ts
index 47266fd198..365b529f46 100644
--- a/apps/server/src/services/llm/providers/anthropic_service.spec.ts
+++ b/apps/server/src/services/llm/providers/anthropic_service.spec.ts
@@ -10,7 +10,11 @@ import { PROVIDER_CONSTANTS } from '../constants/provider_constants.js';
vi.mock('../../options.js', () => ({
default: {
getOption: vi.fn(),
- getOptionBool: vi.fn()
+ getOptionBool: vi.fn(),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -79,7 +83,7 @@ describe('AnthropicService', () => {
beforeEach(() => {
vi.clearAllMocks();
-
+
// Get the mocked Anthropic instance before creating the service
const AnthropicMock = vi.mocked(Anthropic);
mockAnthropicInstance = {
@@ -122,9 +126,9 @@ describe('AnthropicService', () => {
})
}
};
-
+
AnthropicMock.mockImplementation(() => mockAnthropicInstance);
-
+
service = new AnthropicService();
});
@@ -144,26 +148,26 @@ describe('AnthropicService', () => {
it('should return true when AI is enabled and API key exists', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(true); // AI enabled
vi.mocked(options.getOption).mockReturnValueOnce('test-api-key'); // API key
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(true);
});
it('should return false when AI is disabled', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(false); // AI disabled
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(false);
});
it('should return false when no API key', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(true); // AI enabled
vi.mocked(options.getOption).mockReturnValueOnce(''); // No API key
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(false);
});
});
@@ -190,9 +194,9 @@ describe('AnthropicService', () => {
stream: false
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result).toEqual({
text: 'Hello! How can I help you today?',
provider: 'Anthropic',
@@ -214,11 +218,11 @@ describe('AnthropicService', () => {
stream: false
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
const createSpy = vi.spyOn(mockAnthropicInstance.messages, 'create');
-
+
await service.generateChatCompletion(messages);
-
+
const calledParams = createSpy.mock.calls[0][0] as any;
expect(calledParams.messages).toEqual([
{ role: 'user', content: 'Hello' }
@@ -235,12 +239,12 @@ describe('AnthropicService', () => {
onChunk: vi.fn()
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
const result = await service.generateChatCompletion(messages);
-
+
// Wait for chunks to be processed
await new Promise(resolve => setTimeout(resolve, 100));
-
+
// Check that the result exists (streaming logic is complex, so we just verify basic structure)
expect(result).toBeDefined();
expect(result).toHaveProperty('text');
@@ -256,7 +260,7 @@ describe('AnthropicService', () => {
properties: {}
}
}];
-
+
const mockOptions = {
apiKey: 'test-key',
baseUrl: 'https://api.anthropic.com',
@@ -267,7 +271,7 @@ describe('AnthropicService', () => {
tool_choice: { type: 'any' }
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
// Mock response with tool use
mockAnthropicInstance.messages.create.mockResolvedValueOnce({
id: 'msg_123',
@@ -287,9 +291,9 @@ describe('AnthropicService', () => {
output_tokens: 25
}
});
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result).toEqual({
text: '',
provider: 'Anthropic',
@@ -312,7 +316,7 @@ describe('AnthropicService', () => {
it('should throw error if service not available', async () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(false); // AI disabled
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'Anthropic service is not available'
);
@@ -326,12 +330,12 @@ describe('AnthropicService', () => {
stream: false
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
// Mock API error
mockAnthropicInstance.messages.create.mockRejectedValueOnce(
new Error('API Error: Invalid API key')
);
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'API Error: Invalid API key'
);
@@ -347,15 +351,15 @@ describe('AnthropicService', () => {
stream: false
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
// Spy on Anthropic constructor
const AnthropicMock = vi.mocked(Anthropic);
AnthropicMock.mockClear();
-
+
// Create new service to trigger client creation
const newService = new AnthropicService();
await newService.generateChatCompletion(messages);
-
+
expect(AnthropicMock).toHaveBeenCalledWith({
apiKey: 'test-key',
baseURL: 'https://api.anthropic.com',
@@ -374,15 +378,15 @@ describe('AnthropicService', () => {
stream: false
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
// Spy on Anthropic constructor
const AnthropicMock = vi.mocked(Anthropic);
AnthropicMock.mockClear();
-
+
// Create new service to trigger client creation
const newService = new AnthropicService();
await newService.generateChatCompletion(messages);
-
+
expect(AnthropicMock).toHaveBeenCalledWith({
apiKey: 'test-key',
baseURL: 'https://api.anthropic.com',
@@ -401,7 +405,7 @@ describe('AnthropicService', () => {
stream: false
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
// Mock response with mixed content
mockAnthropicInstance.messages.create.mockResolvedValueOnce({
id: 'msg_123',
@@ -420,9 +424,9 @@ describe('AnthropicService', () => {
output_tokens: 25
}
});
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result.text).toBe('Here is the result: The calculation is complete.');
expect(result.tool_calls).toHaveLength(1);
expect(result.tool_calls![0].function.name).toBe('calculate');
@@ -431,8 +435,8 @@ describe('AnthropicService', () => {
it('should handle tool results in messages', async () => {
const messagesWithToolResult: Message[] = [
{ role: 'user', content: 'Calculate 5 + 3' },
- {
- role: 'assistant',
+ {
+ role: 'assistant',
content: '',
tool_calls: [{
id: 'call_123',
@@ -440,13 +444,13 @@ describe('AnthropicService', () => {
function: { name: 'calculate', arguments: '{"x": 5, "y": 3}' }
}]
},
- {
- role: 'tool',
+ {
+ role: 'tool',
content: '8',
tool_call_id: 'call_123'
}
];
-
+
const mockOptions = {
apiKey: 'test-key',
baseUrl: 'https://api.anthropic.com',
@@ -454,11 +458,11 @@ describe('AnthropicService', () => {
stream: false
};
vi.mocked(providers.getAnthropicOptions).mockReturnValueOnce(mockOptions);
-
+
const createSpy = vi.spyOn(mockAnthropicInstance.messages, 'create');
-
+
await service.generateChatCompletion(messagesWithToolResult);
-
+
const formattedMessages = (createSpy.mock.calls[0][0] as any).messages;
expect(formattedMessages).toHaveLength(3);
expect(formattedMessages[2]).toEqual({
@@ -471,4 +475,4 @@ describe('AnthropicService', () => {
});
});
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/llm/providers/model_selection.spec.ts b/apps/server/src/services/llm/providers/model_selection.spec.ts
index c6fdfae1e9..916dcd92b9 100644
--- a/apps/server/src/services/llm/providers/model_selection.spec.ts
+++ b/apps/server/src/services/llm/providers/model_selection.spec.ts
@@ -10,7 +10,11 @@ import options from '../../options.js';
vi.mock('../../options.js', () => ({
default: {
getOption: vi.fn(),
- getOptionBool: vi.fn()
+ getOptionBool: vi.fn(),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -82,7 +86,7 @@ describe('LLM Model Selection with Special Characters', () => {
// Spy on getOpenAIOptions to verify model name is passed correctly
const getOpenAIOptionsSpy = vi.spyOn(providers, 'getOpenAIOptions');
-
+
try {
await service.generateChatCompletion([{ role: 'user', content: 'test' }], opts);
} catch (error) {
@@ -108,7 +112,7 @@ describe('LLM Model Selection with Special Characters', () => {
};
const getOpenAIOptionsSpy = vi.spyOn(providers, 'getOpenAIOptions');
-
+
try {
await service.generateChatCompletion([{ role: 'user', content: 'test' }], opts);
} catch (error) {
@@ -127,7 +131,7 @@ describe('LLM Model Selection with Special Characters', () => {
};
const getOpenAIOptionsSpy = vi.spyOn(providers, 'getOpenAIOptions');
-
+
const openaiOptions = providers.getOpenAIOptions(opts);
expect(openaiOptions.model).toBe(modelName);
});
@@ -153,7 +157,7 @@ describe('LLM Model Selection with Special Characters', () => {
});
const service = new OpenAIService();
-
+
// Access the private openai client through the service
const client = (service as any).getClient('test-key');
const createSpy = vi.spyOn(client.chat.completions, 'create');
@@ -213,7 +217,7 @@ describe('LLM Model Selection with Special Characters', () => {
});
const service = new AnthropicService();
-
+
// Access the private anthropic client
const client = (service as any).getClient('test-key');
const createSpy = vi.spyOn(client.messages, 'create');
@@ -278,7 +282,7 @@ describe('LLM Model Selection with Special Characters', () => {
const ollamaOptions = await providers.getOllamaOptions(opts);
expect(ollamaOptions.model).toBe(modelName);
-
+
// Also test with model specified in options
const optsWithModel: ChatCompletionOptions = {
model: 'another/model:v2.0@beta',
@@ -370,7 +374,7 @@ describe('LLM Model Selection with Special Characters', () => {
describe('Integration with REST API', () => {
it('should pass model names correctly through REST chat service', async () => {
const modelName = 'gpt-4.1-turbo-preview@latest';
-
+
// Mock the configuration helpers
vi.doMock('../config/configuration_helpers.js', () => ({
getSelectedModelConfig: vi.fn().mockResolvedValue({
@@ -382,8 +386,8 @@ describe('LLM Model Selection with Special Characters', () => {
const { getSelectedModelConfig } = await import('../config/configuration_helpers.js');
const config = await getSelectedModelConfig();
-
+
expect(config?.model).toBe(modelName);
});
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/llm/providers/ollama_service.spec.ts b/apps/server/src/services/llm/providers/ollama_service.spec.ts
index 5d03137fb4..e2bee52d2d 100644
--- a/apps/server/src/services/llm/providers/ollama_service.spec.ts
+++ b/apps/server/src/services/llm/providers/ollama_service.spec.ts
@@ -9,7 +9,11 @@ import { Ollama } from 'ollama';
vi.mock('../../options.js', () => ({
default: {
getOption: vi.fn(),
- getOptionBool: vi.fn()
+ getOptionBool: vi.fn(),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -134,7 +138,7 @@ describe('OllamaService', () => {
beforeEach(() => {
vi.clearAllMocks();
-
+
// Create the mock instance before creating the service
const OllamaMock = vi.mocked(Ollama);
mockOllamaInstance = {
@@ -191,11 +195,11 @@ describe('OllamaService', () => {
]
})
};
-
+
OllamaMock.mockImplementation(() => mockOllamaInstance);
-
+
service = new OllamaService();
-
+
// Replace the formatter with a mock after construction
(service as any).formatter = {
formatMessages: vi.fn().mockReturnValue([
@@ -231,26 +235,26 @@ describe('OllamaService', () => {
it('should return true when AI is enabled and base URL exists', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(true); // AI enabled
vi.mocked(options.getOption).mockReturnValueOnce('http://localhost:11434'); // Base URL
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(true);
});
it('should return false when AI is disabled', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(false); // AI disabled
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(false);
});
it('should return false when no base URL', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(true); // AI enabled
vi.mocked(options.getOption).mockReturnValueOnce(''); // No base URL
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(false);
});
});
@@ -275,9 +279,9 @@ describe('OllamaService', () => {
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result).toEqual({
text: 'Hello! How can I help you today?',
provider: 'ollama',
@@ -296,12 +300,12 @@ describe('OllamaService', () => {
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const result = await service.generateChatCompletion(messages);
-
+
// Wait for chunks to be processed
await new Promise(resolve => setTimeout(resolve, 100));
-
+
// For streaming, we expect a different response structure
expect(result).toBeDefined();
expect(result).toHaveProperty('text');
@@ -310,7 +314,7 @@ describe('OllamaService', () => {
it('should handle tools when enabled', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockTools = [{
name: 'test_tool',
description: 'Test tool',
@@ -320,7 +324,7 @@ describe('OllamaService', () => {
required: []
}
}];
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
@@ -329,18 +333,18 @@ describe('OllamaService', () => {
tools: mockTools
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
const chatSpy = vi.spyOn(mockOllamaInstance, 'chat');
-
+
await service.generateChatCompletion(messages);
-
+
const calledParams = chatSpy.mock.calls[0][0] as any;
expect(calledParams.tools).toEqual(mockTools);
});
it('should throw error if service not available', async () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(false); // AI disabled
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'Ollama service is not available'
);
@@ -350,14 +354,14 @@ describe('OllamaService', () => {
vi.mocked(options.getOption)
.mockReturnValueOnce('') // Empty base URL for ollamaBaseUrl
.mockReturnValue(''); // Ensure all subsequent calls return empty
-
+
const mockOptions = {
baseUrl: '',
model: 'llama2',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'Ollama service is not available'
);
@@ -365,19 +369,19 @@ describe('OllamaService', () => {
it('should handle API errors', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
// Mock API error
mockOllamaInstance.chat.mockRejectedValueOnce(
new Error('Connection refused')
);
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'Connection refused'
);
@@ -385,30 +389,30 @@ describe('OllamaService', () => {
it('should create client with custom fetch for debugging', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
// Spy on Ollama constructor
const OllamaMock = vi.mocked(Ollama);
OllamaMock.mockClear();
-
+
// Create new service to trigger client creation
const newService = new OllamaService();
-
+
// Replace the formatter with a mock for the new service
(newService as any).formatter = {
formatMessages: vi.fn().mockReturnValue([
{ role: 'user', content: 'Hello' }
])
};
-
+
await newService.generateChatCompletion(messages);
-
+
expect(OllamaMock).toHaveBeenCalledWith({
host: 'http://localhost:11434',
fetch: expect.any(Function)
@@ -417,7 +421,7 @@ describe('OllamaService', () => {
it('should handle tool execution feedback', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
@@ -426,7 +430,7 @@ describe('OllamaService', () => {
tools: [{ name: 'test_tool', description: 'Test', parameters: {} }]
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
// Mock response with tool call (arguments should be a string for Ollama)
mockOllamaInstance.chat.mockResolvedValueOnce({
message: {
@@ -442,9 +446,9 @@ describe('OllamaService', () => {
},
done: true
});
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result.tool_calls).toEqual([{
id: 'call_123',
type: 'function',
@@ -457,14 +461,14 @@ describe('OllamaService', () => {
it('should handle mixed text and tool content', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
// Mock response with both text and tool calls
mockOllamaInstance.chat.mockResolvedValueOnce({
message: {
@@ -480,30 +484,30 @@ describe('OllamaService', () => {
},
done: true
});
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result.text).toBe('Let me help you with that.');
expect(result.tool_calls).toHaveLength(1);
});
it('should format messages using the formatter', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
const formattedMessages = [{ role: 'user', content: 'Hello' }];
(service as any).formatter.formatMessages.mockReturnValueOnce(formattedMessages);
-
+
const chatSpy = vi.spyOn(mockOllamaInstance, 'chat');
-
+
await service.generateChatCompletion(messages);
-
+
expect((service as any).formatter.formatMessages).toHaveBeenCalled();
expect(chatSpy).toHaveBeenCalledWith(
expect.objectContaining({
@@ -514,23 +518,23 @@ describe('OllamaService', () => {
it('should handle network errors gracefully', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
// Mock network error
global.fetch = vi.fn().mockRejectedValueOnce(
new Error('Network error')
);
-
+
mockOllamaInstance.chat.mockRejectedValueOnce(
new Error('fetch failed')
);
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'fetch failed'
);
@@ -538,19 +542,19 @@ describe('OllamaService', () => {
it('should validate model availability', async () => {
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'nonexistent-model',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValueOnce(mockOptions);
-
+
// Mock model not found error
mockOllamaInstance.chat.mockRejectedValueOnce(
new Error('model "nonexistent-model" not found')
);
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'model "nonexistent-model" not found'
);
@@ -561,23 +565,23 @@ describe('OllamaService', () => {
it('should reuse existing client', async () => {
vi.mocked(options.getOptionBool).mockReturnValue(true);
vi.mocked(options.getOption).mockReturnValue('http://localhost:11434');
-
+
const mockOptions = {
baseUrl: 'http://localhost:11434',
model: 'llama2',
stream: false
};
vi.mocked(providers.getOllamaOptions).mockResolvedValue(mockOptions);
-
+
const OllamaMock = vi.mocked(Ollama);
OllamaMock.mockClear();
-
+
// Make two calls
await service.generateChatCompletion([{ role: 'user', content: 'Hello' }]);
await service.generateChatCompletion([{ role: 'user', content: 'Hi' }]);
-
+
// Should only create client once
expect(OllamaMock).toHaveBeenCalledTimes(1);
});
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/llm/providers/openai_service.spec.ts b/apps/server/src/services/llm/providers/openai_service.spec.ts
index 39544fabc6..8adb03d84f 100644
--- a/apps/server/src/services/llm/providers/openai_service.spec.ts
+++ b/apps/server/src/services/llm/providers/openai_service.spec.ts
@@ -2,13 +2,17 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import { OpenAIService } from './openai_service.js';
import options from '../../options.js';
import * as providers from './providers.js';
-import type { ChatCompletionOptions, Message } from '../ai_interface.js';
+import type { Message } from '../ai_interface.js';
// Mock dependencies
vi.mock('../../options.js', () => ({
default: {
getOption: vi.fn(),
- getOptionBool: vi.fn()
+ getOptionBool: vi.fn(),
+ getOptionInt: vi.fn(name => {
+ if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
+ return 0;
+ })
}
}));
@@ -53,17 +57,17 @@ describe('OpenAIService', () => {
describe('isAvailable', () => {
it('should return true when base checks pass', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(true); // AI enabled
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(true);
});
it('should return false when AI is disabled', () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(false); // AI disabled
-
+
const result = service.isAvailable();
-
+
expect(result).toBe(false);
});
});
@@ -89,7 +93,7 @@ describe('OpenAIService', () => {
enableTools: false
};
vi.mocked(providers.getOpenAIOptions).mockReturnValueOnce(mockOptions);
-
+
// Mock the getClient method to return our mock client
const mockCompletion = {
id: 'chatcmpl-123',
@@ -120,9 +124,9 @@ describe('OpenAIService', () => {
};
vi.spyOn(service as any, 'getClient').mockReturnValue(mockClient);
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result).toEqual({
text: 'Hello! How can I help you today?',
model: 'gpt-3.5-turbo',
@@ -144,7 +148,7 @@ describe('OpenAIService', () => {
stream: true
};
vi.mocked(providers.getOpenAIOptions).mockReturnValueOnce(mockOptions);
-
+
// Mock the streaming response
const mockStream = {
[Symbol.asyncIterator]: async function* () {
@@ -162,7 +166,7 @@ describe('OpenAIService', () => {
};
}
};
-
+
const mockClient = {
chat: {
completions: {
@@ -172,9 +176,9 @@ describe('OpenAIService', () => {
};
vi.spyOn(service as any, 'getClient').mockReturnValue(mockClient);
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result).toHaveProperty('stream');
expect(result.text).toBe('');
expect(result.model).toBe('gpt-3.5-turbo');
@@ -183,7 +187,7 @@ describe('OpenAIService', () => {
it('should throw error if service not available', async () => {
vi.mocked(options.getOptionBool).mockReturnValueOnce(false); // AI disabled
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'OpenAI service is not available'
);
@@ -197,7 +201,7 @@ describe('OpenAIService', () => {
stream: false
};
vi.mocked(providers.getOpenAIOptions).mockReturnValueOnce(mockOptions);
-
+
const mockClient = {
chat: {
completions: {
@@ -207,7 +211,7 @@ describe('OpenAIService', () => {
};
vi.spyOn(service as any, 'getClient').mockReturnValue(mockClient);
-
+
await expect(service.generateChatCompletion(messages)).rejects.toThrow(
'API Error: Invalid API key'
);
@@ -222,7 +226,7 @@ describe('OpenAIService', () => {
parameters: {}
}
}];
-
+
const mockOptions = {
apiKey: 'test-key',
baseUrl: 'https://api.openai.com/v1',
@@ -233,7 +237,7 @@ describe('OpenAIService', () => {
tool_choice: 'auto'
};
vi.mocked(providers.getOpenAIOptions).mockReturnValueOnce(mockOptions);
-
+
const mockCompletion = {
id: 'chatcmpl-123',
object: 'chat.completion',
@@ -263,9 +267,9 @@ describe('OpenAIService', () => {
};
vi.spyOn(service as any, 'getClient').mockReturnValue(mockClient);
-
+
await service.generateChatCompletion(messages);
-
+
const createCall = mockClient.chat.completions.create.mock.calls[0][0];
expect(createCall.tools).toEqual(mockTools);
expect(createCall.tool_choice).toBe('auto');
@@ -281,7 +285,7 @@ describe('OpenAIService', () => {
tools: [{ type: 'function' as const, function: { name: 'test', description: 'test' } }]
};
vi.mocked(providers.getOpenAIOptions).mockReturnValueOnce(mockOptions);
-
+
const mockCompletion = {
id: 'chatcmpl-123',
object: 'chat.completion',
@@ -319,9 +323,9 @@ describe('OpenAIService', () => {
};
vi.spyOn(service as any, 'getClient').mockReturnValue(mockClient);
-
+
const result = await service.generateChatCompletion(messages);
-
+
expect(result).toEqual({
text: '',
model: 'gpt-3.5-turbo',
@@ -342,4 +346,4 @@ describe('OpenAIService', () => {
});
});
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/llm/providers/stream_handler.spec.ts b/apps/server/src/services/llm/providers/stream_handler.spec.ts
index a3ed2da15b..550a69ab2a 100644
--- a/apps/server/src/services/llm/providers/stream_handler.spec.ts
+++ b/apps/server/src/services/llm/providers/stream_handler.spec.ts
@@ -1,6 +1,6 @@
-import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
+import { describe, it, expect, vi, beforeEach } from 'vitest';
import { StreamProcessor, createStreamHandler, processProviderStream, extractStreamStats, performProviderHealthCheck } from './stream_handler.js';
-import type { StreamProcessingOptions, StreamChunk, ProviderStreamOptions } from './stream_handler.js';
+import type { StreamProcessingOptions, StreamChunk } from './stream_handler.js';
// Mock the log module
vi.mock('../../log.js', () => ({
@@ -86,7 +86,7 @@ describe('StreamProcessor', () => {
it('should handle callback errors gracefully', async () => {
const errorCallback = vi.fn().mockRejectedValue(new Error('Callback error'));
-
+
// Should not throw
await expect(StreamProcessor.sendChunkToCallback(errorCallback, 'test', false, {}, 1))
.resolves.toBeUndefined();
@@ -127,7 +127,7 @@ describe('StreamProcessor', () => {
it('should handle final callback errors gracefully', async () => {
const errorCallback = vi.fn().mockRejectedValue(new Error('Final callback error'));
-
+
await expect(StreamProcessor.sendFinalCallback(errorCallback, 'test'))
.resolves.toBeUndefined();
});
@@ -297,8 +297,8 @@ describe('processProviderStream', () => {
it('should handle tool calls in stream', async () => {
const chunks = [
{ message: { content: 'Using tool...' } },
- {
- message: {
+ {
+ message: {
tool_calls: [
{ id: 'call_1', function: { name: 'calculator', arguments: '{"x": 5}' } }
]
@@ -573,8 +573,8 @@ describe('Streaming edge cases and concurrency', () => {
it('should handle mixed content and tool calls', async () => {
const chunks = [
{ message: { content: 'Let me calculate that...' } },
- {
- message: {
+ {
+ message: {
content: '',
tool_calls: [{ id: '1', function: { name: 'calc' } }]
}
@@ -599,4 +599,4 @@ describe('Streaming edge cases and concurrency', () => {
expect(result.completeText).toBe('Let me calculate that...The answer is 42.');
expect(result.toolCalls).toHaveLength(1);
});
-});
\ No newline at end of file
+});
diff --git a/apps/server/src/services/options_init.ts b/apps/server/src/services/options_init.ts
index 0908a05126..c6e0231c5d 100644
--- a/apps/server/src/services/options_init.ts
+++ b/apps/server/src/services/options_init.ts
@@ -159,7 +159,7 @@ const defaultOptions: DefaultOption[] = [
// Internationalization
{ name: "locale", value: "en", isSynced: true },
- { name: "formattingLocale", value: "en", isSynced: true },
+ { name: "formattingLocale", value: "", isSynced: true }, // no value means auto-detect
{ name: "firstDayOfWeek", value: "1", isSynced: true },
{ name: "firstWeekOfYear", value: "0", isSynced: true },
{ name: "minDaysInFirstWeek", value: "4", isSynced: true },
diff --git a/apps/server/src/services/protected_session.ts b/apps/server/src/services/protected_session.ts
index 57a163e186..d69d318d1b 100644
--- a/apps/server/src/services/protected_session.ts
+++ b/apps/server/src/services/protected_session.ts
@@ -1,9 +1,6 @@
"use strict";
-import log from "./log.js";
import dataEncryptionService from "./encryption/data_encryption.js";
-import options from "./options.js";
-import ws from "./ws.js";
let dataKey: Buffer | null = null;
@@ -15,11 +12,11 @@ function getDataKey() {
return dataKey;
}
-function resetDataKey() {
+export function resetDataKey() {
dataKey = null;
}
-function isProtectedSessionAvailable() {
+export function isProtectedSessionAvailable() {
return !!dataKey;
}
@@ -57,15 +54,8 @@ function touchProtectedSession() {
}
}
-function checkProtectedSessionExpiration() {
- const protectedSessionTimeout = options.getOptionInt("protectedSessionTimeout");
- if (isProtectedSessionAvailable() && lastProtectedSessionOperationDate && Date.now() - lastProtectedSessionOperationDate > protectedSessionTimeout * 1000) {
- resetDataKey();
-
- log.info("Expiring protected session");
-
- ws.reloadFrontend("leaving protected session");
- }
+export function getLastProtectedSessionOperationDate() {
+ return lastProtectedSessionOperationDate;
}
export default {
@@ -75,6 +65,5 @@ export default {
encrypt,
decrypt,
decryptString,
- touchProtectedSession,
- checkProtectedSessionExpiration
+ touchProtectedSession
};
diff --git a/apps/server/src/services/scheduler.ts b/apps/server/src/services/scheduler.ts
index 8035074427..e58ef07b42 100644
--- a/apps/server/src/services/scheduler.ts
+++ b/apps/server/src/services/scheduler.ts
@@ -4,9 +4,11 @@ import sqlInit from "./sql_init.js";
import config from "./config.js";
import log from "./log.js";
import attributeService from "../services/attributes.js";
-import protectedSessionService from "../services/protected_session.js";
import hiddenSubtreeService from "./hidden_subtree.js";
import type BNote from "../becca/entities/bnote.js";
+import options from "./options.js";
+import { getLastProtectedSessionOperationDate, isProtectedSessionAvailable, resetDataKey } from "./protected_session.js";
+import ws from "./ws.js";
function getRunAtHours(note: BNote): number[] {
try {
@@ -64,5 +66,15 @@ sqlInit.dbReady.then(() => {
);
}
- setInterval(() => protectedSessionService.checkProtectedSessionExpiration(), 30000);
+ setInterval(() => checkProtectedSessionExpiration(), 1);
});
+
+function checkProtectedSessionExpiration() {
+ const protectedSessionTimeout = options.getOptionInt("protectedSessionTimeout");
+ const lastProtectedSessionOperationDate = getLastProtectedSessionOperationDate();
+ if (isProtectedSessionAvailable() && lastProtectedSessionOperationDate && Date.now() - lastProtectedSessionOperationDate > protectedSessionTimeout * 1000) {
+ resetDataKey();
+ log.info("Expiring protected session");
+ ws.reloadFrontend("leaving protected session");
+ }
+}
diff --git a/apps/server/src/share/routes.spec.ts b/apps/server/src/share/routes.spec.ts
index 987d1b12ab..e99ecdf701 100644
--- a/apps/server/src/share/routes.spec.ts
+++ b/apps/server/src/share/routes.spec.ts
@@ -9,6 +9,7 @@ describe("Share API test", () => {
let cannotSetHeadersCount = 0;
beforeAll(async () => {
+ vi.useFakeTimers();
const buildApp = (await import("../app.js")).default;
app = await buildApp();
app.use((err: unknown, req: Request, res: Response, next: NextFunction) => {
diff --git a/apps/server/src/test/becca_easy_mocking.ts b/apps/server/src/test/becca_easy_mocking.ts
index 6df198a5a4..c3d6b62933 100644
--- a/apps/server/src/test/becca_easy_mocking.ts
+++ b/apps/server/src/test/becca_easy_mocking.ts
@@ -1,6 +1,7 @@
import utils from "../services/utils.js";
import BNote from "../becca/entities/bnote.js";
import BAttribute from "../becca/entities/battribute.js";
+import BBranch from "../becca/entities/bbranch.js";
type AttributeDefinitions = { [key in `#${string}`]: string; };
type RelationDefinitions = { [key in `~${string}`]: string; };
@@ -9,6 +10,7 @@ interface NoteDefinition extends AttributeDefinitions, RelationDefinitions {
id?: string | undefined;
title?: string;
content?: string;
+ children?: NoteDefinition[];
}
/**
@@ -51,6 +53,18 @@ export function buildNote(noteDef: NoteDefinition) {
note.getContent = () => noteDef.content!;
}
+ // Handle children
+ if (noteDef.children) {
+ for (const childDef of noteDef.children) {
+ const childNote = buildNote(childDef);
+ new BBranch({
+ noteId: childNote.noteId,
+ parentNoteId: note.noteId,
+ branchId: `${note.noteId}_${childNote.noteId}`
+ });
+ }
+ }
+
// Handle labels and relations.
let position = 0;
for (const [ key, value ] of Object.entries(noteDef)) {
diff --git a/apps/server/vite.config.mts b/apps/server/vite.config.mts
index e9d88fcfa7..991d370bc5 100644
--- a/apps/server/vite.config.mts
+++ b/apps/server/vite.config.mts
@@ -27,6 +27,6 @@ export default defineConfig(() => ({
provider: 'v8' as const,
reporter: [ "text", "html" ]
},
- pool: "threads"
+ pool: "vmForks"
},
}));
diff --git a/docs/README-ZH_CN.md b/docs/README-ZH_CN.md
index 9a16b92743..2efbd4f83d 100644
--- a/docs/README-ZH_CN.md
+++ b/docs/README-ZH_CN.md
@@ -1,96 +1,136 @@
# Trilium Notes
- 
-
-
-[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [](https://hosted.weblate.org/engage/trilium/)
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
-[英文](../README.md) | [简体中文](./README-ZH_CN.md) | [正体中文](./README-ZH_TW.md) | [俄文](./README-ru.md) | [日文](./README-ja.md) | [意大利文](./README-it.md) | [西班牙文](./README-es.md)
+[英文](./README.md) | [简体中文](./docs/README-ZH_CN.md) |
+[正体中文](./docs/README-ZH_TW.md) | [俄文](./docs/README-ru.md) |
+[日文](./docs/README-ja.md) | [意大利文](./docs/README-it.md) |
+[西班牙文](./docs/README-es.md)
Trilium Notes 是一款免费且开源、跨平台的阶层式笔记应用程序,专注于建立大型个人知识库。
-想快速了解,请查看[屏幕截图](https://triliumnext.github.io/Docs/Wiki/screenshot-tour):
+想快速了解,请查看[screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour):
-
-
-## 🎁 功能
-
-* 笔记可组织成任意深度的树形结构。单一笔记可放在树中的多个位置(参见[笔记复制/克隆](https://triliumnext.github.io/Docs/Wiki/cloning-notes))。
-* 丰富的所见即所得(WYSIWYG)笔记编辑器,支持表格、图片与[数学公式](https://triliumnext.github.io/Docs/Wiki/text-notes),并具备 Markdown 的[自动格式](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)。
-* 支持编辑[程序代码笔记](https://triliumnext.github.io/Docs/Wiki/code-notes),包含语法高亮。
-* 快速、轻松地在笔记间[导航](https://triliumnext.github.io/Docs/Wiki/note-navigation)、全文搜索,以及[笔记聚焦(hoisting)](https://triliumnext.github.io/Docs/Wiki/note-hoisting)。
-* 无缝的[笔记版本管理](https://triliumnext.github.io/Docs/Wiki/note-revisions)。
-* 笔记[属性](https://triliumnext.github.io/Docs/Wiki/attributes)可用于笔记的组织、查询与高级[脚本](https://triliumnext.github.io/Docs/Wiki/scripts)。
-* 接口提供英文、德文、西班牙文、法文、罗马尼亚文与中文(简体与正体)。
-* 直接整合 [OpenID 与 TOTP](./User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md) 以实现更安全的登录。
-* 与自架的同步服务器进行[同步](https://triliumnext.github.io/Docs/Wiki/synchronization)
- * 另有[第三方同步服务器托管服务](https://trilium.cc/paid-hosting)。
-* 将笔记[分享](https://triliumnext.github.io/Docs/Wiki/sharing)(公开发布)到互联网。
-* 以每则笔记为粒度的强大[笔记加密](https://triliumnext.github.io/Docs/Wiki/protected-notes)。
-* 手绘/示意图:基于 [Excalidraw](https://excalidraw.com/)(笔记类型为「canvas」)。
-* 用于可视化笔记及其关系的[关系图](https://triliumnext.github.io/Docs/Wiki/relation-map)与[链接图](https://triliumnext.github.io/Docs/Wiki/link-map)。
-* 思维导图:基于 [Mind Elixir](https://docs.mind-elixir.com/)。
-* 具有定位钉与 GPX 轨迹的[地图](./User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)。
-* [脚本](https://triliumnext.github.io/Docs/Wiki/scripts)——参见[高级展示](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)。
-* 用于自动化的 [REST API](https://triliumnext.github.io/Docs/Wiki/etapi)。
-* 在可用性与效能上均可良好扩展,支持超过 100,000 笔笔记。
-* 为手机与平板优化的[移动前端](https://triliumnext.github.io/Docs/Wiki/mobile-frontend)。
-* 内置[深色主题](https://triliumnext.github.io/Docs/Wiki/themes),并支持用户主题。
-* [Evernote 导入](https://triliumnext.github.io/Docs/Wiki/evernote-import)与 [Markdown 导入与导出](https://triliumnext.github.io/Docs/Wiki/markdown)。
-* 用于快速保存网页内容的 [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper)。
-* 可自定义的 UI(侧边栏按钮、用户自定义小组件等)。
-* [度量指标(Metrics)](./User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md),并附有 [Grafana 仪表板](./User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)。
-
-✨ 想要更多 TriliumNext 的主题、脚本、外挂与资源,亦可参考以下第三方资源/社群:
-
-- [awesome-trilium](https://github.com/Nriver/awesome-trilium)(第三方主题、脚本、外挂与更多)。
-- [TriliumRocks!](https://trilium.rocks/)(教学、指南等等)。
-
-## ⚠️ 为什么是 TriliumNext?
-
-[原本的 Trilium 项目目前处于维护模式](https://github.com/zadam/trilium/issues/4620)。
-
-### 从 Trilium 迁移?
-
-从既有的 zadam/Trilium 例项迁移到 TriliumNext/Notes 不需要特别的迁移步骤。只要[照一般方式安装 TriliumNext/Notes](#-安装),它就会直接使用你现有的数据库。
-
-版本至多至 [v0.90.4](https://github.com/TriliumNext/Notes/releases/tag/v0.90.4) 与 zadam/trilium 最新版本 [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7) 兼容。之后的 TriliumNext 版本已提升同步版本号(与上述不再兼容)。
+
## 📖 文件
-我们目前正将文件搬移至应用程序内(在 Trilium 中按 `F1`)。在完成前,文件中可能会有缺漏。如果你想在 GitHub 上查看,也可以直接查看[使用说明](./User%20Guide/User%20Guide/)。
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
-以下提供一些快速连结,方便你导览文件:
-- [服务器安装](./User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
- - [Docker 安装](./User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
-- [升级 TriliumNext](./User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
-- [基本概念与功能-笔记](./User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
-- [个人知识库的模式](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
-在我们完成重新整理文件架构之前,你也可以[查看旧版文件](https://triliumnext.github.io/Docs)。
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 功能
+
+* 笔记可组织成任意深度的树形结构。单一笔记可放在树中的多个位置(参见
+ [笔记复制/克隆](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* 丰富的所见即所得(WYSIWYG)笔记编辑器,支持表格、图片与[数学公式](https://triliumnext.github.io/Docs/Wiki/text-notes),并具备
+ Markdown
+ 的[自动格式](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* 支持编辑[程序代码笔记](https://triliumnext.github.io/Docs/Wiki/code-notes), ,包含语法高亮
+* 快速、轻松地在笔记间[导航](https://triliumnext.github.io/Docs/Wiki/note-navigation)、全文搜索,以及[笔记聚焦(hoisting)](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* 无缝的[笔记版本管理](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* 笔记[属性](https://triliumnext.github.io/Docs/Wiki/attributes)可用于笔记的组织、查询与高级[脚本](https://triliumnext.github.io/Docs/Wiki/scripts)
+* 接口提供英文、德文、西班牙文、法文、罗马尼亚文与中文(简体与正体)
+* 直接整合[OpenID 与
+ TOTP](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ 以实现更安全的登录
+* 与自架的同步服务器进行[同步](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ * 另有[3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* 将笔记[分享](https://triliumnext.github.io/Docs/Wiki/sharing)(公开发布)到互联网
+* 以每则笔记为粒度的强大 [笔记加密](https://triliumnext.github.io/Docs/Wiki/protected-notes)
+* 手绘/示意图:基于 [Excalidraw](https://excalidraw.com/) (笔记类型为「canvas」)
+* 用于可视化笔记及其关系的[关系图](https://triliumnext.github.io/Docs/Wiki/relation-map)与[链接图](https://triliumnext.github.io/Docs/Wiki/link-map)
+* 思维导图:基于[Mind Elixir](https://docs.mind-elixir.com/)
+* 具有定位钉与 GPX 轨迹的[地图](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)
+* [脚本](https://triliumnext.github.io/Docs/Wiki/scripts) - 参见
+ [高级展示](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* 用于自动化的 [REST API](https://triliumnext.github.io/Docs/Wiki/etapi)
+* 在可用性与效能上均可良好扩展,支持超过 100,000 笔笔记
+* 为手机与平板优化的[移动前端](https://triliumnext.github.io/Docs/Wiki/mobile-frontend)
+* 内置[深色主题](https://triliumnext.github.io/Docs/Wiki/themes)
+* [Evernote 导入](https://triliumnext.github.io/Docs/Wiki/evernote-import)与
+ [Markdown 导入与导出](https://triliumnext.github.io/Docs/Wiki/markdown)
+* 用于快速保存网页内容的 [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper)
+* 可自定义的 UI(侧边栏按钮、用户自定义小组件等)
+* [度量指标(Metrics)](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md),并附有
+ [Grafana
+ 仪表板](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ 想要更多 TriliumNext 的主题、脚本、外挂与资源,亦可参考以下第三方资源/社群:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) (第三方主题、脚本、外挂与更多)。
+- [TriliumRocks!](https://trilium.rocks/) (教学、指南等等)。
+
+## ⚠️ 为什么是 TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️ 从 Trilium 迁移?
+
+从既有的 zadam/Trilium 例项迁移到 TriliumNext/Notes 不需要特别的迁移步骤。只要[照一般方式安装
+TriliumNext/Notes](#-installation)(#-安装),它就会直接使用你现有的数据库。
+
+版本至多至 [v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) 与
+zadam/trilium 最新版本
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7)兼容。之后的
+TriliumNext 版本已提升同步版本号(与上述不再兼容)。
## 💬 与我们交流
欢迎加入官方社群。我们很乐意听到你对功能、建议或问题的想法!
-- [Matrix](https://matrix.to/#/#triliumnext:matrix.org)(同步讨论)
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org)(同步讨论)
- `General` Matrix 房间也桥接到 [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
-- [GitHub Discussions](https://github.com/TriliumNext/Notes/discussions)(异步讨论)。
-- [GitHub Issues](https://github.com/TriliumNext/Notes/issues)(回报错误与提出功能需求)。
+- [GitHub
+ Discussions](https://github.com/TriliumNext/Trilium/discussions)(异步讨论)。
+- [GitHub Issues](https://github.com/TriliumNext/Trilium/issues)(回报错误与提出功能需求)。
## 🏗 安装
### Windows / macOS
-从[最新释出页面](https://github.com/TriliumNext/Trilium/releases/latest)下载你平台的二进制文件,解压缩后执行 `trilium` 可执行文件。
+从[最新释出页面](https://github.com/TriliumNext/Trilium/releases/latest)下载你平台的二进制文件,解压缩后执行
+`trilium` 可执行文件。
### Linux
如果你的发行版如下表所列,请使用该发行版的套件。
-[](https://repology.org/project/triliumnext/versions)
+[](https://repology.org/project/triliumnext/versions)
-你也可以从[最新释出页面](https://github.com/TriliumNext/Trilium/releases/latest)下载对应平台的二进制文件,解压缩后执行 `trilium` 可执行文件。
+你也可以从[最新释出页面](https://github.com/TriliumNext/Trilium/releases/latest)下载对应平台的二进制文件,解压缩后执行
+`trilium` 可执行文件。
TriliumNext 也提供 Flatpak,惟尚未发布到 FlatHub。
@@ -104,23 +144,30 @@ TriliumNext 也提供 Flatpak,惟尚未发布到 FlatHub。
若要在行动装置上使用 TriliumNext,你可以透过移动查看器存取服务器安装的移动版接口(见下)。
-如果你偏好原生 Android 应用,可使用 [TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid)。回报问题或缺少的功能,请至[其储存库](https://github.com/FliegendeWurst/TriliumDroid)。
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
-更多关于移动应用支持的信息,请见议题:https://github.com/TriliumNext/Notes/issues/72。
+如果你偏好原生 Android 应用,可使用
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid)。回报问题或缺少的功能,请至[其储存库](https://github.com/FliegendeWurst/TriliumDroid)。
### 服务器
-若要在你自己的服务器上安装 TriliumNext(包括从 [Docker Hub](https://hub.docker.com/r/triliumnext/trilium) 使用 Docker 部署),请遵循[服务器安装文件](https://triliumnext.github.io/Docs/Wiki/server-installation)。
+若要在你自己的服务器上安装 TriliumNext(包括从 [Docker
+Hub](https://hub.docker.com/r/triliumnext/trilium) 使用 Docker
+部署),请遵循[服务器安装文件](https://triliumnext.github.io/Docs/Wiki/server-installation)。
+
## 💻 贡献
### 翻译
-如果你是母语人士,欢迎前往我们的 [Weblate 页面](https://hosted.weblate.org/engage/trilium/)协助翻译 Trilium。
+如果你是母语人士,欢迎前往我们的 [Weblate 页面](https://hosted.weblate.org/engage/trilium/)协助翻译
+Trilium。
以下是目前的语言覆盖状态:
-[](https://hosted.weblate.org/engage/trilium/)
+[](https://hosted.weblate.org/engage/trilium/)
### 程序代码
@@ -139,40 +186,79 @@ pnpm run server:start
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
-pnpm run edit-docs:edit-docs
+pnpm edit-docs:edit-docs
```
### 建置桌面可执行文件
-
下载储存库,使用 `pnpm` 安装相依套件,然后为 Windows 建置桌面应用:
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
-pnpm --filter=desktop electron-forge:make --arch=x64 --platform=win32
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
```
-更多细节请参见[开发文件](https://github.com/TriliumNext/Notes/blob/develop/docs/Developer%20Guide/Developer%20Guide/Building%20and%20deployment/Running%20a%20development%20build.md)。
+更多细节请参见[开发文件](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide)。
-### 开发者文件
+### Developer Documentation
-请参阅[环境设定指南](./Developer%20Guide/Developer%20Guide/Environment%20Setup.md)。若有更多疑问,欢迎透过上方「与我们交流」章节所列连结与我们联系。
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
## 👏 鸣谢
-* [CKEditor 5](https://github.com/ckeditor/ckeditor5) —— 业界最佳的所见即所得编辑器,团队互动积极。
-* [FancyTree](https://github.com/mar10/fancytree) —— 功能非常丰富的树状元件,几乎没有对手。没有它,Trilium Notes 将不会是今天的样子。
-* [CodeMirror](https://github.com/codemirror/CodeMirror) —— 支持大量语言的程序代码编辑器。
-* [jsPlumb](https://github.com/jsplumb/jsplumb) —— 无可匹敌的视觉联机函式库。用于[关系图](https://triliumnext.github.io/Docs/Wiki/relation-map.html)与[连结图](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)。
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
## 🤝 支持我们
-目前尚无法直接赞助 TriliumNext 组织。不过你可以:
-- 透过赞助我们的开发者来支持 TriliumNext 的持续开发:[eliandoran](https://github.com/sponsors/eliandoran)(完整清单请见 [repository insights]([developers]([url](https://github.com/TriliumNext/Notes/graphs/contributors))))
-- 透过 [PayPal](https://paypal.me/za4am) 或比特币(bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2)向原始的 Trilium 开发者([zadam](https://github.com/sponsors/zadam))表达支持。
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
## 🔑 授权条款
-Copyright 2017–2025 zadam、Elian Doran 与其他贡献者。
+Copyright 2017–2025 zadam、Elian Doran 与其他贡献者
-本程序系自由软件:你可以在自由软件基金会(Free Software Foundation)所发布的 GNU Affero 通用公众授权条款(GNU AGPL)第 3 版或(由你选择)任何后续版本之条款下重新散布或修改本程序。
+本程序系自由软件:你可以在自由软件基金会(Free Software Foundation)所发布的 GNU Affero 通用公众授权条款(GNU
+AGPL)第 3 版或(由你选择)任何后续版本之条款下重新散布或修改本程序。
diff --git a/docs/README-ZH_TW.md b/docs/README-ZH_TW.md
index 53a86abd50..7fa895a16a 100644
--- a/docs/README-ZH_TW.md
+++ b/docs/README-ZH_TW.md
@@ -1,102 +1,134 @@
# Trilium Notes
- 
-
-
-[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [](https://hosted.weblate.org/engage/trilium/)
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
-[英文](../README.md) | [簡體中文](./README-ZH_CN.md) | [正體中文](./README-ZH_TW.md) | [俄文](./README-ru.md) | [日文](./README-ja.md) | [義大利文](./README-it.md) | [西班牙文](./README-es.md)
+[英文](./README.md) | [簡體中文](./docs/README-ZH_CN.md) |
+[正體中文](./docs/README-ZH_TW.md) | [俄文](./docs/README-ru.md) |
+[日文](./docs/README-ja.md) | [義大利文](./docs/README-it.md) |
+[西班牙文](./docs/README-es.md)
Trilium Notes 是一款免費且開源、跨平台的階層式筆記應用程式,專注於建立大型個人知識庫。
想快速了解,請查看[螢幕截圖](https://triliumnext.github.io/Docs/Wiki/screenshot-tour):
-
+
+
+## 📚 文件
+
+**可以在 [docs.triliumnotes.org](https://docs.triliumnotes.org/) 查看完整使用說明**
+
+我們的使用說明包含多種格式:
+- **線上文件**:可於 [docs.triliumnotes.org](https://docs.triliumnotes.org/) 查看完整使用說明
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### 快速連結
+- [上手指南](https://docs.triliumnotes.org/)
+- [安裝說明](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ 設定](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [升級
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [基礎觀念與功能](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
## 🎁 功能
-* 筆記可組織成任意深度的樹狀結構。單一筆記可放在樹中的多個位置(參見[筆記複製/克隆](https://triliumnext.github.io/Docs/Wiki/cloning-notes))。
-* 豐富的所見即所得(WYSIWYG)筆記編輯器,支援表格、圖片與[數學公式](https://triliumnext.github.io/Docs/Wiki/text-notes),並具備 Markdown 的[自動格式化](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)。
-* 支援編輯[程式碼筆記](https://triliumnext.github.io/Docs/Wiki/code-notes),包含語法高亮。
-* 快速、輕鬆地在筆記間[導航](https://triliumnext.github.io/Docs/Wiki/note-navigation)、全文搜尋,以及[筆記聚焦(hoisting)](https://triliumnext.github.io/Docs/Wiki/note-hoisting)。
-* 無縫的[筆記版本管理](https://triliumnext.github.io/Docs/Wiki/note-revisions)。
-* 筆記[屬性](https://triliumnext.github.io/Docs/Wiki/attributes)可用於筆記的組織、查詢與進階[腳本](https://triliumnext.github.io/Docs/Wiki/scripts)。
-* 介面提供英文、德文、西班牙文、法文、羅馬尼亞文與中文(簡體與正體)。
-* 直接整合 [OpenID 與 TOTP](./User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md) 以實現更安全的登入。
-* 與自架的同步伺服器進行[同步](https://triliumnext.github.io/Docs/Wiki/synchronization)
- * 另有[第三方同步伺服器託管服務](https://trilium.cc/paid-hosting)。
-* 將筆記[分享](https://triliumnext.github.io/Docs/Wiki/sharing)(公開發布)到網際網路。
-* 以每則筆記為粒度的強大[筆記加密](https://triliumnext.github.io/Docs/Wiki/protected-notes)。
-* 手繪/示意圖:基於 [Excalidraw](https://excalidraw.com/)(筆記類型為「canvas」)。
-* 用於視覺化筆記及其關係的[關聯圖](https://triliumnext.github.io/Docs/Wiki/relation-map)與[連結圖](https://triliumnext.github.io/Docs/Wiki/link-map)。
-* 心智圖:基於 [Mind Elixir](https://docs.mind-elixir.com/)。
-* 具有定位釘與 GPX 軌跡的[地圖](./User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)。
-* [腳本](https://triliumnext.github.io/Docs/Wiki/scripts)——參見[進階展示](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)。
-* 用於自動化的 [REST API](https://triliumnext.github.io/Docs/Wiki/etapi)。
-* 在可用性與效能上均可良好擴展,支援超過 100,000 筆筆記。
-* 為手機與平板最佳化的[行動前端](https://triliumnext.github.io/Docs/Wiki/mobile-frontend)。
-* 內建[深色主題](https://triliumnext.github.io/Docs/Wiki/themes),並支援使用者主題。
-* [Evernote 匯入](https://triliumnext.github.io/Docs/Wiki/evernote-import)與 [Markdown 匯入與匯出](https://triliumnext.github.io/Docs/Wiki/markdown)。
-* 用於快速保存網頁內容的 [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper)。
-* 可自訂的 UI(側邊欄按鈕、使用者自訂小工具等)。
-* [度量指標(Metrics)](./User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md),並附有 [Grafana 儀表板](./User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)。
+* 筆記可組織成任意深度的樹狀結構。單一筆記可放在樹中的多個位置(參見[筆記克隆](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* 豐富的所見即所得(WYSIWYG)筆記編輯器,支援表格、圖片與[數學公式](https://triliumnext.github.io/Docs/Wiki/text-notes),並具備
+ Markdown
+ 的[自動格式化](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* 支援編輯[程式碼筆記](https://triliumnext.github.io/Docs/Wiki/code-notes),包含語法高亮
+* 快速、輕鬆地在筆記間[導航](https://triliumnext.github.io/Docs/Wiki/note-navigation)、全文搜尋,以及[筆記聚焦(hoisting)](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* 無縫的[筆記版本管理](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* 筆記[屬性](https://triliumnext.github.io/Docs/Wiki/attributes)可用於筆記的組織、查詢與進階[腳本](https://triliumnext.github.io/Docs/Wiki/scripts)
+* 介面提供英文、德文、西班牙文、法文、羅馬尼亞文與中文(簡體與正體)
+* 直接[整合 OpenID 與
+ TOTP](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ 以實現更安全的登入
+* 與自架的同步伺服器進行[同步](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ * 另有[第三方同步伺服器託管服務](https://trilium.cc/paid-hosting)
+* 將筆記[分享](https://triliumnext.github.io/Docs/Wiki/sharing)(公開發布)到網際網路
+* 以每則筆記為粒度的強大[筆記加密](https://triliumnext.github.io/Docs/Wiki/protected-notes)
+* 手繪/示意圖:基於 [Excalidraw](https://excalidraw.com/)(筆記類型為「canvas」)
+* 用於視覺化筆記及其關係的[關聯圖](https://triliumnext.github.io/Docs/Wiki/relation-map)與[連結圖](https://triliumnext.github.io/Docs/Wiki/link-map)
+* 心智圖:基於 [Mind Elixir](https://docs.mind-elixir.com/)
+* 具有定位釘與 GPX 軌跡的[地圖](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)
+* [腳本](https://triliumnext.github.io/Docs/Wiki/scripts)——參見[進階展示](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* 用於自動化的 [REST API](https://triliumnext.github.io/Docs/Wiki/etapi)
+* 在可用性與效能上均可良好擴展,支援超過十萬筆筆記
+* 為手機與平板最佳化的[行動前端](https://triliumnext.github.io/Docs/Wiki/mobile-frontend)
+* 內建[深色主題](https://triliumnext.github.io/Docs/Wiki/themes),並支援自訂主題
+* [Evernote 匯入](https://triliumnext.github.io/Docs/Wiki/evernote-import)與
+ [Markdown 匯入與匯出](https://triliumnext.github.io/Docs/Wiki/markdown)
+* 用於快速保存網頁內容的 [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper)
+* 可自訂的 UI(側邊欄按鈕、使用者自訂小工具等)
+* [度量指標(Metrics)](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md),並附有
+ [Grafana
+ 儀表板](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
-✨ 想要更多 TriliumNext 的主題、腳本、外掛與資源,亦可參考以下第三方資源/社群:
+✨ 想要更多 Trilium Notes 的主題、腳本、外掛與資源,亦可參考以下第三方資源 / 社群:
- [awesome-trilium](https://github.com/Nriver/awesome-trilium)(第三方主題、腳本、外掛與更多)。
- [TriliumRocks!](https://trilium.rocks/)(教學、指南等等)。
-## ⚠️ 為什麼是 TriliumNext?
+## ❓為什麼是 TriliumNext?
-[原本的 Trilium 專案目前處於維護模式](https://github.com/zadam/trilium/issues/4620)。
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
-### 從 Trilium 遷移?
+### ⬆️從 Zadam/Trilium 遷移?
-從既有的 zadam/Trilium 例項遷移到 TriliumNext/Notes 不需要特別的遷移步驟。只要[照一般方式安裝 TriliumNext/Notes](#-安裝),它就會直接使用你現有的資料庫。
+從既有的 zadam/Trilium 例項遷移到 TriliumNext/Notes 不需要特別的遷移步驟。只要照一般方式[安裝
+TriliumNext/Notes](#-installation),它就會直接使用你現有的資料庫。
-版本至多至 [v0.90.4](https://github.com/TriliumNext/Notes/releases/tag/v0.90.4) 與 zadam/trilium 最新版本 [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7) 相容。之後的 TriliumNext 版本已提升同步版本號(與上述不再相容)。
-
-## 📖 文件
-
-我們目前正將文件搬移至應用程式內(在 Trilium 中按 `F1`)。在完成前,文件中可能會有缺漏。如果你想在 GitHub 上瀏覽,也可以直接查看[使用說明](./User%20Guide/User%20Guide/)。
-
-以下提供一些快速連結,方便你導覽文件:
-- [伺服器安裝](./User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
- - [Docker 安裝](./User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
-- [升級 TriliumNext](./User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
-- [基本概念與功能-筆記](./User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
-- [個人知識庫的模式](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
-
-在我們完成重新整理文件架構之前,你也可以[瀏覽舊版文件](https://triliumnext.github.io/Docs)。
+版本最高至 [v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) 與
+zadam/trilium 最新版本
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7) 相容。之後的
+TriliumNext 版本已提升同步版本號(與上述不再相容)。
## 💬 與我們交流
歡迎加入官方社群。我們很樂意聽到你對功能、建議或問題的想法!
-- [Matrix](https://matrix.to/#/#triliumnext:matrix.org)(同步討論)
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org)(同步討論)
- `General` Matrix 房間也橋接到 [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
-- [GitHub Discussions](https://github.com/TriliumNext/Notes/discussions)(非同步討論)。
-- [GitHub Issues](https://github.com/TriliumNext/Notes/issues)(回報錯誤與提出功能需求)。
+- [GitHub
+ Discussions](https://github.com/TriliumNext/Trilium/discussions)(非同步討論。)
+- [GitHub Issues](https://github.com/TriliumNext/Trilium/issues)(回報錯誤與提出功能需求。)
## 🏗 安裝
-### Windows / macOS
+### Windows / MacOS
-從[最新釋出頁面](https://github.com/TriliumNext/Trilium/releases/latest)下載你平台的二進位檔,解壓縮後執行 `trilium` 可執行檔。
+從[最新釋出頁面](https://github.com/TriliumNext/Trilium/releases/latest)下載您平台的二進位檔,解壓縮後執行
+`trilium` 可執行檔。
### Linux
-如果你的發行版如下表所列,請使用該發行版的套件。
+如果您的發行版如下表所列,請使用該發行版的套件。
-[](https://repology.org/project/triliumnext/versions)
+[](https://repology.org/project/triliumnext/versions)
-你也可以從[最新釋出頁面](https://github.com/TriliumNext/Trilium/releases/latest)下載對應平台的二進位檔,解壓縮後執行 `trilium` 可執行檔。
+您也可以從[最新釋出頁面](https://github.com/TriliumNext/Trilium/releases/latest)下載對應平台的二進位檔,解壓縮後執行
+`trilium` 可執行檔。
TriliumNext 也提供 Flatpak,惟尚未發佈到 FlatHub。
### 瀏覽器(任何作業系統)
-若你有(如下所述的)伺服器安裝,便可直接存取網頁介面(其與桌面應用幾乎相同)。
+若您有(如下所述的)伺服器安裝,便可直接存取網頁介面(其與桌面應用幾乎相同)。
目前僅支援(並實測)最新版的 Chrome 與 Firefox。
@@ -104,23 +136,32 @@ TriliumNext 也提供 Flatpak,惟尚未發佈到 FlatHub。
若要在行動裝置上使用 TriliumNext,你可以透過行動瀏覽器存取伺服器安裝的行動版介面(見下)。
-如果你偏好原生 Android 應用,可使用 [TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid)。回報問題或缺少的功能,請至[其儲存庫](https://github.com/FliegendeWurst/TriliumDroid)。
+更多關於行動應用支援的資訊,請見議題:https://github.com/TriliumNext/Trilium/issues/4962。
-更多關於行動應用支援的資訊,請見議題:https://github.com/TriliumNext/Notes/issues/72。
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
### 伺服器
-若要在你自己的伺服器上安裝 TriliumNext(包括從 [Docker Hub](https://hub.docker.com/r/triliumnext/trilium) 使用 Docker 部署),請遵循[伺服器安裝文件](https://triliumnext.github.io/Docs/Wiki/server-installation)。
+若要在您自己的伺服器上安裝 TriliumNext(包括從 [Docker
+Hub](https://hub.docker.com/r/triliumnext/trilium) 使用 Docker
+部署),請遵循[伺服器安裝文件](https://triliumnext.github.io/Docs/Wiki/server-installation)。
+
## 💻 貢獻
### 翻譯
-如果你是母語人士,歡迎前往我們的 [Weblate 頁面](https://hosted.weblate.org/engage/trilium/)協助翻譯 Trilium。
+如果您是母語人士,歡迎前往我們的 [Weblate 頁面](https://hosted.weblate.org/engage/trilium/)協助翻譯
+Trilium。
以下是目前的語言覆蓋狀態:
-[](https://hosted.weblate.org/engage/trilium/)
+[](https://hosted.weblate.org/engage/trilium/)
### 程式碼
@@ -143,36 +184,68 @@ pnpm edit-docs:edit-docs
```
### 建置桌面可執行檔
-
下載儲存庫,使用 `pnpm` 安裝相依套件,然後為 Windows 建置桌面應用:
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
-pnpm --filter=desktop electron-forge:make --arch=x64 --platform=win32
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
```
-更多細節請參見[開發文件](https://github.com/TriliumNext/Notes/blob/develop/docs/Developer%20Guide/Developer%20Guide/Building%20and%20deployment/Running%20a%20development%20build.md)。
+更多細節請參見[開發者文件](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide)。
### 開發者文件
-請參閱[環境設定指南](./Developer%20Guide/Developer%20Guide/Environment%20Setup.md)。若有更多疑問,歡迎透過上方「與我們交流」章節所列連結與我們聯繫。
+請參閱[環境設定指南](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)。若有更多疑問,歡迎透過上方「與我們交流」章節所列連結與我們聯繫。
## 👏 鳴謝
-* [CKEditor 5](https://github.com/ckeditor/ckeditor5) —— 業界最佳的所見即所得編輯器,團隊互動積極。
-* [FancyTree](https://github.com/mar10/fancytree) —— 功能非常豐富的樹狀元件,幾乎沒有對手。沒有它,Trilium Notes 將不會是今天的樣子。
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
* [CodeMirror](https://github.com/codemirror/CodeMirror) —— 支援大量語言的程式碼編輯器。
-* [jsPlumb](https://github.com/jsplumb/jsplumb) —— 無可匹敵的視覺連線函式庫。用於[關聯圖](https://triliumnext.github.io/Docs/Wiki/relation-map.html)與[連結圖](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)。
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) —— 功能非常豐富的樹狀元件,幾乎沒有對手。
+* [jsPlumb](https://github.com/jsplumb/jsplumb) ——
+ 視覺連線函式庫。用於[關聯圖](https://triliumnext.github.io/Docs/Wiki/relation-map.html)與[連結圖](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
## 🤝 支援我們
-目前尚無法直接贊助 TriliumNext 組織。不過你可以:
-- 透過贊助我們的開發者來支持 TriliumNext 的持續開發:[eliandoran](https://github.com/sponsors/eliandoran)(完整清單請見 [repository insights]([developers]([url](https://github.com/TriliumNext/Notes/graphs/contributors))))
-- 透過 [PayPal](https://paypal.me/za4am) 或比特幣(bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2)向原始的 Trilium 開發者([zadam](https://github.com/sponsors/zadam))表達支持。
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
## 🔑 授權條款
-Copyright 2017–2025 zadam、Elian Doran 與其他貢獻者。
+Copyright 2017–2025 zadam、Elian Doran 與其他貢獻者
-本程式係自由軟體:你可以在自由軟體基金會(Free Software Foundation)所發佈的 GNU Affero 通用公眾授權條款(GNU AGPL)第 3 版或(由你選擇)任何後續版本之條款下重新散布或修改本程式。
+本程式係自由軟體:您可以在自由軟體基金會(Free Software Foundation)所發佈的 GNU Affero 通用公眾授權條款(GNU
+AGPL)第 3 版或(由你選擇)任何後續版本之條款下重新散布或修改本程式。
diff --git a/docs/README-ar.md b/docs/README-ar.md
new file mode 100644
index 0000000000..fe191757ab
--- /dev/null
+++ b/docs/README-ar.md
@@ -0,0 +1,314 @@
+# ملاحظات تريليوم
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚توثيق
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+يتوفر التوثيق لدينا بصيغ متعددة:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### روابط سريعة
+- [دليل البدء السريع](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁الميزات
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬تحدث معنا
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### لينكس
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### هاتف المحمول
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### الخادم
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 المساهمة
+
+### ترجمات
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### كود
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### التوثيق
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### توثيق المطور
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 اختصارات
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 الدعم
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 الترخيص
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-ca.md b/docs/README-ca.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-ca.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-cs.md b/docs/README-cs.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-cs.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-de.md b/docs/README-de.md
new file mode 100644
index 0000000000..459469fe91
--- /dev/null
+++ b/docs/README-de.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[Englisch](./README.md) | [Chinesisch (Vereinfacht)](./docs/README-ZH_CN.md) |
+[Chinesisch (Traditionell)](./docs/README-ZH_TW.md) |
+[Russisch](./docs/README-ru.md) | [Japanisch](./docs/README-ja.md) |
+[Italienisch](./docs/README-it.md) | [Spanisch](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Dokumentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Unsere Dokumentation ist verfügbar in mehreren Formaten:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### Migration von Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-el.md b/docs/README-el.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-el.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-es.md b/docs/README-es.md
index f8a01b06a4..348eb9d3e8 100644
--- a/docs/README-es.md
+++ b/docs/README-es.md
@@ -1,106 +1,314 @@
# Trilium Notes
-[English](../README.md) | [Chinese](./README-ZH_CN.md) | [Russian](./README-ru.md) | [Japanese](./README-ja.md) | [Italian](./README-it.md) | [Spanish](./README-es.md)
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
-Trilium Notes es una aplicación de toma de notas jerárquicas multi-plataforma y de código libre con un enfoque en la construcción de grandes bases de conocimiento personal.
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
-Vea estas [capturas de pantalla](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) para un vistazo rápido:
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
-
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
-## ⚠️ ¿Por qué usar TriliumNext?
+
-[El proyecto Trilium original está en modo de mantenimiento](https://github.com/zadam/trilium/issues/4620)
+## 📚 Documentation
-### ¿Cómo migrar desde Trilium?
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
-No hay pasos de migración especiales para migrar de una instancia de zadam/Trilium a una instancia de TriliumNext/Trilium. Simplemente actualice su instancia de Trilium a la última versión e [instale TriliumNext/Trilium como de costumbre](#-Instalación)
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
-## 💬 Discuta con nosotros
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
-Siéntase libre de unirse a nuestras conversaciones oficiales. ¡Nos encantaría escuchar de las características, sugerencias o problemas que pueda tener!
+## 🎁 Features
-- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (Para discusiones síncronas)
- - La sala `General` es replicada a [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
-- [Discusiones de GitHub](https://github.com/TriliumNext/Trilium/discussions) (Para discusiones asíncronas)
-- [Wiki](https://triliumnext.github.io/Docs/) (Para preguntas frecuentes y guías de usuario)
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
-## 🎁 Características
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
-- Las notas pueden ser acomodadas en un árbol de profundidad arbitraria. Una sola nota puede ser colocada en múltiples lugares del árbol (vea [clonar](https://triliumnext.github.io/Docs/Wiki/cloning-notes)
-- Edición de notas WYSIWYG enriquecida que incluye, por ejemplo, tablas, imágenes y [matemáticas](https://triliumnext.github.io/Docs/Wiki/text-notes) con [autoformato](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) markdown
-- Soporte para editar [notas con código fuente](https://triliumnext.github.io/Docs/Wiki/code-notes), incluyendo resaltado de sintaxis
-- Rápida y sencilla [navegación entre notas](https://triliumnext.github.io/Docs/Wiki/note-navigation), búsqueda de texto completo y [elevación de notas](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
-- [Versionado de notas](https://triliumnext.github.io/Docs/Wiki/note-revisions) sutil
-- Los [atributos](https://triliumnext.github.io/Docs/Wiki/attributes) de las notas pueden utilizarse para organización, realizar consultas y [scripts](https://triliumnext.github.io/Docs/Wiki/scripts) avanzados
-- [Sincronización](https://triliumnext.github.io/Docs/Wiki/synchronization) con servidor de sincronización propio
- - existe un [servicio de terceros para alojar el servidor de sincronización](https://trilium.cc/paid-hosting)
-- [Compartir](https://triliumnext.github.io/Docs/Wiki/sharing) (publicar) notas al Internet público
-- Fuerte [encriptación de notas](https://triliumnext.github.io/Docs/Wiki/protected-notes) con granularidad para cada nota
-- Esbozo de diagramas con Excalidraw incorporado (tipo de nota «canvas»)
-- [Mapas de relaciones]() y [mapas de enlaces](https://triliumnext.github.io/Docs/Wiki/link-map) para visualizar las notas y sus relaciones
-- [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - vea [casos de uso avanzados](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
-- [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) para automatización
-- Escala bien tanto en uso como en rendimiento a partir de 100,000 notas
-- [Interfaz móvil](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) optimizada para teléfonos inteligentes y tabletas
-- [Tema nocturno](https://triliumnext.github.io/Docs/Wiki/themes)
-- Importación y exportación de [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) y [Markdown](https://triliumnext.github.io/Docs/Wiki/markdown)
-- [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) para guardar fácilmente contenido web
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
-✨ Consulte los/las siguientes recursos/comunidades de terceros para obtener más información sobre complementos para TriliumNext:
+## ❓Why TriliumNext?
-- [awesome-trilium](https://github.com/Nriver/awesome-trilium) para temas, scripts, plugins y más de terceros.
-- [TriliumRocks!](https://trilium.rocks/) para tutoriales, guías y mucho más.
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
-## 🏗 Instalación
+### ⬆️Migrating from Zadam/Trilium?
-### Escritorio
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
-Para usar TriliumNext en su máquina de escritorio (Linux, MacOS y Windows) tiene algunas opciones:
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
-- Descargue la versión binaria para su plataforma desde la [página de lanzamientos](https://github.com/TriliumNext/Trilium/releases/latest), descomprima el paquete y ejecute el ejecutable `trilium`.
-- Acceda a TriliumNext a través de la interfaz web de una instalación de servidor (ver más abajo)
- - Actualmente solo las últimas versiones de Chrome y Firefox son compatibles (y están probadas).
-- (Próximamente) TriliumNext también se proporcionará como un Flatpak
+## 💬 Discuss with us
-### Móvil
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
-Para usar TriliumNext en un dispositivo móvil:
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
-- Utilice un navegador web móvil para acceder a la interfaz móvil de una instalación de servidor (ver más abajo)
-- El uso de una aplicación móvil aún no está soportado ([vea aquí](https://github.com/TriliumNext/Trilium/issues/72)) para seguir las mejoras móviles.
+## 🏗 Installation
-### Servidor
+### Windows / MacOS
-Para instalar TriliumNext en su servidor (incluyendo vía Docker desde [Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) siga la [documentación de instalación de servidor](https://triliumnext.github.io/Docs/Wiki/server-installation).
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
-## 📝 Documentación
+### Linux
-[Vea la Wiki para la lista completa de páginas de documentación.](https://triliumnext.github.io/Docs)
+If your distribution is listed in the table below, use your distribution's
+package.
-También puede leer [Patrones para una base de conocimiento personal](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) para obtener un poco de inspiración de como podría usar TriliumNext.
+[](https://repology.org/project/triliumnext/versions)
-## 💻 Contribuir
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
-Clone localmente y ejecute
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
```shell
-npm install
-npm run server:start
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
```
-## 👏 Reconocimientos
+### Documentation
-- [CKEditor 5](https://github.com/ckeditor/ckeditor5) - el mejor editor WYSIWYG en el mercado, equipo muy interactivo y atento
-- [FancyTree](https://github.com/mar10/fancytree) - biblioteca de árbol muy rica en funciones sin competencia real. Trilium Notes no sería lo mismo sin esta.
-- [CodeMirror](https://github.com/codemirror/CodeMirror) - editor de código con soporte para una gran cantidad de lenguajes
-- [jsPlumb](https://github.com/jsplumb/jsplumb) - biblioteca de conectividad visual sin competencia. Usado en [mapas de relación](https://triliumnext.github.io/Docs/Wiki/Relation-map) y [mapas de enlace](https://triliumnext.github.io/Docs/Wiki/Link-map)
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
-## 🤝 Soporte
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
-Puede apoyar al desarrollador original de Trilium usando GitHub Sponsors, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
-Apoyo para la organización TriliumNext será posible en un futuro próximo.
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
-## 🔑 Licencia
+### Developer Documentation
-Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de Affero GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o (a su elección) cualquier versión posterior.
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-fa.md b/docs/README-fa.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-fa.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-fi.md b/docs/README-fi.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-fi.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-fr.md b/docs/README-fr.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-fr.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-hr.md b/docs/README-hr.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-hr.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-hu.md b/docs/README-hu.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-hu.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-id.md b/docs/README-id.md
new file mode 100644
index 0000000000..8fa1b09625
--- /dev/null
+++ b/docs/README-id.md
@@ -0,0 +1,315 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes adalah aplikasi pencatatan hierarkis lintas platform yang gratis
+dan sumber terbuka dengan fokus untuk mengembangkan pengetahuan pribadi yang
+luas.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Dokumentasi
+
+**Kunjungi dokumentasi lengkap kami di
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Dokumentasi kami tersedia dalam berbagai format:
+- **Dokumentasi Online**: Telusuri dokumentasi lengkap di
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **Bantuan Dalam Aplikasi**: Tekan `F1` di dalam Trilium untuk mengakses
+ dokumentasi yang sama langsung di aplikasi
+- **GitHub**: Navigasi melalui [Panduan
+ Pengguna](./docs/User%20Guide/User%20Guide/) di repositori ini
+
+### Tautan Cepat
+- [Panduan Memulai](https://docs.triliumnotes.org/)
+- [Petunjuk
+ Instalasi](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Pengaturan
+ Docker](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-it.md b/docs/README-it.md
index 25c369abaa..c24005f3e4 100644
--- a/docs/README-it.md
+++ b/docs/README-it.md
@@ -1,93 +1,315 @@
# Trilium Notes
-[English](../README.md) | [Chinese](./README-ZH_CN.md) | [Russian](./README-ru.md) | [Japanese](./README-ja.md) | [Italian](./README-it.md) | [Spanish](./README-es.md)
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
-Trilium Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni.
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
-Vedi [fotografie](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) per una panoramica veloce:
+Trilium Notes è un'applicazione per appunti ad organizzazione gerarchica,
+studiata per la costruzione di archivi di conoscenza personali di grandi
+dimensioni.
-
+Vedi [fotografie](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) per
+una panoramica veloce:
-## ⚠️ Perchè TriliumNext?
-[Il progetto originale Trilium è in modalità di manutenzione](https://github.com/zadam/trilium/issues/4620)
+
-## 🗭 Discuti con noi
-Sentiti libero di unirti alle nostre discussioni ufficiali e alla nostra comunità. Siamo concentrati sullo sviluppo di Trilium e ci piacerebbe sapere quali funzioni, suggerimenti o eventuali problemi hai!
+## 📚 Documentazione
-- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (Per discussioni sincrone)
-- [Discussioni Github](https://github.com/TriliumNext/Trilium/discussions) (Per discussioni asincrone)
-- [Wiki](https://triliumnext.github.io/Docs/) (Per le domande più comuni e le guide per l'utente)
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
-Le due stanze linkate sopra sono connesse e contengono gli stessi messaggi, quindi puoi usare XMPP o Matrix da qualsiasi client tu preferisca, praticamente su qualsiasi piattaforma!
-### Comunità non ufficiali
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
-[Trilium Rocks](https://discord.gg/aqdX9mXX4r)
-## 🎁 Funzionalità
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
-* Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
-* Ricco editor visuale (WYSIWYG), con supporto -tra l'altro- per tabelle, immagini ed [espressioni matematiche](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support) e con [formattazione automatica](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) per markdown
-* Supporto per la modifica di [appunti con codice sorgente](https://triliumnext.github.io/Docs/Wiki/code-notes), con evidenziazione della sintassi
-* [Navigazione veloce](https://triliumnext.github.io/Docs/Wiki/note-navigation) tra gli appunti, ricerca testuale completa e [fissaggio degli appunti](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
-* Supporto integrato ed automatico per le [revisioni degli appunti](https://triliumnext.github.io/Docs/Wiki/note-revisions)
-* Gli [attributi](https://triliumnext.github.io/Docs/Wiki/attributes) degli appunti possono essere utilizzati per l'organizzazione, per l'interrogazione e per lo scripting avanzato (prorgrammazione).
-* [Sincronizzazione](https://triliumnext.github.io/Docs/Wiki/synchronization) con un server di sincronizzazione auto-ospitato
- * c'è un [servizio di terze parti per ospitare server di sincronizzazione](https://trilium.cc/paid-hosting)
-* [Condivisione](https://triliumnext.github.io/Docs/Wiki/sharing) (pubblicazione) di appunti sull'internet pubblico
-* Robusta [crittografia](https://triliumnext.github.io/Docs/Wiki/protected-notes) configurabile singolarmente per ogni appunto
-* Disegno di diagrammi con Excalidraw (tipo di appunto "canvas")
-* [Mappe relazionali](https://triliumnext.github.io/Docs/Wiki/relation-map) e [mappe di collegamenti](https://triliumnext.github.io/Docs/Wiki/link-map) per visualizzare gli appunti e le loro relazioni
-* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - vedi [Esempi avanzati](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
-* [API REST](https://triliumnext.github.io/Docs/Wiki/etapi) per l'automazione
-* Si adatta bene sia in termini di usabilità che di prestazioni fino ad oltre 100 000 appunti
-* Interfaccia utente ottimizzata per il [mobile](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) (smartphone e tablet)
-* [Tema Notturno](https://triliumnext.github.io/Docs/Wiki/themes)
-* Supporto per importazione ed esportazione da e per [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) e [Markdown import](https://triliumnext.github.io/Docs/Wiki/markdown)
-* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) per il salvataggio facile di contenuti web
+## 🎁 Features
-✨ Dai un'occhiata alle seguenti risorse di terze parti per scoprire altre bellezze legate a TriliumNext:
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
--[awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti.
-- [TriliumRocks!](https://trilium.rocks/) per tutorial, guide e molto altro.
-## 🏗 Rilasci
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
-Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazione web ospitata sul tuo server (Linux). La versione desktop per Mac OS è disponibile, ma [non è supportata](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support).
+## ❓Why TriliumNext?
-* Se vuoi usare Trilium sul tuo desktop, scarica il rilascio binario per la tua piattaforma dall'[ultimo rilascio](https://github.com/TriliumNext/Trilium/releases/latest), decomprimi l'archivio e avvia l'eseguibile ```trilium```.
-* Se vuoi installare Trilium su un server, segui [questa pagina](https://triliumnext.github.io/Docs/Wiki/server-installation).
- * Per ora solo Chrome e Firefox sono i browser supportati (testati).
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
-TriliumNext sarà fornito anche come Flatpak:
+### ⬆️Migrating from Zadam/Trilium?
-
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
-## 📝 Documentazione
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
-[Vedi la wiki per una lista completa delle pagine di documentazione.](https://triliumnext.github.io/Docs/)
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
-Puoi anche leggere ["Patterns of personal knowledge base"](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) per avere un'ispirazione su come potresti utilizzare Trilium.
## 💻 Contribuire
-Clona localmente ed esegui
+### Translations
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
```shell
-npm install
-npm run server:start
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
```
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
## 👏 Riconoscimenti
-* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - miglior editor visuale (WYSIWYG) sul mercato, squadra di sviluppo attenta e reattiva
-* [FancyTree](https://github.com/mar10/fancytree) - libreria per alberi molto ricca di funzionalità, senza pari. Trilium Notes non sarebbe lo stesso senza di essa.
-* [CodeMirror](https://github.com/codemirror/CodeMirror) - editor di codice con supporto per un'enorme quantità di linguaggi.
-* [jsPlumb](https://github.com/jsplumb/jsplumb) - libreria per la connettività visuale senza pari. Utilizzata per [mappe relazionali](https://triliumnext.github.io/Docs/Wiki/relation-map) e [mappe di collegamenti](https://triliumnext.github.io/Docs/Wiki/link-map).
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
## 🤝 Supporto
-Puoi sostenere lo sviluppatore originale di Trilium utilizzando gli sponsor di GitHub, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
-Il supporto all'organizzazione TriliumNext sarà possibile nel prossimo futuro.
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
## 🔑 Licenza
-Questo programma è software libero: è possibile redistribuirlo e/o modificarlo nei termini della GNU Affero General Public License come pubblicata dalla Free Software Foundation, sia la versione 3 della Licenza, o (a propria scelta) qualsiasi versione successiva.
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+Questo programma è software libero: è possibile redistribuirlo e/o modificarlo
+nei termini della GNU Affero General Public License come pubblicata dalla Free
+Software Foundation, sia la versione 3 della Licenza, o (a propria scelta)
+qualsiasi versione successiva.
diff --git a/docs/README-ja.md b/docs/README-ja.md
index bef53ec5e8..e6d048523f 100644
--- a/docs/README-ja.md
+++ b/docs/README-ja.md
@@ -1,73 +1,263 @@
# Trilium Notes
-[English](../README.md) | [Chinese](./README-ZH_CN.md) | [Russian](./README-ru.md) | [Japanese](./README-ja.md) | [Italian](./README-it.md) | [Spanish](./README-es.md)
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
-Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)をご覧ください:
+[英語](./README.md) | [中国語(簡体)](./docs/README-ZH_CN.md) |
+[中国語(繁体)](./docs/README-ZH_TW.md) | [ロシア語](./docs/README-ru.md) |
+[日本語](./docs/README-ja.md) | [イタリア語](./docs/README-it.md) |
+[スペイン語](./docs/README-es.md)
-
+Trilium Notes
+は、大規模な個人知識ベースの構築に重点を置いた、無料かつオープンソースのクロスプラットフォームの階層型ノート作成アプリケーションです。
-## 🎁 特徴
+概要については [スクリーンショット](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)
+を参照してください:
-* ノートは、任意の深さのツリーに配置できます。単一のノートをツリー内の複数の場所に配置できます ([cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes) を参照)
-* マークダウン[オートフォーマット](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)による、表、画像、[数学](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support)などの豊富な WYSIWYG ノート編集機能
-* シンタックスハイライトを含む[ソースコード付きノート](https://triliumnext.github.io/Docs/Wiki/code-notes)の編集をサポート
-* [ノート間のナビゲーション](https://triliumnext.github.io/Docs/Wiki/note-navigation)、全文検索、[ノートホイスト](https://triliumnext.github.io/Docs/Wiki/note-hoisting)が高速かつ簡単に行えます
-* シームレスな[ノートのバージョン管理](https://triliumnext.github.io/Docs/Wiki/note-revisions)
-* ノート[属性](https://triliumnext.github.io/Docs/Wiki/Attributes)は、ノート整理、クエリ、高度な[スクリプト](https://triliumnext.github.io/Docs/Wiki/scripts)に使用できます
-* 自己ホスト型同期サーバーとの[同期](https://triliumnext.github.io/Docs/Wiki/synchronization)
- * [同期サーバーをホストするサードパーティ・サービス](https://trilium.cc/paid-hosting)があります
-* 公開インターネットへのノートの[共有](https://triliumnext.github.io/Docs/Wiki/sharing)(公開)
-* ノートごとの粒度を持つ強力な[ノート暗号化](https://triliumnext.github.io/Docs/Wiki/protected-notes)
-* 組み込みの Excalidraw を使用した図のスケッチ (ノート タイプ"キャンバス")
-* ノートとその関係を可視化するための[関係図](https://triliumnext.github.io/Docs/Wiki/relation-map)と[リンクマップ](https://triliumnext.github.io/Docs/Wiki/link-map)
-* [スクリプティング](https://triliumnext.github.io/Docs/Wiki/scripts) - [高度なショーケース](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)を参照
+
+
+## 📚 ドキュメント
+
+**包括的なドキュメントは [docs.triliumnotes.org](https://docs.triliumnotes.org/) でご覧ください**
+
+当社のドキュメントは複数の形式でご利用いただけます:
+- **オンラインドキュメント**: [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+ で完全なドキュメントを参照してください
+- **アプリ内ヘルプ**: Trilium内で `F1` キーを押すと、アプリケーション内で同じドキュメントに直接アクセスできます
+- **GitHub**: このリポジトリの [ユーザーガイド](./docs/User%20Guide/User%20Guide/) を参照してください
+
+### クイックリンク
+- [スタートガイド](https://docs.triliumnotes.org/)
+- [インストール手順](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ のセットアップ](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [TriliumNext
+ のアップグレード](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [基本概念と機能](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [個人ナレッジベースのパターン](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 機能
+
+* ノートは任意の深さのツリーに配置できます。1つのノートをツリー内の複数の場所に配置できます([クローン](https://triliumnext.github.io/Docs/Wiki/cloning-notes)を参照)
+* 豊富な WYSIWYG ノートエディター 例:
+ 表、画像、[数式](https://triliumnext.github.io/Docs/Wiki/text-notes) とマークダウン
+ [自動フォーマット](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) など
+* 構文の強調表示を含む [ソースコード付きノート](https://triliumnext.github.io/Docs/Wiki/code-notes)
+ の編集をサポート
+* [ノート間のナビゲーション](https://triliumnext.github.io/Docs/Wiki/note-navigation)、全文検索、[ノートのホイスト](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+ が高速かつ簡単に行えます
+* シームレスな [ノートのバージョン管理](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* ノート[属性](https://triliumnext.github.io/Docs/Wiki/attributes) は、ノートの整理、クエリ、高度な
+ [スクリプト](https://triliumnext.github.io/Docs/Wiki/scripts) に使用できます
+* UI は英語、ドイツ語、スペイン語、フランス語、ルーマニア語、中国語(簡体字および繁体字)でご利用いただけます
+* より安全なログインのための直接的な
+ [OpenIDとTOTPの統合](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+* セルフホスト同期サーバーとの [同期](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ * [同期サーバーをホストするためのサードパーティサービス](https://trilium.cc/paid-hosting) があります
+* インターネット上でノートの [共有](https://triliumnext.github.io/Docs/Wiki/sharing)(公開)
+* ノートごとに調整可能で強力な
+ [ノート暗号化](https://triliumnext.github.io/Docs/Wiki/protected-notes)
+* [Excalidraw](https://excalidraw.com/) をベースにした図のスケッチ(ノートタイプ「キャンバス」)
+* ノートとそのリレーションを視覚化するための
+ [リレーションマップ](https://triliumnext.github.io/Docs/Wiki/relation-map) と
+ [リンクマップ](https://triliumnext.github.io/Docs/Wiki/link-map)
+* [Mind Elixir](https://docs.mind-elixir.com/) をベースとしたマインドマップ
+* 位置ピンと GPX トラック付きの
+ [ジオマップ](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)
+* [スクリプト](https://triliumnext.github.io/Docs/Wiki/scripts) -
+ [高度なショーケース](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) を参照
* 自動化のための [REST API](https://triliumnext.github.io/Docs/Wiki/etapi)
-* ユーザビリティとパフォーマンスの両方で 100 000 ノート以上に拡張可能
-* スマートフォンとタブレット向けのタッチ最適化[モバイルフロントエンド](https://triliumnext.github.io/Docs/Wiki/mobile-frontend)
-* [ナイトテーマ](https://triliumnext.github.io/Docs/Wiki/themes)
-* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) と [Markdown のインポートとエクスポート](https://triliumnext.github.io/Docs/Wiki/Markdown)
-* Web コンテンツを簡単に保存するための [Web クリッパー](https://triliumnext.github.io/Docs/Wiki/web-clipper)
+* 10万件以上のノートでも、使いやすさとパフォーマンスの両面に優れた拡張性を実現
+* スマートフォンとタブレット向けにタッチ操作に最適化された
+ [モバイルフロントエンド](https://triliumnext.github.io/Docs/Wiki/mobile-frontend)
+* 組み込みの [ダークテーマ](https://triliumnext.github.io/Docs/Wiki/themes)、ユーザーテーマのサポート
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) と
+ [Markdown のインポートとエクスポート](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper)
+ でWebコンテンツを簡単に保存
+* カスタマイズ可能な UI (サイドバー ボタン、ユーザー定義のウィジェットなど)
+* [メトリクス(Metrics)](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md)
+ と [Grafana
+ ダッシュボード](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
-サードパーティのテーマ、スクリプト、プラグインなどは、 [awesome-trilium](https://github.com/Nriver/awesome-trilium) をチェックしてください。
+✨ TriliumNext 関連のその他の情報については、次のサードパーティのリソース/コミュニティをご覧ください:
-## 🏗 ビルド
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium)
+ サードパーティのテーマ、スクリプト、プラグインなど。
+- [TriliumRocks!](https://trilium.rocks/) ではチュートリアルやガイドなど、その他多数。
-Trilium は、デスクトップアプリケーション(Linux、Windows)またはサーバー上でホストされるウェブアプリケーション(Linux)として提供されます。 Mac OS のデスクトップビルドも利用可能ですが、 [unsupported](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support) となっています。
+## ❓なぜTriliumNext なのか?
-* デスクトップで Trilium を使用したい場合は、 [latest release](https://github.com/TriliumNext/Trilium/releases/latest) からお使いのプラットフォームのバイナリリリースをダウンロードし、パッケージを解凍して ``trilium`` の実行ファイルを実行してください。
-* サーバーに Trilium をインストールする場合は、[このページ](https://triliumnext.github.io/Docs/Wiki/server-installation)に従ってください。
- * 現在、対応(動作確認)しているブラウザは、最近の Chrome と Firefox のみです。
+オリジナルの Trilium 開発者 ([Zadam](https://github.com/zadam))
+は、https://github.com/TriliumNext にあるコミュニティプロジェクトに Trilium リポジトリを快く提供してくれました
-Trilium は Flatpak としても提供されます:
+### ⬆️Zadam/Trilium から移行しますか?
-[ ](https://flathub.org/apps/details/com.github.zadam.trilium)
+zadam/Trilium インスタンスから TriliumNext/Trilium インスタンスへの移行には特別な手順はありません。通常通り
+[TriliumNext/Triliumをインストール](#-installation) するだけで、既存のデータベースが使用されます。
-## 📝 ドキュメント
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4)
+までのバージョンは、最新の zadam/trilium バージョン
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7)
+と互換性があります。それ以降のバージョンの TriliumNext/Trilium では同期バージョンがインクリメントされるため、直接移行することはできません。
-[ドキュメントページの全リストはwikiをご覧ください。](https://triliumnext.github.io/Docs/)
+## 💬 私たちと議論しましょう
-また、[個人的な知識基盤のパターン](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)を読むと、 Trilium の使い方のヒントを得ることができます。
+ぜひ公式の会話にご参加ください。機能に関するご意見、ご提案、問題など、ぜひお聞かせください!
-## 💻 コントリビュート
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (同期ディスカッション用)
+ - `General`マトリックスルームも [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+ にブリッジされています
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions)
+ (非同期ディスカッション用)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues)
+ (バグレポートや機能リクエスト用)
-または、ローカルにクローンして実行
+## 🏗 インストール
+### Windows / MacOS
+
+[最新リリース ページ](https://github.com/TriliumNext/Trilium/releases/latest)
+からプラットフォーム用のバイナリ リリースをダウンロードし、パッケージを解凍して `trilium` 実行可能ファイルを実行します。
+
+### Linux
+
+ディストリビューションが以下の表に記載されている場合は、ディストリビューションのパッケージを使用してください。
+
+[](https://repology.org/project/triliumnext/versions)
+
+[最新リリース ページ](https://github.com/TriliumNext/Trilium/releases/latest)
+からプラットフォーム用のバイナリ リリースをダウンロードし、パッケージを解凍して `trilium` 実行可能ファイルを実行することもできます。
+
+TriliumNext は Flatpak としても提供されていますが、FlatHub ではまだ公開されていません。
+
+### ブラウザ(どのOSでも)
+
+サーバーインストール (下記参照) を使用する場合は、Web インターフェイス (デスクトップアプリとほぼ同じ) に直接アクセスできます。
+
+現在、Chrome と Firefox の最新バージョンのみがサポート (およびテスト) されています。
+
+### モバイル
+
+モバイルデバイスで TriliumNext を使用するには、モバイル Web
+ブラウザーを使用して、サーバーインストールのモバイルインターフェイスにアクセスできます (以下を参照)。
+
+モバイルアプリのサポートの詳細については、issue https://github.com/TriliumNext/Trilium/issues/4962
+を参照してください。
+
+ネイティブAndroidアプリをご希望の場合は、[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid)
+をご利用いただけます。バグや不足している機能は [リポジトリ](https://github.com/FliegendeWurst/TriliumDroid)
+でご報告ください。注:TriliumDroidを使用する場合は、TriliumとTriliumDroidの同期バージョンが一致している必要があるため、サーバーインストールで自動更新を無効にすることをお勧めします(下記参照)。
+
+### サーバー
+
+独自のサーバーに TriliumNext をインストールするには
+([Dockerhub](https://hub.docker.com/r/triliumnext/trilium) から Docker
+経由でも含む)、[サーバーのインストール
+ドキュメント](https://triliumnext.github.io/Docs/Wiki/server-installation) に従ってください。
+
+
+## 💻 貢献する
+
+### 翻訳
+
+ネイティブスピーカーの方は、[Weblate ページ](https://hosted.weblate.org/engage/trilium/)
+にアクセスして、Trilium の翻訳にご協力ください。
+
+これまでにカバーされている言語は次のとおりです:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### コード
+
+リポジトリをダウンロードし、`pnpm` を使用して依存関係をインストールしてから、サーバーを実行します (http://localhost:8080
+で利用可能):
```shell
-npm install
-npm run server:start
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
```
-## 📢 シャウトアウト
+### ドキュメント
-* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市場で最高の WYSIWYG エディター、非常にインタラクティブで聞き上手なチーム
-* [FancyTree](https://github.com/mar10/fancytree) - 真の競争相手がいない、非常に機能豊富なツリーライブラリです。 Trilium Notes は、これなしでは成り立たないでしょう。
-* [CodeMirror](https://github.com/codemirror/CodeMirror) - 膨大な数の言語をサポートするコードエディタ
-* [jsPlumb](https://github.com/jsplumb/jsplumb) - 競合のないビジュアルコネクティビティライブラリです。[関係図](https://triliumnext.github.io/Docs/Wiki/relation-map)、[リンク図](https://triliumnext.github.io/Docs/Wiki/link-map)で使用。
+リポジトリをダウンロードし、`pnpm` を使用して依存関係をインストールし、ドキュメントを編集するために必要な環境を実行します:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### 実行ファイルの構築
+リポジトリをダウンロードし、`pnpm` を使用して依存関係をインストールし、Windows 用のデスクトップアプリをビルドします:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+詳細については、[開発ドキュメント](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide)
+を参照してください。
+
+### 開発者向けドキュメント
+
+詳細については、[ドキュメントガイド](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+をご覧ください。ご質問がございましたら、上記の「私たちと議論しましょう」セクションに記載されているリンクからお気軽にお問い合わせください。
+
+## 👏 シャウトアウト
+
+* [zadam](https://github.com/zadam) アプリケーションのオリジナルのコンセプトと実装に対して感謝します。
+* [Sarah Hussein](https://github.com/Sarah-Hussein) アプリケーションアイコンをデザイン。
+* [nriver](https://github.com/nriver) 国際化への取り組み。
+* [Thomas Frei](https://github.com/thfrei) Canvasへのオリジナルな取り組み。
+* [antoniotejada](https://github.com/nriver) オリジナルの構文ハイライトウィジェット。
+* [Dosu](https://dosu.dev/) GitHub の問題やディスカッションに対する自動応答を提供してくれました。
+* [Tabler Icons](https://tabler.io/icons) システムトレイアイコン。
+
+Trilium は、その基盤となる技術なしには実現できませんでした:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) -
+ テキストノートを補完するビジュアルエディタ。プレミアム機能を提供していただき、感謝いたします。
+* [CodeMirror](https://github.com/codemirror/CodeMirror) -
+ 膨大な数の言語をサポートするコードエディター。
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - Canvas
+ ノートで使用される無限のホワイトボード。
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) -
+ マインドマップ機能を提供します。
+* [Leaflet](https://github.com/Leaflet/Leaflet) - 地理マップをレンダリングします。
+* Tabulator](https://github.com/olifolkerd/tabulator) -
+ コレクションで使用されるインタラクティブなテーブル。
+* [FancyTree](https://github.com/mar10/fancytree) - 他に類を見ない機能豊富なツリーライブラリ。
+* [jsPlumb](https://github.com/jsplumb/jsplumb) -
+ 視覚的な接続ライブラリ。[リレーションマップ](https://triliumnext.github.io/Docs/Wiki/relation-map.html)
+ と [リンクマップ](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+ で使用されます
## 🤝 サポート
-GitHub スポンサー、[PayPal](https://paypal.me/za4am)もしくは Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2) にて Trilium をサポートすることができます。
+Triliumは
+[数百時間もの作業](https://github.com/TriliumNext/Trilium/graphs/commit-activity)
+によって構築・維持されています。皆様のご支援により、オープンソースとしての維持、機能の向上、ホスティングなどの費用を賄うことができます。
+
+次の方法で、アプリケーションの主な開発者 ([eliandoran](https://github.com/eliandoran))
+をサポートすることを検討してください:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
## 🔑 ライセンス
-このプログラムはフリーソフトウェアです:フリーソフトウェア財団が発行した GNU Affero General Public License のバージョン3、またはそれ以降のバージョンのいずれかに従って、再配布および/または改変することができます。
+著作権 2017-2025 zadam、Elian Doran、その他寄稿者
+
+このプログラムはフリーソフトウェアです: フリーソフトウェア財団(Software Foundation) が発行する GNU Affero
+一般公衆利用許諾書(GNU Affero General Public License) のバージョン 3、または (選択により)
+それ以降のバージョンの規約に従って、このプログラムを再配布および/または改変することができます。
diff --git a/docs/README-ko.md b/docs/README-ko.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-ko.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-md.md b/docs/README-md.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-md.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-nb_NO.md b/docs/README-nb_NO.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-nb_NO.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-nl.md b/docs/README-nl.md
new file mode 100644
index 0000000000..1f2141a28a
--- /dev/null
+++ b/docs/README-nl.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentatie
+
+**Bekijk onze beknopte documentatie op
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Onze documentatie is beschikbaar in meerdere formaten:
+- **Online Documentatie**: Blader door de volledige documentatie op
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Toets`F1` binnen Trilium om dezelfde documentatie direct in
+ de applicatie te bekijken
+- **GitHub**: Navigeer door de [User Guide](./docs/User%20Guide/User%20Guide/)
+ in deze repository
+
+### Quick Links
+- [Getting Started Gids](https://docs.triliumnotes.org/)
+- [Vertaal
+ Instructies](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [TriliumNext
+ Upgraden](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basis Concepten en
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patronen van Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes kunnen in een diepe boomstructuur geplaatst worden. Een enkele note kan
+ op meerdere plekken in de boom geplaatst worden. (zie
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rijke WYSIWYG note editor inclusief e.g. tabellen, afbeeldingen en
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) met markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Ondersteuning voor bewerken van [notes met source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), inclusief syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-pl.md b/docs/README-pl.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-pl.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-pt.md b/docs/README-pt.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-pt.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-pt_BR.md b/docs/README-pt_BR.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-pt_BR.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-ro.md b/docs/README-ro.md
index 4a4aa80c2a..37a4f56833 100644
--- a/docs/README-ro.md
+++ b/docs/README-ro.md
@@ -1,7 +1,7 @@
# Trilium Notes
- \
+
+\

\
@@ -9,10 +9,10 @@ release-urile)](https://img.shields.io/github/downloads/triliumnext/trilium/tota
[](https://hosted.weblate.org/engage/trilium/)
-[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
-[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
-| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
-[Spanish](./docs/README-es.md)
+[Engleză](./README.md) | [Chineză (Simplificată)](./docs/README-ZH_CN.md) |
+[Chineză (Tradițională)](./docs/README-ZH_TW.md) | [Rusă](./docs/README-ru.md) |
+[Japoneză](./docs/README-ja.md) | [Italiană](./docs/README-it.md) |
+[Spaniolă](./docs/README-es.md)
Trilium Notes este o aplicație gratuită și open-source pentru notițe structurate
ierarhic cu scopul de a crea o bază de date de cunoștințe personală, de mari
@@ -55,10 +55,10 @@ Documentația este disponibilă în mai multe formate:
O singură notiță poate fi plasată în mai multe locuri în abore (vedeți
[procesul de clonare](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
* Editor vizual de notițe cu suport de tabele, imagini și [ecuații
- matematice](https://triliumnext.github.io/Docs/Wiki/text-notes) și
- [autoformatare în stil
+ matematice](https://triliumnext.github.io/Docs/Wiki/text-notes) cu
+ [auto-formatare în stil
Markdown](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
-* Suport pentru editarea [notițelor de tip cod
+* Suport for editarea [notițelor de tip cod
sursă](https://triliumnext.github.io/Docs/Wiki/code-notes), inclusiv cu
evidențierea sintaxei
* [Navigare rapidă printre
@@ -67,158 +67,160 @@ Documentația este disponibilă în mai multe formate:
notițelor](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
* Salvarea transparentă a [reviziilor
notițelor](https://triliumnext.github.io/Docs/Wiki/note-revisions)
-* [Atribute](https://triliumnext.github.io/Docs/Wiki/attributes) pentru
- organizarea și căutarea notițelor, dar și posibilitatea
- [script-uri](https://triliumnext.github.io/Docs/Wiki/scripts) avansate
+* [Attribute](https://triliumnext.github.io/Docs/Wiki/attributes) pentru
+ organizarea și căutarea notițelor, dar și posibilitatea de [script-uri
+ avansate](https://triliumnext.github.io/Docs/Wiki/scripts)
* Interfața grafică este disponibilă în mai multe limbi, dintre care și limba
română
-* Direct [OpenID and TOTP
- integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
- for more secure login
-* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
- with self-hosted sync server
- * there's a [3rd party service for hosting synchronisation
- server](https://trilium.cc/paid-hosting)
-* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
- to public internet
-* Strong [note
- encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
- per-note granularity
-* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
- "canvas")
-* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
- [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
- notes and their relations
-* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
-* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
- location pins and GPX tracks
-* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
- showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
-* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
-* Scales well in both usability and performance upwards of 100 000 notes
-* Touch optimized [mobile
- frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
- smartphones and tablets
-* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
- for user themes
-* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
- [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
-* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
- saving of web content
-* Customizable UI (sidebar buttons, user-defined widgets, ...)
-* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
- with a [Grafana
- Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+* [Integrare directă cu OpenID and
+ TOTP](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ pentru o autentificare mai sigură
+* [Sincronizare](https://triliumnext.github.io/Docs/Wiki/synchronization) cu un
+ server propriu
+ * există și un [serviciu terț pentru
+ sincronizare](https://trilium.cc/paid-hosting)
+* [Partajarea](https://triliumnext.github.io/Docs/Wiki/sharing) (publicarea)
+ notițelor pe Internet
+* [Criptare puternică](https://triliumnext.github.io/Docs/Wiki/protected-notes)
+ la nivel de notițe
+* Desenare liberă, folosind [Excalidraw](https://excalidraw.com/) (notițe de tip
+ „schiță”)
+* [Hărți de relații](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [hărți de legături](https://triliumnext.github.io/Docs/Wiki/link-map) pentru
+ vizualizarea notițelor și a relațiilor acestora
+* Hărți mentale, bazate pe [Mind Elixir](https://docs.mind-elixir.com/)
+* [Hărți geografice](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)
+ cu marcaje și trasee GPX
+* [Scriptare](https://triliumnext.github.io/Docs/Wiki/scripts) - vedeți
+ [Prezentare
+ avansată](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [API-uri REST](https://triliumnext.github.io/Docs/Wiki/etapi) pentru
+ automatizare
+* Suportă peste 100 de mii de notițe fără impact de performanță
+* [Interfață de mobil optimizată pentru touch
+ screen](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) pentru
+ telefoane mobile și tablete
+* [Temă întunecată](https://triliumnext.github.io/Docs/Wiki/themes) predefinită,
+ dar și suport pentru teme personalizate
+* Import și export pentru
+ [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) și
+ [Markdown](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) pentru
+ salvarea rapidă a conținutului de pe Internet
+* Interfață grafică personalizabilă (butoane, widget-uri definite de utilizator,
+ ...)
+* [Metrice](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md),
+ inclusiv un [dashboard
+ Grafana](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
-✨ Check out the following third-party resources/communities for more TriliumNext
-related goodies:
+✨ Consultați următoarele resurse din partea comunității Trilium:
-- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
- themes, scripts, plugins and more.
-- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) pentru teme
+ adiționale, script-uri, plugin-uri și altele.
+- [TriliumRocks!](https://trilium.rocks/) pentru tutoriale, ghiduri și altele.
-## ❓Why TriliumNext?
+## ❓De ce TriliumNext?
-The original Trilium developer ([Zadam](https://github.com/zadam)) has
-graciously given the Trilium repository to the community project which resides
-at https://github.com/TriliumNext
+Primul dezvoltator ([Zadam](https://github.com/zadam)) a oferit repository-ul
+original către fork-ul TriliumNext aflat la https://github.com/TriliumNext
-### ⬆️Migrating from Zadam/Trilium?
+### ⬆️ Migrare de la versiunea originală (Zadam/Trilium)?
-There are no special migration steps to migrate from a zadam/Trilium instance to
-a TriliumNext/Trilium instance. Simply [install
-TriliumNext/Trilium](#-installation) as usual and it will use your existing
-database.
+Nu există pași speciali de a migra de la o instanță de zadam/Trilium. Pur și
+simplu [instalați TriliumNext/Trilium](#-installation) în mod obișnuit și va
+utiliza baza de date existentă.
-Versions up to and including
-[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
-compatible with the latest zadam/trilium version of
-[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
-versions of TriliumNext/Trilium have their sync versions incremented which
-prevents direct migration.
+Versiunile până la
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) inclusiv
+sunt compatibile cu ultima versiune zadam/trilium, anume
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Toate
+versiunile mai noi au versiune de sincronizare mai mare, ce previn migrarea
+directă.
-## 💬 Discuss with us
+## 💬 Discută cu noi
-Feel free to join our official conversations. We would love to hear what
-features, suggestions, or issues you may have!
+Participați la canalele noastre oficiale. Ne-ar plăcea să știm ce funcții,
+sugestii sau probleme aveți!
-- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
- discussions.)
- - The `General` Matrix room is also bridged to
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (pentru discuții în timp
+ real).
+ - Camera de chat `General` se partajează și prin
[XMPP](xmpp:discuss@trilium.thisgreat.party?join)
-- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
- asynchronous discussions.)
-- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
- reports and feature requests.)
+- [Discuții pe GitHub](https://github.com/TriliumNext/Trilium/discussions)
+ (pentru discuții de tip forum)
+- [GitHub Issues](https://github.com/TriliumNext/Trilium/issues) (pentru
+ rapoarte de bug-uri și cereri de funcționalități.)
-## 🏗 Installation
+## 🏗 Procesul de instalare
-### Windows / MacOS
+### Windows / macOS
-Download the binary release for your platform from the [latest release
-page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
-and run the `trilium` executable.
+Descărcați release-ul binar pentru platforma dvs. de pe pagina [ultimului
+release](https://github.com/TriliumNext/Trilium/releases/latest), dezarhivați și
+rulați executabilul `trilium`.
### Linux
-If your distribution is listed in the table below, use your distribution's
-package.
+Dacă distribuția dvs. de Linux este listată în tabelul de mai jos, puteți folosi
+pachetul specific acelei distribuții.
-[](https://repology.org/project/triliumnext/versions)
+[](https://repology.org/project/triliumnext/versions)
-You may also download the binary release for your platform from the [latest
-release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
-package and run the `trilium` executable.
+De asemenea puteți descărca release-ul binar de pe [pagina ultimului
+release](https://github.com/TriliumNext/Trilium/releases/latest), dezarhivați
+pachetul și rulați executabilul `trilium`.
-TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+Trilium vine și sub formă de Flatpak, dar nu este încă publicată pe FlatHub.
-### Browser (any OS)
+### Navigator web (orice sistem de operare)
-If you use a server installation (see below), you can directly access the web
-interface (which is almost identical to the desktop app).
+Dacă folosiți varianta de server (vedeți mai jos), puteți accesa direct
+interfața web (care este aproape identică aplicației desktop).
-Currently only the latest versions of Chrome & Firefox are supported (and
-tested).
+Doar ultimele versiuni de Chrome și Firefox sunt suportate și testate.
-### Mobile
+### Mobil
-To use TriliumNext on a mobile device, you can use a mobile web browser to
-access the mobile interface of a server installation (see below).
+Pentru a putea folosi Trilium pe mobil, puteți folosi un navigator web pentru a
+putea accesa interfața de mobil a unei instalări server (vedeți mai jos).
-See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
-information on mobile app support.
+Consultați https://github.com/TriliumNext/Trilium/issues/4962 pentru mai multe
+informații despre suportul aplicației de mobil.
-If you prefer a native Android app, you can use
+Dacă preferați o aplicație nativă de Android, puteți folosi
[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
-Report bugs and missing features at [their
-repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
-disable automatic updates on your server installation (see below) when using
-TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+Bug-urile și cererile de funcționalități pentru această aplicație trebuie
+reportate la [repository-ul
+lor](https://github.com/FliegendeWurst/TriliumDroid). Notă: este recomandat să
+se dezactiveze update-urile automatizate la server (vedeți mai jos) deoarece
+versiunea de sincronizare uneori rămâne în urmă la aplicația de mobil.
### Server
-To install TriliumNext on your own server (including via Docker from
-[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
-installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+Pentru a instala Trilium pe server (inclusiv prin Docker din
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)), urmați [documentația
+de instalare a
+server-ului](https://triliumnext.github.io/Docs/Wiki/server-installation).
-## 💻 Contribute
+## 💻 Moduri de a contribui
-### Translations
+### Traduceri
-If you are a native speaker, help us translate Trilium by heading over to our
-[Weblate page](https://hosted.weblate.org/engage/trilium/).
+Dacă sunteți un vorbitor experimentat al unei alte limbi, ne puteți ajuta să
+traduceți Trilium prin intermediul
+[Weblate](https://hosted.weblate.org/engage/trilium/).
-Here's the language coverage we have so far:
+Aceasta este acoperirea traducerilor per limbă:
-[](https://hosted.weblate.org/engage/trilium/)
+[](https://hosted.weblate.org/engage/trilium/)
-### Code
+### Cod
-Download the repository, install dependencies using `pnpm` and then run the
-server (available at http://localhost:8080):
+Descărcați repository-ul, instalați dependențele folosind `pnpm` și apoi rulați
+server-ul (disponibil la http://localhost:8080):
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
@@ -226,10 +228,10 @@ pnpm install
pnpm run server:start
```
-### Documentation
+### Documentație
-Download the repository, install dependencies using `pnpm` and then run the
-environment required to edit the documentation:
+Descărcați repository-ul, instalați dependințele folosind `pnpm` și apoi rulați
+mediul de editare a documentației:
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
@@ -237,9 +239,9 @@ pnpm install
pnpm edit-docs:edit-docs
```
-### Building the Executable
-Download the repository, install dependencies using `pnpm` and then build the
-desktop app for Windows:
+### Compilarea executabilului
+Descărcați repository-ul, instalați dependințele utilizând `pnpm` și compilați
+aplicația de desktop pentru Windows:
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
@@ -247,69 +249,72 @@ pnpm install
pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
```
-For more details, see the [development
-docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+Pentru mai multe detalii, vedeți [documentația pentru
+dezvoltare](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
-### Developer Documentation
+### Documentația pentru dezvoltatori
-Please view the [documentation
-guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
-for details. If you have more questions, feel free to reach out via the links
-described in the "Discuss with us" section above.
+Urmărți
+[documentația](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+pentru mai multe detalii. Dacă aveți întrebări, puteți să ne contactați folosind
+legăturile descrise în secțiunea „Discutați cu noi” de mai sus.
-## 👏 Shoutouts
+## 👏 Mențiuni
-* [zadam](https://github.com/zadam) for the original concept and implementation
- of the application.
-* [Larsa](https://github.com/LarsaSara) for designing the application icon.
-* [nriver](https://github.com/nriver) for his work on internationalization.
-* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
-* [antoniotejada](https://github.com/nriver) for the original syntax highlight
- widget.
-* [Dosu](https://dosu.dev/) for providing us with the automated responses to
- GitHub issues and discussions.
-* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+* [zadam](https://github.com/zadam) pentru conceptul și implementarea originală
+ a aplicației.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) pentru sistemul de internaționalizare.
+* [Thomas Frei](https://github.com/thfrei) pentru munca sa originală pentru
+ notițele de tip schiță.
+* [antoniotejada](https://github.com/nriver) pentru implementarea originală a
+ widget-ului de evidențiere al sintaxei.
+* [Dosu](https://dosu.dev/) pentru răspunsurile automate la issue-urile de pe
+ GitHub și discuții.
+* [Tabler Icons](https://tabler.io/icons) pentru iconițele din bara de sistem.
-Trilium would not be possible without the technologies behind it:
+Trilium nu ar fi fost posibil fără tehnologiile pe care este bazat:
-* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
- text notes. We are grateful for being offered a set of the premium features.
-* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
- support for huge amount of languages.
-* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
- whiteboard used in Canvas notes.
-* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
- mind map functionality.
-* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
- maps.
-* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
- table used in collections.
-* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
- without real competition.
-* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
- Used in [relation
- maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
- maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - editorul vizual din
+ spatele notițelor de tip text. Suntem recunoscători pentru setul de
+ funcționalități premium.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - editorul de cod cu
+ suport pentru foarte multe limbaje de programare.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - tehnologia de
+ desenare folosită în notițele de tip schiță.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - pentru
+ funcționalitatea de tip hartă mentală.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - pentru randarea hărților
+ geografice.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - pentru tabele
+ interactive folosite în colecții.
+* [FancyTree](https://github.com/mar10/fancytree) - bibliotecă pentru
+ vizualizare de tip arbore.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - bibliotecă de conectivitate
+ vizuală. Folosită în [hărți de tip
+ relație](https://triliumnext.github.io/Docs/Wiki/relation-map.html) și [hărți
+ de legături](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
-## 🤝 Support
+## 🤝 Sprijiniți proiectul
-Trilium is built and maintained with [hundreds of hours of
-work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
-support keeps it open-source, improves features, and covers costs such as
-hosting.
+Trilium este construit și menținut prin efortul [a sute de ore de
+muncă](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Sprijinul
+dvs. permite să-l menținem open-source, să îmbunătățim funcționalitățile și să
+acoperim costuri suplimentare precum găzduirea.
-Consider supporting the main developer
-([eliandoran](https://github.com/eliandoran)) of the application via:
+Considerați sprijinirea dezvoltatorului principal al aplicației
+([eliandoran](https://github.com/eliandoran)) prin intermediul:
-- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [Sponsori GitHub](https://github.com/sponsors/eliandoran)
- [PayPal](https://paypal.me/eliandoran)
- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
-## 🔑 License
+## 🔑 Licență
-Copyright 2017-2025 zadam, Elian Doran, and other contributors
+Copyright 2017-2025 zadam, Elian Doran și alți contribuitori
-This program is free software: you can redistribute it and/or modify it under
-the terms of the GNU Affero General Public License as published by the Free
-Software Foundation, either version 3 of the License, or (at your option) any
-later version.
+Acest program este liber: se poate redistribui și se poate modifica sub termenii
+licenței GNU Affero General Public License publicată de către Free Software
+Foundation, fie versiunea 3 a licenței sau (în funcție de preferință) orice
+versiune ulterioară.
diff --git a/docs/README-ru.md b/docs/README-ru.md
index b51c333d81..40e79d56a8 100644
--- a/docs/README-ru.md
+++ b/docs/README-ru.md
@@ -1,59 +1,316 @@
# Trilium Notes
-[English](../README.md) | [Chinese](./README-ZH_CN.md) | [Russian](./README-ru.md) | [Japanese](./README-ja.md) | [Italian](./README-it.md) | [Spanish](./README-es.md)
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
-Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://triliumnext.github.io/Docs/Wiki/screenshot-tour):
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
-
+Trilium Notes – это приложение для заметок с иерархической структурой,
+ориентированное на создание больших персональных баз знаний.
+
+Для быстрого ознакомления посмотрите
+[скриншот-тур](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)
+
+
+
+## 📚 Документация
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
## 🎁 Возможности
-* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
-* Продвинутый визуальный редактор (WYSIWYG) позволяет работать с таблицами, изображениями, [формулами](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support) и разметкой markdown, имеет [автоформатирование](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
-* Редактирование [заметок с исходным кодом](https://triliumnext.github.io/Docs/Wiki/code-notes), включая подсветку синтаксиса
-* Быстрая и простая [навигация между заметками](https://triliumnext.github.io/Docs/Wiki/note-navigation), полнотекстовый поиск и [выделение заметок](https://triliumnext.github.io/Docs/Wiki/note-hoisting) в отдельный блок
-* Бесшовное [версионирование заметки](https://triliumnext.github.io/Docs/Wiki/note-revisions)
-* Специальные [атрибуты](https://triliumnext.github.io/Docs/Wiki/attributes) позволяют гибко организовать структуру, используются для поиска и продвинутого [скриптинга](https://triliumnext.github.io/Docs/Wiki/scripts)
-* [Синхронизация](https://triliumnext.github.io/Docs/Wiki/synchronization) заметок со своим сервером
-* Надёжное [шифрование](https://triliumnext.github.io/Docs/Wiki/protected-notes) с детализацией по каждой заметке
-* [Карты связей](https://triliumnext.github.io/Docs/Wiki/relation-map) и [карты ссылок](https://triliumnext.github.io/Docs/Wiki/link-map) для визуализации их взяимосвязей
-* [Скрипты](https://triliumnext.github.io/Docs/Wiki/scripts) - см. [продвинутые примеры](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
-* Хорошо масштабируется, как по удобству использования, так и по производительности до 100000 заметок
-* Оптимизированный [мобильный фронтенд](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) смартфонов и планшетов
+* Заметки можно расположить в виде дерева произвольной глубины. Отдельную
+ заметку можно разместить в нескольких местах дерева (см.
+ [клонирование](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Продвинутый визуальный редактор (WYSIWYG) позволяет работать с таблицами,
+ изображениями, [формулами](https://triliumnext.github.io/Docs/Wiki/text-notes)
+ и разметкой markdown, имеет
+ [автоформатирование](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Редактирование [заметок с исходным
+ кодом](https://triliumnext.github.io/Docs/Wiki/code-notes), включая подсветку
+ синтаксиса
+* Быстрая и простая [навигация между
+ заметками](https://triliumnext.github.io/Docs/Wiki/note-navigation),
+ полнотекстовый поиск и [выделение
+ заметок](https://triliumnext.github.io/Docs/Wiki/note-hoisting) в отдельный
+ блок
+* Бесшовное [версионирование
+ заметки](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Специальные [атрибуты](https://triliumnext.github.io/Docs/Wiki/attributes)
+ позволяют гибко организовать структуру, используются для поиска и продвинутого
+ [скриптинга](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Синхронизация](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ заметок со своим сервером
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Надёжное [шифрование](https://triliumnext.github.io/Docs/Wiki/protected-notes)
+ с детализацией по каждой заметке
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Карты связей](https://triliumnext.github.io/Docs/Wiki/relation-map) и [карты
+ ссылок](https://triliumnext.github.io/Docs/Wiki/link-map) для визуализации их
+ взяимосвязей
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Скрипты](https://triliumnext.github.io/Docs/Wiki/scripts) - см. [продвинутые
+ примеры](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Хорошо масштабируется, как по удобству использования, так и по
+ производительности до 100000 заметок
+* Оптимизированный [мобильный
+ фронтенд](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) смартфонов
+ и планшетов
* [Темная тема](https://triliumnext.github.io/Docs/Wiki/themes)
-* Импорт и экпорт [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) и данных в [markdown](https://triliumnext.github.io/Docs/Wiki/markdown) формате
-* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) для удобного сохранения веб-контента
+* Импорт и экпорт
+ [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) и данных в
+ [markdown](https://triliumnext.github.io/Docs/Wiki/markdown) формате
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) для
+ удобного сохранения веб-контента
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
## 🏗 Сборки
-Trilium предоставляется в виде десктопного приложения (Linux и Windows) или веб-приложения, размещенного на вашем сервере (Linux). Доступна сборка Mac OS, но она [не поддерживается](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support).
+### Windows / macOS
-* Если вы хотите использовать Trilium на десктопе, скачайте архив для своей платформы со страницы [релизов](https://github.com/TriliumNext/Trilium/releases/latest), распакуйте и запустите исполняемый файл ```trilium```.
-* Если вы хотите установить Trilium на сервере, следуйте этой [инструкции](https://triliumnext.github.io/Docs/Wiki/server-installation).
- * В данный момент поддерживаются (протестированы) последние версии браузеров Chrome и Firefox.
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
-## 📝 Документация
+### Linux
-[Полный список страниц документации доступен в Wiki.](https://triliumnext.github.io/Docs/)
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
-Вы также можете ознакомиться с [шаблонами персональных баз знаний](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge), чтобы получить представление о том, как можно использовать Trilium.
## 💻 Участвуйте в разработке
-Или склонируйте на своё устройство и запустите
+### Translations
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
```shell
-npm install
-npm run server:start
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
```
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
## 👏 Благодарности
-* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - лучший WYSIWYG редактор, очень активная и внимательная команда.
-* [FancyTree](https://github.com/mar10/fancytree) - многофункциональная библиотека для создания древовидных структур. Вне конкуренции. Без него Trilium Notes не были бы таким.
-* [CodeMirror](https://github.com/codemirror/CodeMirror) - редактор кода с поддержкой огромного количество языков.
-* [jsPlumb](https://github.com/jsplumb/jsplumb) - библиотека для визуализации связей. Вне конкуренции. Используется в [картах связей](https://triliumnext.github.io/Docs/Wiki/relation-map) и [картах ссылок](https://triliumnext.github.io/Docs/Wiki/link-map).
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
## 🔑 Лицензия
-Эта программа является бесплатным программным обеспечением: вы можете распространять и/или изменять ее в соответствии с условиями GNU Affero General Public License, опубликованной Free Software Foundation, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
+Copyright 2017-2025 zadam, Elian Doran и другие авторы
+
+Эта программа является бесплатным программным обеспечением: вы можете
+распространять и/или изменять ее в соответствии с условиями GNU Affero General
+Public License, опубликованной Free Software Foundation, либо версии 3 Лицензии,
+либо (по вашему выбору) любой более поздней версии.
diff --git a/docs/README-sl.md b/docs/README-sl.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-sl.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-sr.md b/docs/README-sr.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-sr.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-tr.md b/docs/README-tr.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-tr.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-uk.md b/docs/README-uk.md
new file mode 100644
index 0000000000..348eb9d3e8
--- /dev/null
+++ b/docs/README-uk.md
@@ -0,0 +1,314 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
+[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
+| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
+[Spanish](./docs/README-es.md)
+
+Trilium Notes is a free and open-source, cross-platform hierarchical note taking
+application with focus on building large personal knowledge bases.
+
+See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
+quick overview:
+
+
+
+## 📚 Documentation
+
+**Visit our comprehensive documentation at
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Our documentation is available in multiple formats:
+- **Online Documentation**: Browse the full documentation at
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **In-App Help**: Press `F1` within Trilium to access the same documentation
+ directly in the application
+- **GitHub**: Navigate through the [User
+ Guide](./docs/User%20Guide/User%20Guide/) in this repository
+
+### Quick Links
+- [Getting Started Guide](https://docs.triliumnotes.org/)
+- [Installation
+ Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Docker
+ Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Upgrading
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Basic Concepts and
+ Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Patterns of Personal Knowledge
+ Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Features
+
+* Notes can be arranged into arbitrarily deep tree. Single note can be placed
+ into multiple places in the tree (see
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Rich WYSIWYG note editor including e.g. tables, images and
+ [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
+ [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
+* Support for editing [notes with source
+ code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
+ highlighting
+* Fast and easy [navigation between
+ notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
+ search and [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Seamless [note
+ versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
+* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
+ used for note organization, querying and advanced
+ [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
+* UI available in English, German, Spanish, French, Romanian, and Chinese
+ (simplified and traditional)
+* Direct [OpenID and TOTP
+ integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ for more secure login
+* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
+ with self-hosted sync server
+ * there's a [3rd party service for hosting synchronisation
+ server](https://trilium.cc/paid-hosting)
+* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
+ to public internet
+* Strong [note
+ encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
+ per-note granularity
+* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
+ "canvas")
+* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
+ [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
+ notes and their relations
+* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
+* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
+ location pins and GPX tracks
+* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
+ showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
+* Scales well in both usability and performance upwards of 100 000 notes
+* Touch optimized [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
+ smartphones and tablets
+* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
+ for user themes
+* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
+ [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
+ saving of web content
+* Customizable UI (sidebar buttons, user-defined widgets, ...)
+* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
+ with a [Grafana
+ Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Check out the following third-party resources/communities for more TriliumNext
+related goodies:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
+ themes, scripts, plugins and more.
+- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
+
+## ❓Why TriliumNext?
+
+The original Trilium developer ([Zadam](https://github.com/zadam)) has
+graciously given the Trilium repository to the community project which resides
+at https://github.com/TriliumNext
+
+### ⬆️Migrating from Zadam/Trilium?
+
+There are no special migration steps to migrate from a zadam/Trilium instance to
+a TriliumNext/Trilium instance. Simply [install
+TriliumNext/Trilium](#-installation) as usual and it will use your existing
+database.
+
+Versions up to and including
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
+compatible with the latest zadam/trilium version of
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
+versions of TriliumNext/Trilium have their sync versions incremented which
+prevents direct migration.
+
+## 💬 Discuss with us
+
+Feel free to join our official conversations. We would love to hear what
+features, suggestions, or issues you may have!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
+ discussions.)
+ - The `General` Matrix room is also bridged to
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
+ asynchronous discussions.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
+ reports and feature requests.)
+
+## 🏗 Installation
+
+### Windows / MacOS
+
+Download the binary release for your platform from the [latest release
+page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
+and run the `trilium` executable.
+
+### Linux
+
+If your distribution is listed in the table below, use your distribution's
+package.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/README-vi.md b/docs/README-vi.md
new file mode 100644
index 0000000000..67a70c0bf5
--- /dev/null
+++ b/docs/README-vi.md
@@ -0,0 +1,315 @@
+# Trilium Notes
+
+
+\
+
+\
+[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
+[](https://hosted.weblate.org/engage/trilium/)
+
+[Tiếng Anh](./README.md) | [Tiếng Trung (Giản thể)](./docs/README-ZH_CN.md) |
+[Tiếng Trung (Phồn thể)](./docs/README-ZH_TW.md) | [Tiếng
+Nga](./docs/README-ru.md) | [Tiếng Nhật](./docs/README-ja.md) | [Tiếng
+Ý](./docs/README-it.md) | [Tiếng Tây Ban Nha](./docs/README-es.md)
+
+Trilium Notes là một ứng dụng ghi chú phân cấp miễn phí, mã nguồn mở, đa nền
+tảng tập trung vào việc xây dựng cơ sở tri thức cá nhân lớn.
+
+Xem [ảnh chụp màn hình](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)
+để tổng quan nhanh:
+
+
+
+## 📚 Tài Liệu
+
+**Truy cập tài liệu toàn diện của chúng tôi tại
+[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
+
+Tài liệu của chúng tôi có sẵn ở nhiều định dạng:
+- **Tài liệu trực tuyến**: Xem tài liệu đầy đủ tại
+ [docs.triliumnotes.org](https://docs.triliumnotes.org/)
+- **Trợ giúp trong ứng dụng**: Nhấn `F1` trong Trilium để truy cập tài liệu
+ tương tự trực tiếp trong ứng dụng
+- **Github**: Đi đến [Hướng dẫn sử dụng] trong kho lưu trữ này
+
+### Liên Kết Nhanh
+- [Hướng Dẫn Bắt Đầu](https://docs.triliumnotes.org/)
+- [Hướng Dẫn Cài
+ Đặt](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
+- [Thiết Lập
+ Docker](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
+- [Cập Nhật
+ TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
+- [Khái Niệm Và Chức Năng Cơ
+ Bản](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
+- [Các Mẫu Cơ Sở Tri Thức Cá
+ Nhân](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
+
+## 🎁 Chức Năng
+
+* Các ghi chú có thể được sắp xếp thành cây có độ sâu bất kỳ. Một ghi chú có thể
+ được đặt vào nhiều nơi trong cây (xem
+ [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
+* Trình soạn thảo ghi chú WYSIWYG đầy đủ tính năng, hỗ trợ bảng, hình ảnh, và
+ [toán học](https://triliumnext.github.io/Docs/Wiki/text-notes); đồng thời [tự
+ động định dạng](https://triliumnext.github.io/Docs/Wiki/text-notes) sang
+ markdown
+* Hỗ trợ chỉnh sửa [ghi chú chứa mã
+ nguồn](https://triliumnext.github.io/Docs/Wiki/code-notes), kèm tô sáng cú
+ pháp
+* [Điều hướng giữa các ghi
+ chú](https://triliumnext.github.io/Docs/Wiki/note-navigation) nhanh và dễ
+ dàng, tìm kiếm toàn văn và [note
+ hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
+* Quản lý [phiên bản ghi
+ chú](https://triliumnext.github.io/Docs/Wiki/note-revisions) mượt mà
+* [Các thuộc tính](https://triliumnext.github.io/Docs/Wiki/attributes) ghi chú
+ có thể được dùng cho việc tổ chức, truy xuất và [viết
+ script](https://triliumnext.github.io/Docs/Wiki/scripts) nâng cao
+* Giao diện sẵn có cho Tiếng Anh, Tiếng Đức, Tiếng Tây Ban Nha, Tiếng Pháp,
+ Tiếng Rumani, và Tiếng Trung (giản thể và phồn thể)
+* [Tích hợp OpenID và
+ TOTP](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
+ trực tiếp để đăng nhập bảo mật hơn
+* [Đồng bộ hóa](https://triliumnext.github.io/Docs/Wiki/synchronization) với máy
+ chủ đồng bộ tự triển khai
+ * có một [dịch vụ bên thứ ba để lưu trữ máy chủ đồng bộ
+ hóa](https://trilium.cc/paid-hosting)
+* [Chia sẻ](https://triliumnext.github.io/Docs/Wiki/sharing) (công bố) các ghi
+ chú lên mạng Internet công cộng
+* [Mã hóa ghi chú](https://triliumnext.github.io/Docs/Wiki/protected-notes) mạnh
+ mẽ với mức chi tiết đến từng ghi chú
+* Phác thảo sơ đồ, dựa trên [Excalidraw](https://excalidraw.com/) (loại ghi chú
+ "canvas")
+* [Bản đồ quan hệ](https://triliumnext.github.io/Docs/Wiki/relation-map) và [bản
+ đồ liên kết](https://triliumnext.github.io/Docs/Wiki/link-map) để trực quan
+ hóa các ghi chú và mối quan hệ giữa chúng
+* Sơ đồ tư duy, dựa trên [Mind Elixir](https://docs.mind-elixir.com/)
+* [Bản đồ địa lý](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)
+ với các chấm chỉ vị trí và các đường GPX
+* [Viết script](https://triliumnext.github.io/Docs/Wiki/scripts) - xem [Mục
+ trưng bày nâng
+ cao](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
+* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) cho tự động hóa
+* Mở rộng tốt về cả khả năng sử dụng và hiệu năng lên đến 100.000 ghi chú
+* Tối ưu hóa cảm ứng [mobile
+ frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) cho điện
+ thoại thông minh và máy tính bảng
+* Tích hợp sẵn [giao diện tối](https://triliumnext.github.io/Docs/Wiki/themes),
+ hỗ trợ giao diện do người dùng tùy chỉnh
+* Hỗ trợ nhập, xuất cho
+ [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) và
+ [Markdown](https://triliumnext.github.io/Docs/Wiki/markdown)
+* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) để lưu trữ
+ nội dung web dễ dàng
+* Giao diện tùy biến (nút thanh bên, widget do người dùng tự tạo,...)
+* [Các thông số](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md),
+ cùng với một [Bảng điều khiển
+ Grafana](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
+
+✨ Hãy xem thử các nguồn tài nguyên/cộng đồng bên thứ ba dưới đây để tìm thêm
+nhiều tiện ích liên quan đến TriliumNext:
+
+- [awesome-trilium](https://github.com/Nriver/awesome-trilium) cho các chủ đề,
+ script, plugin và nhiều hơn nữa.
+- [TriliumRocks!](https://trilium.rocks/) cho những hướng dẫn, và nhiều hơn.
+
+## ❓Tại sao là TriliumNext?
+
+Người phát triển ban đầu của Trilium ([Zadam](https://github.com/zadam)) đã hào
+phóng tặng kho lưu trữ Trilium cho dự án cộng đồng, hiện đang đặt tại
+https://github.com/TriliumNext
+
+### ⬆️ Chuyển từ Zadam/Trilium?
+
+Không cần những bước chuyển đặc biệt nào để chuyển từ zadam/Trilium sang
+TriliumNext/Trilium. Đơn giản chỉ cần [cài đặt
+TriliumNext/Trilium](#-installation) như thông thường và nó sẽ sử dụng cơ sở dữ
+liệu sẵn có của bạn.
+
+Các phiên bản trước và bao gồm
+[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) đều tương
+thích với phiên bản mới nhất của zadam/trilium
+[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Các phiên bản
+sau đó của TriliumNext/Trilium đã tăng phiên bản đồng bộ, khiến việc chuyển sang
+trực tiếp không còn khả thi.
+
+## 💬 Thảo luận cùng chúng tôi
+
+Hãy thoải mái tham gia các cuộc trò chuyện chính thức. Chúng tôi luôn muốn lắng
+nghe các tính năng, đề xuất hoặc vấn đề mà bạn đưa ra!
+
+- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (Cho những thảo luận
+ đồng bộ thời gian thực.)
+ - Phòng `General` trong Matrix cũng được kết nối tới
+ [XMPP](xmpp:discuss@trilium.thisgreat.party?join)
+- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (Cho
+ những thảo luận không đồng bộ.)
+- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (Cho việc báo
+ cáo lỗi và yêu cầu tính năng.)
+
+## 🏗 Cài Đặt
+
+### Windows / MacOS
+
+Tải bản phát hành nhị phân cho nền tảng của bạn từ [trang phát hành mới
+nhất](https://github.com/TriliumNext/Trilium/releases/latest), giải nén gói và
+chạy tệp thực thi `trilium`.
+
+### Linux
+
+Nếu bản phân phối của bạn được liệt kê trong bảng dưới đấy, hãy dùng gói cài đặt
+của nó.
+
+[](https://repology.org/project/triliumnext/versions)
+
+You may also download the binary release for your platform from the [latest
+release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
+package and run the `trilium` executable.
+
+TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
+
+### Browser (any OS)
+
+If you use a server installation (see below), you can directly access the web
+interface (which is almost identical to the desktop app).
+
+Currently only the latest versions of Chrome & Firefox are supported (and
+tested).
+
+### Mobile
+
+To use TriliumNext on a mobile device, you can use a mobile web browser to
+access the mobile interface of a server installation (see below).
+
+See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
+information on mobile app support.
+
+If you prefer a native Android app, you can use
+[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
+Report bugs and missing features at [their
+repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
+disable automatic updates on your server installation (see below) when using
+TriliumDroid since the sync version must match between Trilium and TriliumDroid.
+
+### Server
+
+To install TriliumNext on your own server (including via Docker from
+[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
+installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
+
+
+## 💻 Contribute
+
+### Translations
+
+If you are a native speaker, help us translate Trilium by heading over to our
+[Weblate page](https://hosted.weblate.org/engage/trilium/).
+
+Here's the language coverage we have so far:
+
+[](https://hosted.weblate.org/engage/trilium/)
+
+### Code
+
+Download the repository, install dependencies using `pnpm` and then run the
+server (available at http://localhost:8080):
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run server:start
+```
+
+### Documentation
+
+Download the repository, install dependencies using `pnpm` and then run the
+environment required to edit the documentation:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm edit-docs:edit-docs
+```
+
+### Building the Executable
+Download the repository, install dependencies using `pnpm` and then build the
+desktop app for Windows:
+```shell
+git clone https://github.com/TriliumNext/Trilium.git
+cd Trilium
+pnpm install
+pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
+```
+
+For more details, see the [development
+docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
+
+### Developer Documentation
+
+Please view the [documentation
+guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
+for details. If you have more questions, feel free to reach out via the links
+described in the "Discuss with us" section above.
+
+## 👏 Shoutouts
+
+* [zadam](https://github.com/zadam) for the original concept and implementation
+ of the application.
+* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
+ application icon.
+* [nriver](https://github.com/nriver) for his work on internationalization.
+* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
+* [antoniotejada](https://github.com/nriver) for the original syntax highlight
+ widget.
+* [Dosu](https://dosu.dev/) for providing us with the automated responses to
+ GitHub issues and discussions.
+* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
+
+Trilium would not be possible without the technologies behind it:
+
+* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
+ text notes. We are grateful for being offered a set of the premium features.
+* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
+ support for huge amount of languages.
+* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
+ whiteboard used in Canvas notes.
+* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
+ mind map functionality.
+* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
+ maps.
+* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
+ table used in collections.
+* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
+ without real competition.
+* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
+ Used in [relation
+ maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
+ maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
+
+## 🤝 Support
+
+Trilium is built and maintained with [hundreds of hours of
+work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
+support keeps it open-source, improves features, and covers costs such as
+hosting.
+
+Consider supporting the main developer
+([eliandoran](https://github.com/eliandoran)) of the application via:
+
+- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
+- [PayPal](https://paypal.me/eliandoran)
+- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
+
+## 🔑 License
+
+Copyright 2017-2025 zadam, Elian Doran, and other contributors
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU Affero General Public License as published by the Free
+Software Foundation, either version 3 of the License, or (at your option) any
+later version.
diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md
index 2916640ecb..454e7d007f 100644
--- a/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md
+++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md
@@ -50,5 +50,6 @@ These relations are supported and used internally by Trilium.
| `widget_relation` | target of this relation will be executed and rendered as a widget in the sidebar |
| `shareCss` | CSS note which will be injected into the share page. CSS note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree` and `share_omit_default_css` as well. |
| `shareJs` | JavaScript note which will be injected into the share page. JS note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
+| `shareHtml` | HTML note which will be injected into the share page at locations specified by the `shareHtmlLocation` label. HTML note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
| `shareTemplate` | Embedded JavaScript note that will be used as the template for displaying the shared note. Falls back to the default template. Consider using `share_hidden_from_tree`. |
| `shareFavicon` | Favicon note to be set in the shared page. Typically you want to set it to share root and make it inheritable. Favicon note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
\ No newline at end of file
diff --git a/docs/User Guide/User Guide/Advanced Usage/Sharing.md b/docs/User Guide/User Guide/Advanced Usage/Sharing.md
index 171cdf71f8..5395f959c4 100644
--- a/docs/User Guide/User Guide/Advanced Usage/Sharing.md
+++ b/docs/User Guide/User Guide/Advanced Usage/Sharing.md
@@ -67,6 +67,25 @@ The default design should be a good starting point, but you can customize it usi
You can inject custom JavaScript into the shared note using the `~shareJs` relation. This allows you to access note attributes or traverse the note tree using the `fetchNote()` API, which retrieves note data based on its ID.
+### Adding custom HTML
+
+You can inject custom HTML snippets into specific locations of the shared page using the `~shareHtml` relation. The HTML note should contain the raw HTML content you want to inject, and you can control where it appears by adding the `#shareHtmlLocation` label to the HTML snippet note itself.
+
+The `#shareHtmlLocation` label accepts values in the format `location:position`:
+
+* **Locations**: `head`, `body`, `content`
+* **Positions**: `start`, `end`
+
+For example:
+
+* `#shareHtmlLocation=head:start` - Injects HTML at the beginning of the `` section
+* `#shareHtmlLocation=head:end` - Injects HTML at the end of the `` section (default)
+* `#shareHtmlLocation=body:start` - Injects HTML at the beginning of the `` section
+* `#shareHtmlLocation=content:start` - Injects HTML at the beginning of the content area
+* `#shareHtmlLocation=content:end` - Injects HTML at the end of the content area
+
+If no location is specified, the HTML will be injected at `content:end` by default.
+
Example:
```javascript
@@ -106,7 +125,7 @@ To do so, create a shared text note and apply the `shareIndex` label. When viewe
## Attribute reference
-Attribute Description shareHiddenFromTreethis note is hidden from left navigation tree, but still accessible with its URL shareExternalLinknote will act as a link to an external website in the share tree shareAliasdefine an alias using which the note will be available under https://your_trilium_host/share/[your_alias] shareOmitDefaultCssdefault share page CSS will be omitted. Use when you make extensive styling changes. shareRootmarks note which is served on /share root. shareDescriptiondefine text to be added to the HTML meta tag for description shareRawNote will be served in its raw format, without HTML wrapper. See also Serving directly the content of a note for an alternative method without setting an attribute. shareDisallowRobotIndexingIndicates to web crawlers that the page should not be indexed of this note by:
Setting the X-Robots-Tag: noindex HTTP header. Setting the noindex, follow meta tag. shareCredentialsrequire credentials to access this shared note. Value is expected to be in format username:password. Don't forget to make this inheritable to apply to child-notes/images. shareIndexNote with this label will list all roots of shared notes.
+Attribute Description shareHiddenFromTreethis note is hidden from left navigation tree, but still accessible with its URL shareExternalLinknote will act as a link to an external website in the share tree shareAliasdefine an alias using which the note will be available under https://your_trilium_host/share/[your_alias] shareOmitDefaultCssdefault share page CSS will be omitted. Use when you make extensive styling changes. shareRootmarks note which is served on /share root. shareDescriptiondefine text to be added to the HTML meta tag for description shareRawNote will be served in its raw format, without HTML wrapper. See also Serving directly the content of a note for an alternative method without setting an attribute. shareDisallowRobotIndexingIndicates to web crawlers that the page should not be indexed of this note by:
Setting the X-Robots-Tag: noindex HTTP header. Setting the noindex, follow meta tag. shareCredentialsrequire credentials to access this shared note. Value is expected to be in format username:password. Don't forget to make this inheritable to apply to child-notes/images. shareIndexNote with this label will list all roots of shared notes. shareHtmlLocationdefines where custom HTML injected via ~shareHtml relation should be placed. Applied to the HTML snippet note itself. Format: location:position where location is head, body, or content and position is start or end. Defaults to content:end.
## Credits
diff --git a/docs/User Guide/User Guide/Note Types/Collections/Board View.md b/docs/User Guide/User Guide/Note Types/Collections/Board View.md
index 4b8bcbdbc3..c2630e67df 100644
--- a/docs/User Guide/User Guide/Note Types/Collections/Board View.md
+++ b/docs/User Guide/User Guide/Note Types/Collections/Board View.md
@@ -39,6 +39,15 @@ Notes are displayed recursively, so even the child notes of the child notes will
* Delete the current note.
* If there are many notes within the column, move the mouse over the column and use the mouse wheel to scroll.
+## Keyboard interaction
+
+The board view has mild support for keyboard-based navigation:
+
+* Use Tab and Shift +Tab to navigate between column titles, notes and the “New item” button for each of the columns, in sequential order.
+* To rename a column or a note, press F2 while it is focused.
+* To open a specific note or create a new item, press Enter while it is focused.
+* To dismiss a rename of a note or a column, press Escape .
+
## Configuration
### Grouping by another attribute
diff --git a/flake.nix b/flake.nix
index 7920ec528a..00488214fc 100644
--- a/flake.nix
+++ b/flake.nix
@@ -200,7 +200,7 @@
# '/build/source/apps/desktop/node_modules/better-sqlite3/build/node_gyp_bins'
preBuildCommands = ''
export npm_config_nodedir=${electron.headers}
- pnpm postinstall || true
+ pnpm postinstall
'';
buildTask = "desktop:build";
mainProgram = "trilium";
diff --git a/package.json b/package.json
index fe9a3511cd..0b151509c0 100644
--- a/package.json
+++ b/package.json
@@ -37,10 +37,10 @@
"private": true,
"devDependencies": {
"@electron/rebuild": "4.0.1",
- "@playwright/test": "1.55.1",
+ "@playwright/test": "1.56.0",
"@triliumnext/server": "workspace:*",
"@types/express": "5.0.3",
- "@types/node": "22.18.8",
+ "@types/node": "22.18.9",
"@vitest/coverage-v8": "3.2.4",
"@vitest/ui": "3.2.4",
"chalk": "5.6.2",
@@ -50,16 +50,16 @@
"eslint": "9.37.0",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-playwright": "2.2.2",
- "eslint-plugin-react-hooks": "6.1.1",
- "happy-dom": "~19.0.0",
+ "eslint-plugin-react-hooks": "7.0.0",
+ "happy-dom": "~20.0.0",
"jiti": "2.6.1",
"jsonc-eslint-parser": "2.4.1",
"react-refresh": "0.18.0",
- "rollup-plugin-webpack-stats": "2.1.5",
+ "rollup-plugin-webpack-stats": "2.1.6",
"tslib": "2.8.1",
"tsx": "4.20.6",
"typescript": "~5.9.0",
- "typescript-eslint": "8.45.0",
+ "typescript-eslint": "8.46.0",
"upath": "2.0.1",
"vite": "7.1.9",
"vite-plugin-dts": "~4.5.0",
@@ -79,7 +79,7 @@
"url": "https://github.com/TriliumNext/Trilium/issues"
},
"homepage": "https://triliumnotes.org",
- "packageManager": "pnpm@10.18.0",
+ "packageManager": "pnpm@10.18.2",
"pnpm": {
"patchedDependencies": {
"@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch",
@@ -90,7 +90,7 @@
"mermaid": "11.12.0",
"preact": "10.27.2",
"roughjs": "4.6.6",
- "@types/express-serve-static-core": "5.0.7",
+ "@types/express-serve-static-core": "5.1.0",
"flat@<5.0.1": ">=5.0.1",
"debug@>=3.2.0 <3.2.7": ">=3.2.7",
"nanoid@<3.3.8": ">=3.3.8",
diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json
index 29799cc625..5c9fb466b4 100644
--- a/packages/ckeditor5-admonition/package.json
+++ b/packages/ckeditor5-admonition/package.json
@@ -24,8 +24,8 @@
"@ckeditor/ckeditor5-dev-build-tools": "43.1.0",
"@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "4.1.0",
- "@typescript-eslint/eslint-plugin": "~8.45.0",
- "@typescript-eslint/parser": "8.45.0",
+ "@typescript-eslint/eslint-plugin": "~8.46.0",
+ "@typescript-eslint/parser": "8.46.0",
"@vitest/browser": "3.2.4",
"@vitest/coverage-istanbul": "3.2.4",
"ckeditor5": "47.0.0",
diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json
index 8456386434..d0245139da 100644
--- a/packages/ckeditor5-footnotes/package.json
+++ b/packages/ckeditor5-footnotes/package.json
@@ -25,8 +25,8 @@
"@ckeditor/ckeditor5-dev-build-tools": "43.1.0",
"@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "4.1.0",
- "@typescript-eslint/eslint-plugin": "~8.45.0",
- "@typescript-eslint/parser": "8.45.0",
+ "@typescript-eslint/eslint-plugin": "~8.46.0",
+ "@typescript-eslint/parser": "8.46.0",
"@vitest/browser": "3.2.4",
"@vitest/coverage-istanbul": "3.2.4",
"ckeditor5": "47.0.0",
diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json
index fec43d3bd5..59670a0f9b 100644
--- a/packages/ckeditor5-keyboard-marker/package.json
+++ b/packages/ckeditor5-keyboard-marker/package.json
@@ -27,8 +27,8 @@
"@ckeditor/ckeditor5-dev-build-tools": "43.1.0",
"@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "4.1.0",
- "@typescript-eslint/eslint-plugin": "~8.45.0",
- "@typescript-eslint/parser": "8.45.0",
+ "@typescript-eslint/eslint-plugin": "~8.46.0",
+ "@typescript-eslint/parser": "8.46.0",
"@vitest/browser": "3.2.4",
"@vitest/coverage-istanbul": "3.2.4",
"ckeditor5": "47.0.0",
diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json
index b9fc2fd691..6588ce5455 100644
--- a/packages/ckeditor5-math/package.json
+++ b/packages/ckeditor5-math/package.json
@@ -28,8 +28,8 @@
"@ckeditor/ckeditor5-dev-utils": "43.1.0",
"@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "4.1.0",
- "@typescript-eslint/eslint-plugin": "~8.45.0",
- "@typescript-eslint/parser": "8.45.0",
+ "@typescript-eslint/eslint-plugin": "~8.46.0",
+ "@typescript-eslint/parser": "8.46.0",
"@vitest/browser": "3.2.4",
"@vitest/coverage-istanbul": "3.2.4",
"ckeditor5": "47.0.0",
diff --git a/packages/ckeditor5-math/src/mathcommand.ts b/packages/ckeditor5-math/src/mathcommand.ts
index b6126f42f3..e91350e1f2 100644
--- a/packages/ckeditor5-math/src/mathcommand.ts
+++ b/packages/ckeditor5-math/src/mathcommand.ts
@@ -30,7 +30,12 @@ export default class MathCommand extends Command {
mathtex = writer.createElement(
display ? 'mathtex-display' : 'mathtex-inline',
- { equation, type, display }
+ {
+ ...Object.fromEntries(selection.getAttributes()),
+ equation,
+ type,
+ display
+ }
);
} else {
const selection = this.editor.model.document.selection;
@@ -40,7 +45,7 @@ export default class MathCommand extends Command {
display ? 'mathtex-display' : 'mathtex-inline',
{
// Inherit all attributes from selection (e.g. color, background color, size).
- ...Object.fromEntries( selection.getAttributes() ),
+ ...Object.fromEntries(selection.getAttributes()),
equation,
type: outputType,
display,
diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json
index ab4e097aa8..9a976413b3 100644
--- a/packages/ckeditor5-mermaid/package.json
+++ b/packages/ckeditor5-mermaid/package.json
@@ -27,8 +27,8 @@
"@ckeditor/ckeditor5-dev-build-tools": "43.1.0",
"@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "4.1.0",
- "@typescript-eslint/eslint-plugin": "~8.45.0",
- "@typescript-eslint/parser": "8.45.0",
+ "@typescript-eslint/eslint-plugin": "~8.46.0",
+ "@typescript-eslint/parser": "8.46.0",
"@vitest/browser": "3.2.4",
"@vitest/coverage-istanbul": "3.2.4",
"ckeditor5": "47.0.0",
diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json
index b1dc7c24ba..f87fa37f23 100644
--- a/packages/ckeditor5/package.json
+++ b/packages/ckeditor5/package.json
@@ -15,7 +15,7 @@
"ckeditor5-premium-features": "47.0.0"
},
"devDependencies": {
- "@smithy/middleware-retry": "4.4.0",
+ "@smithy/middleware-retry": "4.4.1",
"@types/jquery": "3.5.33"
}
}
diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json
index 227618ec22..40ac2acf67 100644
--- a/packages/codemirror/package.json
+++ b/packages/codemirror/package.json
@@ -16,7 +16,7 @@
"@codemirror/lang-xml": "6.1.0",
"@codemirror/legacy-modes": "6.5.2",
"@codemirror/search": "6.5.11",
- "@codemirror/view": "6.38.4",
+ "@codemirror/view": "6.38.5",
"@fsegurai/codemirror-theme-abcdef": "6.2.2",
"@fsegurai/codemirror-theme-abyss": "6.2.2",
"@fsegurai/codemirror-theme-android-studio": "6.2.2",
diff --git a/packages/commons/src/lib/hidden_subtree.ts b/packages/commons/src/lib/hidden_subtree.ts
index e33276da97..c86dd6b899 100644
--- a/packages/commons/src/lib/hidden_subtree.ts
+++ b/packages/commons/src/lib/hidden_subtree.ts
@@ -49,4 +49,9 @@ export interface HiddenSubtreeItem {
* the user moves it around.
*/
enforceBranches?: boolean;
+ /**
+ * If set to true, then the attributes of this note will be checked. Any owned attribute that does not match the
+ * definitions will be removed.
+ */
+ enforceAttributes?: boolean;
}
diff --git a/packages/commons/src/lib/i18n.ts b/packages/commons/src/lib/i18n.ts
index d40f5ecc5d..8e408f2e61 100644
--- a/packages/commons/src/lib/i18n.ts
+++ b/packages/commons/src/lib/i18n.ts
@@ -5,11 +5,13 @@ export interface Locale {
rtl?: boolean;
/** `true` if the language is not supported by the application as a display language, but it is selectable by the user for the content. */
contentOnly?: boolean;
+ /** `true` if the language should only be visible while in development mode, and not in production. */
+ devOnly?: boolean;
/** The value to pass to `--lang` for the Electron instance in order to set it as a locale. Not setting it will hide it from the list of supported locales. */
electronLocale?: "en" | "de" | "es" | "fr" | "zh_CN" | "zh_TW" | "ro" | "af" | "am" | "ar" | "bg" | "bn" | "ca" | "cs" | "da" | "el" | "en_GB" | "es_419" | "et" | "fa" | "fi" | "fil" | "gu" | "he" | "hi" | "hr" | "hu" | "id" | "it" | "ja" | "kn" | "ko" | "lt" | "lv" | "ml" | "mr" | "ms" | "nb" | "nl" | "pl" | "pt_BR" | "pt_PT" | "ru" | "sk" | "sl" | "sr" | "sv" | "sw" | "ta" | "te" | "th" | "tr" | "uk" | "ur" | "vi";
}
-const UNSORTED_LOCALES: Locale[] = [
+const UNSORTED_LOCALES = [
{ id: "cn", name: "简体中文", electronLocale: "zh_CN" },
{ id: "de", name: "Deutsch", electronLocale: "de" },
{ id: "en", name: "English", electronLocale: "en" },
@@ -17,11 +19,25 @@ const UNSORTED_LOCALES: Locale[] = [
{ id: "fr", name: "Français", electronLocale: "fr" },
{ id: "ja", name: "日本語", electronLocale: "ja" },
{ id: "pt_br", name: "Português (Brasil)", electronLocale: "pt_BR" },
+ { id: "pt", name: "Português (Portugal)", electronLocale: "pt_PT" },
{ id: "ro", name: "Română", electronLocale: "ro" },
{ id: "ru", name: "Русский", electronLocale: "ru" },
{ id: "tw", name: "繁體中文", electronLocale: "zh_TW" },
{ id: "uk", name: "Українська", electronLocale: "uk" },
+ /**
+ * Development-only languages.
+ *
+ * These are only displayed while in dev mode, to test some language particularities (such as RTL) more easily.
+ */
+ {
+ id: "en_rtl",
+ name: "English (right-to-left) [dev]",
+ electronLocale: "en",
+ rtl: true,
+ devOnly: true
+ },
+
/*
* Right to left languages
*
@@ -31,7 +47,8 @@ const UNSORTED_LOCALES: Locale[] = [
id: "ar",
name: "اَلْعَرَبِيَّةُ",
rtl: true,
- contentOnly: true
+ devOnly: true,
+ electronLocale: "ar"
},
{ // Hebrew
id: "he",
@@ -56,4 +73,7 @@ const UNSORTED_LOCALES: Locale[] = [
export const LOCALES: Locale[] = Array.from(UNSORTED_LOCALES)
.sort((a, b) => a.name.localeCompare(b.name));
+/** A type containing a string union of all the supported locales, including those that are content-only. */
export type LOCALE_IDS = typeof UNSORTED_LOCALES[number]["id"];
+/** A type containing a string union of all the supported locales that are not content-only (i.e. can be used as the UI language). */
+export type DISPLAYABLE_LOCALE_IDS = Exclude["id"];
diff --git a/packages/commons/src/lib/shared_constants.ts b/packages/commons/src/lib/shared_constants.ts
index 00b179d338..bf13c92d3c 100644
--- a/packages/commons/src/lib/shared_constants.ts
+++ b/packages/commons/src/lib/shared_constants.ts
@@ -1,98 +1,22 @@
// Default list of allowed HTML tags
export const SANITIZER_DEFAULT_ALLOWED_TAGS = [
- "h1",
- "h2",
- "h3",
- "h4",
- "h5",
- "h6",
- "blockquote",
- "p",
- "a",
- "ul",
- "ol",
- "li",
- "b",
- "i",
- "strong",
- "em",
- "strike",
- "s",
- "del",
- "abbr",
- "code",
- "hr",
- "br",
- "div",
- "table",
- "thead",
- "caption",
- "tbody",
- "tfoot",
- "tr",
- "th",
- "td",
- "pre",
- "section",
- "img",
- "figure",
- "figcaption",
- "span",
- "label",
- "input",
- "details",
- "summary",
- "address",
- "aside",
- "footer",
- "header",
- "hgroup",
- "main",
- "nav",
- "dl",
- "dt",
- "menu",
- "bdi",
- "bdo",
- "dfn",
- "kbd",
- "mark",
- "q",
- "time",
- "var",
- "wbr",
- "area",
- "map",
- "track",
- "video",
- "audio",
- "picture",
- "del",
- "ins",
- "en-media", // for ENEX import
+ "h1", "h2", "h3", "h4", "h5", "h6", "blockquote", "p", "a", "ul", "ol", "li", "b", "i", "strong", "em",
+ "strike", "s", "del", "abbr", "code", "hr", "br", "div", "table", "thead", "caption", "tbody", "tfoot",
+ "tr", "th", "td", "pre", "section", "img", "figure", "figcaption", "span", "label", "input", "details",
+ "summary", "address", "aside", "footer", "header", "hgroup", "main", "nav", "dl", "dt", "menu", "bdi",
+ "bdo", "dfn", "kbd", "mark", "q", "time", "var", "wbr", "area", "map", "track", "video", "audio", "picture",
+ "del", "ins",
+ // for ENEX import
+ "en-media",
// Additional tags (https://github.com/TriliumNext/Trilium/issues/567)
- "acronym",
- "article",
- "big",
- "button",
- "cite",
- "col",
- "colgroup",
- "data",
- "dd",
- "fieldset",
- "form",
- "legend",
- "meter",
- "noscript",
- "option",
- "progress",
- "rp",
- "samp",
- "small",
- "sub",
- "sup",
- "template",
- "textarea",
- "tt"
+ "acronym", "article", "big", "button", "cite", "col", "colgroup", "data", "dd", "fieldset", "form", "legend",
+ "meter", "noscript", "option", "progress", "rp", "samp", "small", "sub", "sup", "template", "textarea", "tt"
] as const;
+
+export const ALLOWED_PROTOCOLS = [
+ 'http', 'https', 'ftp', 'ftps', 'mailto', 'data', 'evernote', 'file', 'facetime', 'gemini', 'git',
+ 'gopher', 'imap', 'irc', 'irc6', 'jabber', 'jar', 'lastfm', 'ldap', 'ldaps', 'magnet', 'message',
+ 'mumble', 'nfs', 'onenote', 'pop', 'rmi', 's3', 'sftp', 'skype', 'sms', 'spotify', 'steam', 'svn', 'udp',
+ 'view-source', 'vlc', 'vnc', 'ws', 'wss', 'xmpp', 'jdbc', 'slack', 'tel', 'smb', 'zotero', 'geo',
+ 'mid', 'obsidian'
+];
diff --git a/packages/commons/src/lib/test-utils.ts b/packages/commons/src/lib/test-utils.ts
index edfe90ef00..86ebfb0d60 100644
--- a/packages/commons/src/lib/test-utils.ts
+++ b/packages/commons/src/lib/test-utils.ts
@@ -54,3 +54,11 @@ export function trimIndentation(strings: TemplateStringsArray, ...values: any[])
}
return output.join("\n");
}
+
+export function flushPromises() {
+ return new Promise(setImmediate);
+}
+
+export function sleepFor(duration: number) {
+ return new Promise(resolve => setTimeout(resolve, duration));
+}
diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json
index d76faaaf7e..0a700348cd 100644
--- a/packages/share-theme/package.json
+++ b/packages/share-theme/package.json
@@ -24,8 +24,8 @@
"devDependencies": {
"@digitak/esrun": "3.2.26",
"@types/swagger-ui": "5.21.1",
- "@typescript-eslint/eslint-plugin": "8.45.0",
- "@typescript-eslint/parser": "8.45.0",
+ "@typescript-eslint/eslint-plugin": "8.46.0",
+ "@typescript-eslint/parser": "8.46.0",
"dotenv": "17.2.3",
"esbuild": "0.25.10",
"eslint": "9.37.0",
diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs
index e4ac1f6030..cc96cc4cae 100644
--- a/packages/share-theme/src/templates/page.ejs
+++ b/packages/share-theme/src/templates/page.ejs
@@ -1,7 +1,31 @@
- <% const hasTree = subRoot.note.hasVisibleChildren(); %>
+ <%
+ const hasTree = subRoot.note.hasVisibleChildren();
+
+ // Collect HTML snippets by location
+ const htmlSnippetsByLocation = {};
+ for (const htmlRelation of note.getRelations("shareHtml")) {
+ const htmlNote = htmlRelation.targetNote;
+ if (htmlNote) {
+ let location = htmlNote.getLabelValue("shareHtmlLocation") || "content:end";
+ // Default to :end if no position specified
+ if (!location.includes(":")) {
+ location = location + ":end";
+ }
+ if (!htmlSnippetsByLocation[location]) {
+ htmlSnippetsByLocation[location] = [];
+ }
+ htmlSnippetsByLocation[location].push(htmlNote.getContent());
+ }
+ }
+ const renderSnippets = (location) => {
+ const snippets = htmlSnippetsByLocation[location];
+ return snippets ? snippets.join("\n") : "";
+ };
+ %>
+ <%- renderSnippets("head:start") %>
@@ -53,6 +77,7 @@
+ <%- renderSnippets("head:end") %>
<%
const customLogoId = subRoot.note.getRelation("shareLogo")?.value;
@@ -72,6 +97,7 @@ content = content.replaceAll(headingRe, (...match) => {
});
%>
+<%- renderSnippets("body:start") %>
-
ck-content<% } %><% if (isEmpty) { %> no-content<% } %>">
+ <%- renderSnippets("content:start") %>
<%= note.title %>
<% if (isEmpty && (!note.hasVisibleChildren() && note.type !== "book")) { %>
This note has no content.
@@ -132,6 +158,7 @@ content = content.replaceAll(headingRe, (...match) => {
%>
<%- content %>
<% } %>
+ <%- renderSnippets("content:end") %>
<% if (note.hasVisibleChildren() || note.type === "book") { %>
@@ -164,7 +191,7 @@ content = content.replaceAll(headingRe, (...match) => {
<% } %>
- <% if (hasTree) { %>
+ <% if (hasTree) { %>
<%- include("prev_next", { note: note, subRoot: subRoot }) %>
<% } %>
@@ -205,5 +232,6 @@ content = content.replaceAll(headingRe, (...match) => {
<% } %>
+<%- renderSnippets("body:end") %>
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f9074b0736..87514a6f46 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,7 +8,7 @@ overrides:
mermaid: 11.12.0
preact: 10.27.2
roughjs: 4.6.6
- '@types/express-serve-static-core': 5.0.7
+ '@types/express-serve-static-core': 5.1.0
flat@<5.0.1: '>=5.0.1'
debug@>=3.2.0 <3.2.7: '>=3.2.7'
nanoid@<3.3.8: '>=3.3.8'
@@ -41,8 +41,8 @@ importers:
specifier: 4.0.1
version: 4.0.1
'@playwright/test':
- specifier: 1.55.1
- version: 1.55.1
+ specifier: 1.56.0
+ version: 1.56.0
'@triliumnext/server':
specifier: workspace:*
version: link:apps/server
@@ -50,8 +50,8 @@ importers:
specifier: 5.0.3
version: 5.0.3
'@types/node':
- specifier: 22.18.8
- version: 22.18.8
+ specifier: 22.18.9
+ version: 22.18.9
'@vitest/coverage-v8':
specifier: 3.2.4
version: 3.2.4(@vitest/browser@3.2.4)(vitest@3.2.4)
@@ -80,11 +80,11 @@ importers:
specifier: 2.2.2
version: 2.2.2(eslint@9.37.0(jiti@2.6.1))
eslint-plugin-react-hooks:
- specifier: 6.1.1
- version: 6.1.1(eslint@9.37.0(jiti@2.6.1))
+ specifier: 7.0.0
+ version: 7.0.0(eslint@9.37.0(jiti@2.6.1))
happy-dom:
- specifier: ~19.0.0
- version: 19.0.2
+ specifier: ~20.0.0
+ version: 20.0.0
jiti:
specifier: 2.6.1
version: 2.6.1
@@ -95,8 +95,8 @@ importers:
specifier: 0.18.0
version: 0.18.0
rollup-plugin-webpack-stats:
- specifier: 2.1.5
- version: 2.1.5(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ specifier: 2.1.6
+ version: 2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
tslib:
specifier: 2.8.1
version: 2.8.1
@@ -107,20 +107,20 @@ importers:
specifier: ~5.9.0
version: 5.9.3
typescript-eslint:
- specifier: 8.45.0
- version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
upath:
specifier: 2.0.1
version: 2.0.1
vite:
specifier: 7.1.9
- version: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ version: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
vite-plugin-dts:
specifier: ~4.5.0
- version: 4.5.4(@types/node@22.18.8)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 4.5.4(@types/node@22.18.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
vitest:
specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
apps/client:
dependencies:
@@ -156,7 +156,7 @@ importers:
version: 0.2.0(mermaid@11.12.0)
'@mind-elixir/node-menu':
specifier: 5.0.0
- version: 5.0.0(mind-elixir@5.3.1)
+ version: 5.0.0(mind-elixir@5.3.2)
'@popperjs/core':
specifier: 2.11.8
version: 2.11.8
@@ -233,14 +233,14 @@ importers:
specifier: 8.11.1
version: 8.11.1
marked:
- specifier: 16.3.0
- version: 16.3.0
+ specifier: 16.4.0
+ version: 16.4.0
mermaid:
specifier: 11.12.0
version: 11.12.0
mind-elixir:
- specifier: 5.3.1
- version: 5.3.1
+ specifier: 5.3.2
+ version: 5.3.2
normalize.css:
specifier: 8.0.1
version: 8.0.1
@@ -294,8 +294,8 @@ importers:
specifier: 13.0.1
version: 13.0.1(webpack@5.101.3(esbuild@0.25.10))
happy-dom:
- specifier: 19.0.2
- version: 19.0.2
+ specifier: 20.0.0
+ version: 20.0.0
script-loader:
specifier: 0.7.2
version: 0.7.2
@@ -322,7 +322,7 @@ importers:
dependencies:
'@electron/remote':
specifier: 2.1.3
- version: 2.1.3(electron@38.2.1)
+ version: 2.1.3(electron@38.2.2)
better-sqlite3:
specifier: 12.4.1
version: 12.4.1
@@ -343,29 +343,29 @@ importers:
version: 2.38.5(jquery@3.7.1)
devDependencies:
'@electron-forge/cli':
- specifier: 7.9.0
- version: 7.9.0(encoding@0.1.13)
+ specifier: 7.10.2
+ version: 7.10.2(encoding@0.1.13)(esbuild@0.25.10)
'@electron-forge/maker-deb':
- specifier: 7.9.0
- version: 7.9.0
+ specifier: 7.10.2
+ version: 7.10.2
'@electron-forge/maker-dmg':
- specifier: 7.9.0
- version: 7.9.0
+ specifier: 7.10.2
+ version: 7.10.2
'@electron-forge/maker-flatpak':
- specifier: 7.9.0
- version: 7.9.0
+ specifier: 7.10.2
+ version: 7.10.2
'@electron-forge/maker-rpm':
- specifier: 7.9.0
- version: 7.9.0
+ specifier: 7.10.2
+ version: 7.10.2
'@electron-forge/maker-squirrel':
- specifier: 7.9.0
- version: 7.9.0
+ specifier: 7.10.2
+ version: 7.10.2
'@electron-forge/maker-zip':
- specifier: 7.9.0
- version: 7.9.0
+ specifier: 7.10.2
+ version: 7.10.2
'@electron-forge/plugin-auto-unpack-natives':
- specifier: 7.9.0
- version: 7.9.0
+ specifier: 7.10.2
+ version: 7.10.2
'@triliumnext/commons':
specifier: workspace:*
version: link:../../packages/commons
@@ -379,8 +379,8 @@ importers:
specifier: 13.0.1
version: 13.0.1(webpack@5.101.3(esbuild@0.25.10))
electron:
- specifier: 38.2.1
- version: 38.2.1
+ specifier: 38.2.2
+ version: 38.2.2
prebuild-install:
specifier: 7.1.3
version: 7.1.3
@@ -435,8 +435,8 @@ importers:
specifier: 13.0.1
version: 13.0.1(webpack@5.101.3(esbuild@0.25.10))
electron:
- specifier: 38.2.1
- version: 38.2.1
+ specifier: 38.2.2
+ version: 38.2.2
fs-extra:
specifier: 11.3.2
version: 11.3.2
@@ -458,7 +458,7 @@ importers:
version: 7.1.1
'@electron/remote':
specifier: 2.1.3
- version: 2.1.3(electron@38.2.1)
+ version: 2.1.3(electron@38.2.2)
'@preact/preset-vite':
specifier: 2.10.2
version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.9(@types/node@24.6.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
@@ -607,8 +607,8 @@ importers:
specifier: 3.1.10
version: 3.1.10
electron:
- specifier: 38.2.1
- version: 38.2.1
+ specifier: 38.2.2
+ version: 38.2.2
electron-debug:
specifier: 4.1.0
version: 4.1.0
@@ -679,8 +679,8 @@ importers:
specifier: 4.1.0
version: 4.1.0
marked:
- specifier: 16.3.0
- version: 16.3.0
+ specifier: 16.4.0
+ version: 16.4.0
mime-types:
specifier: 3.0.1
version: 3.0.1
@@ -694,8 +694,8 @@ importers:
specifier: 0.6.0
version: 0.6.0
openai:
- specifier: 6.1.0
- version: 6.1.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4)
+ specifier: 6.3.0
+ version: 6.3.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4)
rand-token:
specifier: 1.0.1
version: 1.0.1
@@ -819,8 +819,8 @@ importers:
version: 47.0.0(bufferutil@4.0.9)(ckeditor5@47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41))(utf-8-validate@6.0.5)
devDependencies:
'@smithy/middleware-retry':
- specifier: 4.4.0
- version: 4.4.0
+ specifier: 4.4.1
+ version: 4.4.1
'@types/jquery':
specifier: 3.5.33
version: 3.5.33
@@ -835,16 +835,16 @@ importers:
version: 5.0.0
'@ckeditor/ckeditor5-package-tools':
specifier: 4.1.0
- version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
+ version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
'@typescript-eslint/eslint-plugin':
- specifier: ~8.45.0
- version: 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: ~8.46.0
+ version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.45.0
- version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@vitest/browser':
specifier: 3.2.4
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: 3.2.4
version: 3.2.4(vitest@3.2.4)
@@ -871,16 +871,16 @@ importers:
version: 12.1.1(stylelint@16.25.0(typescript@5.9.3))
ts-node:
specifier: 10.9.2
- version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.9.3)
+ version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.9.3)
typescript:
specifier: 5.9.3
version: 5.9.3
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
vitest:
specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
webdriverio:
specifier: 9.20.0
version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -895,16 +895,16 @@ importers:
version: 5.0.0
'@ckeditor/ckeditor5-package-tools':
specifier: 4.1.0
- version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
+ version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
'@typescript-eslint/eslint-plugin':
- specifier: ~8.45.0
- version: 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: ~8.46.0
+ version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.45.0
- version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@vitest/browser':
specifier: 3.2.4
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: 3.2.4
version: 3.2.4(vitest@3.2.4)
@@ -931,16 +931,16 @@ importers:
version: 12.1.1(stylelint@16.25.0(typescript@5.9.3))
ts-node:
specifier: 10.9.2
- version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.9.3)
+ version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.9.3)
typescript:
specifier: 5.9.3
version: 5.9.3
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
vitest:
specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
webdriverio:
specifier: 9.20.0
version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -955,16 +955,16 @@ importers:
version: 5.0.0
'@ckeditor/ckeditor5-package-tools':
specifier: 4.1.0
- version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
+ version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
'@typescript-eslint/eslint-plugin':
- specifier: ~8.45.0
- version: 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: ~8.46.0
+ version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.45.0
- version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@vitest/browser':
specifier: 3.2.4
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: 3.2.4
version: 3.2.4(vitest@3.2.4)
@@ -991,16 +991,16 @@ importers:
version: 12.1.1(stylelint@16.25.0(typescript@5.9.3))
ts-node:
specifier: 10.9.2
- version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.9.3)
+ version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.9.3)
typescript:
specifier: 5.9.3
version: 5.9.3
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
vitest:
specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
webdriverio:
specifier: 9.20.0
version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -1022,16 +1022,16 @@ importers:
version: 5.0.0
'@ckeditor/ckeditor5-package-tools':
specifier: 4.1.0
- version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
+ version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
'@typescript-eslint/eslint-plugin':
- specifier: ~8.45.0
- version: 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: ~8.46.0
+ version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.45.0
- version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@vitest/browser':
specifier: 3.2.4
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: 3.2.4
version: 3.2.4(vitest@3.2.4)
@@ -1058,16 +1058,16 @@ importers:
version: 12.1.1(stylelint@16.25.0(typescript@5.9.3))
ts-node:
specifier: 10.9.2
- version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.9.3)
+ version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.9.3)
typescript:
specifier: 5.9.3
version: 5.9.3
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
vitest:
specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
webdriverio:
specifier: 9.20.0
version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -1089,16 +1089,16 @@ importers:
version: 5.0.0
'@ckeditor/ckeditor5-package-tools':
specifier: 4.1.0
- version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
+ version: 4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)
'@typescript-eslint/eslint-plugin':
- specifier: ~8.45.0
- version: 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: ~8.46.0
+ version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.45.0
- version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@vitest/browser':
specifier: 3.2.4
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: 3.2.4
version: 3.2.4(vitest@3.2.4)
@@ -1125,16 +1125,16 @@ importers:
version: 12.1.1(stylelint@16.25.0(typescript@5.9.3))
ts-node:
specifier: 10.9.2
- version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.9.3)
+ version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.9.3)
typescript:
specifier: 5.9.3
version: 5.9.3
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
vitest:
specifier: 3.2.4
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
webdriverio:
specifier: 9.20.0
version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -1175,89 +1175,89 @@ importers:
specifier: 6.5.11
version: 6.5.11
'@codemirror/view':
- specifier: 6.38.4
- version: 6.38.4
+ specifier: 6.38.5
+ version: 6.38.5
'@fsegurai/codemirror-theme-abcdef':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-abyss':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-android-studio':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-andromeda':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-basic-dark':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-basic-light':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-cobalt2':
specifier: 6.0.2
- version: 6.0.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.0.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-forest':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-github-dark':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-github-light':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-gruvbox-dark':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-gruvbox-light':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-material-dark':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-material-light':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-monokai':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-nord':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-palenight':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-solarized-dark':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-solarized-light':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-tokyo-night-day':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-tokyo-night-storm':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-volcano':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-vscode-dark':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@fsegurai/codemirror-theme-vscode-light':
specifier: 6.2.2
- version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)
+ version: 6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)
'@replit/codemirror-indentation-markers':
specifier: 6.5.3
- version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)
+ version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)
'@replit/codemirror-lang-nix':
specifier: 6.0.1
- version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)
+ version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)
'@replit/codemirror-vim':
specifier: 6.3.0
- version: 6.3.0(@codemirror/commands@6.9.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)
+ version: 6.3.0(@codemirror/commands@6.9.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)
'@ssddanbrown/codemirror-lang-smarty':
specifier: 1.0.0
version: 1.0.0
@@ -1315,11 +1315,11 @@ importers:
specifier: 5.21.1
version: 5.21.1
'@typescript-eslint/eslint-plugin':
- specifier: 8.45.0
- version: 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: 8.45.0
- version: 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.46.0
+ version: 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
dotenv:
specifier: 17.2.3
version: 17.2.3
@@ -2015,8 +2015,8 @@ packages:
'@codemirror/theme-one-dark@6.1.2':
resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==}
- '@codemirror/view@6.38.4':
- resolution: {integrity: sha512-hduz0suCcUSC/kM8Fq3A9iLwInJDl8fD1xLpTIk+5xkNm8z/FT7UsIa9sOXrkpChh+XXc18RzswE8QqELsVl+g==}
+ '@codemirror/view@6.38.5':
+ resolution: {integrity: sha512-SFVsNAgsAoou+BjRewMqN+m9jaztB9wCWN9RSRgePqUbq8UVlvJfku5zB2KVhLPgH/h0RLk38tvd4tGeAhygnw==}
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
@@ -2093,85 +2093,85 @@ packages:
'@dual-bundle/import-meta-resolve@4.2.1':
resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==}
- '@electron-forge/cli@7.9.0':
- resolution: {integrity: sha512-FIs9rV6gN1v8rY73j/dvhQWF8tht035bN2LatY/z99H2KpWr0lhD03MOkIM2lRgrPEqVTExA4JEl9ja9yXBD3Q==}
+ '@electron-forge/cli@7.10.2':
+ resolution: {integrity: sha512-X1RtS5IqNgzGDS2rr1q0Y74wU/m3DbU4vSgllNun1ZQv1BfMpDcKLhnKi3aeetoA0huLTpMVU9eWJ7bziI9fxA==}
engines: {node: '>= 16.4.0'}
hasBin: true
- '@electron-forge/core-utils@7.9.0':
- resolution: {integrity: sha512-votOf1+20cUJim0smYZW7OylXrl89JlpuFTgFpn5WFpDfAV6C0iH9202K1sa33v9OQ989JnpWDZtQNQzQHHNtg==}
+ '@electron-forge/core-utils@7.10.2':
+ resolution: {integrity: sha512-JXrk2hWR4q8KgZFABpojjuqql3tYeVIH6qmtbkNEkZEQq7YIxajJBCct7J7bWfNQTmHotsQ3k5KLknhyhTaBMw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/core@7.9.0':
- resolution: {integrity: sha512-S5uFv9sFAVYSO80/K4HZsJL9L2Bs51IxCqR0a2Lk4NdKr9Fpzp6txwuALSJzM1bIpohtqbjmgut49o95wg30ZA==}
+ '@electron-forge/core@7.10.2':
+ resolution: {integrity: sha512-HAIuOtpOfGjA0cd55tbEV2gAv+A7tSZg9bonmVDYFEe6dBgbLk8a3+/1fJUdWW8fyFkg1wa8zK7pjP751bAXsA==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-base@7.9.0':
- resolution: {integrity: sha512-u0jo2kaYRxh/Rai6DyFSGJcNLRVWxiKaGUjMhX1LrKolufUkCxxR4TEmv4Hvl03WTr9pQb06umlIrVMaNb+j9A==}
+ '@electron-forge/maker-base@7.10.2':
+ resolution: {integrity: sha512-1QN4qnPVTjo+qWYG+s0kYv7XcuIowsPVvbl718FgJUcvkxyRjUA6kWHjFxRvdV6g7Sa2PzZBF+/Mrjpws1lehQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-deb@7.9.0':
- resolution: {integrity: sha512-b1TRMKkeuZ2PTKVsTMWLY+82O6UQVPQ17x5hkWe0lyIxRyCfJr6hD+AqYbvEJ50ncDkvyCtENBT6GnhfbKOGxA==}
+ '@electron-forge/maker-deb@7.10.2':
+ resolution: {integrity: sha512-4MPr9NW5UbEUbf9geZn5R/0O/QVIiy2EgUXOYOeKkA7oR8U6I1I3+BytYFHYcxbY6+PGhi1H1VTLJLITbHGVWw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-dmg@7.9.0':
- resolution: {integrity: sha512-W3kqbFuBIqxe/56eZmBv80Fw0RdXIL1DXF0D4O56ILnx7jW/d/j+8fJdie5dcw6nBySDIZbWnxsZiOIV2k2hrg==}
+ '@electron-forge/maker-dmg@7.10.2':
+ resolution: {integrity: sha512-ksSX6/Ioxa3h3rEGIg26qfDcJgB3aFGivitRdSkEnzUCLWJSUoThEwLToA7CAq4J/4ZREK0PDJ7FPsB+F8CYfQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-flatpak@7.9.0':
- resolution: {integrity: sha512-LqFWp61+ozlioFtqu+UryKjdsIdv+BLunDDjMRcdoMqiAblURz8bRgqq8FAdshiUt+iq4NPz6K9N0dKtSjhvuA==}
+ '@electron-forge/maker-flatpak@7.10.2':
+ resolution: {integrity: sha512-LldkYGkIhri99+HqetGjNzi2cdXy32o5uLlr7fDLoiegm8WAkvvWxFTLdSDS1RP94f6PVOKR9KHqPauu5GaIYw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-rpm@7.9.0':
- resolution: {integrity: sha512-if7Odo/LFn1MIGW6ftEnhP77+0pTeMd9e9YvM8+qiaztV/jVNB0RGuuzKOtQXzbrrjps/YWG15x+U4/XUIUylg==}
+ '@electron-forge/maker-rpm@7.10.2':
+ resolution: {integrity: sha512-LQoeYzbY/z1yuBBA+bNutCJmhCA4NcXUbFO4OTqsIX8B6y1zNTYZT4JEuhoK7eBsP4/Rz6u/JnNp0XOyjftOUQ==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-squirrel@7.9.0':
- resolution: {integrity: sha512-Ea3MrieWC1KRct1QSZeOBY+GIqHZO5bXj6xCuj81f6nz8JMCsXdgvKosdbfcJMSKu4SYZ52PtoweA6uAACfLww==}
+ '@electron-forge/maker-squirrel@7.10.2':
+ resolution: {integrity: sha512-Y5EhNSBXf4a7qcq+BK/x5qVDlQ1Gez5V+arUpDvVxf1zwvsB1aSyAjmoBrOKGYD9A5pJzjkMWMDw95MStl1W4A==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/maker-zip@7.9.0':
- resolution: {integrity: sha512-UGeziReiz8yuDTjliOjvbdyulIHpKAWkDeW3kOcMTUmRcCgrCkBNr+Pp6ih8Q3aBhG+CCd4++oe2rDnnuVvxFw==}
+ '@electron-forge/maker-zip@7.10.2':
+ resolution: {integrity: sha512-APRqVPM+O1rj4O7sk5f8tqJpS5UgxcUJEsCnXN4JRpdRvsOlMopzYZdazlCLH9l7S+r4ZKirjtMluIGeYq8YOg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/plugin-auto-unpack-natives@7.9.0':
- resolution: {integrity: sha512-PQeTq7Mp2bQkj/fdf+DjnSFKLWyBCSdLqZqNadszA9+2QcxFVv+v2ckTuwkHAdoecVNOdza/VZZIDbVFLhUHkQ==}
+ '@electron-forge/plugin-auto-unpack-natives@7.10.2':
+ resolution: {integrity: sha512-uQnahm1DECwqI8hBC7PKccyfovY/YqHNz8de3OxyjQDmwsqQfCA8Ucyh1E9n4NMEpw6Co8KLn+qF2BuIOsftLA==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/plugin-base@7.9.0':
- resolution: {integrity: sha512-2cnShgfes0sqH7A3+54fWhfJEfU++1OC2HE50a4sWtWEDwyWLGbwW7tp9BgSXrvIexO2AGKHQ1pKIjpZYVC0fA==}
+ '@electron-forge/plugin-base@7.10.2':
+ resolution: {integrity: sha512-+4YLmkLZxvS6JFXYNI4dHt8Il8iIvwk2o6lCJGwNysOUq2KOZ3Wu1He4Ko8HhKcO1VWbFvslbh57oQn963Aryw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/publisher-base@7.9.0':
- resolution: {integrity: sha512-z3eH4+C++LiDqlKmri04IbSNNWLRYLvc49uNiOgfvnejplLsos720TTbwgruyI3D2fbpmhrVmz9kp9H9YzXdVg==}
+ '@electron-forge/publisher-base@7.10.2':
+ resolution: {integrity: sha512-2k2VOY0wOoAgQoQXn/u3EJ2Ka2v363+wC/+zUMTWGeRHW8pRwX84WX2SpsTttRzbsqAEMJYw5FAzgMBEQUTfpg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/shared-types@7.9.0':
- resolution: {integrity: sha512-6jZF+zq3SYMnweQpgr5fwlSgOd2yOZ5qlfz/CgXyVljiv0e0UThzpOjfTLuwuVgZX7a60xV+h0mg1h82Glu3wQ==}
+ '@electron-forge/shared-types@7.10.2':
+ resolution: {integrity: sha512-e2pd9RsdbKwsNf6UtKoolmJGy92Nc0/XO4SI91doV8cM954hM2XSYz3VHoqXebMFAF1JDfXoEUt6UCRbEDgMgw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-base@7.9.0':
- resolution: {integrity: sha512-DvXdJHh4qP+LBX6xNBlO0nfljvJNTmiQNfLRfSouRdYCWbr5hC7wyWAX803HqwRsVLRZj2oiLYZjmyG3jESp8Q==}
+ '@electron-forge/template-base@7.10.2':
+ resolution: {integrity: sha512-D9DbEx3rtikIhUyn4tcz2pJqHNU/+FXKNnzSvmrJoJ9LusR3C42OU9GtbU8oT3nawpnCGgPFIOGXrzexFPp6DA==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-vite-typescript@7.9.0':
- resolution: {integrity: sha512-qGK649YnC3iOVrj/hHUu/TXG7Nn/a7QykEOPrCrxROWL7mtw8CMUE+FOVETd+eew7/4ldUNzl+5b9ebP8jHOmg==}
+ '@electron-forge/template-vite-typescript@7.10.2':
+ resolution: {integrity: sha512-df7rpxxIOIyZn0RfQ1GIlLW7dXhxkerc9uZ3ozO4C7zfvip3z0Mg+wS1synktPfr4WISaPktIdnj3mVu6Uu7Mw==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-vite@7.9.0':
- resolution: {integrity: sha512-m8Fi40XaF7YDJo7YqmfJbkjRRsttN9EEHkmq+McLrDUbln15Ppm59RAwUhizDQzs4enmLcNQPaFllbAg/2t8vQ==}
+ '@electron-forge/template-vite@7.10.2':
+ resolution: {integrity: sha512-hR9HBOM902yq7zhFl8bO3w5ufMgitdd5ZwDzAdKITFh2ttZemHy9ha5S0K+R+4GoXHz8t7hUTHk8+iPy09qrpA==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-webpack-typescript@7.9.0':
- resolution: {integrity: sha512-z7PB72sI11LBSPz9w9nwwk0le/lZ3VT8TrLc0NYh4F4LbZ19Z+lxcraaAdf21efvWzodhWx8khAyA8WvkNxVSw==}
+ '@electron-forge/template-webpack-typescript@7.10.2':
+ resolution: {integrity: sha512-JtrLUAFbxxWJ1kU7b8MNyL5SO9/rY5UeNz1b9hvMvilW8GxyMWUen58dafgdnx3OpKLNZnhOOhgRagNppEzJOA==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/template-webpack@7.9.0':
- resolution: {integrity: sha512-ser22QczYGor7N6bnMUwexdWbLMNApr6zpBoT+Xfn6P4Ks67ttzcfkAges7GXHNjXwox4ePYZ3+D7cWQem5C4g==}
+ '@electron-forge/template-webpack@7.10.2':
+ resolution: {integrity: sha512-VIUXA+XHM5SLjg7fIpOOmBsgi0LstkjrEz4gUzVL0AaITM7e+BCziIHld1ceXLbQ1FnKtrUGnQ9X/cHYxYvhHg==}
engines: {node: '>= 16.4.0'}
- '@electron-forge/tracer@7.9.0':
- resolution: {integrity: sha512-7itsjW1WJQADg7Ly61ggI5CCRt+QDVx3HOZC1w69jMUtnipKyPRCbvTBf1oplsNqbIzZxceXdfex6W53YNehvA==}
+ '@electron-forge/tracer@7.10.2':
+ resolution: {integrity: sha512-jhLLQbttfZViSOYn/3SJc8HML+jNZAytPVJwgGGd3coUiFysWJ2Xald99iqOiouPAhIigBfNPxQb/q/EbcDu4g==}
engines: {node: '>= 14.17.5'}
'@electron/asar@3.4.1':
@@ -3372,8 +3372,8 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@playwright/test@1.55.1':
- resolution: {integrity: sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==}
+ '@playwright/test@1.56.0':
+ resolution: {integrity: sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==}
engines: {node: '>=18'}
hasBin: true
@@ -4182,6 +4182,10 @@ packages:
resolution: {integrity: sha512-XJ4z5FxvY/t0Dibms/+gLJrI5niRoY0BCmE02fwmPcRYFPI4KI876xaE79YGWIKnEslMbuQPsIEsoU/DXa0DoA==}
engines: {node: '>=18.0.0'}
+ '@smithy/core@3.15.0':
+ resolution: {integrity: sha512-VJWncXgt+ExNn0U2+Y7UywuATtRYaodGQKFo9mDyh70q+fJGedfrqi2XuKU1BhiLeXgg6RZrW7VEKfeqFhHAJA==}
+ engines: {node: '>=18.0.0'}
+
'@smithy/credential-provider-imds@4.0.6':
resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==}
engines: {node: '>=18.0.0'}
@@ -4210,6 +4214,10 @@ packages:
resolution: {integrity: sha512-BG3KSmsx9A//KyIfw+sqNmWFr1YBUr+TwpxFT7yPqAk0yyDh7oSNgzfNH7pS6OC099EGx2ltOULvumCFe8bcgw==}
engines: {node: '>=18.0.0'}
+ '@smithy/fetch-http-handler@5.3.1':
+ resolution: {integrity: sha512-3AvYYbB+Dv5EPLqnJIAgYw/9+WzeBiUYS8B+rU0pHq5NMQMvrZmevUROS4V2GAt0jEOn9viBzPLrZE+riTNd5Q==}
+ engines: {node: '>=18.0.0'}
+
'@smithy/hash-node@4.0.4':
resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==}
engines: {node: '>=18.0.0'}
@@ -4234,8 +4242,12 @@ packages:
resolution: {integrity: sha512-jFVjuQeV8TkxaRlcCNg0GFVgg98tscsmIrIwRFeC74TIUyLE3jmY9xgc1WXrPQYRjQNK3aRoaIk6fhFRGOIoGw==}
engines: {node: '>=18.0.0'}
- '@smithy/middleware-retry@4.4.0':
- resolution: {integrity: sha512-yaVBR0vQnOnzex45zZ8ZrPzUnX73eUC8kVFaAAbn04+6V7lPtxn56vZEBBAhgS/eqD6Zm86o6sJs6FuQVoX5qg==}
+ '@smithy/middleware-endpoint@4.3.1':
+ resolution: {integrity: sha512-JtM4SjEgImLEJVXdsbvWHYiJ9dtuKE8bqLlvkvGi96LbejDL6qnVpVxEFUximFodoQbg0Gnkyff9EKUhFhVJFw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-retry@4.4.1':
+ resolution: {integrity: sha512-wXxS4ex8cJJteL0PPQmWYkNi9QKDWZIpsndr0wZI2EL+pSSvA/qqxXU60gBOJoIc2YgtZSWY/PE86qhKCCKP1w==}
engines: {node: '>=18.0.0'}
'@smithy/middleware-serde@4.2.0':
@@ -4286,6 +4298,10 @@ packages:
resolution: {integrity: sha512-3BDx/aCCPf+kkinYf5QQhdQ9UAGihgOVqI3QO5xQfSaIWvUE4KYLtiGRWsNe1SR7ijXC0QEPqofVp5Sb0zC8xQ==}
engines: {node: '>=18.0.0'}
+ '@smithy/smithy-client@4.7.1':
+ resolution: {integrity: sha512-WXVbiyNf/WOS/RHUoFMkJ6leEVpln5ojCjNBnzoZeMsnCg3A0BRhLK3WYc4V7PmYcYPZh9IYzzAg9XcNSzYxYQ==}
+ engines: {node: '>=18.0.0'}
+
'@smithy/types@4.6.0':
resolution: {integrity: sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==}
engines: {node: '>=18.0.0'}
@@ -4298,6 +4314,10 @@ packages:
resolution: {integrity: sha512-+erInz8WDv5KPe7xCsJCp+1WCjSbah9gWcmUXc9NqmhyPx59tf7jqFz+za1tRG1Y5KM1Cy1rWCcGypylFp4mvA==}
engines: {node: '>=18.0.0'}
+ '@smithy/util-base64@4.3.0':
+ resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==}
+ engines: {node: '>=18.0.0'}
+
'@smithy/util-body-length-browser@4.2.0':
resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==}
engines: {node: '>=18.0.0'}
@@ -4346,6 +4366,10 @@ packages:
resolution: {integrity: sha512-vtO7ktbixEcrVzMRmpQDnw/Ehr9UWjBvSJ9fyAbadKkC4w5Cm/4lMO8cHz8Ysb8uflvQUNRcuux/oNHKPXkffg==}
engines: {node: '>=18.0.0'}
+ '@smithy/util-stream@4.5.0':
+ resolution: {integrity: sha512-0TD5M5HCGu5diEvZ/O/WquSjhJPasqv7trjoqHyWjNh/FBeBl7a0ztl9uFMOsauYtRfd8jvpzIAQhDHbx+nvZw==}
+ engines: {node: '>=18.0.0'}
+
'@smithy/util-uri-escape@4.2.0':
resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==}
engines: {node: '>=18.0.0'}
@@ -4715,8 +4739,8 @@ packages:
'@types/express-http-proxy@1.6.7':
resolution: {integrity: sha512-CEp9pbnwVI1RzN9PXc+KESMxwUW5r1O7tkWb5h7Wg/YAIf+KulD/zKev8fbbn+Ljt0Yvs8MXwV2W6Id+cKxe2Q==}
- '@types/express-serve-static-core@5.0.7':
- resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==}
+ '@types/express-serve-static-core@5.1.0':
+ resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==}
'@types/express-session@1.18.2':
resolution: {integrity: sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==}
@@ -4841,6 +4865,9 @@ packages:
'@types/node@22.18.8':
resolution: {integrity: sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==}
+ '@types/node@22.18.9':
+ resolution: {integrity: sha512-5yBtK0k/q8PjkMXbTfeIEP/XVYnz1R9qZJ3yUicdEW7ppdDJfe+MqXEhpqDL3mtn4Wvs1u0KLEG0RXzCgNpsSg==}
+
'@types/node@24.6.0':
resolution: {integrity: sha512-F1CBxgqwOMc4GKJ7eY22hWhBVQuMYTtqI8L0FcszYcpYX0fzfDGpez22Xau8Mgm7O9fI+zA/TYIdq3tGWfweBA==}
@@ -4989,11 +5016,11 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/eslint-plugin@8.45.0':
- resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==}
+ '@typescript-eslint/eslint-plugin@8.46.0':
+ resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.45.0
+ '@typescript-eslint/parser': ^8.46.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
@@ -5004,8 +5031,8 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.45.0':
- resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==}
+ '@typescript-eslint/parser@8.46.0':
+ resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -5023,8 +5050,8 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.45.0':
- resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==}
+ '@typescript-eslint/project-service@8.46.0':
+ resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
@@ -5037,8 +5064,8 @@ packages:
resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/scope-manager@8.45.0':
- resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==}
+ '@typescript-eslint/scope-manager@8.46.0':
+ resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.40.0':
@@ -5059,6 +5086,12 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
+ '@typescript-eslint/tsconfig-utils@8.46.0':
+ resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.0.0'
+
'@typescript-eslint/type-utils@8.40.0':
resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5066,8 +5099,8 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.45.0':
- resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==}
+ '@typescript-eslint/type-utils@8.46.0':
+ resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -5085,6 +5118,10 @@ packages:
resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript-eslint/types@8.46.0':
+ resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@typescript-eslint/typescript-estree@8.40.0':
resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5097,8 +5134,8 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/typescript-estree@8.45.0':
- resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==}
+ '@typescript-eslint/typescript-estree@8.46.0':
+ resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
@@ -5117,8 +5154,8 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.45.0':
- resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==}
+ '@typescript-eslint/utils@8.46.0':
+ resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -5132,8 +5169,8 @@ packages:
resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/visitor-keys@8.45.0':
- resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==}
+ '@typescript-eslint/visitor-keys@8.46.0':
+ resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
@@ -5516,10 +5553,6 @@ packages:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
- engines: {node: '>=12'}
-
ansi-styles@6.2.3:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
@@ -7166,8 +7199,8 @@ packages:
resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==}
engines: {node: '>=8.0.0'}
- electron@38.2.1:
- resolution: {integrity: sha512-P4pE2RpRg3kM8IeOK+heg6iAxR5wcXnNHrbVchn7M3GBnYAhjfJRkROusdOro5PlKzdtfKjesbbqaG4MqQXccg==}
+ electron@38.2.2:
+ resolution: {integrity: sha512-OXSaVNXDlonXDjMRsFNQo1j5tzTKwKXh5/m46IjAFccBcZJZMISI+EjSI07oexIuhvKM8AZLuFuihVn4YjWWrA==}
engines: {node: '>= 12.20.55'}
hasBin: true
@@ -7397,8 +7430,8 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
- eslint-plugin-react-hooks@6.1.1:
- resolution: {integrity: sha512-St9EKZzOAQF704nt2oJvAKZHjhrpg25ClQoaAlHmPZuajFldVLqRDW4VBNAS01NzeiQF0m0qhG1ZA807K6aVaQ==}
+ eslint-plugin-react-hooks@7.0.0:
+ resolution: {integrity: sha512-fNXaOwvKwq2+pXiRpXc825Vd63+KM4DLL40Rtlycb8m7fYpp6efrTp1sa6ZbP/Ap58K2bEKFXRmhURE+CJAQWw==}
engines: {node: '>=18'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
@@ -8104,8 +8137,8 @@ packages:
handle-thing@2.0.1:
resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
- happy-dom@19.0.2:
- resolution: {integrity: sha512-831CLbgDyjRbd2lApHZFsBDe56onuFcjsCBPodzWpzedTpeDr8CGZjs7iEIdNW1DVwSFRecfwzLpVyGBPamwGA==}
+ happy-dom@20.0.0:
+ resolution: {integrity: sha512-GkWnwIFxVGCf2raNrxImLo397RdGhLapj5cT3R2PT7FwL62Ze1DROhzmYW7+J3p9105DYMVenEejEbnq5wA37w==}
engines: {node: '>=20.0.0'}
has-bigints@1.1.0:
@@ -8199,6 +8232,12 @@ packages:
resolution: {integrity: sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==}
engines: {node: '>=18.0.0'}
+ hermes-estree@0.25.1:
+ resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
+
+ hermes-parser@0.25.1:
+ resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
+
highlight.js@11.11.1:
resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
@@ -9362,8 +9401,8 @@ packages:
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
- marked@16.3.0:
- resolution: {integrity: sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w==}
+ marked@16.4.0:
+ resolution: {integrity: sha512-CTPAcRBq57cn3R8n3hwc2REddc28hjR7RzDXQ+lXLmMJYqn20BaI2cGw6QjgZGIgVfp2Wdfw4aMzgNteQ6qJgQ==}
engines: {node: '>= 20'}
hasBin: true
@@ -9611,8 +9650,8 @@ packages:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
- mind-elixir@5.3.1:
- resolution: {integrity: sha512-o40b9MWMP1WCntVKu7OTcxMLtDoUALtCfbwsjo16Jc6sgVgYd+q21HMo2DTeGoN3bnd5HDb8sgXJPqwD+kumpA==}
+ mind-elixir@5.3.2:
+ resolution: {integrity: sha512-dAhsRELKAmrs0UFTrCFeItrCEi0vtslr1kKkeBfu5FSDkuuu4U9imBcHdkeYnC0rUVfXe5Henirmz7yTkcdVVg==}
mini-css-extract-plugin@2.4.7:
resolution: {integrity: sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==}
@@ -10096,8 +10135,8 @@ packages:
resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
engines: {node: '>=18'}
- openai@6.1.0:
- resolution: {integrity: sha512-5sqb1wK67HoVgGlsPwcH2bUbkg66nnoIYKoyV9zi5pZPqh7EWlmSrSDjAh4O5jaIg/0rIlcDKBtWvZBuacmGZg==}
+ openai@6.3.0:
+ resolution: {integrity: sha512-E6vOGtZvdcb4yXQ5jXvDlUG599OhIkb/GjBLZXS+qk0HF+PJReIldEc9hM8Ft81vn+N6dRdFRb7BZNK8bbvXrw==}
hasBin: true
peerDependencies:
ws: ^8.18.0
@@ -10428,13 +10467,13 @@ packages:
pkg-types@2.1.0:
resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
- playwright-core@1.55.1:
- resolution: {integrity: sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==}
+ playwright-core@1.56.0:
+ resolution: {integrity: sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==}
engines: {node: '>=18'}
hasBin: true
- playwright@1.55.1:
- resolution: {integrity: sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==}
+ playwright@1.56.0:
+ resolution: {integrity: sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==}
engines: {node: '>=18'}
hasBin: true
@@ -11757,14 +11796,16 @@ packages:
peerDependencies:
rollup: ^3.0.0||^4.0.0
- rollup-plugin-webpack-stats@2.1.5:
- resolution: {integrity: sha512-dUYAd/7B7zNxosBQFK0xa2uNeBS1ESoWo8cYYeRX9kYYkI9ciHIBf2jGwAOQNg0V2KJjMmwkJEvqXfE1MColjg==}
+ rollup-plugin-webpack-stats@2.1.6:
+ resolution: {integrity: sha512-njKotmo0lWIbrTKJ5CrIPk9DuDsQziOo73rE3aQIAhecJj5o0ECBbE0vxgMor37o6TQ/IEAK8pDxzs4CqLdIJw==}
engines: {node: '>=18'}
peerDependencies:
rolldown: ^1.0.0-beta.0
rollup: ^3.0.0 || ^4.0.0
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
peerDependenciesMeta:
+ rolldown:
+ optional: true
rollup:
optional: true
vite:
@@ -13012,8 +13053,8 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- typescript-eslint@8.45.0:
- resolution: {integrity: sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==}
+ typescript-eslint@8.46.0:
+ resolution: {integrity: sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -13024,6 +13065,11 @@ packages:
engines: {node: '>=12.20'}
hasBin: true
+ typescript@5.4.5:
+ resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
typescript@5.8.2:
resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
engines: {node: '>=14.17'}
@@ -13946,7 +13992,7 @@ snapshots:
'@smithy/invalid-dependency': 4.0.4
'@smithy/middleware-content-length': 4.0.4
'@smithy/middleware-endpoint': 4.3.0
- '@smithy/middleware-retry': 4.4.0
+ '@smithy/middleware-retry': 4.4.1
'@smithy/middleware-serde': 4.2.0
'@smithy/middleware-stack': 4.2.0
'@smithy/node-config-provider': 4.3.0
@@ -13992,7 +14038,7 @@ snapshots:
'@smithy/invalid-dependency': 4.0.4
'@smithy/middleware-content-length': 4.0.4
'@smithy/middleware-endpoint': 4.3.0
- '@smithy/middleware-retry': 4.4.0
+ '@smithy/middleware-retry': 4.4.1
'@smithy/middleware-serde': 4.2.0
'@smithy/middleware-stack': 4.2.0
'@smithy/node-config-provider': 4.3.0
@@ -14186,7 +14232,7 @@ snapshots:
'@smithy/invalid-dependency': 4.0.4
'@smithy/middleware-content-length': 4.0.4
'@smithy/middleware-endpoint': 4.3.0
- '@smithy/middleware-retry': 4.4.0
+ '@smithy/middleware-retry': 4.4.1
'@smithy/middleware-serde': 4.2.0
'@smithy/middleware-stack': 4.2.0
'@smithy/node-config-provider': 4.3.0
@@ -14555,8 +14601,6 @@ snapshots:
'@ckeditor/ckeditor5-typing': 47.0.0
'@ckeditor/ckeditor5-utils': 47.0.0
ckeditor5: 47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-autosave@47.0.0':
dependencies:
@@ -14575,8 +14619,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.0.0
'@ckeditor/ckeditor5-utils': 47.0.0
ckeditor5: 47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-block-quote@47.0.0':
dependencies:
@@ -14587,8 +14629,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.0.0
'@ckeditor/ckeditor5-utils': 47.0.0
ckeditor5: 47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-bookmark@47.0.0':
dependencies:
@@ -14651,8 +14691,6 @@ snapshots:
'@ckeditor/ckeditor5-core': 47.0.0
'@ckeditor/ckeditor5-utils': 47.0.0
ckeditor5: 47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-code-block@47.0.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)':
dependencies:
@@ -15250,8 +15288,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 47.0.0
'@ckeditor/ckeditor5-widget': 47.0.0
ckeditor5: 47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-mention@47.0.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)':
dependencies:
@@ -15295,7 +15331,7 @@ snapshots:
es-toolkit: 1.39.5
protobufjs: 7.5.0
- '@ckeditor/ckeditor5-package-tools@4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)':
+ '@ckeditor/ckeditor5-package-tools@4.1.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(bufferutil@4.0.9)(esbuild@0.25.10)(utf-8-validate@6.0.5)':
dependencies:
'@ckeditor/ckeditor5-dev-translations': 53.2.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10))
'@ckeditor/ckeditor5-dev-utils': 53.2.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10))
@@ -15314,7 +15350,7 @@ snapshots:
stylelint-config-ckeditor5: 2.0.1(stylelint@16.25.0(typescript@5.9.3))
terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10))
ts-loader: 9.5.4(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10))
- ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.0.4)
+ ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.0.4)
typescript: 5.0.4
webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10)
webpack-dev-server: 5.2.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10))
@@ -15404,6 +15440,8 @@ snapshots:
'@ckeditor/ckeditor5-ui': 47.0.0
'@ckeditor/ckeditor5-utils': 47.0.0
ckeditor5: 47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-restricted-editing@47.0.0':
dependencies:
@@ -15479,7 +15517,7 @@ snapshots:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
'@codemirror/theme-one-dark': 6.1.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
ckeditor5: 47.0.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
'@ckeditor/ckeditor5-source-editing@47.0.0':
@@ -15665,21 +15703,21 @@ snapshots:
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@codemirror/commands@6.8.1':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@codemirror/commands@6.9.0':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@codemirror/lang-css@6.3.1':
@@ -15697,7 +15735,7 @@ snapshots:
'@codemirror/lang-javascript': 6.2.4
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@lezer/css': 1.1.11
'@lezer/html': 1.3.12
@@ -15708,7 +15746,7 @@ snapshots:
'@codemirror/language': 6.11.0
'@codemirror/lint': 6.8.5
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@lezer/javascript': 1.5.1
@@ -15723,7 +15761,7 @@ snapshots:
'@codemirror/lang-html': 6.4.11
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@lezer/markdown': 1.4.3
@@ -15733,7 +15771,7 @@ snapshots:
'@codemirror/lang-html': 6.4.11
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@lezer/markdown': 1.4.3
@@ -15759,14 +15797,14 @@ snapshots:
'@codemirror/autocomplete': 6.18.6
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@lezer/xml': 1.0.6
'@codemirror/language@6.11.0':
dependencies:
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
@@ -15779,13 +15817,13 @@ snapshots:
'@codemirror/lint@6.8.5':
dependencies:
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
crelt: 1.0.6
'@codemirror/search@6.5.11':
dependencies:
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
crelt: 1.0.6
'@codemirror/state@6.5.2':
@@ -15796,10 +15834,10 @@ snapshots:
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@codemirror/view@6.38.4':
+ '@codemirror/view@6.38.5':
dependencies:
'@codemirror/state': 6.5.2
crelt: 1.0.6
@@ -15865,29 +15903,33 @@ snapshots:
'@dual-bundle/import-meta-resolve@4.2.1': {}
- '@electron-forge/cli@7.9.0(encoding@0.1.13)':
+ '@electron-forge/cli@7.10.2(encoding@0.1.13)(esbuild@0.25.10)':
dependencies:
- '@electron-forge/core': 7.9.0(encoding@0.1.13)
- '@electron-forge/core-utils': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/core': 7.10.2(encoding@0.1.13)(esbuild@0.25.10)
+ '@electron-forge/core-utils': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
'@electron/get': 3.1.0
'@inquirer/prompts': 6.0.1
'@listr2/prompt-adapter-inquirer': 2.0.22(@inquirer/prompts@6.0.1)
chalk: 4.1.2
commander: 11.1.0
- debug: 4.4.1
+ debug: 4.4.3(supports-color@6.0.0)
fs-extra: 10.1.0
listr2: 7.0.2
log-symbols: 4.1.0
semver: 7.7.2
transitivePeerDependencies:
+ - '@swc/core'
- bluebird
- encoding
+ - esbuild
- supports-color
+ - uglify-js
+ - webpack-cli
- '@electron-forge/core-utils@7.9.0':
+ '@electron-forge/core-utils@7.10.2':
dependencies:
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/shared-types': 7.10.2
'@electron/rebuild': 3.7.2
'@malept/cross-spawn-promise': 2.0.0
chalk: 4.1.2
@@ -15895,24 +15937,25 @@ snapshots:
find-up: 5.0.0
fs-extra: 10.1.0
log-symbols: 4.1.0
+ parse-author: 2.0.0
semver: 7.7.2
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/core@7.9.0(encoding@0.1.13)':
+ '@electron-forge/core@7.10.2(encoding@0.1.13)(esbuild@0.25.10)':
dependencies:
- '@electron-forge/core-utils': 7.9.0
- '@electron-forge/maker-base': 7.9.0
- '@electron-forge/plugin-base': 7.9.0
- '@electron-forge/publisher-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
- '@electron-forge/template-base': 7.9.0
- '@electron-forge/template-vite': 7.9.0
- '@electron-forge/template-vite-typescript': 7.9.0
- '@electron-forge/template-webpack': 7.9.0
- '@electron-forge/template-webpack-typescript': 7.9.0
- '@electron-forge/tracer': 7.9.0
+ '@electron-forge/core-utils': 7.10.2
+ '@electron-forge/maker-base': 7.10.2
+ '@electron-forge/plugin-base': 7.10.2
+ '@electron-forge/publisher-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/template-base': 7.10.2
+ '@electron-forge/template-vite': 7.10.2
+ '@electron-forge/template-vite-typescript': 7.10.2
+ '@electron-forge/template-webpack': 7.10.2
+ '@electron-forge/template-webpack-typescript': 7.10.2(esbuild@0.25.10)
+ '@electron-forge/tracer': 7.10.2
'@electron/get': 3.1.0
'@electron/packager': 18.3.6
'@electron/rebuild': 3.7.2
@@ -15937,33 +15980,37 @@ snapshots:
source-map-support: 0.5.21
username: 5.1.0
transitivePeerDependencies:
+ - '@swc/core'
- bluebird
- encoding
+ - esbuild
- supports-color
+ - uglify-js
+ - webpack-cli
- '@electron-forge/maker-base@7.9.0':
+ '@electron-forge/maker-base@7.10.2':
dependencies:
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/shared-types': 7.10.2
fs-extra: 10.1.0
which: 2.0.2
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/maker-deb@7.9.0':
+ '@electron-forge/maker-deb@7.10.2':
dependencies:
- '@electron-forge/maker-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/maker-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
optionalDependencies:
electron-installer-debian: 3.2.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/maker-dmg@7.9.0':
+ '@electron-forge/maker-dmg@7.10.2':
dependencies:
- '@electron-forge/maker-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/maker-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
fs-extra: 10.1.0
optionalDependencies:
electron-installer-dmg: 5.0.1
@@ -15971,10 +16018,10 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/maker-flatpak@7.9.0':
+ '@electron-forge/maker-flatpak@7.10.2':
dependencies:
- '@electron-forge/maker-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/maker-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
fs-extra: 10.1.0
optionalDependencies:
'@malept/electron-installer-flatpak': 0.11.4
@@ -15982,20 +16029,20 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/maker-rpm@7.9.0':
+ '@electron-forge/maker-rpm@7.10.2':
dependencies:
- '@electron-forge/maker-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/maker-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
optionalDependencies:
electron-installer-redhat: 3.4.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/maker-squirrel@7.9.0':
+ '@electron-forge/maker-squirrel@7.10.2':
dependencies:
- '@electron-forge/maker-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/maker-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
fs-extra: 10.1.0
optionalDependencies:
electron-winstaller: 5.4.0
@@ -16003,10 +16050,10 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/maker-zip@7.9.0':
+ '@electron-forge/maker-zip@7.10.2':
dependencies:
- '@electron-forge/maker-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/maker-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
cross-zip: 4.0.1
fs-extra: 10.1.0
got: 11.8.6
@@ -16014,31 +16061,31 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/plugin-auto-unpack-natives@7.9.0':
+ '@electron-forge/plugin-auto-unpack-natives@7.10.2':
dependencies:
- '@electron-forge/plugin-base': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/plugin-base': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/plugin-base@7.9.0':
+ '@electron-forge/plugin-base@7.10.2':
dependencies:
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/shared-types': 7.10.2
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/publisher-base@7.9.0':
+ '@electron-forge/publisher-base@7.10.2':
dependencies:
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/shared-types': 7.10.2
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/shared-types@7.9.0':
+ '@electron-forge/shared-types@7.10.2':
dependencies:
- '@electron-forge/tracer': 7.9.0
+ '@electron-forge/tracer': 7.10.2
'@electron/packager': 18.3.6
'@electron/rebuild': 3.7.2
listr2: 7.0.2
@@ -16046,10 +16093,10 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/template-base@7.9.0':
+ '@electron-forge/template-base@7.10.2':
dependencies:
- '@electron-forge/core-utils': 7.9.0
- '@electron-forge/shared-types': 7.9.0
+ '@electron-forge/core-utils': 7.10.2
+ '@electron-forge/shared-types': 7.10.2
'@malept/cross-spawn-promise': 2.0.0
debug: 4.4.3(supports-color@6.0.0)
fs-extra: 10.1.0
@@ -16059,43 +16106,49 @@ snapshots:
- bluebird
- supports-color
- '@electron-forge/template-vite-typescript@7.9.0':
+ '@electron-forge/template-vite-typescript@7.10.2':
dependencies:
- '@electron-forge/shared-types': 7.9.0
- '@electron-forge/template-base': 7.9.0
+ '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/template-base': 7.10.2
fs-extra: 10.1.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/template-vite@7.9.0':
+ '@electron-forge/template-vite@7.10.2':
dependencies:
- '@electron-forge/shared-types': 7.9.0
- '@electron-forge/template-base': 7.9.0
+ '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/template-base': 7.10.2
fs-extra: 10.1.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/template-webpack-typescript@7.9.0':
+ '@electron-forge/template-webpack-typescript@7.10.2(esbuild@0.25.10)':
dependencies:
- '@electron-forge/shared-types': 7.9.0
- '@electron-forge/template-base': 7.9.0
+ '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/template-base': 7.10.2
+ fs-extra: 10.1.0
+ typescript: 5.4.5
+ webpack: 5.101.3(esbuild@0.25.10)
+ transitivePeerDependencies:
+ - '@swc/core'
+ - bluebird
+ - esbuild
+ - supports-color
+ - uglify-js
+ - webpack-cli
+
+ '@electron-forge/template-webpack@7.10.2':
+ dependencies:
+ '@electron-forge/shared-types': 7.10.2
+ '@electron-forge/template-base': 7.10.2
fs-extra: 10.1.0
transitivePeerDependencies:
- bluebird
- supports-color
- '@electron-forge/template-webpack@7.9.0':
- dependencies:
- '@electron-forge/shared-types': 7.9.0
- '@electron-forge/template-base': 7.9.0
- fs-extra: 10.1.0
- transitivePeerDependencies:
- - bluebird
- - supports-color
-
- '@electron-forge/tracer@7.9.0':
+ '@electron-forge/tracer@7.10.2':
dependencies:
chrome-trace-event: 1.0.4
@@ -16231,9 +16284,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@electron/remote@2.1.3(electron@38.2.1)':
+ '@electron/remote@2.1.3(electron@38.2.2)':
dependencies:
- electron: 38.2.1
+ electron: 38.2.2
'@electron/universal@2.0.2':
dependencies:
@@ -16512,172 +16565,172 @@ snapshots:
'@floating-ui/utils@0.2.9': {}
- '@fsegurai/codemirror-theme-abcdef@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-abcdef@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-abyss@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-abyss@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-android-studio@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-android-studio@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-andromeda@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-andromeda@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-basic-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-basic-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-basic-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-basic-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-cobalt2@6.0.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-cobalt2@6.0.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-forest@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-forest@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-github-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-github-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-github-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-github-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-gruvbox-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-gruvbox-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-gruvbox-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-gruvbox-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-material-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-material-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-material-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-material-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-monokai@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-monokai@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-nord@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-nord@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-palenight@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-palenight@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-solarized-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-solarized-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-solarized-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-solarized-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-tokyo-night-day@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-tokyo-night-day@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-volcano@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-volcano@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-vscode-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-vscode-dark@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
- '@fsegurai/codemirror-theme-vscode-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/highlight@1.2.1)':
+ '@fsegurai/codemirror-theme-vscode-light@6.2.2(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/highlight@1.2.1)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/highlight': 1.2.1
'@fullcalendar/core@6.1.19':
@@ -16756,26 +16809,26 @@ snapshots:
'@inquirer/core': 9.2.1
'@inquirer/type': 2.0.0
- '@inquirer/confirm@5.1.18(@types/node@22.18.8)':
+ '@inquirer/confirm@5.1.18(@types/node@22.18.9)':
dependencies:
- '@inquirer/core': 10.2.2(@types/node@22.18.8)
- '@inquirer/type': 3.0.8(@types/node@22.18.8)
+ '@inquirer/core': 10.2.2(@types/node@22.18.9)
+ '@inquirer/type': 3.0.8(@types/node@22.18.9)
optionalDependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
optional: true
- '@inquirer/core@10.2.2(@types/node@22.18.8)':
+ '@inquirer/core@10.2.2(@types/node@22.18.9)':
dependencies:
'@inquirer/ansi': 1.0.0
'@inquirer/figures': 1.0.13
- '@inquirer/type': 3.0.8(@types/node@22.18.8)
+ '@inquirer/type': 3.0.8(@types/node@22.18.9)
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
optional: true
'@inquirer/core@9.2.1':
@@ -16783,7 +16836,7 @@ snapshots:
'@inquirer/figures': 1.0.13
'@inquirer/type': 2.0.0
'@types/mute-stream': 0.0.4
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/wrap-ansi': 3.0.0
ansi-escapes: 4.3.2
cli-width: 4.1.0
@@ -16865,9 +16918,9 @@ snapshots:
dependencies:
mute-stream: 1.0.0
- '@inquirer/type@3.0.8(@types/node@22.18.8)':
+ '@inquirer/type@3.0.8(@types/node@22.18.9)':
optionalDependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
optional: true
'@isaacs/balanced-match@4.0.1': {}
@@ -17304,23 +17357,23 @@ snapshots:
dependencies:
langium: 3.3.1
- '@microsoft/api-extractor-model@7.30.6(@types/node@22.18.8)':
+ '@microsoft/api-extractor-model@7.30.6(@types/node@22.18.9)':
dependencies:
'@microsoft/tsdoc': 0.15.1
'@microsoft/tsdoc-config': 0.17.1
- '@rushstack/node-core-library': 5.13.1(@types/node@22.18.8)
+ '@rushstack/node-core-library': 5.13.1(@types/node@22.18.9)
transitivePeerDependencies:
- '@types/node'
- '@microsoft/api-extractor@7.52.8(@types/node@22.18.8)':
+ '@microsoft/api-extractor@7.52.8(@types/node@22.18.9)':
dependencies:
- '@microsoft/api-extractor-model': 7.30.6(@types/node@22.18.8)
+ '@microsoft/api-extractor-model': 7.30.6(@types/node@22.18.9)
'@microsoft/tsdoc': 0.15.1
'@microsoft/tsdoc-config': 0.17.1
- '@rushstack/node-core-library': 5.13.1(@types/node@22.18.8)
+ '@rushstack/node-core-library': 5.13.1(@types/node@22.18.9)
'@rushstack/rig-package': 0.5.3
- '@rushstack/terminal': 0.15.3(@types/node@22.18.8)
- '@rushstack/ts-command-line': 5.0.1(@types/node@22.18.8)
+ '@rushstack/terminal': 0.15.3(@types/node@22.18.9)
+ '@rushstack/ts-command-line': 5.0.1(@types/node@22.18.9)
lodash: 4.17.21
minimatch: 3.0.8
resolve: 1.22.10
@@ -17339,9 +17392,9 @@ snapshots:
'@microsoft/tsdoc@0.15.1': {}
- '@mind-elixir/node-menu@5.0.0(mind-elixir@5.3.1)':
+ '@mind-elixir/node-menu@5.0.0(mind-elixir@5.3.2)':
dependencies:
- mind-elixir: 5.3.1
+ mind-elixir: 5.3.2
'@mixmark-io/domino@2.2.0': {}
@@ -17481,9 +17534,11 @@ snapshots:
'@open-draft/until@2.1.0':
optional: true
- '@oxc-project/runtime@0.77.3': {}
+ '@oxc-project/runtime@0.77.3':
+ optional: true
- '@oxc-project/types@0.77.3': {}
+ '@oxc-project/types@0.77.3':
+ optional: true
'@panva/asn1.js@1.0.0': {}
@@ -17555,9 +17610,9 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@playwright/test@1.55.1':
+ '@playwright/test@1.56.0':
dependencies:
- playwright: 1.55.1
+ playwright: 1.56.0
'@polka/url@1.0.0-next.29': {}
@@ -17919,29 +17974,29 @@ snapshots:
'@radix-ui/rect@1.1.0': {}
- '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)':
+ '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)':
dependencies:
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
- '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)':
+ '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)':
dependencies:
'@codemirror/autocomplete': 6.18.6
'@codemirror/language': 6.11.0
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@lezer/common': 1.2.3
'@lezer/highlight': 1.2.1
'@lezer/lr': 1.4.2
- '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.9.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.4)':
+ '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.9.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.5)':
dependencies:
'@codemirror/commands': 6.9.0
'@codemirror/language': 6.11.0
'@codemirror/search': 6.5.11
'@codemirror/state': 6.5.2
- '@codemirror/view': 6.38.4
+ '@codemirror/view': 6.38.5
'@rolldown/binding-android-arm64@1.0.0-beta.29':
optional: true
@@ -17987,7 +18042,8 @@ snapshots:
'@rolldown/binding-win32-x64-msvc@1.0.0-beta.29':
optional: true
- '@rolldown/pluginutils@1.0.0-beta.29': {}
+ '@rolldown/pluginutils@1.0.0-beta.29':
+ optional: true
'@rollup/plugin-commonjs@25.0.8(rollup@4.40.0)':
dependencies:
@@ -18188,7 +18244,7 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.52.0':
optional: true
- '@rushstack/node-core-library@5.13.1(@types/node@22.18.8)':
+ '@rushstack/node-core-library@5.13.1(@types/node@22.18.9)':
dependencies:
ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.13.0)
@@ -18199,23 +18255,23 @@ snapshots:
resolve: 1.22.10
semver: 7.5.4
optionalDependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@rushstack/rig-package@0.5.3':
dependencies:
resolve: 1.22.10
strip-json-comments: 3.1.1
- '@rushstack/terminal@0.15.3(@types/node@22.18.8)':
+ '@rushstack/terminal@0.15.3(@types/node@22.18.9)':
dependencies:
- '@rushstack/node-core-library': 5.13.1(@types/node@22.18.8)
+ '@rushstack/node-core-library': 5.13.1(@types/node@22.18.9)
supports-color: 8.1.1
optionalDependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
- '@rushstack/ts-command-line@5.0.1(@types/node@22.18.8)':
+ '@rushstack/ts-command-line@5.0.1(@types/node@22.18.9)':
dependencies:
- '@rushstack/terminal': 0.15.3(@types/node@22.18.8)
+ '@rushstack/terminal': 0.15.3(@types/node@22.18.9)
'@types/argparse': 1.0.38
argparse: 1.0.10
string-argv: 0.3.2
@@ -18292,6 +18348,19 @@ snapshots:
'@smithy/uuid': 1.1.0
tslib: 2.8.1
+ '@smithy/core@3.15.0':
+ dependencies:
+ '@smithy/middleware-serde': 4.2.0
+ '@smithy/protocol-http': 5.3.0
+ '@smithy/types': 4.6.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-middleware': 4.2.0
+ '@smithy/util-stream': 4.5.0
+ '@smithy/util-utf8': 4.2.0
+ '@smithy/uuid': 1.1.0
+ tslib: 2.8.1
+
'@smithy/credential-provider-imds@4.0.6':
dependencies:
'@smithy/node-config-provider': 4.3.0
@@ -18338,6 +18407,14 @@ snapshots:
'@smithy/util-base64': 4.2.0
tslib: 2.8.1
+ '@smithy/fetch-http-handler@5.3.1':
+ dependencies:
+ '@smithy/protocol-http': 5.3.0
+ '@smithy/querystring-builder': 4.2.0
+ '@smithy/types': 4.6.0
+ '@smithy/util-base64': 4.3.0
+ tslib: 2.8.1
+
'@smithy/hash-node@4.0.4':
dependencies:
'@smithy/types': 4.6.0
@@ -18375,12 +18452,23 @@ snapshots:
'@smithy/util-middleware': 4.2.0
tslib: 2.8.1
- '@smithy/middleware-retry@4.4.0':
+ '@smithy/middleware-endpoint@4.3.1':
+ dependencies:
+ '@smithy/core': 3.15.0
+ '@smithy/middleware-serde': 4.2.0
+ '@smithy/node-config-provider': 4.3.0
+ '@smithy/shared-ini-file-loader': 4.3.0
+ '@smithy/types': 4.6.0
+ '@smithy/url-parser': 4.2.0
+ '@smithy/util-middleware': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-retry@4.4.1':
dependencies:
'@smithy/node-config-provider': 4.3.0
'@smithy/protocol-http': 5.3.0
'@smithy/service-error-classification': 4.2.0
- '@smithy/smithy-client': 4.7.0
+ '@smithy/smithy-client': 4.7.1
'@smithy/types': 4.6.0
'@smithy/util-middleware': 4.2.0
'@smithy/util-retry': 4.2.0
@@ -18464,6 +18552,16 @@ snapshots:
'@smithy/util-stream': 4.4.0
tslib: 2.8.1
+ '@smithy/smithy-client@4.7.1':
+ dependencies:
+ '@smithy/core': 3.15.0
+ '@smithy/middleware-endpoint': 4.3.1
+ '@smithy/middleware-stack': 4.2.0
+ '@smithy/protocol-http': 5.3.0
+ '@smithy/types': 4.6.0
+ '@smithy/util-stream': 4.5.0
+ tslib: 2.8.1
+
'@smithy/types@4.6.0':
dependencies:
tslib: 2.8.1
@@ -18480,6 +18578,12 @@ snapshots:
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
+ '@smithy/util-base64@4.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
'@smithy/util-body-length-browser@4.2.0':
dependencies:
tslib: 2.8.1
@@ -18552,6 +18656,17 @@ snapshots:
'@smithy/util-utf8': 4.2.0
tslib: 2.8.1
+ '@smithy/util-stream@4.5.0':
+ dependencies:
+ '@smithy/fetch-http-handler': 5.3.1
+ '@smithy/node-http-handler': 4.3.0
+ '@smithy/types': 4.6.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-hex-encoding': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
'@smithy/util-uri-escape@4.2.0':
dependencies:
tslib: 2.8.1
@@ -18725,7 +18840,7 @@ snapshots:
'@types/appdmg@0.5.5':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
optional: true
'@types/archiver@6.0.3':
@@ -18743,11 +18858,11 @@ snapshots:
'@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/bonjour@3.5.13':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/bootstrap@5.2.10':
dependencies:
@@ -18757,7 +18872,7 @@ snapshots:
dependencies:
'@types/http-cache-semantics': 4.0.4
'@types/keyv': 3.1.4
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/responselike': 1.0.3
'@types/chai@5.2.2':
@@ -18781,12 +18896,12 @@ snapshots:
'@types/connect-history-api-fallback@1.5.4':
dependencies:
- '@types/express-serve-static-core': 5.0.7
- '@types/node': 22.18.8
+ '@types/express-serve-static-core': 5.1.0
+ '@types/node': 22.18.9
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/cookie-parser@1.4.9(@types/express@5.0.3)':
dependencies:
@@ -18952,9 +19067,9 @@ snapshots:
dependencies:
'@types/express': 5.0.3
- '@types/express-serve-static-core@5.0.7':
+ '@types/express-serve-static-core@5.1.0':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/qs': 6.14.0
'@types/range-parser': 1.2.7
'@types/send': 0.17.5
@@ -18966,14 +19081,14 @@ snapshots:
'@types/express@4.17.23':
dependencies:
'@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 5.0.7
+ '@types/express-serve-static-core': 5.1.0
'@types/qs': 6.14.0
'@types/serve-static': 1.15.9
'@types/express@5.0.3':
dependencies:
'@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 5.0.7
+ '@types/express-serve-static-core': 5.1.0
'@types/serve-static': 1.15.9
'@types/fs-extra@11.0.4':
@@ -18983,7 +19098,7 @@ snapshots:
'@types/fs-extra@9.0.13':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
optional: true
'@types/geojson-vt@3.2.5':
@@ -18995,7 +19110,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/hast@3.0.4':
dependencies:
@@ -19009,7 +19124,7 @@ snapshots:
'@types/http-proxy@1.17.16':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/ini@4.1.1': {}
@@ -19023,11 +19138,11 @@ snapshots:
'@types/jsonfile@6.1.4':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/keyv@3.1.4':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/leaflet-gpx@1.3.8':
dependencies:
@@ -19077,11 +19192,11 @@ snapshots:
'@types/mute-stream@0.0.4':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/node-forge@1.3.14':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/node@16.9.1': {}
@@ -19101,6 +19216,10 @@ snapshots:
dependencies:
undici-types: 6.21.0
+ '@types/node@22.18.9':
+ dependencies:
+ undici-types: 6.21.0
+
'@types/node@24.6.0':
dependencies:
undici-types: 7.13.0
@@ -19130,13 +19249,13 @@ snapshots:
'@types/readdir-glob@1.1.5':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/resolve@1.20.2': {}
'@types/responselike@1.0.3':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/retry@0.12.2': {}
@@ -19153,7 +19272,7 @@ snapshots:
'@types/send@0.17.5':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/serve-favicon@2.5.7':
dependencies:
@@ -19180,7 +19299,7 @@ snapshots:
'@types/sockjs@0.3.36':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/statuses@2.0.6':
optional: true
@@ -19193,7 +19312,7 @@ snapshots:
dependencies:
'@types/cookiejar': 2.1.5
'@types/methods': 1.1.4
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
form-data: 4.0.4
'@types/supercluster@7.1.3':
@@ -19216,7 +19335,7 @@ snapshots:
'@types/through2@2.0.41':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
'@types/tmp@0.2.6': {}
@@ -19254,7 +19373,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
optional: true
'@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
@@ -19274,14 +19393,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.45.0
- '@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.45.0
+ '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.46.0
+ '@typescript-eslint/type-utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.46.0
eslint: 9.37.0(jiti@2.6.1)
graphemer: 1.4.0
ignore: 7.0.5
@@ -19303,12 +19422,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.45.0
- '@typescript-eslint/types': 8.45.0
- '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.45.0
+ '@typescript-eslint/scope-manager': 8.46.0
+ '@typescript-eslint/types': 8.46.0
+ '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.46.0
debug: 4.4.3(supports-color@6.0.0)
eslint: 9.37.0(jiti@2.6.1)
typescript: 5.9.3
@@ -19333,10 +19452,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.45.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.46.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.45.0
+ '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.46.0
debug: 4.4.3(supports-color@6.0.0)
typescript: 5.9.3
transitivePeerDependencies:
@@ -19352,10 +19471,10 @@ snapshots:
'@typescript-eslint/types': 8.44.1
'@typescript-eslint/visitor-keys': 8.44.1
- '@typescript-eslint/scope-manager@8.45.0':
+ '@typescript-eslint/scope-manager@8.46.0':
dependencies:
- '@typescript-eslint/types': 8.45.0
- '@typescript-eslint/visitor-keys': 8.45.0
+ '@typescript-eslint/types': 8.46.0
+ '@typescript-eslint/visitor-keys': 8.46.0
'@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.3)':
dependencies:
@@ -19369,6 +19488,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
+
'@typescript-eslint/type-utils@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@typescript-eslint/types': 8.40.0
@@ -19381,11 +19504,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/type-utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.45.0
- '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.46.0
+ '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3(supports-color@6.0.0)
eslint: 9.37.0(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -19399,6 +19522,8 @@ snapshots:
'@typescript-eslint/types@8.45.0': {}
+ '@typescript-eslint/types@8.46.0': {}
+
'@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.3)':
dependencies:
'@typescript-eslint/project-service': 8.40.0(typescript@5.9.3)
@@ -19431,12 +19556,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.45.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.45.0
- '@typescript-eslint/visitor-keys': 8.45.0
+ '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.46.0
+ '@typescript-eslint/visitor-keys': 8.46.0
debug: 4.4.3(supports-color@6.0.0)
fast-glob: 3.3.3
is-glob: 4.0.3
@@ -19469,12 +19594,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.45.0
- '@typescript-eslint/types': 8.45.0
- '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.46.0
+ '@typescript-eslint/types': 8.46.0
+ '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
eslint: 9.37.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
@@ -19490,9 +19615,9 @@ snapshots:
'@typescript-eslint/types': 8.44.1
eslint-visitor-keys: 4.2.1
- '@typescript-eslint/visitor-keys@8.45.0':
+ '@typescript-eslint/visitor-keys@8.46.0':
dependencies:
- '@typescript-eslint/types': 8.45.0
+ '@typescript-eslint/types': 8.46.0
eslint-visitor-keys: 4.2.1
'@ungap/structured-clone@1.3.0': {}
@@ -19528,19 +19653,19 @@ snapshots:
- bufferutil
- utf-8-validate
- '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
+ '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
dependencies:
'@testing-library/dom': 10.4.0
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0)
- '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
'@vitest/utils': 3.2.4
magic-string: 0.30.18
sirv: 3.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
optionalDependencies:
- playwright: 1.55.1
+ playwright: 1.56.0
webdriverio: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- bufferutil
@@ -19560,7 +19685,7 @@ snapshots:
magicast: 0.3.5
test-exclude: 7.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
@@ -19579,9 +19704,9 @@ snapshots:
std-env: 3.9.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
optionalDependencies:
- '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
transitivePeerDependencies:
- supports-color
@@ -19593,14 +19718,14 @@ snapshots:
chai: 5.2.0
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
+ '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.18
optionalDependencies:
- msw: 2.7.5(@types/node@22.18.8)(typescript@5.9.3)
- vite: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ msw: 2.7.5(@types/node@22.18.9)(typescript@5.9.3)
+ vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -19631,7 +19756,7 @@ snapshots:
sirv: 3.0.1
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
'@vitest/utils@3.2.4':
dependencies:
@@ -19976,11 +20101,10 @@ snapshots:
ansi-styles@5.2.0: {}
- ansi-styles@6.2.1: {}
-
ansi-styles@6.2.3: {}
- ansis@4.2.0: {}
+ ansis@4.2.0:
+ optional: true
any-base@1.1.0: {}
@@ -22123,7 +22247,7 @@ snapshots:
- supports-color
optional: true
- electron@38.2.1:
+ electron@38.2.2:
dependencies:
'@electron/get': 2.0.3
'@types/node': 22.18.8
@@ -22513,11 +22637,12 @@ snapshots:
dependencies:
eslint: 9.37.0(jiti@2.6.1)
- eslint-plugin-react-hooks@6.1.1(eslint@9.37.0(jiti@2.6.1)):
+ eslint-plugin-react-hooks@7.0.0(eslint@9.37.0(jiti@2.6.1)):
dependencies:
'@babel/core': 7.28.0
'@babel/parser': 7.28.4
eslint: 9.37.0(jiti@2.6.1)
+ hermes-parser: 0.25.1
zod: 3.24.4
zod-validation-error: 3.5.3(zod@3.24.4)
transitivePeerDependencies:
@@ -23453,7 +23578,7 @@ snapshots:
handle-thing@2.0.1: {}
- happy-dom@19.0.2:
+ happy-dom@20.0.0:
dependencies:
'@types/node': 20.19.18
'@types/whatwg-mimetype': 3.0.2
@@ -23594,6 +23719,12 @@ snapshots:
helmet@8.1.0: {}
+ hermes-estree@0.25.1: {}
+
+ hermes-parser@0.25.1:
+ dependencies:
+ hermes-estree: 0.25.1
+
highlight.js@11.11.1: {}
highlightjs-cobol@0.3.3:
@@ -24227,13 +24358,13 @@ snapshots:
jest-worker@26.6.2:
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
merge-stream: 2.0.0
supports-color: 7.2.0
jest-worker@27.5.1:
dependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -24900,7 +25031,7 @@ snapshots:
markdown-table@3.0.4: {}
- marked@16.3.0: {}
+ marked@16.4.0: {}
matcher@3.0.0:
dependencies:
@@ -25095,7 +25226,7 @@ snapshots:
katex: 0.16.23
khroma: 2.1.0
lodash-es: 4.17.21
- marked: 16.3.0
+ marked: 16.4.0
roughjs: 4.6.6
stylis: 4.3.6
ts-dedent: 2.2.0
@@ -25334,7 +25465,7 @@ snapshots:
mimic-response@3.1.0: {}
- mind-elixir@5.3.1: {}
+ mind-elixir@5.3.2: {}
mini-css-extract-plugin@2.4.7(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10)):
dependencies:
@@ -25529,12 +25660,12 @@ snapshots:
ms@2.1.3: {}
- msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3):
+ msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3):
dependencies:
'@bundled-es-modules/cookie': 2.0.1
'@bundled-es-modules/statuses': 1.0.1
'@bundled-es-modules/tough-cookie': 0.1.6
- '@inquirer/confirm': 5.1.18(@types/node@22.18.8)
+ '@inquirer/confirm': 5.1.18(@types/node@22.18.9)
'@mswjs/interceptors': 0.37.6
'@open-draft/deferred-promise': 2.2.0
'@open-draft/until': 2.1.0
@@ -25921,7 +26052,7 @@ snapshots:
is-inside-container: 1.0.0
wsl-utils: 0.1.0
- openai@6.1.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4):
+ openai@6.3.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4):
optionalDependencies:
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
zod: 3.24.4
@@ -26255,11 +26386,11 @@ snapshots:
exsolve: 1.0.5
pathe: 2.0.3
- playwright-core@1.55.1: {}
+ playwright-core@1.56.0: {}
- playwright@1.55.1:
+ playwright@1.56.0:
dependencies:
- playwright-core: 1.55.1
+ playwright-core: 1.56.0
optionalDependencies:
fsevents: 2.3.2
@@ -27267,7 +27398,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
long: 5.3.2
protocol-buffers-schema@3.6.0: {}
@@ -27762,12 +27893,13 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.29
'@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.29
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29
+ optional: true
- rollup-plugin-stats@1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
+ rollup-plugin-stats@1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
optionalDependencies:
rolldown: 1.0.0-beta.29
rollup: 4.52.0
- vite: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
rollup-plugin-styles@4.0.0(rollup@4.40.0):
dependencies:
@@ -27796,13 +27928,13 @@ snapshots:
'@rollup/pluginutils': 5.1.4(rollup@4.40.0)
rollup: 4.40.0
- rollup-plugin-webpack-stats@2.1.5(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
+ rollup-plugin-webpack-stats@2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
dependencies:
- rolldown: 1.0.0-beta.29
- rollup-plugin-stats: 1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ rollup-plugin-stats: 1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
optionalDependencies:
+ rolldown: 1.0.0-beta.29
rollup: 4.52.0
- vite: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
rollup@4.40.0:
dependencies:
@@ -29281,14 +29413,14 @@ snapshots:
typescript: 5.0.4
webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.10)
- ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.0.4):
+ ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.0.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
acorn: 8.15.0
acorn-walk: 8.3.4
arg: 4.1.3
@@ -29301,14 +29433,14 @@ snapshots:
optionalDependencies:
'@swc/core': 1.11.29(@swc/helpers@0.5.17)
- ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.8)(typescript@5.9.3):
+ ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.9)(typescript@5.9.3):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
acorn: 8.15.0
acorn-walk: 8.3.4
arg: 4.1.3
@@ -29438,12 +29570,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- typescript-eslint@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3):
+ typescript-eslint@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.37.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
@@ -29451,6 +29583,8 @@ snapshots:
typescript@5.0.4: {}
+ typescript@5.4.5: {}
+
typescript@5.8.2: {}
typescript@5.9.3: {}
@@ -29677,13 +29811,13 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.2
- vite-node@3.2.4(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1):
+ vite-node@3.2.4(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1):
dependencies:
cac: 6.7.14
debug: 4.4.3(supports-color@6.0.0)
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -29698,9 +29832,9 @@ snapshots:
- tsx
- yaml
- vite-plugin-dts@4.5.4(@types/node@22.18.8)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
+ vite-plugin-dts@4.5.4(@types/node@22.18.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
dependencies:
- '@microsoft/api-extractor': 7.52.8(@types/node@22.18.8)
+ '@microsoft/api-extractor': 7.52.8(@types/node@22.18.9)
'@rollup/pluginutils': 5.1.4(rollup@4.52.0)
'@volar/typescript': 2.4.13
'@vue/language-core': 2.2.0(typescript@5.9.3)
@@ -29711,7 +29845,7 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.3
optionalDependencies:
- vite: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- rollup
@@ -29726,11 +29860,11 @@ snapshots:
tinyglobby: 0.2.15
vite: 7.1.9(@types/node@24.6.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
- vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
+ vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
dependencies:
svgo: 3.3.2
typescript: 5.9.3
- vite: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
vite-prerender-plugin@0.5.11(vite@7.1.9(@types/node@24.6.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)):
dependencies:
@@ -29742,7 +29876,7 @@ snapshots:
stack-trace: 1.0.0-pre2
vite: 7.1.9(@types/node@24.6.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
- vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1):
+ vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1):
dependencies:
esbuild: 0.25.10
fdir: 6.5.0(picomatch@4.0.3)
@@ -29751,7 +29885,7 @@ snapshots:
rollup: 4.52.0
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 22.18.8
+ '@types/node': 22.18.9
fsevents: 2.3.3
jiti: 2.6.1
less: 4.1.3
@@ -29782,11 +29916,11 @@ snapshots:
tsx: 4.20.6
yaml: 2.8.1
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.8)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@19.0.2)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.9)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -29804,15 +29938,15 @@ snapshots:
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
- vite-node: 3.2.4(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vite: 7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+ vite-node: 3.2.4(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
- '@types/node': 22.18.8
- '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.8)(typescript@5.9.3))(playwright@1.55.1)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ '@types/node': 22.18.9
+ '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.9)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.9(@types/node@22.18.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/ui': 3.2.4(vitest@3.2.4)
- happy-dom: 19.0.2
+ happy-dom: 20.0.0
jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- jiti
@@ -29976,7 +30110,7 @@ snapshots:
'@types/bonjour': 3.5.13
'@types/connect-history-api-fallback': 1.5.4
'@types/express': 4.17.23
- '@types/express-serve-static-core': 5.0.7
+ '@types/express-serve-static-core': 5.1.0
'@types/serve-index': 1.9.4
'@types/serve-static': 1.15.9
'@types/sockjs': 0.3.36
@@ -30231,7 +30365,7 @@ snapshots:
wrap-ansi@8.1.0:
dependencies:
- ansi-styles: 6.2.1
+ ansi-styles: 6.2.3
string-width: 5.1.2
strip-ansi: 7.1.2
diff --git a/scripts/electron-rebuild.mts b/scripts/electron-rebuild.mts
index b2d41aa88a..5e343a97c0 100644
--- a/scripts/electron-rebuild.mts
+++ b/scripts/electron-rebuild.mts
@@ -23,7 +23,7 @@ function copyNativeDependencies(projectRoot: string) {
cpSync(sourcePath, destPath, { recursive: true, dereference: true });
}
-function rebuildNativeDependencies(projectRoot: string) {
+async function rebuildNativeDependencies(projectRoot: string) {
const electronVersion = determineElectronVersion(projectRoot);
if (!electronVersion) {
@@ -35,7 +35,7 @@ function rebuildNativeDependencies(projectRoot: string) {
console.log(`Rebuilding ${projectRoot} with ${electronVersion} for ${targetArch}...`);
const resolvedPath = resolve(projectRoot);
- rebuild({
+ await rebuild({
projectRootPath: resolvedPath,
buildPath: resolvedPath,
electronVersion,
@@ -64,5 +64,5 @@ function determineElectronVersion(projectRoot: string) {
for (const projectRoot of [ "apps/desktop", "apps/edit-docs" ]) {
copyNativeDependencies(projectRoot);
- rebuildNativeDependencies(projectRoot);
+ await rebuildNativeDependencies(projectRoot);
}