Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Compendio

Compendio

A Markdown folder that is the database of record, with an editor a non-technical person can use, permissions, search, and a five-minute install.

Your pages are .md files in a folder you own. Open that folder in VS Code, back it up with the tool you already use, copy it to a USB stick — it is yours, and Compendio is the thing that makes it pleasant to read and write. There is no database server to install, no external service to sign up for, and nothing to migrate out of later.

  • Spanish and English, complete, from the first release.
  • Permissions that are explainable: two states per folder, no deny rules, and folders you cannot see are absent rather than greyed out.
  • Search that obeys them, in-process, with no external engine.
  • Encrypted folders for the router credentials and the incident post-mortems.
  • One file to download. Windows Service, systemd unit, or a container — same binary, same behaviour.

Licensed under AGPL-3.0-or-later.


Try the demo

A live instance runs at https://compendio.sergiohernandezp.com/ — click through the editor, the folder tree and search without installing anything.

Sign in with admin / Compendio-Demo! — the credentials are public on purpose. Anyone can read and edit, so treat everything in it as public and please do not put real or personal information in it. The whole instance is restored to its default state every Monday, so any changes — content, users, even a changed admin password — are wiped weekly. If someone has left it in a mess or changed the password, come back after Monday's reset.


Install in five minutes

Windows

  1. Download compendio-<version>-win-x64.zip from the releases page, then:
    Unblock-File .\compendio-<version>-win-x64.zip
    Expand-Archive .\compendio-<version>-win-x64.zip -DestinationPath C:\Compendio
  2. Right-click the Start button → Terminal (Admin), then:
    cd C:\Compendio
    powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer is in the zip. Three questions, all with defaults; it registers the service, opens the firewall if you want it, starts everything and prints the address and the administrator password. Write the password down — it is shown once.

To try it without installing anything, run .\compendio.exe and open http://localhost:8080. That path asks you to create the administrator yourself, and stops when you close the window.

Verifying the download is worthwhile, since the binaries are unsigned — see Unsigned releases:

$expected= (Get-Content .\compendio-<version>-win-x64.zip.sha256).Split('')[0]
(Get-FileHash .\compendio-<version>-win-x64.zip -Algorithm SHA256).Hash.ToLower() -eq$expected

Ubuntu / Debian

unzip compendio-<version>-linux-x64.zip -d /opt/compendio
sha256sum -c compendio-<version>-linux-x64.zip.sha256
chmod +x /opt/compendio/compendio
/opt/compendio/compendio

Then open http://localhost:8080. To run it as a systemd unit:

sudo /opt/compendio/compendio install

Docker

cd deploy
docker compose up -d

Then open http://localhost:8080.

The compose file mounts three volumes and keys is one of them, on purpose: it holds the master encryption key and the session key ring. Losing it makes every encrypted page unreadable and signs every user out on every restart.


Unsigned releases

Windows releases ship unsigned, and buying a code-signing certificate is not part of the plan.

The consequence is real: on first run of a downloaded executable, SmartScreen shows "Windows protected your PC" and you have to click More info → Run anyway. Nothing is wrong; the binary runs identically either way.

What we publish instead is a SHA-256 checksum beside every artifact, which is the honest substitute for a signature and is a stronger check than a signature you did not verify. Note that a self-signed code-signing certificate would not remove the dialog — SmartScreen reputation comes from a publicly trusted CA. It is genuinely useful in exactly one case: an organization can sign the binary with its own certificate and push that certificate to its machines' Trusted Publishers store by group policy. That is your PKI and your decision, and it costs nothing either.


What you get

EditingRich text by default. Nobody sees ##, ** or |---| unless they ask for the Markdown view. Paste from Word, Outlook, Confluence or a web page and it becomes clean Markdown.
The folderEvery page is a .md file with YAML front matter. Edit one in VS Code and it shows up in the browser within two seconds.
PermissionsAccess rules attach to folders. A folder either inherits — and can only add access — or is restricted to exactly the people and groups you list. There are no deny rules, because deny rules are where permission systems stop being explainable.
SearchSQLite FTS5, in-process. sesion finds sesión; 192.168.1.1 and VPN-Site-A survive as searchable units. The permission check is part of the query, so a result count never tells you about pages you cannot open.
Encrypted foldersAES-256-GCM, keys the instance generates for itself. Only administrators can edit inside one.
HistoryA snapshot on every change, including changes made in the content folder. Restoring writes a new version, so a mistaken restore is itself undoable.
BilingualSpanish and English throughout, including the setup wizard and the CLI. Pages can be tagged with a language and linked to their translations.
AI, optionalOff until you paste in an endpoint, and absent until then rather than greyed out. One OpenAI-compatible URL covers Ollama, Groq, OpenAI, Azure OpenAI and LM Studio — point it at Ollama on your own server and nothing leaves the machine. Improve writing, draft a page from rough notes, summarize, translate, ask the wiki. Every result is a proposal you accept or discard. Daily per-person and per-instance caps, so a metered endpoint cannot surprise you. Setting it up
HTTPScompendio cert create issues a certificate for this machine. No certificate authority, no internet, no purchase.

What it refuses to be

No SMTP. No real-time collaborative editing. No plugin marketplace. No native mobile apps. No multi-tenancy. No required external service, ever — not for search, not for AI, not for authentication.


Commands

compendio Start the server
compendio install|uninstall Register as a Windows Service or systemd unit
compendio doctor [--json] Check this instance and report what is wrong, in plain language
compendio backup --out <file> Content plus a consistent database copy
compendio restore --in <file>
compendio reindex Rebuild the search index from the content folder
compendio cert create Issue a self-signed TLS certificate
compendio reset-admin-password Local-console recovery — there is no email

Every verb is scriptable: no prompt that a flag or an environment variable cannot answer.


Building from source

You need the .NET 10 SDK and Node 22+, and the Common.Mediator repository checked out beside this one.

git clone https://github.com/shernandezp/Common.Mediator.git Mediator
git clone https://github.com/shernandezp/Compendio.git
cd Compendio
dotnet build # builds the SPA into src/Server/wwwroot too
dotnet test# Development, not Production: there is no launchSettings.json, so a bare `dotnet run` starts# without appsettings.Development.json and shows the setup wizard instead of the seeded admin.
ASPNETCORE_ENVIRONMENT=Development dotnet run --project src/Server

Then open http://localhost:8080 and sign in as admin / Compendio!Dev1.

To skip the client build (useful when only touching the server):

dotnet build -p:SkipClientBuild=true

docs/development.md covers the rest: hot reload against a running server, resetting the data directory, which tests need git on PATH, how to exercise each v1 feature, and how to regenerate the committed API contract.


Documentation

Users get their documentation inside the product, under the ? button in the header — how to navigate, search, write, and the lifecycle features, plus a section for administrators. It ships in every language the interface does. The files below are for whoever installs and maintains it.

docs/install.mdThe five-minute install, in detail, per platform
docs/development.mdRunning it locally, hot reload, tests, trying each feature
docs/api.mdThe HTTP API
docs/translating.mdAdding a language

Licence

Compendio is free software under the GNU Affero General Public License, version 3 or later. Because it is a network-accessible program, the licence requires the running instance to offer its source: it does, from GET /api/v1/about and from the footer of every page.

About

No description, website, or topics provided.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages