Skip to main content
.it — IntentText · open format · trust built in

One plain-text file you can read, query, print, and prove.

IntentText (.it) is an open format for business documents — contracts, invoices, tenders, reports. The same file is a human-readable document, a queryable database, an enterprise PDF, and a tamper-evident, signable, certifiable record anyone can verify offline. No platform, no account, no lock-in.

$ npm install -g @dotit/core
Horizon Consulting
Tax Invoice
INV-2026-042
Issued 2026-06-01
Bill to
Acme Corpaccounts@acme.com · VAT-300214
Unpaid
Line items
DescriptionQtyRateAmount
Strategy consulting — May 202640150.006,000.00
Systems integration12175.002,100.00
Compliance review1405.00405.00
Subtotal8,505.00 USD
Tax (5%)425.25 USD
Total Due8,930.25 USD
Signed · Layla Hassan, Finance DirectorSealed 1 Jun 2026 · 19fba2465d…
sealed invoice.it — real renderer output
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.

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
Live renderer output — dotit invoice.it --print --theme corporate
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

Three layers of proof, inside one file

A bank, a court, or a procurement office needs to know three things about a document: that it hasn't changed, who stands behind it, and that they are a real, vetted entity. IntentText answers all three — and anyone can check the answers offline, with no app and no account.

1

Integrity

Has anything changed?

seal: freezes the content and stamps it with a SHA-256 hash. Change a single character — a date, a number, a payment term — and the hash no longer matches. Tampering becomes visible instantly, to anyone, forever.

Verify with any SHA-256 — no vendor
2

Identity

Who signed it?

sign: is a real Ed25519 cryptographic signature, not a typed name. It proves the document was signed by the holder of a specific private key, and it verifies offline against the public key embedded in the file.

Ed25519 · @dotit/sign
3

Authority

Is the signer a vetted entity?

certify: binds the signature to a KYC-verified legal entity through a UTS certification. An offline root key vouches for an online issuing key; that chain travels inside the document and verifies against the root alone.

root → issuing key → document

One artifact, four jobs at once

That is what makes .it different. The very same file you read on screen is the file a system queries, the file that prints to PDF, and the tamper-evident record a third party verifies — with no conversion, no export step, and no platform in the middle.

  • Approvals are sealed with the body

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

  • Formal amendments, not silent edits

    A sealed document changes only through amendment:was: / now: records the change while the original seal stays intact and provable.

  • Verifiable in twenty years

    No service to call, no key to license. Open format, open math — the proof is in the file and stays there.

seal · sign · certify · verify — dotit CLI
// 1 · INTEGRITY — freeze the content with a SHA-256 seal
dotit seal contract.it --signer "Ahmed Al-Jaber" --role "CEO"
✅ Sealed sha256:9f1c2ab87d… frozen 2026-06-12T10:02Z
 
// 2 · IDENTITY — add a real Ed25519 signature (proves WHO)
dotit sign contract.it --key ahmed.key
✅ Signed key ed25519:6f2a… sig 30c4…
 
// 3 · AUTHORITY — bind a KYC-verified entity via UTS certify
dotit verify contract.it --root uts-root.pub
✅ Intact · signature valid · certified — offline
Signer: Ahmed Al-Jaber (CEO)
Certified: Horizon Consulting · UTS-verified entity
Chain: root → issuing key → document ✅
 
// a payment term is edited after sealing…
dotit verify contract.it
❌ Modified since sealing
Expected: sha256:9f1c2ab87d…
Current: sha256:3e8d41c09a…
Hash-Based Ambient Seal

Trust you can see

A hash is a string of hex — true, but invisible. The Ambient Seal turns that hash into a mark on the page: a pattern drawn deterministically from the document's SHA-256. Same document, identical seal — every time. Change one character and the seal becomes completely different. Trust stops being something you check and becomes something you recognise at a glance.

3B1C9D7EDRAFTDraft
8F2A4C0ESIGNEDSigned
C4E91A37CERTIFIEDCertified
A17F6031ROOT CERTIFIEDRoot-certified ★
Template
Live, not mock-ups — each generated by @dotit/core from the document's SHA-256 hash. Same doc → same seal; any change → a different one. Colour states the tier: gray draft, blue signed, green certified, gold root-certified. The slate dashed seal is a template — a blueprint, not a record: it sits outside the trust tiers (merge it with data to produce a signable document).
Ten Hash-Based Ambient Seal styles — line wave, dot field, polygon flow, concentric, organic, ripple, swirl, percolation, geometric weave, fractal edge — each generated deterministically from a document's SHA-256 hash and shown in a document corner
Each seal is generated from the SHA-256 of the document — same document, identical seal; any change, a completely different one.
Ambient Seal placement system — the seal rendered as a corner mark in the top-right, left margin, right side and bottom corner of a printed document, with mock-ups on real paper
It lives where a wax seal would — a quiet corner mark on the printed document, in English or Arabic, light on ink.
Apps & converters

Edit on the canvas. Open on the desktop.

You don't have to write .it by hand. A Word-like editor and a native desktop app give business users the familiar surface — the trust model rides along underneath.

  • WYSIWYG editor — what you see is what prints

    A ribbon, real pages, page sizes from A5 to A1 in portrait or landscape, easy zoom, and a live trust banner. Export to PDF is the on-screen page, byte-for-byte. Open it at editor.uts.qa.

  • Desktop app — double-click to open a .it file

    A native cross-platform app (macOS, Windows, Linux) built on Tauri. Open, read, and edit .it files from disk, with an always-visible trust badge showing the integrity, signature, and certification status of the document in front of you.

  • Convert what you already have

    dotit convert imports Markdown, HTML, Excel (XLSX) and Word (DOCX) — and exports back to XLSX and DOCX. Your spreadsheets and contracts become queryable, sealable .it, and ship back out unchanged.

Editor · editor.uts.qa
Ribbon toolbarA5–A1 · portrait/landscapeZoom 25–300%Trust bannerWYSIWYG PDF
Desktop · macOS · Windows · Linux
Double-click openEdit & autosaveLive trust badgeFolder vaultsTauri-native
.md .html .xlsx .docx .it
convert — dotit CLI
// bring existing files in — Markdown, HTML, Excel, Word
dotit convert budget.xlsx budget.it
✅ budget.it — 3 sheets → typed tables
dotit convert proposal.docx proposal.it
✅ proposal.it — headings, lists, tables preserved
 
// and send them back out — round-trips both ways
dotit convert report.it report.xlsx
dotit convert report.it report.docx
✅ report.xlsx · report.docx
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 41 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 — 17 tools, any agent

parse_intent_textrender_htmlrender_printmerge_templatevalidate_documentquery_documentdiff_documentsdocument_to_sourceextract_workflowseal_documentverify_documentcompute_hashget_document_historysign_documentverify_signaturesverify_certificationgenerate_signing_key
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