Show HN: CaseCite – Free RAG caselaw research and document analysis for lawyers CaseCite launched as a source-available, self-hosted legal research platform that lets law firms run retrieval-augmented generation (RAG) over their own documents using their own API keys, under the Elastic License 2.0. The platform bundles eight tools behind one login — research chat with semantic retrieval plus BM25 rescoring and inline citations, document indexing with imports from Google Drive, OneDrive, Box, Dropbox, iManage, NetDocuments, Filevine and Clio, contract review and redlining, long-document drafting, CourtListener case chat, an authority map, judge analytics and legal tools. CaseCite stores documents, the vector index and chat history only on the user's deployment, but uploading a document sends its text to an embeddings provider (OpenAI by default, or Voyage or Cohere) and asking, analyzing or drafting sends text to an LLM provider (OpenAI, Anthropic or Gemini); running fully on-network requires setting both OPENAI_BASE_URL and EMBEDDING_BASE_URL to self-hosted OpenAI-compatible servers. CaseCite is a source-available, self-hosted legal research platform. Upload your firm's documents, ask questions, and research cases & judges — on infrastructure you control. Documents, the search index and chat history are stored on your own servers. AI features send your questions and the relevant document text to the AI providers you configure, under your own API keys BYOK ; nothing is sent to the CaseCite maintainers, and there is no telemetry. See What leaves your infrastructure what-leaves-your-infrastructure . Eight tools behind one login, all reading from the same document corpus. | Research /research | Chat over your firm's documents — semantic retrieval with keyword BM25 rescoring of the candidates, and inline citations back to the source. | | Documents /documents | Upload, index, and organize your corpus. Import from Google Drive, OneDrive, Box, Dropbox, iManage, NetDocuments, Filevine, or Clio — OAuth sync, or a file picker where OAuth verification isn't needed. | | Contracts /contracts | Full contract review pipeline: analyze an indexed contract or pasted text, chat with a single contract, compare 2–4 contracts clause-by-clause against a baseline, and export a redline, a draft, or the analysis itself. | | Drafting /drafting | Draft a document grounded in up to four documents you pick from the Knowledge Base, with server-side text extraction and PDF conversion. Set a target length for long documents 30-page agreements : you review a section plan first, then every section is drafted in its own context window against the full references and the whole is reconciled. Revisions to long drafts are scoped to the sections they touch. | | Case view /case/:id | Open a CourtListener opinion and chat with it directly. | | Authority map /case-citations | Map the authorities cited across documents you select. | | Judge intel /judge-intel | Judge analytics from CourtListener. | | Legal tools /tools | Case lookup, citation check a scan of citing opinions for negative-treatment language — not a Shepard's/KeyCite substitute , precedents, dockets, oral arguments, and case-law trends. | Practice profile. Nothing about any practice area is baked into the product. You state what you practice, CaseCite drafts a profile of what matters in that practice, and you edit and own it saved via Settings . It then rides along with every review, redline, and draft as standing context. Every AI-generated answer, analysis and draft carries a notice to verify it against the source documents and current law before relying on it. CaseCite is a research aid, not a substitute for a lawyer's judgment or for a citator. Documents, the vector index, chat history and analyses are stored only on your deployment. Using the AI features transmits content to third parties you choose: - Uploading a document sends its text to the embeddings provider OpenAI by default; Voyage or Cohere if configured . - Asking a question, analysing or drafting sends the question and the relevant document text to the LLM provider OpenAI, Anthropic or Gemini . - Case-law tools send search queries and citations to CourtListener. To keep document text entirely on your network, run both models yourself: set OPENAI BASE URL chat and EMBEDDING BASE URL embeddings to OpenAI-compatible servers you host. Setting only the first still sends document text to OpenAI for embedding. The full list of outbound data flows, and how to restrict them, is in docs/subprocessors.md https://github.com/thomasunise/casecite/blob/main/docs/subprocessors.md . CaseCite is licensed under the Elastic License 2.0 LICENSE https://github.com/thomasunise/casecite/blob/main/LICENSE . In plain terms: - ✅ Free to self-host for your firm's internal use. - ✅ Free to modify for your own deployment. - ❌ Not permitted to offer CaseCite to third parties as a hosted/managed service. - ❌ Not permitted to alter or remove licensing or copyright notices. For paid private installs, support contracts, or hosted-SaaS licensing, contact the maintainer, @thomasunise https://github.com/thomasunise , through GitHub. See SUPPORT.md https://github.com/thomasunise/casecite/blob/main/SUPPORT.md . "Source-available," not OSI "open source." See LICENSE https://github.com/thomasunise/casecite/blob/main/LICENSE for the full terms. - Docker + Docker Compose - openssl to generate secrets - An AI provider API key OpenAI is the simplest start: it covers both chat and embeddings . Optional at the server level — users can each save their own. git clone https://github.com/thomasunise/casecite.git && cd casecite cp .env.example .env 1. Generate the three REQUIRED secrets the .env.example placeholders intentionally refuse to boot . Copy each value into .env: openssl rand -hex 32 - SECRET KEY openssl rand -hex 32 - AUDIT HMAC KEY openssl rand -hex 16 - ENCRYPTION SALT 2. In .env also set OPENAI API KEY or leave it empty and save a key under Settings after signing in , then uncomment and set DOMAIN, POSTGRES PASSWORD and REDIS PASSWORD in the "Bundled production stack" section generation hints are in the file; use DOMAIN=localhost to try it on your machine . CORS ORIGINS and ALLOWED HOSTS default from DOMAIN. Set REGISTRATION BOOTSTRAP TOKEN too openssl rand -hex 16 — you need it to create the first account. 3. Set DISK ENCRYPTION ACKNOWLEDGED=true in .env required to boot . What this acknowledges: the app encrypts BYOK keys and uploaded documents at the application layer AES-256-GCM , but derived text vector chunks, chat history, analyses is stored in cleartext in the app, Postgres and Redis volumes — full-disk encryption of the host is YOUR responsibility. 4. Start the full stack bundled Postgres + Redis + Caddy : docker compose -f docker-compose.prod.yml up -d python3 scripts/setup production.py --create-env --domain