Skip to main content

A library and CLI to convert Markdown to Epub

Project description

md2epub

md2epub is a helper library and CLI tool designed to convert Markdown text into professional, publish-ready EPUB files. It specifically targets formatting standards suitable for KDP (Kindle Direct Publishing), ensuring strict ordering of content (Cover, Title, Copyright, TOC, Dedication, Chapters).

Features

  • Project Scaffolding: Quickly initialize a book directory with a standard structure using Cookiecutter templates.
  • Markdown to EPUB: Converts Markdown content into XHTML with a generated navigation structure.
  • KDP-Ready Styling: Includes a CSS template optimized for e-readers, handling fonts, margins, and scene breaks.
  • Custom Formatting: specific support for novel formatting:
  • xxx on a single line creates a centered Scene Break.
  • *** on a single line creates a centered Asterisk Break.

Guide for Writers

1. Installation

Ensure you have Python 3.12 or higher installed.

pip install md2epub

2. Creating a New Book

To start a new project, use the init command. This creates a folder with all the necessary configuration files and templates.

md2epub init my_new_book

You will be prompted for basic details (Book Name, Author Name, Dedications, etc.) which are used to configure the project.

3. Writing Your Content

Navigate to your new book directory. You will see several markdown files (e.g., chapter_01.md, title.md). Write your book using standard Markdown.

Formatting Tips:

  • Chapters: Start chapters with a header # Chapter Title.
  • Scene Breaks: To insert a visible break in the text, place xxx on its own line.
  • Asterisks: To insert a decorative break, place *** on its own line.

4. Configuration (metadata.yaml)

The metadata.yaml file controls the build process. You must list every file you want to include in the EPUB here.

title: "My Great Novel"
author: "Jane Doe"
language: en
cover_image: cover.png
front_matter:
  - title.md
  - copyright.md
  - dedication.md
chapters:
  - chapter_01.md
  - chapter_02.md

5. Compiling the EPUB

When you are ready to generate your book:

md2epub compile my_new_book

This will generate an .epub file in the current directory.


Guide for Developers

Development Setup

  1. Clone the repository.
  2. Install the package in editable mode with development dependencies.
python -m pip install --upgrade pip
pip install -e .[dev]

Running Tests

The project uses pytest for testing. A custom script scripts/run_tests.py is provided to run tests and enforce coverage thresholds.

python scripts/run_tests.py
  • Failure Threshold: The build fails if more than 20% of tests fail.
  • Coverage Threshold:
  • Codebase < 1000 lines: 60% coverage required.
  • Codebase >= 1000 lines: 80% coverage required.

Project Architecture

The codebase follows the SOLID principles, separating concerns into distinct modules:

  • src/md2epub/cli.py: Handles user interaction and commands (init, compile).
  • src/md2epub/epub_builder.py: The core logic class (EpubBuilder) responsible for assembling the book, managing metadata, and ensuring strictly ordered spine items (Cover -> Front Matter -> TOC -> Chapters).
  • src/md2epub/converter.py: Handles text processing, converting Markdown to HTML and injecting custom classes for separators.
  • src/md2epub/css_template.py: Contains the KDP_CSS string used to style the EPUB.

Release Workflow

The project uses GitHub Actions for CI/CD.

  • Pull Requests: PRs to main must come from dev.

  • Versioning: Semantic versioning is automated based on PR labels. When a PR is merged to main:

  • Label bump:major → Major increment.

  • Label bump:patch → Patch increment.

  • Default (no label/other) → Minor increment.

  • Publishing: Releases are automatically published to PyPI and GitHub Releases upon merge.

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

md2epub-0.3.0.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

md2epub-0.3.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file md2epub-0.3.0.tar.gz.

File metadata

  • Download URL: md2epub-0.3.0.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for md2epub-0.3.0.tar.gz
Algorithm Hash digest
SHA256 efbb16b519efa15d294ebfd3435acb09d532899572e15af753f700ed4348d148
MD5 c99d3276cd25f34e728156f6e5078c27
BLAKE2b-256 d4f55b5fc591ebffadb11f19558f5e0b4a26f8705d354b835c3d758fe4222430

See more details on using hashes here.

Provenance

The following attestation bundles were made for md2epub-0.3.0.tar.gz:

Publisher: main-release.yml on neolaw84/md2epub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file md2epub-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: md2epub-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for md2epub-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 995cc1ce609c63ee80162500cf666e7ce89eeecd770c497b7603d59e9fe8f09a
MD5 e00f8691c05bc6cdc932fed932e90a06
BLAKE2b-256 23d7b5dd24903668bfb31a0154d3863cf85b6b9dabf1aac2d0847eab3882fee2

See more details on using hashes here.

Provenance

The following attestation bundles were made for md2epub-0.3.0-py3-none-any.whl:

Publisher: main-release.yml on neolaw84/md2epub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page