Raneto is a free, MIT-licensed Markdown knowledge base for Node.js: flat-file docs with browser editing and no database to run.
Ryan Lelek built Raneto in 2014 for teams that already kept notes as plain text and wanted those files turned into a browsable site without standing up MySQL first. That flat-file idea is still the entire product: every page is a Markdown file on disk, a Node.js process turns the folder into navigation and search, and there is no content database to back up or migrate.
KnowledgeOwl is a hosted knowledge base built for support teams: it bills per author and gives you article-level permissions, embeddable help widgets, PDF export and a WYSIWYG editor a non-technical hire can use on day one. Raneto has none of that back-office tooling — one shared admin login covers editing, there are no per-article visibility rules, and there is no support-portal widget to drop into a product.
What it trades for that is ownership and cost. Pages are files, so version history is whatever your Git log already records, moving hosts means copying a folder, and there is no per-seat invoice. A small team with Markdown docs already in a repository can turn them into a searchable site in the time it takes to point a Docker container at the folder; a team needing delegated editors, approval workflows, or a branded help center will find KnowledgeOwl's paid tooling covers what Raneto leaves out.
AUTHENTICATION toggle locks editing behind one username and password while leaving the reading side open to anyone with the URL.raneto/raneto Docker image means someone without Node.js installed can still stand up the site from one compose file.Is Raneto free for commercial use? Yes. It's MIT-licensed with no paid tier, so you can run it for an internal or customer-facing site without a fee.
Raneto vs KnowledgeOwl — which should I pick? KnowledgeOwl for per-article permissions, a branded support widget and a WYSIWYG editor billed per seat; Raneto if your docs are already Markdown files and one shared editor login is acceptable.
Does Raneto need a database? No. Pages, categories and the search index all come from Markdown files on disk; the only state kept outside those files is the session secret used for login.
Raneto is a fair pick when your documentation is already a folder of Markdown files and you want a browsable, searchable site without adding a database or a subscription — flat categories and a single shared login are the honest trade-offs for that simplicity. Recent commits and an MIT license, which lets you fold it into a client project without asking permission, keep it a reasonable default for small teams; anyone needing nested sections or per-user editing rights should look further down the list.
We started this exact setup from scratch in a clean Linux machine on Nov 3, 2026 and checked it through Raneto's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p raneto && cd raneto
curl -fsSL https://open-source.store/tools/raneto/compose.yml -o compose.ymlcat > .env <<EOF
SESSION_SECRET=$(openssl rand -hex 16)
EOFSESSION_SECRET — Random string of at least 16 characters for signing session cookies. Generated above; keep it secret.docker compose up -dservices:
raneto:
image: raneto/raneto:0.18.1
ports:
- "8080:8080"
environment:
SESSION_SECRET: ${SESSION_SECRET}
NODE_ENV: ""
volumes:
- raneto-data:/opt/raneto/content/pages
restart: always
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:8080/ || exit 1"]
interval: 5s
timeout: 5s
retries: 5
volumes:
raneto-data:
Free IDE for Java, Kotlin, Go, TypeScript and Python. Built on IntelliJ Community, fully open source, 300+ plugins.
Show that Raneto is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 125 s: raneto/raneto:0.18.1.
Based on the upstream setup. Official Docker setup from deployment documentation. Image pinned to 0.18.1; SESSION_SECRET configured via environment variable; NODE_ENV cleared so session cookies work over HTTP; persistent volume added for content pages.
raneto-1 | 2026-11-03T09:00:11.320824002Z GET /bin/querybuilder.json.css?path=/home&p.hits=full&p.limit=-1 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:11.320916211Z GET /index.php?option=com_jukebox&controller=../../../../../../../../../../etc/passwd%00 429 0.012 ms - 42
raneto-1 | 2026-11-03T09:00:11.320987961Z GET /api/dns 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.321218336Z GET /credentials.db 429 0.012 ms - 42
raneto-1 | 2026-11-03T09:00:11.321262252Z GET /server/storage/ 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.321733002Z GET /?mapp_iframe=1&mapid=--%3E%3Cimg%20src%20onerror=alert(document.domain)%3E 429 0.033 ms - 42
raneto-1 | 2026-11-03T09:00:11.321786002Z GET /setup/license 429 0.015 ms - 42
raneto-1 | 2026-11-03T09:00:11.321832002Z GET /downFile.php?filename=../../../../etc/passwd 429 0.011 ms - 42
raneto-1 | 2026-11-03T09:00:11.322230711Z GET /app/etc/local.xml.additional 429 0.013 ms - 42
raneto-1 | 2026-11-03T09:00:11.322357044Z GET /mail/src/compose.php?mailbox=%3C%2Fscript%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E 429 0.017 ms - 42
raneto-1 | 2026-11-03T09:00:11.322419836Z GET /tiki-jsplugin.php?plugin=x&language=../../../../../../../../../../windows/win.ini 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.322570252Z GET /tiki-jsplugin.php?plugin=x&language=../../../../../../../../../../windows/win.ini 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.322623419Z GET /html/device-id 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.322657627Z GET /html/device-id 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.322713502Z GET /index.php?option=com_jukebox&controller=../../../../../../../../../../etc/passwd%00 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.322883294Z GET /credentials.db 429 0.011 ms - 42
raneto-1 | 2026-11-03T09:00:11.323040544Z GET /api/dns 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.323143586Z GET /?mapp_iframe=1&mapid=--%3E%3Cimg%20src%20onerror=alert(document.domain)%3E 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.323249669Z GET /mail/src/compose.php?mailbox=%3C%2Fscript%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E 429 0.011 ms - 42
raneto-1 | 2026-11-03T09:00:11.323339544Z GET /rest/users/1 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.323410252Z GET /setup/license 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.323481627Z GET /process/feries.php?fichier=../../../../../../../etc/passwd 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.323748711Z GET /user/login/?next=https%3A%2F%2Finteract.sh 429 0.014 ms - 42
raneto-1 | 2026-11-03T09:00:11.324649502Z GET /.config/gcloud/credentials.db 429 0.013 ms - 42
raneto-1 | 2026-11-03T09:00:11.324651794Z GET /.config/gcloud/credentials.db 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.324652461Z GET /intikal/storage/ 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.324653127Z GET /store/app/etc/local.xml 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.324653794Z GET /filezilla.xml 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.324654377Z GET /index.php?option=com_jvouchers&controller=catalog-results&task=query&wajx=1&wmjx=1&tmpl=component&type=raw&crtyid=12&trucs[x][search]=gx3vt%20onfocus=alert(document.domain)%20autofocus=%20itkrzsug7w5 429 0.006 ms - 42
raneto-1 | 2026-11-03T09:00:11.324655252Z GET /bin/querybuilder.json.css?path=/etc&p.hits=full&p.limit=-1 429 0.006 ms - 42
raneto-1 | 2026-11-03T09:00:11.324655877Z GET /.aws/credentials 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.324656419Z GET /intikal/storage/ 429 0.006 ms - 42
raneto-1 | 2026-11-03T09:00:11.324656961Z GET /index.php?option=com_jvouchers&controller=catalog-results&task=query&wajx=1&wmjx=1&tmpl=component&type=raw&crtyid=12&trucs[x][search]=gx3vt%20onfocus=alert(document.domain)%20autofocus=%20itkrzsug7w5 429 0.006 ms - 42
raneto-1 | 2026-11-03T09:00:11.324657752Z GET /rest/users/1 429 0.006 ms - 42
raneto-1 | 2026-11-03T09:00:11.324658336Z GET /?rest_route=/ult/v2/review-banner-visibility&action=maybe-later&redirect=yes&redirect_url=https://interact.sh 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.324659002Z GET /index.php?option=com_jequoteform&view=../../../../../../etc/passwd%00 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.324897544Z GET /user/login/?next=https%3A%2F%2Finteract.sh 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.324959419Z GET /bin/querybuilder.json.css?path=/home&p.hits=full&p.limit=-1 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.325021461Z GET /OA_HTML/bispgraph.jsp%0D%0A.js?ifn=passwd&ifl=/etc/ 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.325106961Z GET /app/etc/local.xml.additional 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.325601502Z GET /admin/voyager-assets?path=.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2Fetc/passwd 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.325676211Z GET /index.php?option=com_dioneformwizard&controller=../../../../../../../../../../../../../etc/passwd%00 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.325762919Z GET /?rest_route=/ult/v2/review-banner-visibility&action=maybe-later&redirect=yes&redirect_url=https://interact.sh 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.325795919Z GET /admin/voyager-assets?path=.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2F.....%2F%2F%2Fetc/passwd 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.325819919Z GET /.aws/credentials 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.325849419Z GET /filezilla.xml 429 0.006 ms - 42
raneto-1 | 2026-11-03T09:00:11.325879544Z GET /index.php?option=com_dioneformwizard&controller=../../../../../../../../../../../../../etc/passwd%00 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.325904169Z GET /downFile.php?filename=../../../../etc/passwd 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.325933294Z GET /index.php?option=com_jequoteform&view=../../../../../../etc/passwd%00 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.325961669Z GET /OA_HTML/bispgraph.jsp%0D%0A.js?ifn=passwd&ifl=/etc/ 429 0.006 ms - 42
raneto-1 | 2026-11-03T09:00:11.326069002Z GET /index.php?option=com_gcalendar&controller=../../../../../etc/passwd%00 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.326372627Z GET /typo3conf/ext/restler/vendor/luracast/restler/public/examples/resources/getsource.php?file=../../../../../../../LocalConfiguration.php 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.326431794Z GET /vtigercrm/libraries/ 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.326503794Z GET /wp-content/plugins/aspose-importer-exporter/aspose_import_export_download?file=../../../wp-config.php 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.326717669Z GET /vtigercrm/libraries/ 429 0.011 ms - 42
raneto-1 | 2026-11-03T09:00:11.326811961Z GET /wp-content/plugins/aspose-importer-exporter/aspose_import_export_download?file=../../../wp-config.php 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.326877044Z GET /?wahi=JzthbGVydChkb2N1bWVudC5kb21haW4pOy8v 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.326959836Z GET /actions/seomatic/meta-container/meta-link-container/?uri={{228*'98'}} 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.327023752Z GET /wp-content/plugins/gwyns-imagemap-selector/popup.php?id=1&class=%22%3C%2Fscript%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.327397127Z GET /wp-content/themes/diarise/download.php?calendar=file:///etc/passwd 429 0.010 ms - 42
raneto-1 | 2026-11-03T09:00:11.327424836Z GET /typo3conf/ext/restler/vendor/luracast/restler/public/examples/resources/getsource.php?file=../../../../../../../LocalConfiguration.php 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.327550669Z GET /wp-content/plugins/gwyns-imagemap-selector/popup.php?id=1&class=%22%3C%2Fscript%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E 429 0.009 ms - 42
raneto-1 | 2026-11-03T09:00:11.327581377Z GET /?wahi=JzthbGVydChkb2N1bWVudC5kb21haW4pOy8v 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:11.327612502Z GET /kylin/api/admin/config 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.327646794Z GET /webui/file_guest?path=/var/www/documentation/../../../../../etc/passwd&flags=1152 429 0.008 ms - 42
raneto-1 | 2026-11-03T09:00:11.327681502Z GET /user/logout?next=https%3A%2F%2Finteract.sh 429 0.007 ms - 42
raneto-1 | 2026-11-03T09:00:12.297413628Z GET /elocker_old/storage/ 429 0.171 ms - 42
raneto-1 | 2026-11-03T09:00:12.297896669Z GET /webui/file_guest?path=/var/www/documentation/../../../../../etc/passwd&flags=1152 429 0.127 ms - 42
raneto-1 | 2026-11-03T09:00:12.298217544Z GET /kylin/api/admin/config 429 0.073 ms - 42
raneto-1 | 2026-11-03T09:00:12.298242919Z GET /store/app/etc/local.xml 429 0.039 ms - 42
raneto-1 | 2026-11-03T09:00:12.298429586Z GET /OA_HTML/jsp/bsc/bscpgraph.jsp?ifl=/etc/&ifn=passwd 429 0.038 ms - 42
raneto-1 | 2026-11-03T09:00:12.298659253Z GET /wp-content/plugins/gwyns-imagemap-selector/popup.php?id=1%22%3C%2Fscript%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E 429 0.040 ms - 42
raneto-1 | 2026-11-03T09:00:12.299050211Z GET /bin/querybuilder.json.css?path=/etc&p.hits=full&p.limit=-1 429 0.026 ms - 42
raneto-1 | 2026-11-03T09:00:12.299065044Z GET /db/robomongo.json 429 0.080 ms - 42
raneto-1 | 2026-11-03T09:00:12.299184378Z GET /user/logout?next=https%3A%2F%2Finteract.sh 429 0.040 ms - 42
raneto-1 | 2026-11-03T09:00:12.299343211Z GET /sitemanager.xml 429 0.027 ms - 42
raneto-1 | 2026-11-03T09:00:12.299590378Z GET /index.php?controller=pjFront&action=pjActionGetBookingForm&session_id=%22%3E%3Cscript%3Ealert(document.domain)%3C/script%3E&cid=1&view=1&month=7&year=2023&start_dt&end_dt&locale&index=0 429 0.077 ms - 42
raneto-1 | 2026-11-03T09:00:12.299868503Z GET /actions/seomatic/meta-container/meta-link-container/?uri={{228*'98'}} 429 0.055 ms - 42
raneto-1 | 2026-11-03T09:00:12.300066419Z GET /wp-content/themes/diarise/download.php?calendar=file:///etc/passwd 429 0.038 ms - 42
raneto-1 | 2026-11-03T09:00:12.300161169Z GET /elocker_old/storage/ 429 0.028 ms - 42
raneto-1 | 2026-11-03T09:00:12.300269919Z GET /index.php?option=com_gcalendar&controller=../../../../../etc/passwd%00 429 0.025 ms - 42
raneto-1 | 2026-11-03T09:00:12.300375294Z GET / 429 0.025 ms - 42
raneto-1 | 2026-11-03T09:00:12.300505461Z GET /index.php?controller=pjFront&action=pjActionGetBookingForm&session_id=%22%3E%3Cscript%3Ealert(document.domain)%3C/script%3E&cid=1&view=1&month=7&year=2023&start_dt&end_dt&locale&index=0 429 0.021 ms - 42
raneto-1 | 2026-11-03T09:00:12.300614086Z GET /db/robomongo.json 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:12.300692294Z GET / 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.300769711Z GET /actions/seomatic/meta-container/all-meta-containers?uri={{228*'98'}} 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.300847419Z GET /OA_HTML/jsp/bsc/bscpgraph.jsp?ifl=/etc/&ifn=passwd 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:12.300925503Z GET /vtigercrm/layouts/ 429 0.023 ms - 42
raneto-1 | 2026-11-03T09:00:12.300997503Z GET /verify.php?id=1&confirm_hash 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.301069461Z GET /FileZilla.xml 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.301131586Z GET /user/register?next=https%3A%2F%2Finteract.sh 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.301203294Z GET /robomongo.json 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.301262628Z GET /sitemanager.xml 429 0.017 ms - 42
raneto-1 | 2026-11-03T09:00:12.301344419Z GET /user/register?next=https%3A%2F%2Finteract.sh 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.303495711Z GET /ucmdb-api/connect 429 0.071 ms - 42
raneto-1 | 2026-11-03T09:00:12.303504294Z GET /actions/seomatic/meta-container/all-meta-containers?uri={{228*'98'}} 429 0.024 ms - 42
raneto-1 | 2026-11-03T09:00:12.303506253Z GET /user/resend-activation?next=https%3A%2F%2Finteract.sh 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:12.303507711Z GET /FileZilla.xml 429 0.027 ms - 42
raneto-1 | 2026-11-03T09:00:12.303508836Z GET /user/resend-activation?next=https%3A%2F%2Finteract.sh 429 0.018 ms - 42
raneto-1 | 2026-11-03T09:00:12.303510128Z GET /app/kibana 429 0.017 ms - 42
raneto-1 | 2026-11-03T09:00:12.303552794Z GET /mantis/verify.php?id=1&confirm_hash 429 0.017 ms - 42
raneto-1 | 2026-11-03T09:00:12.303704544Z GET /installer 429 0.038 ms - 42
raneto-1 | 2026-11-03T09:00:12.304070086Z GET /general/mytable/intel_view/video_file.php?MEDIA_DIR=../../../inc/&MEDIA_NAME=oa_config.php 429 0.030 ms - 42
raneto-1 | 2026-11-03T09:00:12.304246461Z GET /vtigercrm/layouts/ 429 0.023 ms - 42
raneto-1 | 2026-11-03T09:00:12.304354919Z GET /verify.php?id=1&confirm_hash 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:12.304472044Z GET /ucmdb-api/connect 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:12.304575419Z GET /mantisBT/verify.php?id=1&confirm_hash 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:12.304680211Z GET /installer 429 0.020 ms - 42
raneto-1 | 2026-11-03T09:00:12.304808169Z GET /app/kibana/ 429 0.026 ms - 42
raneto-1 | 2026-11-03T09:00:12.305066003Z GET /wp-content/plugins/gwyns-imagemap-selector/popup.php?id=1%22%3C%2Fscript%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E 429 0.107 ms - 42
raneto-1 | 2026-11-03T09:00:12.305292419Z GET /general/mytable/intel_view/video_file.php?MEDIA_DIR=../../../inc/&MEDIA_NAME=oa_config.php 429 0.040 ms - 42
raneto-1 | 2026-11-03T09:00:12.305516044Z GET /app/kibana 429 0.029 ms - 42
raneto-1 | 2026-11-03T09:00:12.305758586Z GET /robomongo.json 429 0.034 ms - 42
raneto-1 | 2026-11-03T09:00:12.306487753Z GET /mantisbt-2.3.0/verify.php?id=1&confirm_hash 429 0.044 ms - 42
raneto-1 | 2026-11-03T09:00:12.306604128Z GET /mantis/verify.php?id=1&confirm_hash 429 0.025 ms - 42
raneto-1 | 2026-11-03T09:00:12.307089253Z GET /bugs/verify.php?confirm_hash&id=1 429 0.069 ms - 42
raneto-1 | 2026-11-03T09:00:12.307162336Z GET /mantisBT/verify.php?id=1&confirm_hash 429 0.030 ms - 42
raneto-1 | 2026-11-03T09:00:12.307992586Z GET /app/kibana/ 429 0.107 ms - 42
raneto-1 | 2026-11-03T09:00:12.308243419Z GET /mantisbt-2.3.0/verify.php?id=1&confirm_hash 429 0.066 ms - 42
raneto-1 | 2026-11-03T09:00:12.309149336Z GET /bugs/verify.php?confirm_hash&id=1 429 0.080 ms - 42