Holorepo
A holorepo is one repository that holds a whole product: its code, and what the team knows about it, such as plans, specs, customer research, design docs, and help docs.
The word builds on monorepo. A monorepo puts the code for many projects in one repository. A holorepo puts everything about one product in one repository, the code and the rest. “Holo” is from the Greek for whole.
Many repositories. One repository for each app, service, or library. The plans, research, and docs live in other tools, and each tool has its own search, its own access list, and its own history.
Monorepo. All the code moves into one repository. The plans, research, and docs are still in other tools.
Holorepo. The repository takes in the plans, specs, research, and docs as well. One search now finds the spec and the code, and one history covers both.
What a holorepo is
In practice a holorepo is an ordinary repository on GitHub, or any Git host, with folders for documents next to the folders for code. A product manager’s spec, a researcher’s interview notes, and an engineer’s code are files in the same place. They share one history, and a change to any of them goes through the same review.
A monorepo is about how code is divided: one repository or many. A holorepo is about what counts as part of the product: the spec that explains a feature, the research that led to it, and the doc that teaches it belong with the code that builds it. A company can have one monorepo that is also a holorepo, or five products with a holorepo each.
| Many repositories | Monorepo | Holorepo | |
|---|---|---|---|
| What one repository holds | The code for one app, service, or library | The code for many projects, often all of a company’s | One product’s code and what the team has written about it |
| Where plans, research, and docs live | Usually in other tools | Usually in other tools | In the repository, next to the code |
| Who writes in it | Engineers | Engineers | Everyone who works on the product |
What goes wrong without one
Most teams keep the code in a repository and everything else somewhere else: specs in a docs app, decisions in a wiki, research in slides, plans in a spreadsheet. Each of those tools works. The problems below come from the product being split across them.
-
The spec and the product drift apart
A product manager writes a spec in a docs app. During code review an engineer finds a problem and the team agrees to build it differently. That conversation happens in the pull request, where the spec isn’t, so nobody changes the spec. Three months later someone in support reads it to answer a customer, and tells them something the product doesn’t do.
-
Research gets done twice, or not at all
A researcher interviews twelve customers and presents what they learned in slides. The slides go in a shared drive. A year later a different person picks up the same feature, has never seen that folder, and either repeats the interviews or builds without them.
-
Understanding one feature means opening five tools
The code is in GitHub, the spec is in a docs app, the decision is in a wiki, the research is in slides, and the help article is in a help center. Each has its own search box and its own list of who can see it. A new teammate asks for access five times, and then has to work out which of two documents with the same title is the current one.
Without a holorepo: five searches
- Docs appphone numberCheckout spec last edited in March
- Slidesphone numberCheckout interviews you need to ask for access
- Wikiphone numberCheckout decisions two pages have this title
- Help centerphone numberPaying for an order
- GitHubphone numbercheckout/form.tsx
In a holorepo: one search
- GitHubphone number
specs/checkout.md research/2026-11-checkout-interviews.md design/0042-ask-for-a-phone-number.md docs/help/ paying-for-an-order.md apps/web/ checkout/ form.tsx
Someone wants to know why checkout asks for a phone number. -
An agent sees the code and none of the reasons
You ask an agent to add a feature. It reads the repository, so it learns how the code works. It doesn’t see the spec, the research that set the requirements, or the decision record that ruled out the obvious approach, because those are in other tools. So it builds the obvious approach.
-
You can’t see what was true when
Each tool keeps its own history. To find out what the plan said in the week a decision was made, you compare a doc’s version history, a wiki page’s history, and the dates on the commits, and hope they line up. Nothing ties the change in the plan to the change in the code.
| Without a holorepo | In a holorepo |
|---|---|
| The spec is in another tool and drifts from the code | The spec is a file next to the code, and one pull request changes both |
| Research sits in slides nobody opens | Research write-ups are files in the repository, found by the same search as the code |
| Five tools, five searches, five access lists | One repository, one search, one access list |
| An agent reads only the code | An agent reads the spec, the research, and the decisions too |
| Every tool has its own history | One history, in order, for the code and everything written about it |
How to set one up
You don’t need to move everything at once. Add a few folders to the repository your code is already in, and move each document in the next time you change it.
-
Start in the repository your product’s code is already in. Don’t create a new one. The point is that documents sit next to the code.
-
Add a few top-level folders. One for each kind of document your team already writes. Keep the names short and obvious.
acme
README.mdwhere everything isapps/the product’s codepackages/code the apps sharespecs/what each feature should do, and whyresearch/interview write-ups and survey resultsdesign/design docs and records of decisionsdocs/help docs, technical docs, release notesplans/roadmaps and launch plans
-
Write in Markdown, one document to a file. Markdown is plain text with light formatting, and GitHub shows it as a formatted page. Name files so they sort and say what they are, such as
2026-11-checkout-interviews.md. -
Put a README in every folder. It says what the folder is for and links to the documents that matter most. This is what a new teammate reads first.
-
Move documents in when you next change them. Start with specs, because engineers already read them, and leave a link behind in the old tool.
-
Change documents the way you change code. Open a pull request, ask someone to review it, and merge it. When a change to the code changes what a spec or a help doc says, put both in the same pull request.
Pull request
Ask for a phone number at checkout
apps/+18 −2web/ checkout/ form.tsx specs/+6 −3checkout.md docs/+4 −1help/ paying-for-an-order.md
One pull request changes the code, the spec, and the help doc. They are reviewed and merged together. -
Say who reviews what. A
CODEOWNERSfile in the repository names who is asked to review a pull request that changes each folder, so the research lead is asked about changes toresearch/and a designer about changes todesign/. On a private repository this needs a paid GitHub plan. -
Give everyone a way to write. Add each writer to the repository on GitHub. An agent can then make the change for them: it edits the file, commits it, and opens the pull request. That still doesn’t put two people in the same document at once, which is the first of the trade-offs.
What stays out
Large files like video and raw recordings make a repository slow to copy, so keep them somewhere else and link to them. Passwords and keys never go in a repository. Customer research often holds personal details, so take out names and contact details before the notes go in, or keep the raw notes in a separate private repository and put the write-up in the holorepo.
Three habits that keep it working
- Write decisions down in the repository. A decision made in a meeting or a chat thread gets a short record in
design/the same day. - Link to a document instead of pasting from it. A pull request links to the spec it implements. A spec links to the research behind it.
- Delete what’s no longer true. The history keeps every old version, so the folder only needs to hold what is current.
The trade-offs
A repository was built for code, so documents in one behave differently from documents in a docs app. These are the four differences people run into, and what helps with each.
Git doesn’t sync as you type
The commands are no longer the hard part. Agents such as Claude Code, Cursor, and ChatGPT can run Git for you once they’re connected to the repository: you say what to change, and the agent edits the file, commits it, and opens the pull request.
What hasn’t changed is that everyone works on their own copy. You don’t see a teammate’s change until they push it and you pull it. If two people change the same paragraph of a spec on the same afternoon, the second one to finish has a conflict to settle. An agent can run the merge or the rebase, but a person still has to decide whose wording stays. In a docs app both of them would have been typing in the same document and watching each other do it.
What helps: keep pull requests small and merge them the same day. When a document needs several people at once, use an editor that puts them in the same document live and saves the result to GitHub.
Comments belong to a pull request
In a docs app you select a sentence and comment on it, and the comment stays with the document. GitHub’s comments are made for changes: you comment inside a pull request, on the files it changes. To raise something about a document nobody is changing, you open an issue or a pull request first. And when a pull request merges, its conversation stays with the pull request, not with the document.
What helps: ask the question in an issue that links to the document, and write the answer into the document itself.
Access is set for the whole repository
GitHub decides who can read a repository as a whole, not folder by folder. Everyone who can see the code can see the research, and the other way around. Everyone who writes also needs a GitHub account with access to the repository, and people outside engineering often don’t have one yet.
What helps: add the whole team to GitHub before you move their documents, and put documents that need a smaller audience in a second, private repository. On a paid GitHub plan each person you add is another seat.
Markdown does less than a docs app
Markdown covers headings, lists, links, tables, images, and code blocks. It has no page layout, a wide table is awkward to edit as plain text, and a slide deck or a spreadsheet loses its layout, charts, and formulas when it’s turned into Markdown.
What helps: write up what the deck or the spreadsheet shows in a Markdown file, and link to the original. A small table of data can go in as a CSV file, which GitHub shows as a table.
Questions
What is a holorepo?
A holorepo is one repository that holds a whole product: its code, and what the team knows about it, such as plans, specs, customer research, design docs, and help docs.
Is a holorepo the same as a monorepo?
No. A monorepo holds the code for many projects in one repository. A holorepo holds one product’s code together with the plans, specs, research, and docs about it. A repository can be both.
Does a holorepo have to be on GitHub?
No. The idea works in any Git repository.
Is a holorepo the same as docs as code?
No. Docs as code is a way of writing docs: in plain text, kept in a repository, changed through review. A holorepo is where they are kept: one product’s code and everything written about it, in the same repository.
Can a holorepo replace a wiki?
For what the team writes about the product, yes. Specs, research, design docs, and help docs can all live in it. Writing that isn’t about one product, like a company handbook, goes in a repository of its own.
Can people who don’t use Git work in a holorepo?
Yes. An agent can edit the file, commit it, and open the pull request for them, and some editors let people write in the same document together and save the result to GitHub.
What shouldn’t go in a holorepo?
Large media files, passwords and keys, and personal details from customer research.
How do you write and say holorepo?
One word, lowercase: holorepo. Say it like hologram and repo.