# Trilium

Hierarchical note-taking app that builds a personal knowledge base.

- Replaces: [Evernote](https://openlogs.fyi/alternatives/evernote), [Notion](https://openlogs.fyi/alternatives/notion)
- Summary: Paid note-taking services, such as Evernote and Notion.
- Stack: TypeScript (language)
- Deployment: docker_compose
- License: AGPL-3.0 (osi) [source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/README.md), read 2026-10-22)
- Difficulty: easy. 1 service, 3 volume mounts, no env values to set, no elevated host access. Heuristic score 1 of 11: easy.
- Requirements: not stated
- Repository: [TriliumNext/Trilium](https://github.com/TriliumNext/Trilium)

## Install

1. Docker with the Compose plugin ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the compose file as docker-compose.yml ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml))

   ```yaml
   # Running `docker-compose up` will create/use the "trilium-data" directory next to this file
   # To run in the background, use `docker-compose up -d`
   services:
     trilium:
       # Optionally, replace `latest` with a version tag like `v0.90.3`
       # Using `latest` may cause unintended updates to the container
       image: triliumnext/trilium:latest
       # Restart the container unless it was stopped by the user
       restart: unless-stopped
       ports:
         # By default, Trilium will be available at http://localhost:8080
         # It will also be accessible at http://<host-ip>:8080
         # You might want to limit this with something like Docker Networks, reverse proxies, or firewall rules,
         # however be aware that using UFW is known to not work with default Docker installations, see:
         # https://docs.docker.com/engine/network/packet-filtering-firewalls/#docker-and-ufw
         - '8080:8080'
       volumes:
         # Trilium stores its data in `trilium-data` next to this file. To use another directory
         # on the host, change the part before the colon only.
         - ./trilium-data:/home/node/trilium-data
         - /etc/timezone:/etc/timezone:ro
         - /etc/localtime:/etc/localtime:ro
   ```

3. Start it ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml))

   ```bash
   docker compose up -d
   ```

4. Open the app ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml))

   ```text
   Open http://localhost:8080. The compose file publishes host port 8080 for the trilium service.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some images use the latest tag or no tag: Images without a pinned version: trilium: triliumnext/trilium:latest. A later pull can get a different version. ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 8080 (trilium). A port without a host address listens on all host network interfaces. ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./trilium-data at /home/node/trilium-data (trilium), /etc/timezone at /etc/timezone (trilium), /etc/localtime at /etc/localtime (trilium). ([source](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 579
- Stars: 38437, forks: 2593
- Last push: 2026-10-22 (0 days ago)
- Latest release: v0.106.0 on 2026-09-25 (26 days ago)

## Sources

- [Repository: https://github.com/TriliumNext/Trilium](https://github.com/TriliumNext/Trilium)
- [License: https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/LICENSE](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/LICENSE)
- [Business model: https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/README.md](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/README.md)
- [Compose file: https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml](https://github.com/TriliumNext/Trilium/blob/1f26d8ccb09890113a7d6dd95417563732911e82/docker-compose.yml)

---
Canonical: https://openlogs.fyi/tools/trilium  
Last updated: 2026-10-22
