← Back to OmniLog

OmniLog Documentation

Everything you need to set up, deploy, and use OmniLog.

Table of Contents

Overview

OmniLog is a self-hosted work journal designed for developers, researchers, and anyone who wants a private, structured writing tool. It supports three editor modes — rich text, Markdown, and LaTeX — all interconvertible.

Key principles:

Architecture

OmniLog uses a client-server model. Desktop and mobile apps connect to a central server over a REST API. The server stores all data in MongoDB and handles authentication, versioning, and file uploads.

Desktop App (Windows / Linux)
Mobile App (Android)
↓ HTTPS / REST API ↓
OmniLog Server (Rust / Axum)
MongoDB
File Storage (images)

The server is a single Rust binary with no runtime dependencies. It can run on any Linux server, VPS, or even a Raspberry Pi.

Self-Hosted Server Deployment

The recommended way to run OmniLog. You get full control over your data, backups, and access.

Requirements

Step 1: Download the server binary

Download the latest release for your platform. The binary is self-contained — no Node.js, Python, or Docker required.

Step 2: Create a configuration file

Create a .env file in the same directory as the binary:

# Server
PORT=9528
HOST=0.0.0.0

# Database
MONGODB_URI=mongodb://user:pass@localhost:27017/omnilog?authSource=admin

# Security - generate a random token for API auth
API_TOKEN=your-random-token-here

# Bootstrap admin account
ADMIN_USERNAME=admin
ADMIN_PASSWORD=your-secure-password

# Optional
# SMTP_HOST=smtp.example.com
# SMTP_PORT=587
# [email protected]
# SMTP_PASS=password
# PUBLIC_URL=https://omnilog.example.com

Step 3: Run

# Run directly
./omnilog-server

# Or create a systemd service for auto-start
sudo tee /etc/systemd/system/omnilog.service <<EOF
[Unit]
Description=OmniLog Server
After=network.target mongod.service

[Service]
Type=simple
WorkingDirectory=/opt/omnilog
ExecStart=/opt/omnilog/omnilog-server
EnvironmentFile=/opt/omnilog/.env
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable --now omnilog

Step 4: Set up HTTPS

Put the server behind a reverse proxy. Example with Caddy:

omnilog.example.com {
    reverse_proxy localhost:9528
}

Step 5: Connect your apps

Open the desktop or mobile app, enter your server URL (e.g. https://omnilog.example.com), and sign in with the admin credentials from your .env.

Tip: The first time the server starts, it creates an admin account using ADMIN_USERNAME and ADMIN_PASSWORD. You can then create additional user accounts through the admin panel or API.

One-Click Local Mode (Desktop)

Don't have a server? The desktop app includes an embedded server that runs on your machine with one click.

To start: open the desktop app, and click “Start local server” on the setup screen. The app spawns the server in the background and connects automatically.

Migration: You can switch from local mode to a self-hosted server at any time. Your entries are synced to the new server automatically.

Note: Local mode is desktop-only. Mobile apps require a remote server to connect to — they cannot run an embedded server.

Official Cloud (Coming Soon)

We are building a hosted version of OmniLog for users who prefer not to manage a server. The official cloud service will offer:

Your apps will connect to the official service the same way they connect to a self-hosted server. You can migrate between self-hosted and cloud at any time.

Client Apps

Desktop (Windows & Linux)

The full-featured client, built with Tauri 2 (Rust + React). Includes:

Mobile (Android)

Optimized for quick capture and review on the go. Built with Tauri 2 Mobile. Includes:

Note: The mobile app is currently in development. Android release coming soon.

Cross-Platform Sync

All clients connect to the same server. Write on your desktop at work, review on your phone at home.

Each device identifies itself by a unique device name, visible in the version history so you can see where each edit was made.

REST API

The server exposes a full REST API for all operations. Both the desktop and mobile apps use this API — there is no special protocol.

Authentication

Two methods:

Key Endpoints

GET    /health              # Server health check
POST   /api/auth/login       # Login, returns JWT
GET    /api/auth/me          # Current user profile

GET    /api/entries           # List entries (with ?folderId= filter)
POST   /api/entries           # Create entry
PUT    /api/entries/:id       # Update entry
DELETE /api/entries/:id       # Delete entry
GET    /api/entries/search?q= # Full-text search

GET    /api/folders           # List folders
POST   /api/folders           # Create folder
PUT    /api/folders/:id       # Update folder
DELETE /api/folders/:id       # Delete folder

GET    /api/settings          # Server settings
PUT    /api/settings          # Update settings

POST   /api/assets/upload     # Upload image (multipart)

Configuration Reference

All configuration is done through environment variables (or a .env file).

# Required
PORT=9528                 # HTTP listen port
HOST=0.0.0.0              # Bind address
MONGODB_URI=mongodb://... # MongoDB connection string
API_TOKEN=...             # Static admin token

# Bootstrap (used on first run only)
ADMIN_USERNAME=admin
ADMIN_PASSWORD=...

# Optional: Email (for verification & password reset)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
[email protected]
SMTP_PASS=...
EMAIL_FROM=OmniLog <[email protected]>

# Optional: Public URL (used in emails)
PUBLIC_URL=https://omnilog.example.com

# Optional: CORS (default: allow all)
CORS_ORIGIN=https://your-frontend.com