> ## Documentation Index
> Fetch the complete documentation index at: https://www.mill.fyi/llms.txt
> Use this file to discover all available pages before exploring further.

# Open-source task lists for teams

> Organize tasks, discuss work and connect permissioned REST or MCP clients. Self-host Mill with PostgreSQL and published container images.

export const ThemeImage = ({light, dark, alt, width, height, sizes, priority = false}) => <>
    <div className="oss-product-light">
      <img src={light} alt={alt} width={width} height={height} sizes={sizes} loading={priority ? "eager" : "lazy"} fetchPriority={priority ? "high" : "auto"} />
    </div>
    <div className="oss-product-dark">
      <img src={dark || light} alt={alt} width={width} height={height} sizes={sizes} loading={priority ? "eager" : "lazy"} fetchPriority={priority ? "high" : "auto"} />
    </div>
  </>;

export const Points = ({children}) => <div className="oss-ownership-points">{children}</div>;

export const SectionIntro = ({children}) => <div className="oss-section-intro">{children}</div>;

export const SplitSection = ({id, children}) => <section className="oss-ownership" aria-labelledby={id}>
    {children}
  </section>;

export const Eyebrow = ({children}) => <p className="oss-feature-label">{children}</p>;

export const FeatureImage = ({children}) => <div className="oss-feature-image">{children}</div>;

export const FeatureCopy = ({children}) => <div className="oss-feature-copy">{children}</div>;

export const Feature = ({id, children}) => <section className="oss-feature" aria-labelledby={id}>
    {children}
  </section>;

export const FeatureGroup = ({children}) => <div className="oss-features">{children}</div>;

export const InlineLink = ({children, ...props}) => <a {...props} className="oss-link">
    {children}
  </a>;

export const Highlights = ({children, ...props}) => <section {...props} className="oss-highlights">
    {children}
  </section>;

export const ProductFrame = ({children}) => <div className="oss-product">
    <div className="oss-product-frame">{children}</div>
  </div>;

export const ActionLink = ({variant = "primary", children, ...props}) => <a {...props} data-oss-action={variant} className="group pl-3 pr-2 py-2 relative inline-flex items-center text-sm font-medium">
    <span className="absolute inset-0 bg-primary-dark rounded-xl group-hover:opacity-[0.9]" aria-hidden="true" />
    <div className="z-10 gap-1 flex items-center">
      <span className="text-white">{children}</span>
    </div>
  </a>;

export const Actions = ({children}) => <div className="oss-actions">{children}</div>;

export const Hero = ({id, children}) => <section className="oss-hero" aria-labelledby={id}>
    {children}
  </section>;

export const Home = ({children, ...props}) => <div {...props} className="oss-home">
    {children}
  </div>;

<Home>
  <Hero id="hero-heading">
    <h1 id="hero-heading">
      Open-source

      <br />

      <span>task lists for teams</span>
    </h1>

    <p className="oss-lead">
      <span className="oss-lead-primary">
        Organize the work. Keep the conversation. Host it yourself.
      </span>

      <span>
        A focused task list with human collaboration, a REST API and MCP.
      </span>
    </p>

    <Actions>
      <ActionLink href="/getting-started">Get started →</ActionLink>

      <ActionLink href="https://github.com/avgeek-oss/mill" variant="secondary">
        Explore on GitHub ↗
      </ActionLink>
    </Actions>
  </Hero>

  <ProductFrame>
    <ThemeImage light="/assets/screenshots/release-v1/board-light.png" dark="/assets/screenshots/release-v1/board-dark.png" alt="Mill Release planning board with sample tasks, statuses, assignees and filters." width={5120} height={3600} sizes="(max-width: 640px) calc(100vw - 42px), (max-width: 1200px) calc(100vw - 66px), 1134px" priority />
  </ProductFrame>

  <Highlights aria-label="What you can do with Mill">
    <div>
      <h2>Keep work focused</h2>

      <p>
        Use alphabetical boards and six fixed statuses. Search, filter and sort
        a list without designing a new workflow.
      </p>

      <InlineLink href="/task-lists">Explore task lists →</InlineLink>
    </div>

    <div>
      <h2>Work with your team</h2>

      <p>
        Assign tasks, set dates, discuss details and follow changes through
        notifications and task activity.
      </p>

      <InlineLink href="/task-details">See task collaboration →</InlineLink>
    </div>

    <div>
      <h2>Connect your tools</h2>

      <p>
        Use REST or MCP with explicit permissions. Personal keys, team keys and
        scoped OAuth connections keep access under your control.
      </p>

      <InlineLink href="/clients">Connect a client →</InlineLink>
    </div>
  </Highlights>

  <FeatureGroup>
    <Feature id="boards-heading">
      <FeatureCopy>
        <Eyebrow>Task lists</Eyebrow>
        <h2 id="boards-heading">Find the next piece of work.</h2>

        <p>
          Move between boards, search task titles and filter by status, priority
          and assignee. Completed work leaves the default view after 24 hours
          and remains available through filters and direct links.
        </p>

        <InlineLink href="/task-lists">
          Boards, filters and sorting →
        </InlineLink>
      </FeatureCopy>

      <FeatureImage>
        <ThemeImage light="/assets/screenshots/release-v1/boards-light.png" dark="/assets/screenshots/release-v1/boards-dark.png" alt="Alphabetical boards with Backlog, Todo and In Progress task counts." width={2560} height={1800} />
      </FeatureImage>
    </Feature>

    <Feature id="tasks-heading">
      <FeatureCopy>
        <Eyebrow>Task details</Eyebrow>
        <h2 id="tasks-heading">Give each task its context.</h2>

        <p>
          Keep a Markdown description, status, priority, assignee and optional
          start and due dates together. Post comments, mention colleagues,
          inspect activity or duplicate a task into a fresh draft.
        </p>

        <InlineLink href="/task-details">Edit and discuss a task →</InlineLink>
      </FeatureCopy>

      <FeatureImage>
        <ThemeImage light="/assets/screenshots/release-v1/task-light.png" dark="/assets/screenshots/release-v1/task-dark.png" alt="Sample task with description, discussion and independently editable properties." width={2560} height={1800} />
      </FeatureImage>
    </Feature>

    <Feature id="notifications-heading">
      <FeatureCopy>
        <Eyebrow>Notifications</Eyebrow>

        <h2 id="notifications-heading">
          Follow work that needs your attention.
        </h2>

        <p>
          Open notifications for assignments and mentions. Follow a notification
          to its task, mark items read and adjust your notification preferences.
        </p>

        <InlineLink href="/notifications">Manage notifications →</InlineLink>
      </FeatureCopy>

      <FeatureImage>
        <ThemeImage light="/assets/screenshots/release-v1/notifications-light.png" dark="/assets/screenshots/release-v1/notifications-dark.png" alt="Mill notification popover with sample task updates." width={2560} height={1800} />
      </FeatureImage>
    </Feature>

    <Feature id="people-heading">
      <FeatureCopy>
        <Eyebrow>Team access</Eyebrow>
        <h2 id="people-heading">Invite people with the right role.</h2>

        <p>
          Give administrators control over the team, let members work on tasks
          and give viewers read access. Manage invitations and accounts, with
          optional SMTP for account email delivery.
        </p>

        <InlineLink href="/authentication">
          Accounts, invitations and recovery →
        </InlineLink>
      </FeatureCopy>

      <FeatureImage>
        <ThemeImage light="/assets/screenshots/release-v1/people-light.png" dark="/assets/screenshots/release-v1/people-dark.png" alt="People settings showing synthetic team members and their roles." width={2560} height={1800} />
      </FeatureImage>
    </Feature>

    <Feature id="keys-heading">
      <FeatureCopy>
        <Eyebrow>API keys</Eyebrow>
        <h2 id="keys-heading">Make access explicit.</h2>

        <p>
          Create named personal or team keys with Read-only, Edit or
          Administrative permissions and a chosen expiry. Revoke keys when an
          integration no longer needs access.
        </p>

        <InlineLink href="/api-keys">Personal and team API keys →</InlineLink>
      </FeatureCopy>

      <FeatureImage>
        <ThemeImage light="/assets/screenshots/release-v1/api-keys-light.png" dark="/assets/screenshots/release-v1/api-keys-dark.png" alt="Personal API key management with names, permissions and expiry, without secret tokens." width={2560} height={1800} />
      </FeatureImage>
    </Feature>

    <Feature id="mcp-heading">
      <FeatureCopy>
        <Eyebrow>MCP and REST</Eyebrow>
        <h2 id="mcp-heading">Use Mill from a connected client.</h2>

        <p>
          Connect an MCP client through OAuth or use a key for REST and MCP.
          Approve read or write access, restrict an OAuth connection to selected
          boards and revoke it from your account.
        </p>

        <InlineLink href="/mcp-connections">
          Connect and revoke MCP clients →
        </InlineLink>
      </FeatureCopy>

      <FeatureImage>
        <ThemeImage light="/assets/screenshots/release-v1/mcp-guide-light.png" dark="/assets/screenshots/release-v1/mcp-guide-dark.png" alt="MCP Guide with a client selector and local fixture connection example." width={2560} height={1800} />
      </FeatureImage>
    </Feature>

    <Feature id="security-heading">
      <FeatureCopy>
        <Eyebrow>Account security</Eyebrow>
        <h2 id="security-heading">Control your account and sessions.</h2>

        <p>
          Manage your profile, password, preferences and active sessions. Add
          passkeys as a second factor and keep account recovery distinct from
          operator recovery.
        </p>

        <InlineLink href="/authentication">Secure your account →</InlineLink>
      </FeatureCopy>

      <FeatureImage>
        <ThemeImage light="/assets/screenshots/release-v1/sessions-light.png" dark="/assets/screenshots/release-v1/sessions-dark.png" alt="Session settings showing the current local fixture browser and revocation controls." width={2560} height={1800} />
      </FeatureImage>
    </Feature>
  </FeatureGroup>

  <SplitSection id="hosting-heading">
    <SectionIntro>
      <Eyebrow>Self-hosting</Eyebrow>
      <h2 id="hosting-heading">Run Mill on infrastructure you control.</h2>

      <p>
        Connect the API and UI images to your PostgreSQL database. Set the
        database URL, application secret and public origin, then start Compose.
      </p>
    </SectionIntro>

    <Points>
      <div>
        <h3>Install published images</h3>

        <p>
          Choose a release and supply three environment values. Use your own
          PostgreSQL database or add the optional Compose database service.
        </p>

        <InlineLink href="/installation">Installation guide →</InlineLink>
      </div>

      <div>
        <h3>Back up and recover</h3>

        <p>
          Back up PostgreSQL, keep the required runtime configuration and test a
          restore before an upgrade.
        </p>

        <InlineLink href="/backup">Backup and recovery →</InlineLink>
      </div>

      <div>
        <h3>Operate with clear boundaries</h3>

        <p>
          Use health checks and migration records to inspect an installation.
          Keep secrets outside images and limit credentials to the access
          clients need.
        </p>

        <InlineLink href="/operations">Operations guide →</InlineLink>
      </div>
    </Points>
  </SplitSection>

  <Actions>
    <ActionLink href="/getting-started">Create your first board →</ActionLink>

    <ActionLink href="/installation" variant="secondary">
      Install Mill →
    </ActionLink>
  </Actions>
</Home>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.