tududi

chrisvelMIT活跃维护

一款自托管的 GTD 任务管理工具,把待办、项目、笔记、领域和智能工作流整合在一起,帮你理清生活和工作。

A calm, open system for organizing life and work. Tasks, projects, notes, areas, and smart workflows - self-hosted or hosted.

v2.1.0发布于 2026-11-06 15:57 UTC3,543star +14 / 7 天288fork同步于 2026-11-10 23:41 UTC

怎么上手

由 README 提炼,执行前请确认
cp .env.example .env && docker compose up -d
硬件要求按 README 说明

README 未说明硬件要求,仅要求 PostgreSQL 14 或更新版本(docker compose 示例用 postgres:16-alpine),未提及 GPU 或显存。

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

项目说明

由 README 自动翻译提炼

自托管的个人与团队任务管理系统,用任务、项目、领域和笔记分层组织生活与工作

一款自托管的 GTD 任务管理工具,把待办、项目、笔记、领域和智能工作流整合在一起,帮你理清生活和工作。

核心能力

  • 用任务、项目、领域、笔记、标签五层结构组织内容
  • 支持日/周/月及按完成日期触发的循环任务与子任务
  • 内置 CalDAV 双向同步,可对接 Nextcloud 与 Apple Reminders
  • 支持 OIDC/SSO 登录与多角色成员、分组协作
  • 提供 /api-docs 的 Swagger 文档与个人 API 令牌

容易踩的坑

必须先在 .env 中设置 DB_PASSWORD、TUDUDI_USER_EMAIL、TUDUDI_USER_PASSWORD 和 TUDUDI_SESSION_SECRET,否则无法启动;2.0 起只支持 PostgreSQL,不再支持 SQLite,从 1.x 升级需先导出再导入;反向代理部署需设置 TUDUDI_TRUST_PROXY,否则 express-rate-limit 会报校验错误。

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

最近发版

5 个版本v2.1.0
  1. v2.1.0最新正式版2026-11-06 · 2026-11-06 15:57 UTC

    What's Changed

    Full Changelog: https://github.com/chrisvel/tududi/compare/v2.0.1...v2.1.0

    Docker image: docker pull chrisvel/tududi:2.1.0

  2. v1.15.12026-11-06 · 2026-11-06 14:59 UTC
    查看更新说明

    Security

    • Web Push only accepts and sends to endpoints on the browser push services. Subscriptions saved earlier on any other host are deleted instead of sent (#2056).
    • Creating or updating a project, through the API or MCP, requires owning the area or goal or having it shared read-write (#2057).

    What's Changed

    Full Changelog: https://github.com/chrisvel/tududi/compare/v1.15.0...v1.15.1

    Docker image: docker pull chrisvel/tududi:1.15.1

  3. v2.0.12026-11-06 · 2026-11-06 14:52 UTC
    查看更新说明

    What's Changed

    New Contributors

    Full Changelog: https://github.com/chrisvel/tududi/compare/v2.0.0...v2.0.1

    Docker image: docker pull chrisvel/tududi:2.0.1

  4. v2.0.02026-11-05 · 2026-11-05 04:50 UTC
    查看更新说明

    What's Changed

    Full Changelog: https://github.com/chrisvel/tududi/compare/v1.15.0...v2.0.0

    Docker image: docker pull chrisvel/tududi:2.0.0

  5. v1.15.02026-11-03 · 2026-11-03 16:08 UTC
    查看更新说明

    What's Changed

    Full Changelog: https://github.com/chrisvel/tududi/compare/v1.14.0...v1.15.0

    Docker image: docker pull chrisvel/tududi:1.15.0

用户点评

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

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

    README 原文

    未翻译

    Light Mode Screenshot

    More screenshots are available here.


    💖 Enjoying tududi?

    Help keep it free and actively developed by buying me a coffee ☕, becoming a sponsor, or supporting on Patreon. You can also support the project by purchasing a hosted subscription for a hassle-free, managed solution. Every contribution helps maintain this project and build new features!


    🚀 How It Works

    This app allows users to manage their tasks, projects, areas, notes, and tags in an organized way. Users can create tasks, projects, areas (to group projects), notes, and tags. Each task can be associated with a project, and both tasks and notes can be tagged for better organization. Projects can belong to areas and can also have multiple notes and tags. This structure helps users categorize and track their work efficiently, whether they’re managing individual tasks, larger projects, or keeping detailed notes.

    🧠 Philosophy

    For the thinking behind tududi, read:

    ✨ Features

    • Task Management: Create, update, and delete tasks. Mark tasks as completed and view them by different filters (Today, Upcoming, Someday). Order them by Name, Due Date, Date Created, or Priority.
    • Subtasks: Break down complex tasks into smaller, manageable subtasks with progress tracking and seamless navigation.
    • Recurring Tasks: Comprehensive recurring task system with intelligent parent-child relationships:
      • Multiple Recurrence Patterns: Daily, weekly, monthly, monthly on specific weekdays, and monthly last day
      • Completion-Based Recurrence: Option to repeat based on completion date rather than due date
      • Smart Parent-Child Linking: Generated task instances maintain connection to their original recurring pattern
      • Direct Parent Editing: Edit recurrence settings directly from any generated task instance
      • Flexible Scheduling: Set custom intervals (every 2 weeks, every 3 months, etc.)
      • End Date Control: Optional end dates for recurring series
    • Project Sharing & Collaboration: Share projects with team members and collaborate effectively
    • Families & Small Teams: One workspace for a household or a team, described in People, Members and Roles:
      • Roles: Admin, user and guest, each with a list of what it can do
      • Groups: Share a project, area or goal with several people at once
      • Members without an email: Add a child or another household member who has no email, put them in a group, assign them tasks and give them a sign-in link so they can sign in
      • One People list: Members and contacts in one list. Add members yourself with the invite permission, or turn a contact into a member without losing the tasks assigned to them
      • Assign to anyone: Give a task to a member or to a contact such as a plumber, and see everyone's day on one Everyone board
    • Quick Notes: Create, update, delete, or assign text notes to projects.
    • Tags: Create tags for tasks and notes to enhance organization.
    • Project Tracking: Organize tasks into projects. Each project can contain multiple tasks and/or multiple notes.
    • Area Categorization: Group projects into areas for better organization and focus.
    • Due Date Tracking: Set due dates for tasks and view them based on due date categories.
    • Responsive Design: Accessible from various devices, ensuring a consistent experience across desktops, tablets, and mobile phones.
    • Installable PWA: Add tududi to your home screen on Android, iOS, and desktop browsers for a native app-like experience. The app stays readable from cache when offline, and write operations are queued and synced automatically when connectivity returns.
    • Multi-Language Support: Available in 26 languages with full localization support for a truly global productivity experience.
    • Open API & Access Tokens: Interactive Swagger docs at /api-docs plus personal API keys for integrating tududi with your own tooling or automations.
    • OIDC/SSO Authentication: Enterprise-ready Single Sign-On support with:
      • Multiple OIDC providers (Google, Okta, Keycloak, Authentik, PocketID, Azure AD, and more)
      • Just-In-Time (JIT) user provisioning
      • Account linking for hybrid authentication
      • Simple .env-based configuration perfect for self-hosters
      • Automatic admin role assignment based on email domains
    • CalDAV Synchronization: Industry-standard CalDAV protocol support for seamless task syncing:
      • Bidirectional sync with CalDAV servers (Nextcloud, Baikal, and more)
      • Access tasks from popular clients (tasks.org, Apple Reminders, Thunderbird, Evolution)
      • Full recurring task support with RRULE
      • Conflict detection and resolution
      • Background automatic synchronization
      • HTTP Basic Authentication for CalDAV clients

    🗺️ Roadmap

    Check out our GitHub Project for planned features and progress.

    🛠️ Getting Started

    Get up and running quickly with our comprehensive documentation:

    Quick Start

    tududi stores its data in PostgreSQL. The repo's docker-compose.yml runs tududi together with a postgres:16-alpine database, so that is the quickest way in. It reads its configuration from a .env file:

    cp .env.example .env
    # set DB_PASSWORD, TUDUDI_USER_EMAIL, TUDUDI_USER_PASSWORD and TUDUDI_SESSION_SECRET, then:
    docker compose up -d
    

    Navigate to http://localhost:3002 and login with your credentials. The database starts empty and tududi creates the schema on first start.

    If people reach tududi at another address (for example http://zima.local:3002 or https://tududi.example.com), set BASE_URL=<that address> so links in emails (account verification, password reset) point there instead of localhost.

    Using docker run

    If you already have a PostgreSQL server (14 or newer), point tududi at it with DATABASE_URL:

    docker run \
      -e DATABASE_URL=postgres://tududi:secret@your-db-host:5432/tududi \
      -e [email protected] \
      -e TUDUDI_USER_PASSWORD=your-secure-password \
      -e TUDUDI_SESSION_SECRET=$(openssl rand -hex 64) \
      -v ~/tududi_uploads:/app/uploads \
      -v ~/tududi_backups:/app/backups \
      -p 3002:3002 \
      -d chrisvel/tududi:latest
    

    tududi refuses to start without DATABASE_URL (or the discrete DB_HOST, DB_NAME, DB_USER, DB_PASSWORD variables).

    Reverse Proxy Setup

    When running behind a reverse proxy (Caddy, Nginx, Traefik, etc.), set TUDUDI_TRUST_PROXY so that Express correctly reads client IPs from X-Forwarded-For headers. Without this, express-rate-limit will log a validation error.

    docker run \
      -e TUDUDI_TRUST_PROXY=true \
      -e TUDUDI_ALLOWED_ORIGINS=https://your-domain.com \
      ...
    
    ValueMeaning
    trueTrust all proxies (simplest option for single-proxy setups)
    1Trust the first hop only
    loopbackTrust loopback addresses (127.0.0.1/::1)
    172.16.0.0/12Trust a specific subnet

    OIDC/SSO Authentication

    Tududi supports Single Sign-On via OpenID Connect (OIDC), allowing users to authenticate with external identity providers.

    Quick Setup (Single Provider):

    docker run \
      -e OIDC_ENABLED=true \
      -e OIDC_PROVIDER_NAME=Google \
      -e OIDC_PROVIDER_SLUG=google \
      -e OIDC_ISSUER_URL=https://accounts.google.com \
      -e OIDC_CLIENT_ID=your-client-id.apps.googleusercontent.com \
      -e OIDC_CLIENT_SECRET=your-client-secret \
      -e OIDC_SCOPE="openid profile email" \
      -e OIDC_AUTO_PROVISION=true \
      -e BASE_URL=https://your-domain.com \
      ...
    

    Multiple Providers:

    # Provider 1: Google
    -e OIDC_PROVIDER_1_NAME=Google \
    -e OIDC_PROVIDER_1_SLUG=google \
    -e OIDC_PROVIDER_1_ISSUER=https://accounts.google.com \
    -e OIDC_PROVIDER_1_CLIENT_ID=xxx \
    -e OIDC_PROVIDER_1_CLIENT_SECRET=xxx \
    
    # Provider 2: Company SSO
    -e OIDC_PROVIDER_2_NAME="Company SSO" \
    -e OIDC_PROVIDER_2_SLUG=okta \
    -e OIDC_PROVIDER_2_ISSUER=https://company.okta.com \
    -e OIDC_PROVIDER_2_CLIENT_ID=yyy \
    -e OIDC_PROVIDER_2_CLIENT_SECRET=yyy \
    -e OIDC_PROVIDER_2_ADMIN_EMAIL_DOMAINS=company.com \
    

    Supported Providers: Google, Okta, Keycloak, Authentik, PocketID, Azure AD, and any OIDC-compliant provider

    Key Features:

    • Automatic user provisioning on first login
    • Account linking for existing users
    • Admin role assignment based on email domains
    • Hybrid authentication (email/password + SSO)

    Documentation: See docs/10-oidc-sso.md for detailed setup guides and provider-specific configuration.

    CalDAV Synchronization

    Tududi supports the industry-standard CalDAV protocol, enabling seamless task synchronization with popular CalDAV clients and servers. It's enabled by default.

    Quick Setup:

    docker run \
      -e ENCRYPTION_KEY=$(openssl rand -hex 32) \
      ...
    

    Supported Clients:

    • tasks.org (Android/iOS) - Full task management with recurring tasks
    • Apple Reminders (iOS/macOS) - Native iOS/macOS integration
    • Thunderbird (Desktop) - Advanced task features
    • Evolution (Linux) - Full CalDAV compatibility

    Sync with External Servers:

    Connect Tududi to external CalDAV servers like Nextcloud, Baikal, or other CalDAV-compatible services for bidirectional synchronization.

    Key Features:

    • Bidirectional sync (local ↔ remote)
    • Full recurring task support with RRULE
    • Conflict detection and resolution
    • Background automatic synchronization
    • HTTP Basic Authentication
    • Encrypted password storage (AES-256-GCM)

    Documentation: See docs/11-caldav-sync.md for client setup guides, server configuration, and troubleshooting.

    Database

    tududi runs on PostgreSQL only. Set DATABASE_URL (for example postgres://tududi:secret@db:5432/tududi); the database may be empty, the schema is created on first start. Connection options, TLS, tuning and backups are in docs/16-postgresql.md, and docs/backups.md covers the optional nightly pg_dump service in docker-compose.yml.

    Upgrading

    Pending migrations run on every start, and the container refuses to start if one fails. Take a database backup (pg_dump, see docs/backups.md) before you bump the image tag.

    Upgrading to 2.0 from SQLite

    2.0 no longer supports SQLite. If your 1.x install used the SQLite file in /app/db, export your data on 1.x first, then import it into a 2.0 install on PostgreSQL. The steps are in docs/30-moving-to-postgres.md. As a safety net, 2.0 refuses to start while the old SQLite file is still on the volume and holds data; set TUDUDI_ALLOW_DIALECT_SWITCH=true once your data has been imported.

    Upgrading to 2.0 on PostgreSQL

    Upgrade to the final 1.x release first and let it start once, so every 1.x migration has run. 2.0 stops with a "last used by an older tududi 1.x release" message on an older database.

    📚 Documentation

    For detailed setup instructions, configuration options, and getting started guides, visit:

    docs.tududi.com

    🚧 Development

    Want to contribute or run Tududi from source? Check out our comprehensive development guide:

    Development Setup Guide

    Quick overview:

    # Clone and install
    git clone https://github.com/chrisvel/tududi.git
    cd tududi
    npm install
    
    # Start a local PostgreSQL and point backend/.env at it
    docker compose -f docker-compose.dev.yml up -d db
    # DATABASE_URL=postgres://tududi:tududi@localhost:5432/tududi_dev
    
    # Start development servers
    npm run backend:dev   # Terminal 1 - Backend on :3001
    npm run frontend:dev  # Terminal 2 - Frontend on :8080
    

    For database management, testing, and detailed development instructions, see docs.tududi.com

    🔌 API

    Tududi provides a comprehensive REST API for integration with external tools and automation workflows.

    Base URL: http://localhost:8080/api/v1

    Key Features:

    • Complete CRUD operations for tasks, projects, notes, and areas
    • Personal API keys for secure access
    • Swagger documentation available at /api-docs (requires authentication)
    • Support for recurring tasks, subtasks, and tag management
    • Real-time task metrics and productivity insights

    Authentication: Uses session cookies or Bearer token authentication. Generate personal API keys through the web interface for programmatic access.

    Quick Example:

    # Get all tasks
    curl -H "Authorization: Bearer YOUR_API_KEY" \
         http://localhost:3002/api/v1/tasks
    
    # Create a new task
    curl -X POST \
         -H "Authorization: Bearer YOUR_API_KEY" \
         -H "Content-Type: application/json" \
         -d '{"name":"Complete API documentation","priority":"medium"}' \
         http://localhost:3002/api/v1/task
    

    For full API documentation, visit /api-docs after authentication or check the Swagger schema definitions in backend/config/swagger.js.

    🤝 Contributing

    Contributions to tududi are welcome! Whether it's bug fixes, new features, documentation improvements, or translations, we appreciate your help.

    Before you start:

    Quick contribution workflow:

    1. Fork the repository
    2. Create a feature branch (git checkout -b feature/amazing-feature)
    3. Make your changes following our code standards
    4. Run linting and tests: npm run pre-push
    5. Commit your changes with a clear message
    6. Push to your fork and open a Pull Request

    Read our Contributing Guide for:

    • Development setup and workflow
    • Code standards and best practices
    • Testing requirements
    • Database migrations
    • Translation guidelines
    • Pull request checklist

    📜 License

    This project is licensed under the MIT License.

    📬 Contact

    For questions or comments, please open an issue or contact the developer directly.

    Join the tududi community:

    Discord Reddit

    🌟 Please check my other projects!

    • Reconya - Network reconnaissance and asset discovery tool
    • BreachHarbor - Cybersecurity suite for digital asset protection
    • Hevetra - Digital tracking for child health milestones

    Screenshots

    Light Mode Screenshot

    Dark Mode Screenshot


    README created by Chris Veleris for tududi.