Page Details
access: Public status: Active published: 2025-07-21 creationDate: 2025-01-19 modifiedDate: 2025-07-21 type: Project
[!info] I’ve not yet released it, out of shame. Will do in future.
Paul Kenny’S Personal Knowledge Management System
A HTTP API server and command line tool written in Java that can get data about Markdown files and their links to each other (and other files) in a directory ([[PKMS]]).
Uses YAML frontmatter in Markdown files as metadata and links in text content, including Wikilinks.
Made to complement Obsidian.
My uses:
- API for PKSPKMS Bookmarks Firefox Extension
- Export files outside of the [[PKMS]], like to my website
Server
Currently there is no security for the server. Don’t use it.
# Start server
pkspkms server -port "3000" -directory ""
# In another terminal
curl GET "http://localhost:3000/list/files?tags=Public" | jq .
Will return something like:
{
files: [
{
}
]
}
Command-line
# Export JSON graph
pkspkms export -directory "" -query "" -output "" -type "graph" -sqlite-db "" -options "wikilinks,backlinks" -depth "2"
# Export Markdown files
pkspkms export -directory "" -query "" -output "" -type "markdown" -sqlite-db "" -options "wikilinks,backlinks" -includeLinked "jpg,png"
Note: -depth
retrieves files from outside the query. This can leak you information if you’re not careful.
TODO
- Get SQlite DB up and running so it’s not hammering your hard drive and taking ages ➕ 2025-06-20
- Refractor âž• 2025-07-12
- Use docopt format for CLI âž• 2025-07-17
Potential Features
- Watch for file changes and update DB
- Virtual files
-
More, better server settings
- Exclusion list directories
- Inclusion list directories
-
Export file
- Have argument to use db file from previous run
-
Markdown
- Replace Wikilinks with relative markdown links
-
Graph
- Export JSON with links, backlinks and tags
- HTML
- Plaintext
-
Use Obsidian settings (point to
.Obsidian
directory?) -
It’d be cool if when exporting, when you’re exporting a file and a link in that file is for a file that isn’t also getting exported it uses that file’s
url
property instead of the file in the link when link resolving. Would need multiple file exports though. - Could abuse Markdown comments for my own dynamic syntax: syntax - Comments in Markdown - Stack Overflow
- Rewrite in Kotlin, change to Ktor and make Android app
-
Export rules as JSON (
pkspkms export -json ''
):
{
"export": [
{
"query": 'tags=Blog*',
"type": "markdown",
"steps": ["wikilinkToRelativeLink", "bringLocallyLinked"],
"destination": "/blog/posts/"
}
]
}
Known Issues
- Lots
- Doesn’t support single line, comma separated tags
Other Personal Knowledge Management Software, Solutions, Etc
- mdzk - an API for your Markdown vault, see docs. Very similar to what I’m doing here. Hasn’t seen very much development in the last two years (07-2025).
- SiYuan, HN discussion
- Obsidian
- Logseq
- TheBrain: The Ultimate Digital Memory - has an interesting way to explore your graph connections
- Heptabase - pretty slick looking and I like how annotating looks but it’s not file first
- TriliumNext Notes
- nb · command line and local web plain text note-taking, bookmarking, archiving, and knowledge base application, Github
Lists
- GitHub - MaggieAppleton/digital-gardeners: Resources, links, projects, and ideas for gardeners tending their digital notes on the public interwebs - I also like Maggie’s other works, I’m subscribed to her blogs RSS
- GitHub - lyz-code/best-of-digital-gardens: Ranked list of awesome digital gardens / second brains
- GitHub - KasperZutterman/Second-Brain: A curated list of awesome Public Zettelkastens 🗄️ / Second Brains 🧠/ Digital Gardens 🌱