Español
Empezar

← Todas las plantillas · Notas y wikis

Despliega Trilium Notes en un clic

Una base de conocimiento jerárquica para grandes colecciones de notas personales

Una alternativa autoalojada a Notion, Evernote y Obsidian.

¿Qué es Trilium Notes?

Trilium Notes es una app de notas gratuita y de código abierto pensada para grandes bases de conocimiento personales, una alternativa a Notion, Evernote y Obsidian para quienes quieren sus notas en un servidor propio. Las notas forman un árbol tan profundo como quieras, y una misma nota puede estar en varios lugares a la vez. Además de texto enriquecido con tablas, imágenes y fórmulas matemáticas, una nota puede ser código, un lienzo de Excalidraw, un mapa mental, un mapa geográfico o un mapa de relaciones, y los atributos y los scripts convierten las notas en pequeñas herramientas. Cada nota conserva sus revisiones, y la búsqueda de texto completo permite volver a encontrarla.

El servidor es casi la misma app en el navegador, con una vista táctil para teléfonos, y las apps de escritorio para Windows, macOS y Linux se sincronizan con él. Las notas protegidas se cifran con tu contraseña, una nota se puede compartir públicamente mediante un enlace y un web clipper guarda páginas desde el navegador. Esta plantilla crea una base de conocimiento nueva y vacía con la contraseña indicada antes de que Trilium responda a nadie. El inconveniente: Trilium es para una sola persona, con una sola contraseña y sin cuentas para otros, y no tiene app móvil oficial.

Hosting de Trilium Notes en Pethost

  1. Inicias sesión en Pethost con una passkey, GitHub o Google. ¿Aún no tienes máquina? Eliges un plan, y el enlace espera hasta que esté lista.
  2. Nuevo proyecto se abre en Trilium Notes. Rellenas lo que pide y haces clic en Crear proyecto: Contraseña.
  3. En un par de minutos Trilium Notes está en marcha en su propia dirección con HTTPS. Sus secretos se generan al azar, y sus datos entran en el backup de cada noche.
  4. Es un proyecto como cualquier otro: tú o tu agente lo pueden cambiar, volver a una versión anterior o restaurar.

Preguntas sobre Trilium Notes

¿Trilium Notes es gratis?

Sí. Trilium es de código abierto bajo la licencia AGPL-3.0 y no tiene versión de pago: su servidor, sus apps de escritorio y la sincronización son gratis.

¿Qué es TriliumNext?

Es el proyecto de la comunidad que continuó Trilium. El desarrollador original de Trilium, Zadam, le cedió el repositorio de Trilium, y ahora el proyecto publica la app de nuevo como Trilium Notes. Una base de datos del Trilium original se abre en ella sin pasos especiales.

Trilium frente a Obsidian: ¿cuál elegir?

Obsidian guarda archivos Markdown en una carpeta de cada dispositivo, es de código cerrado y cobra por su sincronización. Trilium guarda las notas en una base de datos en tu máquina, es de código abierto y sincroniza gratis sus apps de escritorio con tu servidor de Trilium. Los puntos fuertes de Obsidian son los plugins y los archivos de texto simples; los de Trilium, el árbol de notas, la clonación de notas y sus muchos tipos de nota.

¿Hay una app de Trilium para teléfonos?

No hay ninguna oficial. El servidor tiene una interfaz móvil para los navegadores de los teléfonos, y existen apps de la comunidad: TriliumDroid y Pocket Trilium para Android, y Trinote para iOS.

¿Puedo importar mis notas de Evernote o de Markdown a Trilium?

Sí. Trilium importa las exportaciones ENEX de Evernote y los archivos Markdown, y exporta las notas como Markdown o HTML, así que tus notas pueden salir con la misma facilidad con la que entraron.

¿Cuánta memoria y disco necesita Trilium Notes?

Trilium es ligero: unos 100 MB de memoria; su base de datos crece con tus notas y adjuntos, y sus propios backups diarios, semanales y mensuales se guardan junto a ella. En Pethost le basta el plan Starter, y queda sitio para otras apps a su lado.

El archivo Docker Compose de Trilium Notes

La plantilla es este compose.yaml y las variables que se escriben en el .env del proyecto al crearlo. Pethost ejecuta el archivo tal como está escrito.

Contenedores: trilium (triliumnext/trilium:v0.106.1).

Volúmenes, en el backup de cada noche: data.

services:
  trilium:
    image: triliumnext/trilium:v0.106.1
    restart: unless-stopped
    environment:
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      # Requests come through the proxy: the client's own address is the one it forwards, so that
      # a stranger's wrong passwords do not lock everyone out of signing in.
      TRILIUM_NETWORK_TRUSTEDREVERSEPROXY: uniquelocal
    # A new Trilium offers its setup to whoever opens it first, then asks them for the password.
    # So while it has no password, it runs on port 8081, which nobody reaches: a new knowledge base
    # is made there with the password given, and only then does Trilium answer on 8080.
    command:
      - sh
      - -c
      - |
        set -e
        if ! node -e '
          const { DatabaseSync } = require("node:sqlite");
          const db = new DatabaseSync(process.env.TRILIUM_DATA_DIR + "/document.db", { readOnly: true });
          const row = db.prepare("select value from options where name = ?").get("passwordVerificationHash");
          process.exit(row?.value ? 0 : 1);
        ' 2>/dev/null; then
          TRILIUM_PORT=8081 node ./main.mjs &
          setup=$$!
          node -e '
            const base = "http://127.0.0.1:8081";
            const setUp = async () => {
              const status = await fetch(base + "/api/setup/status").then((r) => r.json());
              if (!status.isInitialized) {
                const made = await fetch(base + "/api/setup/new-document?skipDemoDb", {
                  method: "POST",
                  headers: { "content-type": "application/json" },
                  body: JSON.stringify({ locale: "en" })
                });
                if (!made.ok) throw new Error("new-document: " + made.status + " " + (await made.text()));
              }
              const password = process.env.ADMIN_PASSWORD;
              const set = await fetch(base + "/set-password", {
                method: "POST",
                body: new URLSearchParams({ password1: password, password2: password }),
                redirect: "manual"
              });
              if (set.status !== 302) throw new Error("set-password: " + set.status + " " + (await set.text()));
            };
            (async () => {
              let failure;
              for (let i = 0; i < 180; i++) {
                try {
                  return await setUp();
                } catch (error) {
                  failure = error;
                  await new Promise((done) => setTimeout(done, 1000));
                }
              }
              console.error(failure);
              process.exit(1);
            })();
          '
          kill $$setup
          wait $$setup || true
        fi
        chown -R node:node /home/node
        exec su -c "node ./main.mjs" node
    volumes:
      - data:/home/node/trilium-data

volumes:
  data:

Más en Notas y wikis