Tag Studio: feature parity matrix (Phase 0, epic #3866)
This is a companion to competitor-teardown.md, which has the sources for every cell.
Cell key:
| Code | Meaning |
|---|---|
| Y | Present |
| P | Partial or limited |
| N | Absent. The documentation says so, or a documented workflow requires another tool. |
| ? | Unknown. Verify hands-on. |
Evidence suffix:
| Suffix | Meaning |
|---|---|
| v | Vendor documentation |
| u | User reports |
| t | Third-party guide |
| c | Competitor-authored claim (biased) |
Scope: “Siteimprove” is the Siteimprove PDF Remediation Agent (June 2026 or later). “CommonLook” covers the desktop plug-in and the web app from July 2025. “PAC” is PAC 2024 and 2026, and is a checker only. “Grackle” is Grackle PDF, web and desktop.
Target column:
| Target | Meaning |
|---|---|
| Must | Needed for v1 parity with professionals |
| Should | Planned for v1.x |
| Later | After v1 (includes PDF/UA-2) |
| Decline | Deliberately not built |
| # | Area / capability | Acrobat Pro | Grackle | Siteimprove | PAC 2024/26 | CommonLook | axesPDF | Gevell Tags target | Differentiator? |
|---|---|---|---|---|---|---|---|---|---|
| A. Platform & licensing | |||||||||
| A1 | Runs in browser (no install) | N v | Y v | Y v | N v | Y v (web, 2025) | N v | Must | Parity with Grackle/CL web |
| A2 | Works on macOS | Y v | Y v | Y v | N t (Windows) | Y v (web) | N v (Windows) | Must | Beats PAC/axesPDF |
| A3 | Standalone (no Acrobat dependency) | n/a | Y v | Y v | Y v | P v (desktop needs Acrobat) | Y v | Must | |
| A4 | Public pricing | Y t (~$240/yr) | N v | N v | Y (free) | N v | Y v ($650/yr) | Should | Transparent pricing is a sales wedge |
| A5 | Can tag an untagged PDF from scratch | Y v | Y v | Y v | N | Y v | N v (needs tagged input) | Must | |
| B. Tag tree editing model | |||||||||
| B1 | Tag tree panel with expand/collapse | Y v | Y c | N v | Y v (view only) | Y v | Y v | Must | |
| B2 | Drag-and-drop move/re-parent | Y t | ? | N | N | ? | Y v | Must | |
| B3 | Keyboard move/reorder (no mouse) | ? | ? | N | N | Y v (Ctrl+Shift+Down) | ? | Must | Yes: full keyboard parity with DnD |
| B4 | Multi-select tags | P t (shift range) | Y c | N | N | Y t | Y v | Must | |
| B5 | Change tag type (retag) on multi-selection | ? | Y c | N | N | Y t | Y v (multi-tag properties) | Must | |
| B6 | Enclose selection in new container (wrap) | P t (manual New Tag + drag) | ? | N | N | ? | Y v (Enclose) | Must | |
| B7 | Unwrap / level-up / remove container | P t | ? | N | N | Y v (Level up) | Y v (Remove All Containers) | Must | |
| B8 | Merge tags | P t | ? | N | N | Y v (Ctrl+M) | ? | Must | |
| B9 | Split a tag / split text at cursor | ? | ? | N | N | ? | ? | Should | Possible differentiator; nobody documents it |
| B10 | Delete empty tags (document-wide) | ? | ? | Y v (“removes clutter”) | N | Y v (cleanup) | Y v | Must | |
| B11 | Click on page to find tag (and reverse) | Y t (Find Tag from Selection) | Y c (side-by-side) | N | P (preview) | Y v (Synchronized View) | Y v (Tag Selection) | Must | |
| B12 | Show a tag’s ancestor chain / breadcrumb | ? | ? | N | ? | ? | Y v | Should | |
| B13 | Tag search (by type/attribute/text) | P t (Find) | ? | N | ? | Y v (incl. first/last child, 2026) | Y v | Must | Structured query (“TD with no Headers”) is a differentiator |
| B14 | Jump to next tag of same type | ? | ? | N | ? | ? | Y v | Should | |
| B15 | Edit arbitrary attributes (Lang, ActualText, E, Alt, Placement, BBox) | Y t (Properties) | ? | N | N | Y v (Properties) | Y v | Must | |
| B16 | Role map editor | ? | Y c (wizard) | N | N | ? | Y v (Rolemap pane, Fix Roles) | Must | |
| B17 | Class map / attribute object editing | ? | ? | N | N | ? | P v | Later | |
| B18 | Parent tree / MCID mapping visualization | N c | Y c (Parent Tree Wizard) | N | N | ? | P v (Rebuild parent tree) | Should | Yes: first-class content-to-tag view |
| B19 | Content (marked-content) level editing | P t (Content panel, no undo) | ? | N | N | ? | P v | Should | |
| B20 | Show only untagged content filter | P t (Find Unmarked) | Y c | N | ? | ? | Y v (Artifact non-tagged) | Must | |
| B21 | Structure repair (broken MCRs, parent keys, corrupt elements) | P t (Preflight fixups) | ? | Y v (automatic) | N | ? | Y v | Must | |
| C. Reading order | |||||||||
| C1 | Visual numbered reading-order overlay on page | Y v (Order panel) | Y v | N | P (preview) | Y t | P v (viewer) | Must | |
| C2 | Reorder by dragging regions on page | Y v | Y v (point-and-click) | N | N | ? | ? | Must | |
| C3 | Tree order and visual order always in sync | N t (known desync) | ? | n/a | n/a | ? | ? | Must | Yes: single model, no desync |
| C4 | Auto-rebuild reading order (AI/heuristic) | Y v (autotag) | Y v | Y v | N | Y v | N | Must | |
| C5 | Tab order = structure order (/Tabs /S) | Y t | ? | Y v | Checks v | ? | Y v (Set Tab Order) | Must | |
| C6 | Draw region, then assign tag type | Y v (Reading Order tool) | Y v | N | N | Y v | P v | Must | |
| C7 | Reading-order tool includes lists | N t | ? | N | N | Y v | ? | Must | Beats Acrobat |
| D. Tables | |||||||||
| D1 | Visual table grid editor | P v (Table Editor overlay) | Y c (color-coded grid) | N | N | Y v (logical grid) | P v (Table tool) | Must | |
| D2 | TD to TH toggle, bulk | P t (per-cell dialog) | Y c | N | N | Y v | Y v | Must | |
| D3 | Scope (Row/Column/Both) bulk | P t | Y v | N | N | Y v | Y v (multi-tag) | Must | |
| D4 | Headers/IDs assignment (complex tables) | Y t (per cell) | ? | N | N | Y v | Y v | Must | |
| D5 | Auto-generate header IDs / linked headers | Y t (IDs only) | ? | ? | N | Y v (generate linked headers) | ? | Must | |
| D6 | RowSpan/ColSpan editing | Y t | Y c (merge/split) | N | N | Y v (insert cells) | ? | Must | |
| D7 | One-click merge/split cells | N c | Y c | N | N | ? | ? | Must | |
| D8 | Linearize layout table (by row/col) | N | ? | ? | N | Y v | N | Should | |
| D9 | THead/TBody/TFoot, Caption, Summary | P t | ? | ? | Checks v | P v | ? | Must | |
| D10 | Auto table detection / repair | P v (autotag) | Y v | Y v (flags unsure) | N | Y v (AI) | N | Must | |
| D11 | Header-to-cell relationship visualizer | ? | Y c (color coding) | N | P (preview shows TH) | ? | Y v (Viewer header mapping) | Must | Yes: hover a TD to see its headers, spoken like a screen reader |
| D12 | Multi-page table continuity (merge split tables) | ? | ? | ? | N | ? | ? | Should | Common real-world pain; unverified everywhere |
| D13 | Table search | ? | ? | N | N | Y v (5.19) | P v | Should | |
| E. Figures & alt text | |||||||||
| E1 | Alt text on figure (single) | Y v | Y v | Y v | Checks v | Y v | Y v | Must | |
| E2 | Bulk alt-text grid (all figures in one list) | N c | Y c (Image Wizard) | P v (Review panel) | N | ? | ? | Must | |
| E3 | AI alt-text suggestions | ? | Y v | Y v | Checks v (AI tab, 2026) | Y v (AI tagging) | ? (“AI checks”) | Must | Yes: with confidence scores and review queue |
| E4 | Human-review queue for AI output | ? | Y v (auto-confirm high confidence) | Y v | N | ? | N | Must | |
| E5 | Mark decorative, then artifact | Y t | ? | Y v | Checks v | Y v | Y v | Must | |
| E6 | Figure BBox fix | ? | ? | ? | Checks v | ? | Y v (Fix Placement) | Must | |
| E7 | Formula tagging + alt / MathML | P t (Formula type) | ? | ? | Checks v | ? | P v (warnings) | Should | We already have spoken-math (#3848) |
| E8 | Caption association (Figure/Caption) | Y v | ? | ? | ? | ? | ? | Should | |
| F. Artifacts, headers/footers | |||||||||
| F1 | Change tag to artifact (multi) | Y t | ? | Y v | N | Y v | Y v | Must | |
| F2 | Artifact all untagged content (doc-wide) | P t (Find, tag all) | ? | Y v | N | ? | Y v | Must | |
| F3 | Artifact type/subtype (Pagination Header/Footer) | ? | ? | ? | ? | ? | ? | Should | Nobody documents it |
| F4 | Repeat-region detection (same header every page) | ? | ? | ? | N | Y t (Tag Similar, by style) | ? | Should | Yes: position-based repeat detection |
| F5 | Detect “artifact inside tagged content” and fix | ? | ? | ? | Checks v | ? | Y v | Must | |
| G. Lists | |||||||||
| G1 | Build L/LI/Lbl/LBody from selection | N t (manual) | ? | ? | N | Y v | ? | Must | |
| G2 | Nested list support | P t | ? | ? | Checks v | Y v | ? | Must | |
| G3 | Auto list detection | P v (autotag) | Y v | Y v | N | Y v | N | Must | |
| G4 | ListNumbering attribute | ? | ? | ? | Checks v | ? | ? | Should | |
| H. Links & annotations | |||||||||
| H1 | List all links in one panel | N c | Y c (Link Wizard) | N | ? | ? | ? | Must | |
| H2 | Find/tag unmarked links | Y t | ? | ? | Checks v | ? | ? | Must | |
| H3 | Link annotation to Link tag + OBJR fix | P t | ? | ? | Checks v | ? | P v (Set Contents key) | Must | |
| H4 | Link Contents/alt set in bulk | ? | ? | ? | N | ? | Y v | Must | |
| H5 | Test link targets | ? | Y c | N | N | ? | ? | Should | |
| H6 | Delete orphan link annotations | ? | ? | ? | N | ? | Y v (no undo) | Should | |
| H7 | Create internal links / TOC links | Y v | ? | N | N | N t | Y v (drag destination) | Later | |
| I. Forms | |||||||||
| I1 | Tag form fields (Form/OBJR) | Y v (autotag fields) | Y c (wizard) | Y v | Checks v | Y t | ? | Must | |
| I2 | Tooltip (TU) editing, bulk | P v | ? | Y v | Checks v | Y t | ? | Must | |
| I3 | Create new form fields | Y v | ? | N | N | N t (2020) | N | Decline (v1) | Point to Gevell Forms |
| I4 | Form tab order | Y v | ? | Y v | Checks v | ? | Y v | Must | |
| J. Text, fonts, Unicode, language | |||||||||
| J1 | Unicode / ToUnicode mapping editor | N c | Y c (desktop) | ? | Checks v | ? | Y v | Should | |
| J2 | Missing-space detection + insertion | N c | Y c (desktop) | ? | Checks v (quality) | ? | Y v (tunable) | Should | |
| J3 | Font embedding | P v (Preflight) | ? | Y v | Checks v | ? | P v (CID to GID) | Should | |
| J4 | Document language + per-tag Lang | Y v | ? | Y v (auto-detect) | Checks v | Y v | Y v | Must | |
| J5 | ActualText / E (expansion) editing | Y t | ? | ? | Checks v | Y v | Y v | Must | |
| J6 | Search/replace text without changing visuals | ? | ? | N | N | Y t | ? | Later | |
| K. Bulk / pattern operations & templates | |||||||||
| K1 | Tag Similar (by font/size/color style) | N | ? | N | N | Y t | N | Must | |
| K2 | One-click document-wide fixers (Note IDs, PDF/UA id, DisplayDocTitle…) | P t (Preflight) | ? | Y v | N | P v (Fix Wizard) | Y v | Must | |
| K3 | Batch across many files | P v (Action Wizard) | ? | Y v (bulk, Jul 2026) | N | ? | N | Should | |
| K4 | Copy tag structure to a similar document (template) | N | ? | N | N | ? | N | Should | Yes: Equidox Zone Transfer / PDFix JSON templates are the refs |
| K5 | Saved, reusable rules/presets per client | ? | ? | N | N | ? | P v (ribbon customization only) | Later | |
| K6 | Heading-level hotkeys (1-6) | ? | ? | N | N | ? | ? | Must | Equidox has 1-3; cheap win |
| K7 | Bookmarks from headings | Y v | ? | Y v | Checks v | Y v | Y v | Must | |
| L. Validation & fix workflow | |||||||||
| L1 | Built-in PDF/UA-1 checker | P t (not complete) | Y c (Grackle GO) | Y v (target flag) | Y v | Y v | Y v (PAC engine) | Must | |
| L2 | All machine-checkable Matterhorn failure conditions | N t | ? | ? | Y v (reference) | ? | Y v (89 conditions) | Must | Match PAC finding-for-finding |
| L3 | Guided human (non-machine) Matterhorn checks | P t (manual check status) | ? | P v (review list) | P v (AI warnings, 2026) | Y v (“User Verification”) | N | Must | Yes: checklist with evidence capture |
| L4 | WCAG 2.1 AA checks | Y t | Y c | ? | Y v | Y v (to 2.2) | Y v | Must | |
| L5 | Issue to location jump (tree + page) | P t | Y c | ? | Y v | Y v | Y v | Must | |
| L6 | Issue to fix link / auto-fix button | P t (some rules) | Y c (links to wizard) | Y v (auto) | N | Y v (Fix Wizard) | Y v (one-click) | Must | |
| L7 | Incremental / live re-validation | ? | ? | N | N | Y v (Run Incremental) | ? | Must | Yes: live, per-edit validation |
| L8 | Exportable conformance report | Y v (HTML) | ? | P v | Y v | Y v (HTML) | ? | Must | Tie to existing conformance report |
| L9 | AI semantic checks (heading/table plausibility) | N | ? | ? | Y v (2026) | ? | ? (“AI checks”) | Should | |
| L10 | PDF/UA-2 / WTPDF validation | ? | ? | ? | P v (PDF 2.0 limited) | ? | ? | Later | |
| M. Preview | |||||||||
| M1 | Screen-reader text preview (reading order + roles) | N | P v (visual preview) | N | Y v | ? | Y v | Must | |
| M2 | Logical structure visual preview (color-coded) | N | ? | N | Y v | P v (synced view) | Y v | Must | |
| M3 | Table preview with announced headers | N | ? | N | P v | ? | ? | Should | Yes |
| M4 | Reflow / HTML preview | P v (Reflow view) | ? | N | N | ? | N | Should | Equidox has HTML preview |
| M5 | Soft-hyphen / whitespace highlighting | N | ? | N | Y v | ? | Y v (spaces) | Should | |
| N. AI | |||||||||
| N1 | AI auto-tag (layout detection) | Y v (cloud) | Y v (Mar 2025) | Y v | N | Y v (Jul 2025, web) | N | Must | Parity; the edge is reviewability |
| N2 | Confidence scoring / per-item accept-reject | ? | P v (auto-confirm) | P v | P v (warnings) | ? | N | Must | Yes |
| N3 | ”Fix gaps” vs “start fresh” modes | P (autotag overwrites) | ? | Y v | N | ? | N | Must | Preserve-first (flyer-tagger) is our strength |
| N4 | Controls to disable AI (privacy) | Y u (AI controls) | ? | ? | Y v (registry key) | ? | ? | Must | ZDR/Bedrock story |
| O. Undo, reliability, performance | |||||||||
| O1 | Undo/redo for all tag operations | N t (no undo: Content panel, Reading Order) | Y c (unlimited, unverified) | n/a | n/a | ? | N v (some ops “cannot be undone”) | Must | Yes: headline differentiator |
| O2 | Visible edit history / checkpoint restore | N | ? | P v (delete & retry) | n/a | ? | N | Should | Yes |
| O3 | Stable on 500+ page / 50k-tag documents | N u (hangs, crashes) | ? | ? | ? | P v (hang fixes 2026) | ? | Must | Yes: publish benchmarks |
| O4 | Autosave / crash recovery | ? | ? | n/a | n/a | ? | ? | Must | |
| O5 | Non-destructive save (no content-stream loss) | ? | ? | ? | n/a | ? | ? | Must | We already have pixel-identical tagging |
| P. Accessibility of the tool itself | |||||||||
| P1 | Fully keyboard operable | ? | ? | ? | ? | Y t/u (extensive shortcuts) | N c | Must | |
| P2 | Screen-reader operable tree/grid (ARIA tree/grid) | ? | ? | ? | ? | ? | ? | Must | Yes: unclaimed by all vendors |
| P3 | Customizable keyboard shortcuts | ? | ? | N | N | ? | P v (ribbon only) | Should | |
| P4 | Tool UI conforms to WCAG 2.1 AA (VPAT/ACR) | ? | ? | ? | ? | ? | ? | Must | Publish our own ACR |
| Q. Collaboration & workflow | |||||||||
| Q1 | Multi-user / SME review (e.g., alt text by subject expert) | P (comments) | ? | P v (platform) | N | Y v (system of record) | N | Later | Equidox offers SME collaboration |
| Q2 | Remediation history / audit trail per document | N | ? | P v (30-day expiry) | N | Y v (system of record) | N | Should |
Items needing hands-on verification (licensed trials)
Priority order: the cells most likely to change the Must list come first.
- Grackle PDF. Test whether undo is truly unlimited, how the Table Wizard handles Headers/IDs for complex tables, and how the Parent Tree Wizard works. Check keyboard and screen-reader operability of the web app, performance on a 300+ page document, and whether the wizards promised for desktop only (Space, Link, Unicode) are in the web app.
- CommonLook web (2025). Check parity with the desktop Advanced Editor (Tag Similar, Table Editor linked headers, list generation). Test undo depth, whether it can create fields and links now, and screen reader usability.
- Acrobat Pro (current). Test undo coverage in the Accessibility Tags panel (move, retag, and delete) and the artifact subtype UI (Pagination/Header). Measure the latency of selecting a tag in a 50k-tag document. Check screen-reader operability of the Tags panel and whether any in-editor AI alt text exists.
- axesPDF 2.2.x. Test general undo, what “AI checks” means in practice, keyboard and screen-reader operability, and whether Enclose, Merge, and Split exist for content.
- PAC 2026. Find exactly which Matterhorn human checkpoints the AI tab covers, the PDF/UA-2 status, and the details of the logical structure view.
- Siteimprove agent. Confirm there is no manual tag editor. Measure output quality on our golden corpus (#3856) compared with our pipeline, and find out usage limits and pricing.
- Across all tools, on one shared test set (multi-page table, nested list, repeated header/footer, form, 500-page report):
- measure time to reach a PAC pass
- check whether artifact subtypes are set
- check whether split multi-page tables are merged
- count tag-split and text-split operations
- Equidox / PDFix. Test how faithfully their template transfer (Zone Transfer, JSON templates) survives layout drift between issues of the same recurring document.