Your Company Knowledge Lives in Slack Threads and Shared Drives—That Needs to Change
Every growing company hits the same wall. Onboarding documentation lives in a Google Doc that hasn't been updated since 2023. The return policy is pinned in three different Slack channels with three different versions. The sales playbook exists only in the head of your top closer who just gave two weeks' notice. Institutional knowledge is scattered, outdated, and inaccessible exactly when people need it most.
Odoo 19's Knowledge module solves this by embedding a full-featured wiki directly inside your ERP. Articles are organized in a nested tree hierarchy, edited collaboratively in real time (Google Docs style), and can embed live Odoo views—kanban boards, list views, graphs—that update automatically. Templates enforce consistency across SOPs, and sharing controls let you publish articles to the portal or the public web without exposing internal data.
This guide covers every layer of setting up a production-grade company knowledge base in Odoo 19: module configuration, article structure, collaborative editing, embedded views, template articles, sharing with portal users and the public, integration with Helpdesk and Project, version history, full-text search with tags, and permissions management.
Installing and Configuring the Knowledge Module in Odoo 19
The Knowledge module is a first-party Odoo app available in both Community and Enterprise editions (Enterprise adds collaborative editing and embedded views). Navigate to Apps, search for knowledge, and click Install. The module creates a new top-level menu entry: Knowledge.
Module Dependencies and Settings
After installation, go to Settings > Knowledge. The key configuration options are:
| Setting | Path | Default | Recommendation |
|---|---|---|---|
| Enable Knowledge | Settings > Knowledge | Enabled on install | N/A |
| Share with Portal | Settings > Knowledge > Sharing | Disabled | Enable if you plan to share SOPs or FAQs with external partners |
| Share to Web | Settings > Knowledge > Sharing | Disabled | Enable for public-facing documentation or help center articles |
| Helpdesk Integration | Settings > Helpdesk > Knowledge | Disabled | Enable to let agents search and insert Knowledge articles into ticket replies |
If you want to install Knowledge programmatically (for instance as part of a custom module that depends on it), add it to your module's __manifest__.py:
{
'name': 'Company Wiki Setup',
'version': '19.0.1.0.0',
'category': 'Knowledge',
'depends': [
'knowledge',
'helpdesk', # Optional: Helpdesk integration
'project', # Optional: Project integration
'website', # Optional: Public article sharing
],
'data': [
'security/ir.model.access.csv',
'data/knowledge_article_templates.xml',
],
'installable': True,
'application': False,
'license': 'LGPL-3',
}Building an Article Tree: Sections, Nested Articles, and the Knowledge Sidebar
Knowledge articles are stored in the knowledge.article model and organized in a parent-child tree. The sidebar on the left of the Knowledge interface shows this tree. Each article can have unlimited child articles, creating a hierarchy as deep as you need.
Recommended Top-Level Structure
We recommend starting with 5–7 root-level sections that map to your company's organizational structure:
| Root Article | Contents | Audience | Icon |
|---|---|---|---|
| Company Handbook | Policies, benefits, PTO, code of conduct | All employees | 📖 |
| Engineering Wiki | Architecture docs, deployment guides, runbooks | Engineering team | ⚙ |
| Sales Playbook | Pitch decks, objection handling, pricing rules | Sales team | 💰 |
| Customer Support | Troubleshooting guides, FAQs, escalation procedures | Support team + Portal | 🎯 |
| Onboarding | Day 1 checklist, tool access, team introductions | New hires + HR | 🚀 |
To create this structure via XML data files (useful for repeatable deployments), use the knowledge.article model:
<odoo>
<data noupdate="1">
<!-- Root articles -->
<record id="article_company_handbook" model="knowledge.article">
<field name="name">Company Handbook</field>
<field name="internal_permission">write</field>
<field name="category">workspace</field>
<field name="icon">📖</field>
<field name="sequence">10</field>
<field name="is_article_visible_by_everyone" eval="True"/>
</record>
<!-- Child article under Company Handbook -->
<record id="article_pto_policy" model="knowledge.article">
<field name="name">PTO & Leave Policy</field>
<field name="parent_id" ref="article_company_handbook"/>
<field name="internal_permission">write</field>
<field name="sequence">10</field>
<field name="body"><![CDATA[
<h2>Paid Time Off Policy</h2>
<p>All full-time employees accrue 20 days of PTO per year...</p>
]]></field>
</record>
<!-- Engineering Wiki with restricted access -->
<record id="article_engineering_wiki" model="knowledge.article">
<field name="name">Engineering Wiki</field>
<field name="internal_permission">none</field>
<field name="category">workspace</field>
<field name="icon">⚙</field>
<field name="sequence">20</field>
</record>
<!-- Grant access to Engineering group -->
<record id="article_member_engineering" model="knowledge.article.member">
<field name="article_id" ref="article_engineering_wiki"/>
<field name="partner_id" ref="base.main_partner"/>
<field name="permission">write</field>
</record>
</data>
</odoo> The Knowledge sidebar supports drag-and-drop. Users can reorder articles and move them between parents directly in the UI. The sequence and parent_id fields update automatically. This makes reorganization effortless as your wiki grows.
Key Fields on knowledge.article
| Field | Type | Purpose |
|---|---|---|
name | Char | Article title displayed in sidebar and breadcrumb |
body | Html | Rich-text article content (stored as sanitized HTML) |
parent_id | Many2one | Parent article (creates the tree hierarchy) |
child_ids | One2many | Child articles under this article |
internal_permission | Selection | write, read, or none for internal users |
category | Selection | workspace (shared), private, or shared |
icon | Char | Emoji icon displayed next to the article title |
cover_image_id | Many2one | Cover image from knowledge.cover displayed at article top |
article_member_ids | One2many | Per-user or per-group permission overrides |
is_article_visible_by_everyone | Boolean | When True, all internal users can see the article regardless of member rules |
Real-Time Collaborative Editing: How Multiple Users Edit the Same Article
Odoo 19 Enterprise includes real-time collaborative editing powered by the same OdooEditor engine used in the Website Builder and Email Marketing. When two or more users open the same Knowledge article, they see each other's cursors and changes appear in real time—no save button, no version conflicts, no "someone else is editing this document" lockout.
How It Works Under the Hood
The collaborative editing system uses Operational Transformation (OT) over Odoo's bus system (WebSocket on port 8072). Each keystroke generates an operation that is broadcast to all connected clients. The server merges concurrent operations and guarantees eventual consistency. The body field on knowledge.article stores the final merged HTML after all operations are applied.
Rich Content Blocks
The editor supports far more than plain text. Use the / slash command inside any article to insert structured content blocks:
| Slash Command | Block Type | Use Case |
|---|---|---|
/heading | H1/H2/H3 headings | Section structure within articles |
/list | Bulleted, numbered, or checklist | SOPs, step-by-step procedures |
/table | Responsive table | Comparison charts, pricing matrices |
/code | Code block with syntax highlighting | Technical documentation, API examples |
/image | Inline image with caption | Screenshots, diagrams |
/file | Attached file download link | PDF templates, spreadsheets |
/kanban | Embedded Kanban view | Live task boards inside documentation |
/list view | Embedded List view | Filtered records from any Odoo model |
/graph | Embedded Graph view | Live charts and dashboards |
/article | Link to another Knowledge article | Cross-referencing between wiki pages |
There is no hard limit on the number of simultaneous editors. We've tested up to 15 users editing the same article without noticeable lag on a standard Odoo deployment (4 workers, 8GB RAM). Beyond 20 concurrent editors, consider splitting long articles into smaller child articles to reduce OT merge complexity.
Embedded Views: Live Kanban, List, and Graph Views Inside Articles
This is the feature that separates Odoo Knowledge from a generic wiki tool like Confluence or Notion. You can embed live, interactive Odoo views directly inside an article. These views query real data from any Odoo model, respect access rights, and update in real time. When a task moves to "Done" in the Project app, the embedded kanban board in your Engineering Wiki reflects it instantly.
Inserting an Embedded View
Type /kanban, /list, or /graph inside the article editor. A configuration panel appears where you select the model (e.g., project.task), apply filters (e.g., stage_id.name = 'In Progress'), and choose group-by fields. The result is a fully interactive view embedded inline:
| View Type | Best For | Example Usage |
|---|---|---|
| Kanban | Visual workflow tracking | Sprint board inside Engineering Wiki, recruitment pipeline inside HR Handbook |
| List | Tabular data with sorting/filtering | Open helpdesk tickets inside Support Knowledge, inventory levels inside Warehouse SOP |
| Graph | Charts, trends, KPIs | Monthly sales chart inside Sales Playbook, expense breakdown inside Finance Wiki |
To create embedded views programmatically (useful for template articles that ship with your custom module), use the embedded.view tag within the article body HTML:
<record id="article_sprint_board" model="knowledge.article">
<field name="name">Current Sprint Board</field>
<field name="parent_id" ref="article_engineering_wiki"/>
<field name="internal_permission">write</field>
<field name="body"><![CDATA[
<h2>Active Sprint</h2>
<p>This board updates in real time from the Project app.</p>
<div class="o_knowledge_behavior_anchor
o_knowledge_behavior_type_embedded_view"
data-behavior-props='{
"act_window": {
"name": "Sprint Tasks",
"res_model": "project.task",
"view_mode": "kanban",
"domain": "[
[\"project_id.name\", \"=\", \"Product Development\"],
[\"tag_ids.name\", \"in\", [\"Sprint 24\"]]
]",
"context": {
"group_by": "stage_id",
"default_project_id": 7
}
}
}'/>
]]></field>
</record>Embedded views respect the viewing user's access rights. If a sales user opens an article with an embedded HR payroll list view, they'll see an "Access Denied" message for that embedded block—not the actual data. The rest of the article renders normally. This means you can safely embed sensitive views in shared articles.
Template Articles and Sharing: SOPs, Portal Access, and Public URLs
Template Articles
Templates let you create reusable article structures that enforce consistency. Navigate to Knowledge > Configuration > Article Templates (or set is_template = True on any article). When a user creates a new article, they can choose "Use a Template" and the template's content, structure, and embedded views are cloned into the new article.
Common template examples:
| Template Name | Sections | Used By |
|---|---|---|
| Meeting Notes | Attendees, Agenda, Decisions, Action Items (checklist) | All teams |
| SOP Document | Purpose, Scope, Procedure Steps, Responsible Party, Revision History | Operations, Quality |
| Product Spec | Overview, Requirements, Technical Design, Acceptance Criteria, embedded task kanban | Engineering, Product |
| Troubleshooting Guide | Symptoms, Diagnosis Steps, Solution, Related Tickets (embedded list) | Support team |
Sharing with Portal Users
To share an article with portal users (external partners, clients), open the article, click the Share button in the toolbar, and toggle "Share to Portal". The article becomes visible to portal users who have been explicitly invited via the article_member_ids relationship. They can read the article but cannot edit it unless you grant write permission.
Publishing to the Public Web
For public-facing documentation (help centers, product guides, FAQs), toggle "Share to Web" on the article. Odoo generates a public URL at /knowledge/article/{{ article.id }} that is accessible without login. The published article uses a clean, read-only layout with your website's theme applied.
# Share an article to portal and web programmatically
article = env['knowledge.article'].browse(42)
# Grant portal access to a specific partner
env['knowledge.article.member'].create({
'article_id': article.id,
'partner_id': portal_partner.id,
'permission': 'read',
})
# Make article publicly accessible on the web
article.write({
'website_published': True,
})
# Generate the public URL
public_url = f"/knowledge/article/{article.id}"Integrating Knowledge with Helpdesk, Project, and Other Odoo Modules
The Knowledge module isn't an isolated wiki—it connects to the rest of your Odoo ecosystem. These integrations turn static documentation into a living knowledge layer that surfaces relevant information exactly where users need it.
Helpdesk Integration
Enable this at Settings > Helpdesk > Knowledge. Once active, helpdesk agents see a "Knowledge" button in the ticket view. They can:
- Search the entire knowledge base without leaving the ticket
- Insert article content directly into a ticket reply with one click
- Create a new Knowledge article from a ticket (turning a solved issue into documentation)
- Link articles to ticket types so suggested articles appear automatically
Project Integration
Each project in Odoo 19 can have a linked Knowledge section. Navigate to Project > Settings > (your project) and enable "Knowledge". A new "Articles" tab appears on the project form. Articles created here are automatically nested under a project-specific root article and inherit the project's access permissions.
Custom Integration via Python
You can link Knowledge articles to any model using a Many2one field. Here's how to add a "Related Article" field to the CRM lead form:
from odoo import fields, models
class CrmLead(models.Model):
_inherit = 'crm.lead'
knowledge_article_id = fields.Many2one(
'knowledge.article',
string='Related Knowledge Article',
help='Link a Knowledge article for sales context.',
domain="[('internal_permission', '!=', 'none')]",
)
knowledge_article_body = fields.Html(
related='knowledge_article_id.body',
string='Article Preview',
readonly=True,
)Full-Text Search, Tags, Favorites, and the Permission Model
Full-Text Search
The Knowledge app includes a global search bar at the top of the sidebar. It performs full-text search across article titles and body content. Odoo uses PostgreSQL's tsvector/tsquery for fast text matching. Results are ranked by relevance and filtered by the user's access rights—you'll never see articles you don't have permission to read in search results.
Tags and Categorization
Articles support tags via the tag_ids Many2many field pointing to knowledge.tag. Tags appear as colored chips on the article and are searchable. Create tags at Knowledge > Configuration > Tags or inline while editing an article. We recommend a flat tag structure (no nested tag hierarchies) with naming conventions like dept:engineering, type:sop, status:draft.
Favorites
Users can star articles to add them to their Favorites section in the sidebar. Favorites are per-user and don't affect other users' views. The favorite_ids field on knowledge.article tracks which users have favorited each article.
The Permission Model
Knowledge uses a cascading permission model. Permissions are evaluated in this order:
- Article member rules (
knowledge.article.member) — per-user or per-partner overrides. These take highest priority. - Internal permission (
internal_permissionfield) — blanket permission for all internal users:write,read, ornone. - Parent inheritance — if an article's
internal_permissionis not set, it inherits from its parent article, recursively up the tree.
| Scenario | internal_permission | Member Rule | Result |
|---|---|---|---|
| Company Handbook for all employees | read | HR Manager: write | Everyone reads, HR edits |
| Engineering Wiki restricted | none | Engineering group: write | Only engineers see it |
| CEO private notes | none | CEO user: write | Only CEO can access |
| Customer FAQ (public) | read | Portal users invited | Internal reads, portal reads via share link |
Version History and Audit Trail
Every edit to a Knowledge article is tracked in the chatter (mail thread) below the article. Odoo logs the user, timestamp, and a diff of what changed. For Enterprise users, the body field also maintains revision snapshots. Click "History" in the article toolbar to view previous versions and restore any snapshot with a single click.
The revision history is particularly important for regulated industries. If you need to prove what version of an SOP was in effect on a specific date, the Knowledge history log gives you that audit trail without any third-party tool.
3 Knowledge Module Mistakes That Undermine Your Company Wiki
Flat Article Structure Creates an Unnavigable Mess
We see this constantly: teams create 200+ root-level articles with no hierarchy. Within a month, the sidebar becomes an unsorted wall of titles and nobody can find anything. Search helps, but only if you remember the exact wording. Users stop contributing because "the wiki is useless anyway"—the classic knowledge base death spiral.
Start with 5–7 root sections (see our recommended structure in Step 02). Enforce a rule: every new article must be created under an existing parent, never at root level. Assign a "Knowledge Owner" per root section who reviews structure monthly and merges or archives stale content.
Embedded Views Break When the Source Record Is Archived
An embedded kanban view filtering by project_id.name = 'Q1 Launch' works perfectly—until someone archives that project. The embedded view then shows an empty state with no explanation. Users don't realize it's because the underlying data was archived; they assume the wiki is broken. This is especially problematic for articles that reference time-bound records like sprints, campaigns, or fiscal periods.
Add active_test: false to the embedded view's context so it includes archived records. Better yet, use domains based on stable identifiers (IDs, tags) rather than names that might change. Schedule a quarterly review of articles with embedded views to verify they still show meaningful data.
Portal-Shared Articles Accidentally Expose Internal Content
When you share a parent article to the portal, its child articles do not automatically inherit the share setting—but they do inherit the internal_permission. This creates a false sense of security. An admin shares the "Customer Support" root article with a client portal user, assuming the children are also shared. But the child article "Internal Escalation Procedures" (with internal_permission = read) is still visible to internal users only. The portal user sees a broken link or empty page when they navigate to it. Worse, if someone later sets that child to website_published = True without checking the content, the internal escalation contacts and SLA details become public.
Before sharing any parent article, audit every child article's permissions. Create a dedicated "Public FAQ" root section where every article is explicitly designed for external consumption. Keep internal procedures in a separate root section that is never shared. Use the knowledge.article.member model to explicitly grant portal access per article rather than relying on inheritance.
What a Centralized Knowledge Base Saves Your Business
The Knowledge module is included in Odoo Enterprise at no extra per-user cost. The ROI comes from time saved and knowledge retained:
New hires with access to a structured wiki reach full productivity in 3 weeks instead of 5. Every SOP, process, and policy is documented and searchable from day one.
McKinsey estimates employees spend 1.8 hours/day searching for information. A well-structured Knowledge base with full-text search and embedded views cuts that by at least 30%.
Replaces Confluence ($6/user/month), Notion ($10/user/month), or Google Sites + Docs. For a 50-person company, that's $3,600–$6,000/year in eliminated SaaS spend.
Beyond the numbers: institutional knowledge is a business asset that depreciates when it's not documented. Every time an experienced employee leaves without their knowledge being captured in a wiki, the company loses months of accumulated expertise. The Knowledge module makes capturing that expertise a natural part of daily work—not a separate "documentation sprint" that never happens.
Optimization Metadata
Complete guide to building a company wiki in Odoo 19 Knowledge. Article hierarchy, collaborative editing, embedded views, templates, portal sharing, Helpdesk integration, and permissions.
1. "Installing and Configuring the Knowledge Module in Odoo 19"
2. "Real-Time Collaborative Editing: How Multiple Users Edit the Same Article"
3. "Embedded Views: Live Kanban, List, and Graph Views Inside Articles"
4. "3 Knowledge Module Mistakes That Undermine Your Company Wiki"