Aracne2

A modern home for scholarly editions

A modular, production-ready CMS for editing and publishing structured TEI corpora. Built for philologists, historians, archivists and scholarly editors who want to take a corpus from raw text to a published, citable digital edition — without also becoming sysadmins.

Open source · MIT licensed · Self-hosted

Production-ready · v1.0.1 · May 2026

What you can do with Aracne2

Three things the platform actually does — in plain verbs: edit a TEI corpus, publish it, and connect it to the rest of the scholarly web.

01 · Edit

Author TEI with the schema in hand

Load your TEI schema, attach it to the collection, then walk through your documents tag by tag and attribute by attribute. The app only proposes what the schema allows — you pick the markup that fits.

Tag interactively, with autocomplete

Type < to pick a valid element, space to pick a valid attribute, = to pick a valid value. The schema decides what's allowed; the editor learns the schema by using it. Jump-to-matching-tag, fold-all, format, and Ctrl+Space are always there.

Link entities to 12 authorities

Resolve people against Wikidata, ORCID, VIAF, GND, CERL, Trismegistos; places against GeoNames and Peripleo; institutions against ROR; terms against Getty AAT; bibliography against CrossRef and OpenAlex. Each lookup writes a canonical URI as @ref — no free text ever lands in the XML.

Annotate, illustrate, validate

Insert numeric or alphabetic notes at the cursor. Attach facsimile images and align them to text regions with the zone editor. Validate against the collection's schema automatically on every save — or open the validator panel to inspect the report.

Get an AI co-editor on hand

Ask the AI to suggest tagging for a passage, propose corrections, or clean up bibliographic entries before the Bibliobuilder saves them. It works grounded in the corpus's own schema and the documents already in the collection — not generic guesses. Every accepted suggestion is audit-logged.

Track every change with full version history

Every editorially meaningful event — create, submit, request revisions, publish — lands as an append-only row in the document's history, alongside explicit Save version and Roll back to vN entries. A working / published split lets editors keep iterating on a published collection without taking the public site offline; ?version=N permalinks resolve only to publication-origin rows, so manual saves never leak to anonymous visitors.


02 · Publish

Turn the corpus into something the world can read

Once a collection is published, Aracne2 gives you several public surfaces to choose from — or to combine. Pick the ones that fit the project, ignore the rest.

Get a project page out of the box

Every project gets a public landing — collections index, customisable hero, browse-by-author/place/date, configurable nav. Plugins (deposits, search portals, custom pages) land their own public links via the public_navigation capability, no template editing.

Render TEI as readable, downloadable pages

Each published document renders through XSLT, with one-click download of the original TEI source and a print-to-PDF option. Re-render externally if you want; the source is always available.

Spin a stand-alone website per edition

Generate a separate site for a single edition with its own XSLT theme, its own domain, its own templates — while the corpus stays inside Aracne2. Each site ships its own sitemap.xml and robots.txt.

Build search portals across collections

Pick the collections you want, click Build, and Aracne2 produces a static index.html + compressed JSON index. Host it on the platform, on an external site, or as an offline ZIP. Embed the search box anywhere with an origin-whitelisted HTML snippet.

Generate the collection's bibliography

The Bibliobuilder — a tool of its own, separate from the editor — walks every <bibl> across the collection's documents, deduplicates and normalises them, and publishes a single <listBibl> as the collection's public bibliography page. Every run is versioned and rollback-able.

Bulk import / export from your laptop

Ship the headless aracne CLI on an editor's machine, paste a Personal Access Token from their profile, and run aracne import or aracne export against any deployment over HTTPS. The --as-of YYYY-MM-DD flag rebuilds a collection's publication state at any past date using the version history — a one-liner restore on a fresh instance.


03 · Connect

Plug the corpus into the scholarly web

A TEI edition is more useful when it's reachable. Aracne2 hooks the corpus into authorities, repositories, harvesters and AI assistants through plugins — all replaceable, no lock-in.

A modular catalog of connectors

Every external service Aracne2 talks to — authority lookups, deposit targets, search portals, AI assistants — is a self-contained plugin. Activate the ones you want from the admin panel, leave the rest off. The catalog grows as new connectors land; Aracne2 picks them up automatically, without changes to the core.

Deposit a published collection, get a DOI back

On publish, deposit plugins bundle the TEI files + metadata and submit them to Zenodo (citable DOI + long-term archive), Dataverse (institutional repositories), or preprint servers. They share a generic DepositMetadata mapping; the DOI flows back into the collection page as a citable badge.

Expose the corpus to harvesters

Serve a native OAI-PMH endpoint with all six verbs, oai_dc metadata and resumption tokens. Ship sitemap and robots.txt, embed schema.org / Dublin Core / RDF graphs in the public HTML, and push every publish to the Internet Archive's Save-Page-Now.

Let AI assistants work on the corpus

Issue per-corpus bearer tokens for the built-in Model Context Protocol server. Claude, ChatGPT, Cursor — any MCP-aware assistant — reads, searches and (where authorised) edits the corpus through a typed surface, with the same ACL and audit trail as a human editor.

Search the corpus in plain language

Activate the natural-language search plugin and visitors get a public chat-style search at /search-nl: questions in plain English or Italian, answers streamed back with citations to real TEI documents in the corpus. The orchestrator refuses to emit an answer that doesn't cite at least one source — by design, to keep output grounded.


04 · Assist

Pick the AI you trust — or run your own

AI is built in, but the choice is yours: pick a cloud provider when convenience wins, or run a local model on your own hardware when privacy or cost wins. Either way, every call is opt-in, shown as a preview before anything is written, and logged.

Pick a provider, switch any time

Three cloud providers wired in — OpenAI, Anthropic (Claude), Google Gemini — plus Ollama for local models on your own hardware. Switch from one to the other from the admin panel; the change is hot, no restart, no migration.

Build a personal RAG on your corpus

Index your collection's own texts, schemas and bibliography into a retrieval layer the assistant can quote from. Answers stay grounded in your edition — not in whatever's on the open web. An AI you can hand the keys to, because it's reading from your own bookshelf.

Nine ready-made prompts, yours to fork

Aracne2 ships nine built-in prompts across eight editorial tasks — entity tagging, validation walk-throughs, bibliography cleanup, XSLT debugging, document chat. Use them as-is, or copy any of them as a starting point and bend it to your project's voice. Custom prompts inherit the same scopes — they show up in the right toolbar without touching the frontend.

Preview-first, audit-logged, fine-grained

Every call is behind an explicit button. Every response is shown as a preview before anything is written into the document. Every request lands in ai_request_logs with user, prompt slug, token count and duration. Individual AI features can be toggled from the AI configuration panel — keep the ones you trust, silence the rest.

Production-ready

The boring parts a real archive needs

Aracne2 is built to manage and publish your collections inside an institutional setting — a university department, a research group, a library. That means versioned edits, a traceable audit trail, scheduled integrity checks, declared policies, and a principled stance on personal data, all out of the box.

Audit log dashboard

Every intentional, user-attributable action — auth, document edits, plugin activations, settings changes, role grants, GDPR requests — lands in audit_log. An admin dashboard at /admin/audit-log provides full-text search, action-prefix filters, date ranges, and CSV export. Retention is configurable; IPs are SHA-256-hashed in production.

Fixity layer with drift dashboard

Per-document SHA-256 fingerprints written at every save plus a scheduled re-check of the latest publication-origin version. The /admin/fixity dashboard surfaces drift the moment storage corruption or out-of-band edits sneak in — closing the most visible CoreTrustSeal R7 reviewer gap.

Institutional declarations as live forms

The policy_pages plugin ships twelve CTS-aligned templates: mission, privacy / DPIA, storage policy, continuity plan, preservation plan, appraisal policy, incident response, citation guide, editorial board, funding & staffing, expert directory, and the CTS self-assessment itself. Multi-locale (IT / EN), append-only versioning, public render at /policies/<slug>.

Capability roles, orthogonal to the hierarchy

Beyond the five hierarchical roles, Aracne2 introduces capability roles — granted explicitly per user, never inferred. The first is PolicyManager (singleton): one named accountability holder for institutional policy content, with transactional handover that produces a single role.transferred audit entry. Future capabilities (Translator, Annotator, …) plug in the same way.

GDPR posture for an editorial platform

A self-service Privacy card on every profile: art. 15 export, art. 16 rectification, art. 18 partial restriction, art. 17 anonymisation request. Erasure is mediated, not self-service — under art. 17.3.d's archiving exception, the same legal foundation every serious scientific publisher uses. Anonymisation rewrites the user's record-of-work to a placeholder, preserving the editorial trail.

CoreTrustSeal posture, documented end-to-end

The repository ships a per-requirement self-assessment in docs/reference/CTS_COMPLIANCE.md covering all 16 CoreTrustSeal Requirements (2023-2025) with explicit platform-vs-institutional split — what Aracne2 delivers automatically and what the deployment must declare via policy_pages.

Trust & transparency

667 backend tests · structured logging (structlog) · rate limiting (slowapi) · CSP / HSTS headers · defusedxml everywhere · bcrypt direct · manual security reviews on cadence.

Built modular

Every domain feature ships as a plugin. The core is small on purpose: authentication, ACL, hooks, rendering. Everything else — bibliographies, deposits, generated websites, OAI-PMH, MCP — plugs in around it.

Public
Project page Reader view Stand-alone website Search portal Bibliography page
Editorial UI Vue 3 SPA
TEI editor Bibliobuilder Admin
REST + JWT
Core FastAPI, async
Hooks registry Plugin loader ACL / JWT Audit log
PostgreSQL

users · ACL · sessions · plugin metadata · audit log

eXist-db

TEI corpus, queried through XQuery files on disk

Bundled extensions

Twenty-plus opt-in plugins ship with Aracne2. Activate the ones you need from /admin/plugins; leave the rest off.

Authority lookups 11

Resolve people, places, institutions, terms and bibliography against external registries; canonical URIs are written into the TEI as @ref.

Wikidata ORCID VIAF GND CERL Trismegistos GeoNames Peripleo ROR Getty AAT OpenAlex

Bibliography 2

  • CrossRef Lookup paste a DOI → clean <biblStruct>
  • Zotero Import sync a Zotero group into the collection's bibliography

Deposit & archive 3

  • Zenodo citable DOI + long-term archive on publish
  • Dataverse institutional repositories
  • Internet Archive Save-Page-Now snapshot on every publish

Git mirrors 3

  • GitHub push a collection as a backup repo
  • GitLab same, on a GitLab instance
  • Codeberg or any Forgejo / Gitea host

One commit per push; eXist-db remains source of truth.

Reading 1

  • EVT 2 viewer embed the EVT 2 TEI reader per collection; a "Read in EVT" button lands on public pages.

AI assistants 2

  • MCP Server per-corpus bearer tokens for Claude, ChatGPT, Cursor, or any MCP-aware client.
  • NL Search public chat-style search at /search-nl; LLM tool-use loop with mandatory citations.

Institutional surface 1

  • Policy Pages 12 CTS-aligned templates — mission, DPIA, storage, continuity, preservation, citation guide, editorial board, …

Public render at /policies/<slug>; multi-locale; append-only version history.

Standards-first

TEI · OAI-PMH · schema.org · Dublin Core · RDF (Turtle / RDF/XML / JSON-LD).

What it looks like

TEI editor with split view and XPath inspector

TEI editor

Split view, XPath inspector, schema-aware autocomplete.

Aracne AI co-editing panel

AI co-editor

Context-aware suggestions grounded in your TEI schema and bibliography.

Public collection page (reader view)

Public collection

A reader-friendly rendering of the published TEI — cite, deep-link, share.

Corpora dashboard with MCP token issuance

Corpora & MCP

Issue per-corpus bearer tokens; let your assistant work on the corpus.

Deposit tabs for Zenodo, Dataverse and preprint servers

One-click deposits

Zenodo, Dataverse, preprint — pluggable, with citable DOIs back into the UI.

Generated website with custom XSLT theme

Generated websites

Spin a stand-alone site for a single edition with its own theme and domain.

Built with

FastAPI Vue 3 PostgreSQL 17 eXist-db pgvector Postfix Tailwind CSS Docker