Metadata-Version: 2.4
Name: miniword
Version: 0.1.3
Summary: A minimal word processor in Python
License-Expression: LGPL-3.0-or-later
Project-URL: Homepage, https://codeberg.org/chrisecker/miniword
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: wxPython>=4.0
Requires-Dist: cairocffi
Provides-Extra: full
Requires-Dist: uharfbuzz; extra == "full"
Requires-Dist: mistune; extra == "full"
Requires-Dist: fonttools; extra == "full"
Dynamic: license-file

# MiniWord

A minimal word processor in python. In development but already great.

![Screenshot](https://codeberg.org/chrisecker/miniword/raw/branch/main/screenshots/miniword_18jun26.png)

## Key Aspects

- Real WYSIWYG editing (no HTML layer, no embedded browser)
- Lightweight and fast startup
- Clean, simple file format (human-readable, diff-friendly, git-friendly, AI-friendly)
- Good Markdown support
- Extensible via Python-plugins

## Download

Pre-built installers for Windows (`.exe`) and macOS (`.dmg`) are published on the [Releases page](https://github.com/chrisecker/miniword/releases) for each tagged version. On Linux, install from source via `pip` (see below) — no separate installer is provided there.

## Dependencies

Miniword is developed under Linux. In principle it should run under Windows and Mac as well. 

Dependencies vary between platforms and prefered features. You always need Python >= 3.9 and wxPython >= 4.0.

| Dependency | Linux    | Windows  | macOS    | Notes                                      |
| ---------- | -------- | -------- | -------- | ------------------------------------------ |
| cairocffi  | required | required | required | pulled in automatically by `pip install .` |
| fontconfig | required | —        | required | system CLI-tool                            |
| uharfbuzz  | optional | optional | optional | needed for ligatures and non-Latin scripts |
| fonttools  | —        | optional | —        | needed for non-Latin scripts on Windows    |
| mistune    | optional | optional | optional | richer Markdown import; falls back to a built-in parser |

## Running without installation

```
python miniword.py
```

Alternatively, double-click `miniword.py` in your file explorer.

## Install (Linux)

Install system dependencies:

```
sudo apt install python3-wxgtk4.0 fontconfig
```

Then install miniword (this also pulls in `cairocffi`):

```
cd miniword
pip install .
```

For ligature support, non-Latin scripts, and richer Markdown import, install with the `full` extra instead:

```
pip install ".[full]"
```

If you want to register MiniWord to the desktop (you probably will):

```
cp miniword/icons/miniword.svg ~/.local/share/icons/
cp miniword.desktop ~/.local/share/applications/
```

## Install (Windows)

Prefer a ready-made installer? Download the `.exe` from the [Releases page](https://github.com/chrisecker/miniword/releases) instead of building from source.

No separate Cairo installation is needed — wxPython already bundles `libcairo-2.dll`, and `pip install .` pulls in `cairocffi` to bind to it.

```
cd miniword
pip install ".[full]"   # full installs uharfbuzz, fonttools, mistune: ligatures, non-Latin scripts, richer Markdown import
```

MiniWord stores its configuration and plugins in `%APPDATA%\miniword\` (e.g. `C:\Users\<you>\AppData\Roaming\miniword\`).

**Note** that MiniWord is not yet **optimised** for Windows. While it mostly works, the GUI is less polished and startup takes a bit longer.

## Install (macOS)

Prefer a ready-made installer? Download the `.dmg` from the [Releases page](https://github.com/chrisecker/miniword/releases) instead of building from source.

On macOS, `fontconfig` must be installed via Homebrew:

```
brew install fontconfig
```

Then install miniword (this also pulls in `cairocffi`):

```
cd miniword
pip install ".[full]"   # full installs uharfbuzz, mistune: ligatures, non-Latin scripts, richer Markdown import
```

MiniWord stores its configuration and plugins in `~/Library/Application Support/miniword/`.

**Note** that MiniWord has not been tested on macOS.

## Hacking

Run the full test suite:

```
python test_all.py
```

Run tests for a single module:

```
python runtests.py miniword/layout/pagegen.py
```

Run a specific test or demo:

```
python runtests.py miniword/ui/searchtool.py test_00
python runtests.py miniword/texteditor/textcanvas.py demo_00
```

## Plugins

MiniWord is extensible via Python plugins. To install a plugin, copy the `.py` file into the plugins directory for your platform:

| Platform | Plugins directory                                 |
| -------- | ------------------------------------------------- |
| Linux    | `~/.config/miniword/plugins/`                     |
| macOS    | `~/Library/Application Support/miniword/plugins/` |
| Windows  | `%APPDATA%\miniword\plugins\`                     |

Example plugins are provided in the `examples/` directory:

| File            | Description                           |
| --------------- | ------------------------------------- |
| `wordcount.py`  | Shows a live word count               |
| `txtfilter.py`  | Filter for importing plain text files |

To install all example plugins on Linux:

```
mkdir -p ~/.config/miniword/plugins
cp examples/*.py ~/.config/miniword/plugins
```

## License

This project is licensed under the GNU General Public License v3.0 - see LICENSE for details. Contact me if you need something else.
