Skip to main content

Oratos

crates.io docs.rs CI Code Quality Coverage Status License MSRV

Website visibility intelligence for SEO, accessibility, structured metadata, and AI readiness.

Oratos audits and improves websites without owning your workflow. It works on local HTML directories, static exports, and live URLs — useful in CI/CD like Credo, Sobelow, Ruff, or Lighthouse CI.

v0.3.1 ships as a single Rust crate (CLI + library modules) with multi-ecosystem install paths that do not require Rust. API docs on docs.rs include this README.

Install

No Rust required. Pick your environment — full details in docs/install.md.

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/latentmeta/oratos/main/scripts/install.sh | sh
# or: brew install latentmeta/tap/oratos

Windows

scoop bucket add latentmeta https://github.com/latentmeta/scoop-bucket
scoop install oratos

Or download oratos-v*-windows-x86_64.zip from Releases, extract oratos.exe, and add it to your PATH.

Version managers

# mise
mise use -g github:latentmeta/oratos

# asdf
asdf plugin add oratos https://github.com/latentmeta/asdf-oratos.git
asdf install oratos latest

CI / language ecosystems

# GitHub Actions
- uses: latentmeta/oratos/.github/actions/setup-oratos@main
pip install oratos          # PyPI
npm install -D @latentmeta/oratos       # npm
# mix.exs — only: [:dev, :test], runtime: false
{:oratos, "~> 0.3", only: [:dev, :test], runtime: false}
# then: mix oratos.audit ./priv/static

Rust contributors

cargo install oratos
# or from a checkout:
cargo install --path crates/oratos

Prebuilt binaries for Linux (x86_64/aarch64), macOS (Intel/Apple Silicon), and Windows are published on every v* tag with SHA256SUMS.

Quick start

# Audit a static site directory
oratos audit examples/static_site

# JSON report for tooling
oratos audit examples/static_site --format json --output report.json

# CI gate: fail if overall score is below 85
oratos audit ./priv/static --fail-under 85

# Generate llms.txt draft
oratos generate llms examples/static_site

# LLM remediation prompt for a page
oratos prompt html examples/static_site/index.html

CLI

oratos audit <target> [--format console|json|markdown|html|sarif] [--output PATH] [--fail-under SCORE] [--strict] [--crawl] [--changed-only] [--config PATH]
oratos generate llms <target> [--output PATH]
oratos generate metadata <target> [--output PATH]
oratos prompt html <file-or-url> [--output PATH]
oratos prompt phoenix <file-or-url> [--output PATH]

<target> may be a directory (./priv/static, ./dist), a single HTML file, or a URL (https://example.com).

URL audits: by default a URL fetches one page. Enable multi-page crawl with --crawl or [crawl] enabled = true in oratos.toml (see Configuration).

What Oratos checks

  • SEO — title, meta description, canonical, headings, Open Graph, Twitter cards, internal links
  • Accessibility — alt text, lang, landmarks, form labels, link text
  • Structured data — JSON-LD presence and syntax, WebPage/BreadcrumbList/ImageObject hints
  • LLM readinessllms.txt, extractable text, summaries, image descriptions

Scores are 0–100 per category. Overall score uses weights: SEO 30%, Accessibility 25%, Structured Data 25%, LLM Readiness 20%. Penalties: error −10, warning −5, info −1 (per category).

Phoenix / Mix

Oratos does not replace Phoenix SEO libraries — it audits rendered HTML after prerendering or static export:

# mix.exs
aliases: [
  "seo.audit": ["cmd oratos audit ./priv/static --fail-under 85"],
  "seo.report": ["cmd oratos audit ./priv/static --format html --output reports/oratos.html"]
]

See docs/phoenix.md and docs/ci.md.

Library

Use Oratos from Rust without shelling out to the CLI:

[dependencies]
oratos = "0.3"
use oratos::{audit_pages, load_pages, LoadOptions};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let pages = load_pages("examples/static_site", &LoadOptions::default()).await?;
    let report = audit_pages("examples/static_site", &pages);
    println!("overall score: {:.1}", report.scores.overall);
    Ok(())
}

See docs/architecture.md for module layout. Upgrading from v0.2 split crates? See v0.3.0 release notes. Latest patch notes: v0.3.1.

Documentation

Development

cargo test
cargo clippy -- -D warnings
cargo fmt --check

License

MIT — see the LICENSE file.

Download files

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

Source Distribution

oratos-0.3.1.tar.gz (58.9 kB view details)

Uploaded Source

Built Distributions

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

oratos-0.3.1-py3-none-win_amd64.whl (2.8 MB view details)

Uploaded Python 3Windows x86-64

oratos-0.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

oratos-0.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

oratos-0.3.1-py3-none-macosx_11_0_arm64.whl (2.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

oratos-0.3.1-py3-none-macosx_10_12_x86_64.whl (2.8 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file oratos-0.3.1.tar.gz.

File metadata

  • Download URL: oratos-0.3.1.tar.gz
  • Upload date:
  • Size: 58.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oratos-0.3.1.tar.gz
Algorithm Hash digest
SHA256 82018cf7867cf51174ff616bd5c553f3aed5bcee782bdead45c374978d822315
MD5 d33a10ee2ae7fe60453410670cfd07d9
BLAKE2b-256 bb1bc8adc366c5992389c5e3f55675aaad45bf439559703416a516991408af0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for oratos-0.3.1.tar.gz:

Publisher: publish-pypi.yml on latentmeta/oratos

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

File details

Details for the file oratos-0.3.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: oratos-0.3.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oratos-0.3.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 3dbff7170960666b598a82d0ecbb8f75293dadc98945310b117266eb8040f008
MD5 163d3c79278816fbf99580c2af1091fd
BLAKE2b-256 db18bfb987073a5e52c78dd619d4dcfb08739c48cf2b40802fb67f9421961671

See more details on using hashes here.

Provenance

The following attestation bundles were made for oratos-0.3.1-py3-none-win_amd64.whl:

Publisher: publish-pypi.yml on latentmeta/oratos

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

File details

Details for the file oratos-0.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oratos-0.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 39eb600f40efd4e3041b09d46b9e40eb52c6777c038db2e7015901f38fe87265
MD5 d985565a3f481d06c240b33fb1757dbd
BLAKE2b-256 a01a9ffa9895a9ed842375ad768aee074019584ecd1f1ac790b52923d125be25

See more details on using hashes here.

Provenance

The following attestation bundles were made for oratos-0.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on latentmeta/oratos

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

File details

Details for the file oratos-0.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oratos-0.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6f02f88a55deaf797b3d59e0c31897813c20e70bede40a3abdc5299b1eb6f446
MD5 35429925ddda505f65ec9349685545cd
BLAKE2b-256 c50cd4c8569f10719bf145aec182a69ee3a1524f4f661a552b424743389c88c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for oratos-0.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on latentmeta/oratos

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

File details

Details for the file oratos-0.3.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oratos-0.3.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84d83ad8874af4d26109c431bb5ecaf3269b32197b4480c190a08afa3fca09ec
MD5 de5a4f60b79b12a657fb0142c74a0a51
BLAKE2b-256 f5bf0b40e3ad8c79318370127b3c55ea4ac9f319cfa4be2d4421c93f356f1911

See more details on using hashes here.

Provenance

The following attestation bundles were made for oratos-0.3.1-py3-none-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on latentmeta/oratos

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

File details

Details for the file oratos-0.3.1-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for oratos-0.3.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ec31f3240f42af81daa2ef297f502a3d210d13cbbc3e3558692821273e82d395
MD5 d69844900fd795461cc141f0882b6e2f
BLAKE2b-256 0d76e0977e861a55e7e7716357cd68016ee449fc1c1cc87369f7c4b82a3a7835

See more details on using hashes here.

Provenance

The following attestation bundles were made for oratos-0.3.1-py3-none-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on latentmeta/oratos

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