Projectum
Everything that piles up around a folder of work — projects, playlists, todos, notes — in one window, connected.
No servers, no account, no telemetry. Your data is a JSON file sitting next to your work.
How it works
Point Projectum at a folder. Every subfolder becomes a project you can mark
done or tested, tag, pin, and annotate with live-rendered Markdown. The same
window holds your todos, a notebook of notes, and your YouTube study
playlists (fetched with yt-dlp, watched-state per video). All of it lives
in one .projectum.json inside the folder — it travels with your work and
diffs cleanly in Git.
Then there are relations: link anything to anything — a project to a playlist, a todo to a span of days, a note to a project. Date relations come together on the Calendar, a month view where scheduled work draws as bars across the weeks.
|
Calendar — anything linked to a date shows on that day; spans draw as bars. (Midnight) |
Playlists — paste a URL, tick videos off, keep notes per video. (Light) |
|
Notes — live Markdown; syntax markers hide until your cursor enters the phrase. (Paper) |
Todo — quick folder-scoped tasks, schedulable on the calendar. (Gruvbox) |
Install
pip install projectum && projectum
Or grab a standalone build from the latest release:
| Platform | File | Notes |
|---|---|---|
| Linux | Projectum-x86_64.AppImage |
chmod +x, run — bundles Python, Qt, yt-dlp |
| Windows | Projectum-windows-x64.exe |
unsigned: SmartScreen → More info → Run anyway |
| macOS | Projectum-macos.dmg |
unsigned: right-click → Open |
Or from source: git clone, pip install -r requirements.txt, python main.py.
Projectum keeps itself up to date: when a new release ships it installs in place and offers a one-click restart (off by a toggle in Settings).
Highlights
- Filesystem-first projects — size, last-modified, git branch and dirty state per project, read off the UI thread. Tags with sidebar filters, pin, drag to reorder, expand a folder of repos into nested projects.
- Live Markdown everywhere — headings, bold, code, lists, links render as you type; markers stay hidden until the cursor enters the phrase. The document underneath is always plain Markdown.
- Relations — undirected, untyped links between any two things, including dates, date spans, and bare durations ("2 weeks"). Backlinks show up on both sides; the detail panels show clickable chips.
- Command palette (
Ctrl+K) across projects, playlists, videos, tags, and notes. - 19 themes, dark and light — every one CI-checked against WCAG contrast floors, switching crossfades. Any font, any size.
- Resilient — atomic saves; metadata for a renamed or deleted folder is parked and restored when it comes back.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
Ctrl+K |
Command palette |
Ctrl+1 … Ctrl+5 |
Switch tab (Projects / Playlists / Todo / Calendar / Notes) |
Ctrl+O |
Open a folder |
Ctrl+F |
Focus the sidebar search |
Ctrl+D |
Toggle the selected project's done state |
Ctrl+T |
Jump to Todo and start a new task |
Ctrl+N |
Focus the project notes editor |
Ctrl+R |
Refresh the current folder |
Esc |
Close a popup |
Where your data lives
- Per-folder:
<folder>/.projectum.json— projects, playlists, tags, notes, ordering. Commit it next to your work or.gitignoreit. Writes are atomic. - Global:
~/.config/projectum/— window state, theme, andlinks.json, the relation graph. Relations can cross folders, so they live here rather than in any one folder's file — the one part of your data that doesn't travel with a folder.
Development
Dependencies are thin: PySide6, yt-dlp, and the standard library. CI
lints, byte-compiles, runs the test suite, and boots the window headless on
Linux/macOS/Windows across Python 3.10–3.12.
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt pytest
QT_QPA_PLATFORM=offscreen pytest -q # tests
python main.py # run
Packaging recipes (AppImage, Flatpak, AUR) live in packaging/,
the release process in RELEASING.md.
Support
Projectum is free and MIT-licensed, and stays that way. If it's useful, you can sponsor it on GitHub — completely optional.
License
MIT — © 2026 wleeaf.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file projectum-2.2.0.tar.gz.
File metadata
- Download URL: projectum-2.2.0.tar.gz
- Upload date:
- Size: 128.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e038ebb3b48c0497420d6f39c025d322b7e2576a23071c2eca7a37579ac8346
|
|
| MD5 |
c0287c3e7d6c5525d8ee10e7c207e863
|
|
| BLAKE2b-256 |
6d36d92c885ea97fda34ffc4365dcd28bf64bef63380f4c08caba09e66033f93
|
Provenance
The following attestation bundles were made for projectum-2.2.0.tar.gz:
Publisher:
publish-pypi.yml on wleeaf/projectum
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
projectum-2.2.0.tar.gz -
Subject digest:
5e038ebb3b48c0497420d6f39c025d322b7e2576a23071c2eca7a37579ac8346 - Sigstore transparency entry: 1858566473
- Sigstore integration time:
-
Permalink:
wleeaf/projectum@5d960a3fd1e61470e6bf3d37e729a7952209637c -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/wleeaf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@5d960a3fd1e61470e6bf3d37e729a7952209637c -
Trigger Event:
release
-
Statement type:
File details
Details for the file projectum-2.2.0-py3-none-any.whl.
File metadata
- Download URL: projectum-2.2.0-py3-none-any.whl
- Upload date:
- Size: 111.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64497b257ea84a68f8fa53de89da050a4b59fbd5b1b44e21f89c87f85643e7ba
|
|
| MD5 |
b43230ae7ea7ca589d0ed66e7bbf4a91
|
|
| BLAKE2b-256 |
732a4892c1a088566cc7803a4ea73b17d36feebcc68f2f81bcff35d2f860a23f
|
Provenance
The following attestation bundles were made for projectum-2.2.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on wleeaf/projectum
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
projectum-2.2.0-py3-none-any.whl -
Subject digest:
64497b257ea84a68f8fa53de89da050a4b59fbd5b1b44e21f89c87f85643e7ba - Sigstore transparency entry: 1858566512
- Sigstore integration time:
-
Permalink:
wleeaf/projectum@5d960a3fd1e61470e6bf3d37e729a7952209637c -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/wleeaf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@5d960a3fd1e61470e6bf3d37e729a7952209637c -
Trigger Event:
release
-
Statement type: