journiv-app

journiv活跃维护

自托管的私密日记应用,数据全留在自己服务器上,支持心情追踪和笔记记录,适合注重隐私、想搭在 homelab 里的用户。

Journiv - Self hosted private journaling app

v0.1.0-beta.26发布于 2026-09-28 04:37 UTC1,256star54fork同步于 2026-11-07 07:33 UTC

怎么上手

由 README 提炼,执行前请确认
docker run -d --name journiv -p 8000:8000 -e SECRET_KEY=your-secret-key-here -e DOMAIN_NAME=192.168.1.1 -e ALLOW_INSECURE_COOKIE_AUTH_OVER_HTTP=true -v journiv_data:/data --restart unless-stopped swalabtech/journiv-app:latest
硬件要求按 README 说明

README 未说明具体硬件要求;仅给出 Docker 运行方式,未提及 CPU、内存或 GPU 配置。

有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

自托管的私密日记应用,支持情绪追踪、提示写作、媒体上传与分析搜索

自托管的私密日记应用,数据全留在自己服务器上,支持心情追踪和笔记记录,适合注重隐私、想搭在 homelab 里的用户。

核心能力

  • 记录日记并追踪每日情绪状态
  • 按提示词引导写作,支持媒体文件上传
  • 提供统计分析与高级搜索,界面简洁
  • 同一 FastAPI 端口同时提供 React 与旧版 Flutter 前端
  • 提供 Docker 镜像,可一键部署到 PikaPods 或 Easypanel

容易踩的坑

单条 docker run 启动的是精简版,缺少 Redis/Valkey 与 Celery worker 时图片、视频、音频会一直停在 Processing,导入导出任务也无法运行,需要改用完整 docker-compose.yml;项目处于 beta 阶段,升级可能引入破坏性变更,需定期备份数据;ALLOW_INSECURE_COOKIE_AUTH_OVER_HTTP 只适用于隔离的可信局域网,公网部署应改用 DOMAIN_SCHEME=https。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.1.0-beta.26
  1. v0.1.0-beta.26最新正式版2026-09-28 · 2026-09-28 04:37 UTC

    Highlight

    • Now you can add audio note to your journal entries.

    What's Changed

    New Contributors

    Full Changelog: https://github.com/journiv/journiv-app/compare/v0.1.0-beta.25...v0.1.0-beta.26

    ❤️ Supporters

    Ongoing

    Stay updated

    Join subreddit. Join discord community. Subscribe to blog posts.

  2. v0.1.0-beta.252026-09-19 · 2026-09-19 19:10 UTC
    查看更新说明

    Journiv v0.1.0-beta.25: The new frontend

    [!IMPORTANT] This release contains patch for a security vulnerablity. Please update your Journiv instance to this beta.25 (latest) release. See notes below for details.

    This is one of the largest user-facing updates to Journiv so far.

    The main highlight of v0.1.0-beta.25 is the introduction of Journiv's completely new React-based web frontend. The new interface is now the default Journiv web experience, replacing the previous Flutter frontend while keeping the legacy interface available at /legacy/ during the transition.

    The release contains more than a frontend rewrite: it establishes a new design system and frontend architecture, brings many Journiv features into the new interface, introduces PWA and offline-reading support, strengthens browser authentication, and includes a number of backend improvements required by the new experience.

    Highlights

    A completely new Journiv web experience

    Journiv's web interface has been rebuilt using React and TypeScript with a new responsive design system based on shadcn components.

    The new frontend has been designed for both desktop and mobile use, with responsive navigation, adaptive dialogs and mobile sheets, improved loading and error states, and a more consistent interface throughout the application.

    React is now served as the primary interface at /. If you need the previous Flutter interface while the new frontend continues to mature, it remains available at:

    /legacy/

    There is also a Use legacy interface option under Help & feedback.

    📝 A redesigned writing and reading experience

    The new editor and reader are now integrated throughout the React application.

    Highlights include:

    • Rich-text editing powered by Quill
    • Markdown-style typing shortcuts for headings, lists, quotes, emphasis, links, and more
    • Draft autosave and local draft recovery
    • Conflict handling to help prevent accidental overwrites
    • Improved media attachment handling
    • Entry deletion from the new interface
    • PDF export directly from the reader
    • Prompt support while writing
    • A new full-screen media viewer with image zoom, video playback, keyboard navigation, deep links, and media recovery

    🗂️ Timeline, Calendar and Library

    The new frontend includes the main Journiv browsing and organization experiences, including:

    • Timeline browsing and search
    • Calendar navigation
    • Journals and journal management
    • Media browsing
    • People
    • Tags
    • Moods
    • Activities
    • Goals
    • Filtering Moments by related entities
    • Improved preservation of search and filter state while navigating

    The supporting backend media and Moment APIs were also expanded as part of this release.

    📱 Install Journiv as a PWA

    Journiv can now be installed as a Progressive Web App on supported desktop and mobile browsers.

    PWA support includes:

    • Installable application manifest and icons
    • Service-worker based application caching
    • Optional bounded offline reading
    • Offline status and connection-aware navigation
    • Offline storage management
    • Application update notifications
    • Safer update handling when unsaved drafts exist

    ⚠️ About the legacy frontend

    The React frontend is now the default Journiv interface, but this is still a beta release and the transition is intentionally gradual.

    The previous Flutter web frontend remains available at:

    /legacy/

    This provides a fallback while the React interface continues to receive improvements and remaining gaps are addressed.

    🔒 Security

    Fixed an SSRF vulnerability in the Immich integration that could allow an authenticated non-admin user to make Journiv request internal network resources.

    The fix restricts custom Immich URLs to administrators and adds destination validation, redirect protection, DNS-rebinding mitiga

  3. v0.1.0-beta.242026-08-23 · 2026-08-23 12:12 UTC
    查看更新说明

    Highlights

    • Improved Web-Native Editor: Journiv now uses an enhanced Tiptap editor, delivering a smoother and more reliable editing experience, especially on mobile devices when using Journiv as a PWA.

    What's Changed

    Full Changelog: https://github.com/journiv/journiv-app/compare/v0.1.0-beta.23...v0.1.0-beta.24

    ❤️ Supporters

    Ongoing

    Stay updated

    Join subreddit. Join discord community. Subscribe to blog posts.

  4. v0.1.0-beta.232026-05-25 · 2026-05-25 17:17 UTC
    查看更新说明

    [!CAUTION] Starting with this release (beta.23), Journiv is dropping support for Progressive Web App (PWA) service workers due to their removal in recent Flutter upstream versions. To ensure you see the new user interface and avoid loading a broken or outdated version of the app, you must clear the cache of your browser, reverse proxy, or Cloudflare setup (depending on your deployment environment). How to force a clean reload: Chromium-based browsers (Chrome, Brave, Edge): Open the Developer Tools (F12), right-click or hold-click the browser's refresh button, and select "Empty Cache and Hard Reload". Other environments: Ensure any edge caching or CDN rules are purged for your domain.

    [!IMPORTANT] Creating full database backup (not just a Journiv export) before upgrading is highly recommended. Do NOT upgrade without a proper database backup if you care about your existing entries.

    Highlights

    • People Support: Add and manage important people in your life, then attach them to journal entries to better organize and revisit memories shared with them. Learn more.
    • Automatic Immich People Sync: Sync people from your Immich instance into Journiv. When you attach Immich assets to a journal entry, Journiv can automatically associate the entry with the people detected in those assets. Learn more and watch demo.

    Blogpost

    Journiv People Tracking with Immich: Remembering Who Was There

    What's Changed

  5. v0.1.0-beta.222026-04-13 · 2026-04-13 04:00 UTC
    查看更新说明

    [!WARNING] ⚠️ Creating full database backup (not just a Journiv export) before upgrading is highly recommended. Do NOT upgrade without a proper database backup if you care about your existing entries. After upgrade clear cache for browser/reverse proxy/cloudflare etc depending on your setup.

    Making Backup

    1. Make Postgres DB backup

    This will dump your database backup to file named in journiv_full_backup.sql in current working directory. If you are using sqlite then you can just copy the sqlite db file to a safe location.

    docker exec -t journiv-postgres-db pg_dumpall -c -U journiv > journiv_full_backup.sql
    
    2. Journiv Export (Optional)

    Make a Journiv export of you journals as back up. You should select "All Journals" and you would need to ask all user on your instances to make the export (if you have multiple users). We will keep this as a secondary backup but the guide below prefer direct docker backup and restore.

    Highlights

    • PDF generation now happens in backend for consistent and stable PDF generation.
    • Public publishing letting you share selected entries at public URLs (Plus Feature)
    • oEmbed support for embedding Journal entries with richer previews (Plus Feature)
    • New Journiv Plus architecture with both inline mode and air-gaped sidecar deployment mode

    What's Changed

    ❤️ Supporters

    Ongoing

    Stay updated

    Join subreddit. Join discord community. Subscribe to blog posts.

    Full Changelog: https://github.com/journiv/journiv-app/compare/v0.1.0-beta.21...v0.1.0-beta.22

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    📘 Journiv - Private Journal

    ⚠️ Beta Software

    Journiv is currently in beta and under active development. While the developers aims to keep data backward-compatible, breaking changes may still occur. Please keep regular backups of your data to avoid loss during updates.

    Journiv is a self-hosted private journal. It features comprehensive journaling capabilities including mood tracking, prompt-based journaling, media uploads, analytics, and advanced search with a clean and minimal UI.

    Quick Start

    Give Journiv a quick try with one docker command.

    [!NOTE] This docker run command starts a minimal version of Journiv. Media files can be uploaded, but images, videos, and audio will stay at Processing and will not appear in entries without a Redis/Valkey broker and a Celery worker. Import and export jobs also require the worker. For these features, use the complete Docker Compose file.

    Docker Run

    docker run -d \
      --name journiv \
      -p 8000:8000 \
      -e SECRET_KEY=your-secret-key-here \
      -e DOMAIN_NAME=192.168.1.1 \
      -e ALLOW_INSECURE_COOKIE_AUTH_OVER_HTTP=true \
      -v journiv_data:/data \
      --restart unless-stopped \
      swalabtech/journiv-app:latest
    

    Access Journiv: Open http://192.168.1.1:8000 (replace with your server IP) in your browser to try it out.

    [!WARNING] The insecure HTTP opt-in above exists for isolated, trusted LANs only. HTTP exposes passwords and refresh cookies to interception by other devices on the network. Use DOMAIN_SCHEME=https for any internet-accessible or untrusted network deployment.

    For complete installation guide see installation guide.

    Web interfaces

    The production container serves both compiled frontends from the same FastAPI origin and public port:

    /              React frontend (primary)
    /legacy/       Flutter frontend (temporary legacy interface)
    /api/v1/*      FastAPI API
    /pub/*         Public publishing routes
    /docs          FastAPI docs when enabled
    /openapi.json  FastAPI OpenAPI schema
    

    React is the default Journiv interface from this release onward. The Flutter interface remains available temporarily at /legacy/ for users who need to switch back during the transition and may be removed in a future release.

    Upgrades from versions where Flutter owned / are handled by a narrowly scoped retirement worker at /flutter_service_worker.js. It replaces only the old root Flutter worker, removes the standard flutter-app-* caches, unregisters itself, and reloads a controlled window. React also performs a one-time check for that exact root registration. Other service-worker registrations are left untouched, preserving a path for future React PWA support.

    Demo

    Want to just try a demo? (Thanks to JasonFieldz for hosting a demo instance).

    Documentation

    Read the docs to learn more about Journiv and configuring it.

    Contributing

    Contributions are welcome! Please see CONTRIBUTING.md and LICENSE for guidelines.

    License

    This project is licensed under the terms specified in the LICENSE file.

    Support

    Need help or want to report an issue?

    Star History Chart


    Disclaimer

    AI-Assisted Development

    Journiv is a personal source avaliable project developed outside of my full-time work as a software engineer. It grew out of a need I had for many years for a capable, private, self-hosted journaling application. I could not find an existing option that matched what I wanted, so Journiv started as a project to build one.

    AI-powered software development tools have made it practical for me to develop and maintain a project of this scope in the limited time available outside of work. Without these tools, I realistically would not have the time to build many of the features and experiences that Journiv provides today.

    AI assistance has been used most extensively in the development of the latest React frontend (V2), including implementation, refactoring, testing, code review assistance, and documentation. Other parts of the repository also contains portions of code, documentation, or text generated with the assistance of AI/LLM tools.

    AI tools are used as development aids, while product requirements, architecture, design decisions, and release decisions remain human-directed.

    The level of manual review varies by area of the codebase. Backend changes are generally read and reviewed at the code level, with an understanding of the Python implementation and surrounding application behavior. For the React frontend, review is more heavily focused on the resulting user experience and application behavior through hands-on UI testing, automated tests, and targeted inspection of the generated code rather than a line-by-line review of every change.

    AI-assisted contributions are refined, tested, and iterated on as part of the normal development process, with the goal of meeting the same functional, maintainability, security, and quality expectations as the rest of the project.

    AI use during development is separate from Journiv's runtime behavior. Journiv does not require an LLM service in order to run, and the use of AI coding tools during development does not cause journal entries or other private user content to be sent to an AI provider.

    Journiv recognizes that people have different preferences and comfort levels around AI-assisted software development. This disclosure is intended to be clear about how Journiv is built so that users and contributors can make an informed decision about whether the project is right for them.