- JavaScript 75.6%
- HTML 15.5%
- CSS 8.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| build | ||
| electron | ||
| legal | ||
| patches | ||
| scripts | ||
| src | ||
| www | ||
| .gitignore | ||
| capacitor.config.json | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Novokult LLM
Historical materialist analysis and agitprop generator, running on your own computer.
Novokult is a desktop (Electron) application that puts a local large language model to work for left-wing organisers, researchers and writers. It has three modes:
- Analysis: examine an event, text or situation through contradictions, class forces, base and superstructure, historical stage, ideology critique and strategic implications.
- Agitprop: draft leaflets, slogans, poster text, rally speeches, social threads, wall-newspaper articles, songs and poems, street-theatre sketches and strike bulletins for a specific audience and a concrete grievance.
- Free chat: an ordinary conversation with the model.
The model runs locally through llama.cpp. Nothing leaves your device unless you explicitly switch on web search, and then it goes through Tor.
Features
- Fully local inference with a
.ggufmodel (Gemma 4 E4B is the recommended default). - Sources Library: paste or upload
.txt,.mdor.htmltexts and let the model draw on them. - Optional web search (web plus the Marxists Internet Archive) routed through Tor: bundled Tor, an external SOCKS proxy, or Orbot on Android. Off by default, with a clear privacy warning.
- Locale awareness: set your country, place and reply language for local context.
- Poster export (1:1, 4:5, A4) and full data export/import.
- Offline-first: the desktop app blocks every connection except its own local engine.
- In-app Guide and Acknowledgements pages.
Installation
Linux
Run the following before installation:
AppImage:
sudo apt install -y libgomp1
xhost +local:root
chmod +x Novokult.LLM-1.5.0.AppImage
./Novokult.LLM-1.5.0.AppImage --no-sandbox
Debian:
sudo apt install -y libgomp1
sudo apt-get update
sudo apt install ./novokult-llm_1.5.0_amd64.deb
Android
Android APK installation is still within the development stage (it's available to download and any input is appreciated).
Quick start (desktop)
Requirements: Node.js 24 or newer (tested with Node 24 and npm 11).
git clone https://github.com/michaelwpwenas/novokult-llm.git
cd novokult-llm
npm install
npm start
On first run, choose your .gguf model file and press Test connection.
Before the first run you also need the bundled engines and a model. See below.
Bundled engines
The repository does not contain the large third-party binaries or any model. You need to place them yourself:
| What | Where it goes | Where to get it |
|---|---|---|
llama.cpp (llama-server and its libraries) |
resources/llama/win32-x64/ and resources/llama/linux-x64/ |
Official llama.cpp releases (CPU builds) |
| Tor Expert Bundle | resources/tor/win32-x64/ and resources/tor/linux-x64/, keeping its data/ and tor/ folders |
Tor Project downloads |
| Language model | anywhere on disk; pick it in the app | Any compatible .gguf (not included; follow the model's own license) |
You only need the folder for the platform you are building on.
Building
Step-by-step instructions for packaging are in BUILD.md:
- Electron: Windows (portable and installer) and Linux (AppImage and deb)
Project structure
novokult-llm/
├── electron/ Electron main process, preload bridge and llama launcher
├── www/ The app itself (HTML, CSS, JS), shared by Electron
│ ├── assets/ Logos (aluxhim.png, copyfarleft.png)
│ ├── css/ style.css, pages.css
│ ├── fonts/ IBM Plex and Oswald (bundled, no CDN)
│ ├── js/ app logic, engine adapters, search, storage, UI
│ └── vendor/ Third-party browser libraries (bundled for offline use)
├── src/ bridge.js
├── resources/ llama.cpp and Tor binaries (not committed; see above)
├── models/ Your .gguf models (not committed)
├── BUILD.md Packaging guide
└── package.json
Privacy
- Conversations and sources are stored locally on your device.
- With network access off (the default), the desktop app makes no external connections.
- With web search on, requests go through Tor. Tor hides your IP address but not the words of your query. Do not search for private information and do not log in to anything.
- Language models make mistakes. Verify facts, dates, figures and quotations before publishing anything.
License
Copyright © 2026 Michael W.P. Wenas.
Novokult is released under the Peer Production License (PPL) (SPDX identifier: PPL), a Copyfarleft license. The full text is in the LICENSE file. In short, it keeps the work free for the commons and for workers who share and build on it, while limiting commercial exploitation by those who profit from the labour of others. Read the license text itself for the exact terms.
The bundled third-party components (llama.cpp, Tor, Dexie, marked, DOMPurify, html-to-image, IBM Plex, Oswald, Electron, Capacitor) remain under their own licenses.
Contributing
The source lives at https://github.com/michaelwpwenas/novokult-llm. Novokult is looking for fellow programmers to take part: desktop and Android packaging, finishing and testing the on-device Android engine (llama-cpp-capacitor), translations, testing and documentation. Open an issue to discuss an idea, or send a pull request. You can also get in touch through the developer's website.
Developer
Michael W.P. Wenas: https://michaelwenas.biz.id/