Skip to main content
.it — IntentText · v1.x · open format

One plain-text file. A document, a database, a PDF, a sealed record.

IntentText (.it) is an open format for business documents. Write contracts, invoices, and reports as readable text — query them like a database, print them to enterprise-grade PDF, and seal them with a tamper-evident hash. In English or Arabic, by people or AI agents.

$ npm install -g @dotit/core
The format

Write this. Ship this.

Every line is one intent: keyword: content | prop: value. The source on the left is the single artifact — the invoice on the right is dotit invoice.it --html --theme corporate.

invoice.it
page: | size: A4 | margin: 20mm
header: Horizon Consulting
footer: INV-2026-042 · Page {{page}} of {{pages}}
 
title: Invoice INV-2026-042 | end: 2026-06-01
summary: Horizon Consulting → Acme Corp
meta: | theme: corporate | status: Unpaid
 
section: Bill To
contact: Acme Corp | email: accounts@acme.com | vat: VAT-300214
 
section: Line Items
| Description | Qty | Unit | Total |
| Consulting — May 2026 | 40 | 150.00 | 6,000.00 |
| Systems integration | 12 | 175.00 | 2,100.00 |
 
metric: Subtotal | value: 8,100.00 USD
metric: Tax (5%) | value: 405.00 USD
metric: Total Due | value: [8,505.00 USD]{ weight: bold }
 
deadline: Payment due | date: 2026-06-30 | consequence: 2% monthly late fee
sign: Layla Hassan | role: Finance Director | at: 2026-06-01T09:30:00Z
freeze: | status: locked
Horizon Consulting

Invoice INV-2026-042

2026-06-01

Horizon Consulting → Acme Corp

theme: corporatestatus: Unpaid
Bill To
Acme Corp
accounts@acme.com · VAT-300214
Line Items
DescriptionQtyUnitTotal
Consulting — May 202640150.006,000.00
Systems integration12175.002,100.00
Subtotal8,100.00 USD
Tax (5%)405.00 USD
Total Due8,505.00 USD
Payment due — 2026-06-30 · 2% monthly late fee
Signed — Layla Hassan, Finance Director Sealed · sha256:9f1c2ab87d…
INV-2026-042 · Page 1 of 1
Two-sided rows — end:Inline styled spans — [text]{…}Running header / footer with page countersTyped blocks — metric:, deadline:, contact:
عربي أصيل

Arabic is a first language

Not translated — native. Write the keywords themselves in Arabic: عنوان: قسم: جهة: مهلة: توقيع:. The document below is a complete, sealable services contract.

عقد-الخدمات.it
عنوان: عقد خدمات استشارية
ملخص: بين شركة الأفق للاستشارات ومؤسسة النور التجارية
بيانات: | التاريخ: 2026-06-01 | الحالة: ساري
 
قسم: الأطراف
جهة: شركة الأفق للاستشارات | البريد: info@alufuq.qa | السجل: CR-10442
جهة: مؤسسة النور التجارية | البريد: contact@alnoor.qa | السجل: CR-22871
 
قسم: نطاق العمل
نص: يقدّم الطرف الأول خدمات استشارية إدارية خلال الربع الثالث من عام 2026.
مؤشر: قيمة العقد | value: 45,000 ر.ق
مهلة: سداد الدفعة الأولى | date: 2026-07-15 | consequence: غرامة تأخير 2%
 
قسم: الجدول الزمني
أعمدة: المرحلة | التسليم | الموعد
صف: الأولى | دراسة الوضع الراهن | 2026-07-01
صف: الثانية | التقرير النهائي | 2026-09-30
 
اعتماد: روجع من الإدارة القانونية | by: سارة المنصوري | role: مستشارة قانونية
توقيع: أحمد الجابر | role: المدير التنفيذي | at: 2026-06-01T10:00:00Z
تجميد: | status: locked

عقد خدمات استشارية

بين شركة الأفق للاستشارات ومؤسسة النور التجارية

التاريخ: 2026-06-01الحالة: ساري
الأطراف
شركة الأفق للاستشارات
info@alufuq.qa · السجل CR-10442
مؤسسة النور التجارية
contact@alnoor.qa · السجل CR-22871
نطاق العمل

يقدّم الطرف الأول خدمات استشارية إدارية خلال الربع الثالث من عام 2026.

قيمة العقد45,000 ر.ق
سداد الدفعة الأولى 2026-07-15 · غرامة تأخير 2%
الجدول الزمني
المرحلةالتسليمالموعد
الأولىدراسة الوضع الراهن2026-07-01
الثانيةالتقرير النهائي2026-09-30
اعتماد — سارة المنصوري، مستشارة قانونية توقيع — أحمد الجابر، المدير التنفيذي الوثيقة مختومة
33 Arabic keyword aliases — full canonical semanticsRTL automatic — layout mirrors via CSS logical propertiesKeywords round-trip as written — sealed Arabic docs keep their hashOne query spans languages — --type deadline finds مهلة: too
Print & PDF

Enterprise paper, from plain text

The page is part of the document. Paper size, margins, running headers and footers, watermarks, and house typography are all declared in the same .it file — no CSS, no Word template drift.

  • WYSIWYG editor

    Word-like pages at editor.uts.qa — what you see on the canvas is what prints.

  • @page control with live counters

    header: / footer: render in the print margins with {{page}} / {{pages}} resolved per page. watermark: DRAFT overlays every page.

  • 8 themes, Word-parity typography

    corporate, legal, editorial, technical, minimal, warm, dark, print — plus leading:, space-before:, space-after: per block or document-wide via style: rules.

  • Server-side PDF bytes

    Browser printing needs zero dependencies. For invoicing pipelines and archives, @dotit/pdf merges, seals, and returns real PDF bytes in one call.

report.it — page setup
page: | size: A4 | margin: 20mm
header: ACME Holdings — Confidential
footer: Page {{page}} of {{pages}}
watermark: DRAFT | opacity: 0.1
 
style: text | leading: 1.6 | space-after: 12px
style: section | color: #1e3a5f | weight: 600
issue-invoice.ts — @dotit/pdf
import { issuePDF } from "@dotit/pdf";

const { source, hash, pdf } = await issuePDF(template, data, {
  signer: "Layla Hassan",
  role: "Finance Director",
  theme: "corporate",
});
// source — the sealed .it: the queryable, verifiable record
// pdf    — real PDF bytes, ready to email or archive
Trust

Seal it. Anyone can verify it.

The trust lifecycle lives inside the file: trackapprovesign freeze → verify → amendment. No platform, no account, no vendor.

  • Tamper-evident, not proprietary

    The seal is a SHA-256 hash over the canonical source. Anyone with the file can recompute it — twenty years from now, with any SHA-256 implementation.

  • Approvals are hashed with the body

    approve: lines are part of what gets sealed. The append-only audit log below the history: boundary never disturbs the hash.

  • Formal amendments

    Sealed documents change only through amendment:was: / now: records the change while the original seal stays intact.

trust — dotit CLI
dotit seal contract.it --signer "Ahmed Al-Jaber" --role "CEO"
✅ Document sealed
Signer: Ahmed Al-Jaber (CEO)
Hash: sha256:9f1c2ab87d…
Frozen: 2026-06-12T10:02:11Z
 
dotit verify contract.it
✅ Document intact
Sealed: 2026-06-12T10:02:11Z
Signers: Ahmed Al-Jaber (CEO) ✅
 
// a payment term is edited after sealing…
dotit verify contract.it
❌ Document has been modified since sealing
Expected: sha256:9f1c2ab87d…
Current: sha256:3e8d41c09a…
Query

A folder of documents is a database

Every block is typed and every property is queryable — so a directory of contracts answers questions without a database, an importer, or a server.

  • Query files, folders, or globs

    Filter by type, author, status, section, or content; output as table, JSON, or CSV. Date ranges work because dates are ISO 8601.

  • Self-healing indexes

    Each folder owns a shallow .it-index that refreshes lazily on query. The .it files stay the source of truth — greppable and git-diffable.

  • Same engine in code

    queryBlocks(doc, "type:task owner:Ahmed sort:due:asc limit:5") — one function, no schema migration, works offline.

query — dotit CLI
dotit query ./contracts --type deadline
 
FILE TYPE CONTENT PROPERTIES
-------------- -------- ------------------ --------------------------
acme-2026.it deadline Payment due date: 2026-06-30 | consequence: 2% monthly late fee
alnoor-svc.it deadline سداد الدفعة الأولى date: 2026-07-15 | consequence: غرامة تأخير 2%
orbit-nda.it deadline Renewal notice date: 2026-09-01
 
// build per-folder indexes once — queries self-heal them afterwards
dotit index ./contracts --recursive
 
// or ask in natural language
dotit ask ./contracts "which contracts renew this quarter?"
For AI agents

Agents learn the format from one URL

IntentText is designed to be authored by models as much as by people — deterministic grammar, no layout ambiguity, and trust operations an agent can run.

/llms.txt — the whole format, one request

dotit.uts.qa/llms.txt

The complete machine reference: line grammar, all 38 canonical keywords, styling layers, templates and merge, the trust model, and generation rules. Point any LLM at it and it writes valid .it — documents, templates, and workflows — immediately.

@dotit/mcp — 12 tools, any agent

parse_intent_textrender_htmlrender_printmerge_templatevalidate_documentquery_documentdiff_documentsdocument_to_sourceextract_workflowseal_documentverify_documentget_document_history
mcp.json
{
  "mcpServers": {
    "intenttext": {
      "command": "npx",
      "args": ["-y", "-p", "@dotit/mcp", "intenttext-mcp"]
    }
  }
}

And agents don't just read .it — they run on it: step:, decision:, gate:, trigger:, result:, policy:, audit: define executable workflows with human checkpoints. Read the agent guide →

One file. The whole document lifecycle.

Author → merge → print → sign → seal → query → verify. Open format, no lock-in.

$ npm install -g @dotit/core