Otter Wiki: A minimalistic wiki powered by Python, Markdown and git
otterwiki.com
otterwiki.com
There's a few of them though, such as this old Ruby lang standby with a decade's worth of features that a decade ago was a way to host your same GitHub Pages site locally, supporting SSO:
https://github.com/gollum/gollum
https://github.com/gollum/gollum/wiki/Gollum-via-Rack-and-CA...
it's such an epic feat, how programmers have grown up to manage source over time & changes. i very much hope this richness cam extend beyond code some day, stop being arbitrary UI we craft & become good data structures that transcend each application.
https://hackage.haskell.org/package/gitit-0.15.1.2
It doesn't limit itself to markdown, nor to git (you can use darcs, hg, or even sqlite). A bit long in the tooth, though -- I stopped working on it once spam started to make self-hosted public wikis untenable.
personally i prefer confluence though. just find it faster to dump things out.
https://github.com/Linbreux/wikmd
I can’t remember why I switched from gollum to wikmd. I suspect installed size might be why.
incredibly important suggestion: replace "utterly" with "otterly"
And why that matters is because I can run the pipeline from my own laptop with gitlab-runner.
But we all have our own view of minimalistic and mine is "the less code is running, the more minimalistic it is". To be abundantly clear, the less code is running that I have to operate or maintain. Obviously Github, S3 and a SSG generator is a lot of code.
As a backend SQL guy I always feel overwhelmed by "minimalist" software that actually depend on me knowing ho to deploy safely on docker or mastering N dependencies before actually having something to try. Long are gone the lamp days... they had their own set of problems (wrong versions!) but it was a simpler time where you felt a little bit more in control.
Old man yell at the clouds I guess...
Meanwhile, I have a little LAMP project that is used significantly more than the micro service, that I’ve run for 15 years that I only have to touch when it needs feature updates. The platform itself just works. Occasionally I’ll need to move to a newer OS, which takes a few hours to get the new server built, run the job to configure it (doing it manually doesn’t take too much longer), then submit a request to change the load balancer to point to the new servers.
Granted, some of this comes down to experience. However, needing to know all the tools involved for the microservice was much more annoying and they broke half the time.
while everyone can care for pets with little effort.
They usually don't advertise at all to the general public because they are b2b oriented.
git clone https://github.com/redimp/otterwiki.git
cd otterwiki
mkdir -p app-data/repository
git init app-data/repository
echo "REPOSITORY='${PWD}/app-data/repository'" >> settings.cfg
echo "SQLALCHEMY_DATABASE_URI='sqlite:///${PWD}/app-data/db.sqlite'" >> settings.cfg
echo "SECRET_KEY='$(echo $RANDOM | md5sum | head -c 16)'" >> settings.cfg
export OTTERWIKI_SETTINGS=$PWD/settings.cfg
uv run --with gunicorn gunicorn --bind 127.0.0.1:8080 otterwiki.server:app
I filed an issue here suggesting that for the docs https://github.com/redimp/otterwiki/issues/146 - and also that it would be great if getting started could be as simple as this: pip install otterwiki
otterwiki \
--repository app-data/repository \
--sqlite app-data/db.sqlite \
--secret-key secret1 \
--port 8080 ./configure —-prefix=/home/user/appname
make
make install
was too complicatedThe NIH syndrome is still big in software build tools, everything is complicated unless you have written it yourself in your environment. Admitted I seldom run those commands manually anymore, but things have gotten way worse when I do try. Specific versions of tools, libraries and kernels, or just kernels. Nix build scripts are actually one of the worst offenders here often ignoring every other standard available. Not saying it is bad, just an example of why what you write above is more complicated than it sounds.
I did have to hardcode the data path, and I think having some form of export/snapshot would help as well, but submitting a patch might be a fun weekend project.
Sometimes you just want to sit down and write code and see it working.
Otter is much nicer, though.
I used https://foswiki.org and it was great for combining structured and non structured information
The irony I'm having is that I store some single file html documents alongside my notes and none of these engines (or obsidian) will render them!
I’ve used it a bit to add my own forms into pages to create little tools for people in docs.
In the past we used Jive, and I had a rather involved HTML paged embedded there. I had to be careful with my CSS, as using any generic attribute level CSS would break the platform. I hope Confluence has protections against that, but haven’t tested it, as I got in the habit of avoiding that issue all together.
Anyway, Confluence for all its flaw has so much power, is so much more pleasant to use, your business folks won't balk at it. As often as not, we have people from all parts of the company in there, reading and writing both, and it needs to be usable to people of all technical levels. Markdown wikis and their editors don't often meet this criterion, or they're missing on some key features (tables!!).
To me, Confluence's only real down side is that it's an Atlassian product. I wish I could find something to scratch the itch without feeling the need to buy into that whole ecosystem.
Portability is secondary for me. For me, the primary reason for keeping content in plain text is disaster recovery.
When my systems are down, when my applications aren’t working, if my documentation is also inaccessible, this makes things a lot harder.
If my documentation is primarily in plain text / markdown, it’s really easy to be able to read those docs again, even when everything else has fallen over.
I stubbornly kept the main page as HTML. All libraries are download and sourced locally, instead of using a CDN. I use as little server side as possible, and just use basic PHP when I must. The idea being that in a worst case scenario the users can simply open the index.html on their desktop had have 95% of the functionality. If they run something like xampp, they can get 100%. This app is basically their map to the rest of the infrastructure, with some helper tools. They’d be lost if it went down when they needed it most. That said, it’s never come to this in 15 years and there have been several big DR events in that time. I still like having it as an option in my back pocket.
I recently handed it off to someone else to manage. I should probably share this part of my philosophy as it seems like they are trending toward adding complexity and dependencies, because they’re hip and cool.
Usually when your website is hosted on git as markdown files, that is because you'd rather have the website generation separated from serving the actual content to the public, i.e. having a secure and dead simple static website.
If you start having to run a service/container, that generate the content on the fly and plan to edit the website using the browser, I don't really see the advantage of hosting the content on git vs a database. That database can be as simple and easy to host/backup/manage as a simple sqlite3 file and would still be more efficient than a git repo as a storage backend.
I have hated every WYSIWYG intranet my employer has used. I just want to write Markdown.
Luckily, we also had access to a file server with ~/public_html and httpd with PHP.
So I just threw PHP Markdown Extra and a htaccess file up, now I can write in Markdown and it magically works. If that was done with Python I wouldn't care either.
(that old webserver has since been retired and the new one doesn't have PHP, so now I render locally with Pandoc and rsync my HTML files directly, sigh)
In general, i agree that static site generation is preferable to dynamic rendering where possible, because it makes for a much simpler and more secure deployment. But a wiki has to support editing of pages in the browser, and authentication of users before they can edit, and you need a backend for that. Also, if you want to support browsing of page history, a static site generator would need to render every version of the page upfront, which feels like a bad idea to me.
With git you will have the latest version of the file in the filesystem, that must be more efficient than retrieving it from sqlite3, mustn't it?
It would be nice to have a WYSIWYG text editor for the markdown or to have a live preview next to the markdown.
Particularly for this kind of project, though as an accessibility person I'd argue every project, accessibility is table stakes.
Which problem does it solve? Not how it is made.
- Markdown: widely used, readable, well-supported by other tools.
- Git: ubiquitous, well-supported, likely already present and set up.
- Python: ubiquitous, well-supported, easy to read and hack on; sometimes a pain to deploy.
If the above is not relevant for you, well, you'd be better served with opaque one-click-installable apps from App Store. Not bad, just different.