import { ComponentChildren } from 'preact';
import Card from '../../components/Card.js';
import Section from '../../components/Section.js';
import DownloadButton from '../../components/DownloadButton.js';
import "./index.css";
import { useColorScheme, usePageTitle } from '../../hooks.js';
import Button, { Link } from '../../components/Button.js';
import gitHubIcon from "../../assets/boxicons/bx-github.svg?raw";
import dockerIcon from "../../assets/boxicons/bx-docker.svg?raw";
import noteStructureIcon from "../../assets/boxicons/bx-folder.svg?raw";
import attributesIcon from "../../assets/boxicons/bx-tag.svg?raw";
import hoistingIcon from "../../assets/boxicons/bx-chevrons-up.svg?raw";
import revisionsIcon from "../../assets/boxicons/bx-history.svg?raw";
import syncIcon from "../../assets/boxicons/bx-refresh-cw.svg?raw";
import protectedNotesIcon from "../../assets/boxicons/bx-shield.svg?raw";
import jumpToIcon from "../../assets/boxicons/bx-send-alt.svg?raw";
import searchIcon from "../../assets/boxicons/bx-search.svg?raw";
import webClipperIcon from "../../assets/boxicons/bx-paperclip.svg?raw";
import importExportIcon from "../../assets/boxicons/bx-swap-horizontal.svg?raw";
import shareIcon from "../../assets/boxicons/bx-globe.svg?raw";
import codeIcon from "../../assets/boxicons/bx-code.svg?raw";
import restApiIcon from "../../assets/boxicons/bx-extension.svg?raw";
import textNoteIcon from "../../assets/boxicons/bx-note.svg?raw";
import fileIcon from "../../assets/boxicons/bx-file.svg?raw";
import canvasIcon from "../../assets/boxicons/bx-pen.svg?raw";
import mermaidIcon from "../../assets/boxicons/bx-vector-square.svg?raw";
import mindmapIcon from "../../assets/boxicons/bx-network-chart.svg?raw";
import calendarIcon from "../../assets/boxicons/bx-calendar.svg?raw";
import tableIcon from "../../assets/boxicons/bx-table.svg?raw";
import boardIcon from "../../assets/boxicons/bx-columns-3.svg?raw";
import geomapIcon from "../../assets/boxicons/bx-map.svg?raw";
import { getPlatform } from '../../download-helper.js';
import { useState } from 'preact/hooks';
export function Home() {
usePageTitle("");
return (
<>
>
);
}
function HeroSection() {
const platform = getPlatform();
let screenshotUrl: string | null = null;
const colorScheme = useColorScheme();
if (colorScheme) {
switch (platform) {
case "macos":
screenshotUrl = `/screenshot_desktop_mac_${colorScheme}.webp`;
break;
case "linux":
break;
case "windows":
default:
screenshotUrl = `/screenshot_desktop_win_${colorScheme}.webp`;
break;
}
}
return (
Organize your thoughts. Build your personal knowledge base.
Trilium is an open-source solution for note-taking and organizing a personal knowledge base. Use it locally on your desktop, or sync it with your self-hosted server to keep your notes everywhere you go.
Notes can be arranged hierarchically. There's no need for folders, since each note can contain sub-notes. A single note can be added in multiple places in the hierarchy.Use relations between notes or add labels for easy categorization. Use promoted attributes to enter structured information which can be used in tables, boards.Easily separate your personal and work notes by grouping them under a workspace, which focuses your note tree to only show a specific set of notes.
>
);
}
function ProductivityBenefitsSection() {
return (
<>
Notes are periodically saved in the background and revisions can be used for review or to undo accidental changes. Revisions can also be created on-demand.Use a self-hosted or cloud instance to easily synchronize your notes across multiple devices, and to access it from your mobile phone using a PWA.Protect sensitive personal information by encrypting the notes and locking them behind a password-protected session.Jump quickly to notes or UI commands across the hierarchy by searching for their title, with fuzzy matching to account for typos or slight differences.Or search for text inside notes and narrow down the search by filtering by the parent note, or by depth.Grab web pages (or screenshots) and place them directly into Trilium using the web clipper browser extension.
>
);
}
function NoteTypesSection() {
return (
and others:{" "}
note map,{" "}
relation map,{" "}
saved searches,{" "}
render note,{" "}
web views.
);
}
function ExtensibilityBenefitsSection() {
return (
<>
Easily interact with other applications using Markdown, ENEX, OML formats.If you have a server, it can be used to share a subset of your notes with other people.Build your own integrations within Trilium with custom widgets, or server-side logic.Interact with Trilium programatically using its builtin REST API.
Currently there is no official mobile application. However, if you have a server instance you can access it using a web browser and even install it as a PWA. For Android, there is an unofficial application called TriliumDroid that even works offline (same as a desktop client).All your notes will be stored in an SQLite database in an application folder. The reasoning why Trilium uses a database instead of plain text files is both performance and some features would be much more difficult to implement such as clones (same note in multiple places in the tree). To find the application folder, simply go to the About window.No, the server allows access via a web browser and manages the synchronization if you have multiple devices. To get started, it's enough to download the desktop application and start using it.Depending on usage, the application should be able to handle at least 100.000 notes without an issue. Do note that the sync process can sometimes fail if uploading many large files (> 1 GB per file) since Trilium is meant more as a knowledge base application rather than a file store (like NextCloud, for example).No, it's generally not a good idea to share a SQLite database over a network drive. Although sometimes it might work, there are chances that the database will get corrupted due to imperfect file locks over a network.By default, notes are not encrypted and can be read directly from the database. Once a note is marked as encrypted, the note is encrypted using AES-128-CBC.
);
}
function FaqItem({ question, children }: { question: string; children: ComponentChildren }) {
return (
{children}
)
}
function FinalCta() {
return (
Build your personal knowledge base with powerful features and full privacy.