Clone it, run it, pay nothing.

fein is Apache 2.0 licensed and self-hosted by design. There is no trial, no seat count and no paid tier of the software: the firms we deploy for run the same code you are about to clone. This page is the honest version of what setting it up involves.

A machine, an LLM key, and someone comfortable in a terminal.

The default stack runs entirely on disk, so there is nothing external to provision to get it going. Everything below is on your side of the line, and none of it involves us.

Somewhere to run it

A server you control. The default stack is SQLite, LanceDB and Ladybug, all on local disk. Postgres, Neo4j, pgvector, Chroma, Qdrant, Weaviate and Milvus are swappable through the environment file when you outgrow that.

An LLM API key

Browsing works without one, but ingestion and search do not: adding a document runs entity extraction and embedding. It defaults to openai/gpt-5-mini, and Anthropic, Gemini, Ollama, Azure, Bedrock and any OpenAI-compatible endpoint work too.

Admin access to each source

Every system you want read has its own OAuth app or API credential to register: Gmail, Calendar, Drive, LinkedIn, your CRM. This is the part that takes the most calendar time, because it usually involves someone else at the firm.

Getting it running.

The first three steps take an afternoon. The fourth is the one that takes real time, and it is worth reading before you start.

  1. Clone the repository

    Everything is in one repo, including the connectors and the dashboard.

    git clone https://github.com/clippycommits/fein cd fein
  2. Add a model key

    Copy the template and put your key in it. The template documents every provider and every swappable database.

    cp .env.template .env # then set LLM_API_KEY="sk-..." in .env
  3. Start the stack

    One command. It creates the Python environment if it is missing, installs the UI dependencies if they are missing, starts the API on port 8000 and the dashboard on port 3000, waits for both to answer, and opens a browser. Logs land in .run/api.log and .run/ui.log.

    ./fein # start the stack ./fein stop # stop it ./fein status # what is running
  4. Connect your sources, then backfill

    Register an OAuth app for each system, connect it in the dashboard, and let fein read your history back. This is where the weeks go. See below.

One thing to get right before anyone else uses it. The local stack runs single-user with authentication off, which is fine on your laptop and wrong for anything shared. Set ENABLE_BACKEND_ACCESS_CONTROL=True and put real per-user isolation in place before you point a team at it.

The install is an afternoon. The rest is not.

We would rather say this here than have you find it out in week three. Getting fein running is genuinely quick. Getting it useful means pointing it at a decade of real mail, and that is a different job.

Where the time actually goes

  • OAuth apps, one per source. Each of Gmail, Calendar, Drive, LinkedIn and your CRM needs its own registered application and admin consent. Google and Microsoft both review some scopes. Budget days, not hours, and most of it is waiting on other people.
  • The historical backfill. Reading years of mail and documents is slow, rate-limited by the upstream APIs, and needs restarting when it breaks. This is the single longest step.
  • Entity resolution. A decade of mail contains a great many people who look like four people: work address, personal address, a maiden name, a typo. Getting one record per human is what separates a graph that answers well from one that answers plausibly.
  • Keeping it alive. Upstream APIs change on their own schedule. Once fein is load-bearing, somebody at the firm owns thirty integrations for as long as you run it.
If that reads like a quarter of someone's time, it is.

That is the whole reason the managed option exists. Same software, same servers, same licence; an engineer of ours does the four things above and hands it over working on day 14. If you would rather do it yourself, everything you need is public and we are not holding anything back.

What self-hosters ask.

Is this a crippled version of the paid product?

No. There is one codebase and one binary. The firms paying us run exactly what you clone, with no feature flags separating them from you. What they buy is setup and upkeep, not access.

What is the licence, exactly?

Apache 2.0. fein is a derivative of topoteretes/cognee, which carries that licence, and we retain it along with the upstream attribution and a statement of changes. You can run it commercially, modify it, and keep your changes private. The one obligation Apache adds over a shorter licence is attribution: keep the NOTICE file with the code.

Do you see anything we run?

Nothing. There is no telemetry, no analytics and no control plane. We have no way of knowing you are running it unless you tell us, which is also why we cannot help unprompted when something breaks.

Can we get support?

Through GitHub issues, alongside everyone else, at whatever pace we get to them. Guaranteed response times and a named engineer are what the managed plan is.

Can we start here and move to managed later?

Yes, and it is a sensible way to do it. We pick up whatever you have already built rather than starting again. The build fee is the same either way.