Skip to content

API Overview

SevenMark is organized as a Cargo workspace with specialized crates. Each crate handles a distinct stage of the document processing pipeline.

Crate Structure

CratePurposeTarget
sevenmark-astAST types and traversal utilitiesAll platforms
sevenmark-parserCore parsing engine — text → ASTAll platforms
sevenmark-formatterSevenMark source formattingNative/WASM
sevenmark-htmlProcessed AST → HTMLNative
sevenmark-utilsShared utilities (UTF-16 offset conversion)All platforms
sevenmark-wasmWebAssembly parser bindings for browser/Node.jsWASM
sevenmark-wasm-lspWebAssembly LSP bindings for browser/Node.jsWASM
sevenmark-wasm-formatterWebAssembly formatter bindingsWASM
sevenmark-transformAST preprocessing and postprocessingServer
sevenmark-lsp-coreTransport-independent language toolingNative/WASM
sevenmark-language-serverNative LSP stdio transportNative
sevenmark-serverREST API server with PostgreSQLServer

Processing Pipeline

Input Text


┌─────────────────────────────┐
│  1. PARSING                 │  sevenmark-parser
│  - Tokenization (winnow)    │
│  - Recursive descent        │
│  - AST construction         │
│  - Location tracking        │
└─────────────────────────────┘


  Raw AST (Vec<Element>)


┌─────────────────────────────┐
│  2. PREPROCESSING           │  sevenmark-transform
│  - Resolve [var(...)]       │
│  - Process {{{#include}}}   │
│  - Evaluate {{{#if}}}       │
│  - Collect media references │
│  - Extract categories       │
└─────────────────────────────┘


  PreProcessedDocument


┌─────────────────────────────┐
│  3. POSTPROCESSING          │  sevenmark-transform
│  - Resolve media URLs       │
│  - Attach file metadata     │
│  - Generate links           │
└─────────────────────────────┘


  ProcessedDocument


┌─────────────────────────────┐
│  4. HTTP PRESENTATION       │  sevenmark-server
│  - Convert API DTOs         │
│  - Render HTML              │
│  - Serialize JSON           │
└─────────────────────────────┘

Crate Details

sevenmark-parser

The core parsing engine. Standalone with minimal dependencies (winnow, serde). Takes raw text input and produces a structured AST.

  • Input: &str (SevenMark markup text)
  • Output: Vec<Element> (abstract syntax tree)
  • Feature flags: include_locations enables byte offset data in JSON output

See Parser API for usage details.

sevenmark-utils

Shared utility functions used across crates:

  • convert_ast_to_utf16_offset_json() — Converts AST with byte offsets to UTF-16 code unit offsets for CodeMirror 6 integration

sevenmark-wasm

WebAssembly bindings that wrap sevenmark-parser for use in browsers and Node.js:

  • parse_sevenmark(input) — Returns AST JSON with byte offsets
  • parse_sevenmark_to_codemirror(input) — Returns AST JSON with UTF-16 offsets

Built with wasm-pack and exported via wasm-bindgen.

sevenmark-wasm-lsp

WebAssembly bindings that wrap sevenmark-lsp-core for use in browsers and workers:

  • handle_lsp_message(json) — Processes a JSON-RPC message and returns response + notifications

Built with wasm-pack and exported via wasm-bindgen.

sevenmark-transform

Infrastructure-independent AST transformations split into two phases:

  • Preprocessor: Resolves variables, processes includes, evaluates conditionals, collects media references
  • Postprocessor: Resolves media URLs, attaches file metadata, generates rendered links

Persistence is accessed through the WikiResolver port. The crate does not depend on SeaORM, an object-storage SDK, the parser, or HTTP/OpenAPI types.

sevenmark-server

Production REST API server built with axum:

  • Exposes parsing and processing endpoints
  • Owns PostgreSQL/R2 adapters and API DTO/OpenAPI schemas
  • Bounds CPU-heavy parser work and applies request concurrency/time limits
  • Swagger UI at /swagger-ui
  • OpenAPI spec at /api-docs/openapi.json
  • Requires PostgreSQL for document storage and media resolution

Next Steps

Next Steps