Skip to main content

Lixity

tests PyPI DOI Python 3.10+ License: AGPL-3.0

Read the patterns in your writing. Keep the evidence behind your decisions.

Lixity helps authors, editors and researchers see how a manuscript changes from chapter to chapter. It measures sentence lengths, word use, dialogue and tense, then lets you read the passages behind each result. Its research workspace keeps source quotations and writing decisions connected. Your literary judgment guides what you keep or revise.

Matthias Fahsold developed Lixity as an architect and developer at ROST Services GmbH and used it while writing his own debut novel.

Try the example · Three-minute first look · Install · What you can do · Practical guides · v0.4.8 release notes

The example is a read-only report made from invented text. It needs no installation or manuscript upload. Documentation is English; you can read the results in German, English, French, Spanish, Italian, Portuguese or Dutch.

Start here

No statistics background is needed, and nothing is uploaded: analysis runs on your computer.

  1. Look at an example. The read-only synthetic report opens directly in the browser and is made from invented text. For real books, the Effi Briest example (German) and the Pride and Prejudice example (English) show an interactive excerpt of a public-domain novel next to its complete PDF report.
  2. See what the numbers mean. The three-minute first look walks through chapter comparison, a passage and its measurements.
  3. Install Lixity when you want to analyze your own manuscript (next section).

Install and start

Lixity runs on Windows, macOS and Linux. Use uv; it supplies the managed Python environment and installs the published package from PyPI. For help installing uv or advanced installation options, follow the installation guide (it also documents the pinned release wheel with SHA256SUMS for reproducible setups).

uv tool install --python 3.12 --managed-python lixity
uv tool update-shell

Open a new terminal, then verify and start the app:

lixity --version
lixity service start --open

The service starts an empty local workspace; choose Open Project or Analyze a manuscript. The first-project guide walks through both choices. For later upgrades, run uv tool upgrade lixity (or reinstall a pinned release wheel) and restart the local workspace; see the update instructions.

Use lixity service status, lixity service restart or lixity service stop for the managed instance. status prints the service log path; diagnostics use one UTC log format with levels (--debug, LIXITY_DEBUG, LIXITY_LOG_LEVEL) and an oversized log is rotated at start. See logs. Before uninstalling, stop managed instances and disable any login startup you configured, then run uv tool uninstall lixity. Manuscripts and research archives remain in their project folders. Lifecycle reference.

What you can do

Understand your writing

See how sentence lengths, vocabulary, dialogue and tense vary throughout your manuscript. Open the passages behind a result before deciding whether to revise. Short or empty texts cannot support every comparison; unavailable results are shown explicitly.

Manuscript overview showing sentence rhythm, vocabulary and dialogue measures

Read the language signals · Mobile view · Dark theme

Walkthrough: select a chapter cell, expand a paragraph's Values and switch to the style dimensions

Compare chapters in context

The chapter map uses your manuscript's chapters as its reference. For example, a chapter with longer sentences than usual may reflect a new voice or a formal report. Select a coloured cell to inspect that chapter. The style axes bring together related measurements, helping you see which chapters share patterns and which features distinguish them.

Chapter comparison map showing differences from the manuscript's own style

Understand chapter comparisons · Style dimensions · Reference bands

Assign scenes to registers—such as dialogue, action or a formal report—so you can compare scenes with a similar purpose. Each group has its own middle values (medians); you can also set optional targets. Small samples may leave measurements unavailable. Scene example · Setup and limits.

Print what the analysis found

lixity pdf composes a PDF from the manuscript and its measurements: an A4 analysis report, an A5 reading layout, or a submission sheet of 30 lines of 60 characters. Fonts are embedded as subsets, with searchable text for Unicode characters covered by the selected fonts. No converter, no upload, no added runtime dependency. The A4 report opens with a cover page and sets its figures as aligned tables with a repeated header row. These are reading and review layouts; PDF/X production preflight and automatic fallback between fonts are not provided. Command reference.

See the complete output: Effi Briest report · Pride and Prejudice report.

In the app, PDF export in the global project controls offers A5 reading copy (default), A4 manuscript sheets or A4 analysis report; the menu starts collapsed and generation returns the PDF through the browser without writing server export files. The same composer reads the selected project's title, author and optional publication details from Project → Settings → Publication; empty fields add no inferred information. PDF metadata, chapter bookmarks and running headers help readers navigate. These remain fixed-layout PDFs, without EPUB, PDF/UA or PDF/X certification. See publication settings and Germany print/digital guidance.

Keep review notes beside the text

Start from the flagged passages list, open a paragraph and read its measured values, source lines and tense labels. A note can be written directly on the passage; work markers keep it next to the relevant text in Markdown. Their visibility in a book export depends on the editor or converter you use.

Walkthrough: review flagged passages, open a paragraph, read its values and write a marker note on the passage

Review markers linked to passages, with statuses and an editable note

Work-marker instructions · Flagged passages · Note on a passage · Paragraph view

Connect sources, claims and decisions

The experimental research workspace keeps selected sources, quotations and notes in a separate local archive. A dossier gathers notes on a topic; a claim records an assertion you can link to source passages; a decision explains what you chose for the book. Filter by title or tag, or search the saved text. A saved quotation records what a source says; its accuracy still needs review.

Local visual reference inside a dossier section, with a description and an explicit synthetic-source caption

Bring sources from local files or the optional Zotero Desktop bridge. Zotero stays a catalogue: cards link back quietly, the type line explains the item, and tags filter the list. PDF scans can use locally installed Tesseract or a configured OCR worker. Import warnings explain when extraction is incomplete or a requested fallback was used. Select text within an opened source paragraph to prepare an evidence-link draft, with the selected quote and full citation context shown before saving; citations retain the whole paragraph. An optional read-only dossier view lets you read chosen notes beside the manuscript.

Review shows the records explicitly linked to a decision and whether those links refer to an older version. You can inspect the earlier and current versions before deciding to update a link. Saved manuscript associations—a selected quote linked to a claim—appear in the same tab with their anchor state and review flags. An edit outside the quote resolves as adjusted and can be re-pinned explicitly (review tab or reconcile-manuscript --accept-moved); editing the quote itself stays unresolved. Nothing is repinned silently. Related dossier edits can be previewed and saved together; if another edit conflicts, the preview helps you resolve it while preserving your draft.

Add a local PNG/JPEG to a dossier with a description and optional source note. Earlier dossier versions keep their original image; no remote picture is fetched and images receive no text scores. Edit section, Add claim and Add decision keep a large topic manageable without copying whole documents or IDs.

Chronology: the Timeline view inside Claims & evidence sorts every claim with an explicit calendar period (1926, 1926-03, 1926-03-15, 1924–1926, 1929-1933) on a shared axis and links each bar to its claim card. Free-text periods such as "present day" stay visibly unplaced with a reason and a formatting hint; placement never verifies a historical fact.

Walkthrough: the claims timeline places dated claims on a shared axis and jumps from a bar to its claim card

Research guide · Search and citations · Sources · Claims · Decisions · Decision review · Related revision preview

Choose a project and its settings

Project actions remain available from each workspace view. Preview a manuscript before importing it, select its analysis language, and adjust which differences you want to examine. The NDA form has just name, optional address, project name, date and place. Preview the agreement and download a PDF or editable text in the project language: the recipient can sign or consent in text form, and the sending project representative needs no separate handwritten signature. Set Author name under Project → Settings to fill the representative's name.

Project settings with manuscript selection, analysis preferences and the five-field NDA generator

Project workflow · Import preview · Mobile settings

Read a report in the terminal

Use lixity analyze manuscript.md --language de for a readable report, or add --json for software integration. Chapter, paragraph, dialogue, pacing and research commands are covered in the command reference.

Terminal report with sentence lengths, readability and vocabulary measures

These screenshots use public-domain literature or synthetic project records. More views and capture details.

How to read the results

Each measurement answers a specific question about the text:

Measurement What it helps you notice
Sentence length and variation Whether sentences stay similar in length or alternate between short and long. Suspense also depends on what happens in them.
Vocabulary diversity How much words repeat. Compare passages of similar length, language and purpose.
Dialogue share How much text falls inside recognized quotation marks. A high value may be expected in a conversation scene.
Chapter differences and consistency How closely measurable chapters follow the book's observed patterns. A deliberate change in voice can lower consistency.

Chapter comparisons use the manuscript's middle values and typical spread (median and MAD), with an adjustment for estimated sampling noise. Colours mark the direction of a difference, not its literary value. Optional statistical checks mark a selection for review; they cannot certify that a passage needs editing. An unavailable value can mean there is too little text or too few comparable chapters to calculate it.

The mathematical core includes several vocabulary measures (HD-D, MTLD, MATTR, Guiraud R, Maas a² and Yule's K). They answer related questions using different models and sample sizes. Readability and grammatical-pattern indicators have language-specific limits. Formulas, citations and worked examples live in Methods. The interpretation guide explains how to read results; stability and validation limits describe what has and has not been established.

Supported languages

German (de) and English (en) have the most extensive linguistic resources and language-specific fixtures. French (fr), Spanish (es), Italian (it), Portuguese (pt) and Dutch (nl) also have localized interfaces and analysis resources, with narrower heuristic coverage and validation.

Choose the manuscript language explicitly. LIXITY_LANG=de selects German terminal messages independently of --language de, which selects German analysis. Documentation is English; source quotations retain their original language. Mathematical identifiers and numeric JSON values are language-neutral. Language support and limits.

Documentation map

If you are new to Lixity (no technical background):

For technical readers:

Current release

The current release is v0.4.8, continuing the pre-1.0 development line; historical v3.0.1 and earlier notes and tags remain available. Public JSON and research storage schema versions are independent; the 0.3.x/0.4.x line reads existing research archives through v7. When upgrading from the historical numbering, install the pinned release wheel explicitly; PyPI upgrades continue normally afterwards. Release notes describe compatibility and known limits; the changelog records subsequent work on main.

Python API and automation

from lixity import api

html = api.dashboard(text, language="de", project_config={})

CLI, Python and dashboard analysis share one pipeline. Analysis/profile JSON uses schema v2; style JSON uses v4. Integrations should pass explicit project settings when working with several projects.

Choose api.analyze for numeric results or api.fingerprint for a style reference. Each convenience call performs its own analysis; integrations needing several outputs can reuse the shared analysis result.

Interface contracts · Architecture · Research commands · Automation summary

Research

The methods and the tool's placement among stylometry and corpus tools are described in the software paper draft under paper/, prepared for the Journal of Open Source Software. Released versions are archived on Zenodo: cite the concept DOI 10.5281/zenodo.23390297 (see CITATION.cff); every release also receives its own version DOI.

License

Lixity is open source under the AGPL-3.0-or-later. Use it freely for private and commercial writing, research and teaching — including self-publishing your book; no extra permission is needed. If you distribute Lixity or a modified version, the AGPL requires that recipients receive the corresponding source under the same license.

A separate written commercial license is available for integrations that cannot meet the AGPL, for example embedding Lixity in a closed-source product or running a modified version as a network service without releasing its source.

Licensing guide · Full AGPL text · Former LNCL-1.0 text · Commercial enquiries

Maintainer: Matthias Fahsold, Hamburg, Germany. Project operator: ROST Services GmbH, Rümpel, Germany. Legal notice.

Contributing · Report a security concern · Sample-text provenance

Metadata

Release files for lixity 0.4.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lixity 0.4.8
File Size Uploaded
lixity-0.4.8.tar.gz 873.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lixity 0.4.8
File Interpreter ABI Platform
lixity-0.4.8-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / lixity-0.4.8.tar.gz

Download URL lixity-0.4.8.tar.gz
Size 873.8 kB
Tags Source
SHA-256 checksum
How to use checksums
219546bad8bc5080d6f0a8972086cc0664ca5d7dc0b0308e95129ee9ae4102d8
BLAKE2b-256 checksum
How to use checksums
05e4a25278e0e9e4bad5baa0503bf87f8081e5009167b3e490f18fcba203d48f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release files / lixity-0.4.8-py3-none-any.whl

Download URL lixity-0.4.8-py3-none-any.whl
Size 661.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f921633a3c6e1e323078a104058a1f62c0d99f86d30ccb4a8edb7b8cab8692f9
BLAKE2b-256 checksum
How to use checksums
5e490f33a8a77320ba5e12e3fcac7dcde0e57a9d03e9dff37e6b585791295884
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.9

2 release files

This release

0.4.8 This release

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page