Mews Profile (Draft 0.1)

1. Status and introduction

Mews Profile is the format behind the Mews project at mews.page. It is a small-web format built from a strict subset of XHTML Mobile Profile 1.2, a shared default stylesheet, and simple subscription conventions. Mews pages are ordinary web pages: they open in any browser and on WAP 2.0 phones, and dedicated clients can render them with their own presentation.

This specification is published under Creative Commons Attribution-ShareAlike 4.0 International. The software published with it, including the validator and the default stylesheet, is published under Apache License 2.0; the stylesheet is deliberately not share-alike, because section 5.2 asks every site to host its own copy of it.

This is a working draft (0.1). The name keeps the "MP" of XHTML-MP, turning Mobile Profile into Mews Profile. Each version is published at mews.page/spec/<version> (this one at mews.page/spec/0.1), and mews.page/spec/ always points to the latest. Everything here is open to change.

Core principle

Authors provide structure. Readers control presentation.

Every rule in this spec follows from that principle. Scripts and author styling are excluded because they take control from the reader. The default stylesheet exists so readers without a dedicated client still get good presentation. The conformance marker exists so clients know when they may apply their own presentation.

Goals

2. Conventions and terminology

The key words MUST, MUST NOT, SHOULD, SHOULD NOT and MAY are to be interpreted as described in RFC 2119.

TermMeaning
Mews pageAn XHTML-MP 1.2 document that follows every MUST rule in this spec and carries the conformance marker.
Mews siteA set of Mews pages under one registered domain.
AuthorWhoever writes or publishes Mews pages.
ClientAny software that displays Mews pages: a dedicated Mews client, an ordinary browser, or a WAP phone.
Mews clientA client that recognizes the conformance marker and applies its own presentation.
Default stylesheetThe shared CSS file published with this spec (section 5).
EntryA dated link that a client can treat as a post (section 6).

3. Document format

A Mews page MUST be a well-formed, valid XHTML-MP 1.2 document that also follows the restrictions in section 4, with one exception: it MAY carry the lang and dir attributes, which XHTML-MP lacks. Browsers need lang to know a page's language when it is served as text/html, and dir to show right-to-left text; old WAP browsers ignore both. Apart from these two attributes, the rules only remove or restrict features, so every Mews page is otherwise valid XHTML-MP.

3.1 Prologue and doctype

A Mews page MUST begin with an XML declaration specifying UTF-8, followed by the XHTML-MP 1.2 doctype:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
  "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">

The root element MUST be <html xmlns="http://www.w3.org/1999/xhtml"> and SHOULD carry xml:lang and lang attributes with the same value, naming the page language, plus dir="rtl" for right-to-left languages such as Hebrew and Arabic.

3.2 Conformance marker

A Mews page MUST include this element in its <head>:

<meta name="mews-profile" content="0.1" />

The content value is the spec version the page follows. A Mews client MUST NOT apply Mews presentation to a page without the marker; such a page is ordinary XHTML-MP.

3.3 Head

The <head> MUST contain a <title> and the conformance marker (3.2). It MAY contain <meta name="description">, <meta name="author">, <meta name="viewport" content="width=device-width" />, <link rel="icon"> pointing to the same site, the stylesheet link (section 5) and feed links (section 6). Nothing else is permitted in the head. Pages SHOULD include the viewport tag, so modern phones show them at readable size.

4. Elements and attributes

Mews Profile keeps the structural parts of XHTML-MP 1.2 and removes everything that controls appearance or behavior. Anything not listed in 4.1 is excluded, notably script, event attributes such as onclick, the style element and attribute, object, meta refresh, and big and small.

4.1 Permitted elements and attributes

GroupElements
Structurehtml, head, title, body
Headingsh1–h6
Text blocksp, blockquote, pre, address, hr
Inline textem, strong, b, i, code, kbd, samp, var, q, cite, abbr, dfn, br
Linksa
Listsul, ol, li, dl, dt, dd
Tablestable, caption, tr, th, td
Imagesimg
Formsform, fieldset, label, input, select, option, optgroup, textarea
Headmeta, link (as limited in 3.3)

Only the attributes below are permitted; any other attribute MUST NOT appear. id, title, xml:lang, lang and dir are permitted on every element in the body; lang and dir are the Mews extensions described in section 3. class is permitted only on body (section 5.3).

ElementAttributes
htmlxmlns, xml:lang, lang, dir
metaname, content
linkrel, href, type, title
ahref, hreflang, rel, type, accesskey
imgsrc, alt
blockquote, qcite
olstart
livalue
tablesummary
th, tdrowspan, colspan, scope
formaction, method, enctype
inputtype (text, password, checkbox, radio, submit, reset, hidden), name, value, checked, size, maxlength, accesskey, inputmode
selectname, multiple, size
optionvalue, selected
optgrouplabel
textareaname, rows, cols, accesskey, inputmode
labelfor, accesskey

4.2 Rules for kept features

4.3 Size

The page markup SHOULD be under 64 KB and MUST be under 256 KB. The page plus all its images SHOULD be under 320 KB.

5. Presentation

Authors MUST NOT style their pages. The only stylesheet a Mews page may reference is the default stylesheet, which gives ordinary browsers and phones good presentation. Mews clients ignore it and use their own.

5.1 The default stylesheet

The project publishes a versioned default stylesheet. Below is the complete version 0.1, mews-0.1.css; sites copy it unchanged (5.2). Its base rules MUST be valid WAP CSS so handsets can use it; line-height, max-width and the dark-mode block are enhancements that older parsers skip. Every text and link color meets 7:1 contrast against its background.

/* Mews Profile default stylesheet 0.1 */

/* Base: light theme */
body {
  background-color: #faf8f3;
  color: #1f1f1f;
  font-family: "Atkinson Hyperlegible", Verdana, Tahoma, system-ui, sans-serif;
  font-size: 106%;
  line-height: 1.5;
  margin: 0 auto;
  padding: 1em;
  max-width: 40em;
}

h1, h2, h3, h4, h5, h6 {
  font-weight: bold;
  line-height: 1.25;
  margin: 1.6em 0 0.5em 0;
}
h1 { font-size: 1.6em; margin-top: 0.5em; }
h2 { font-size: 1.3em; }
h3 { font-size: 1.1em; }
h4, h5, h6 { font-size: 1em; }

p, ul, ol, dl, blockquote, pre, table, address {
  margin: 0 0 1em 0;
}
ul, ol { padding-left: 1.5em; }
li { margin-bottom: 0.25em; }
dt { font-weight: bold; }
dd { margin: 0 0 0.5em 1.5em; }

a { color: #1a4f9c; text-decoration: underline; }
a:visited { color: #5b2a86; }
a:focus, a:active { outline: 2px solid #1a4f9c; }

blockquote {
  margin-left: 0;
  padding-left: 1em;
  border-left: 3px solid #c9c4b8;
}

pre, code, kbd, samp {
  font-family: "Source Code Pro", Consolas, Menlo, "DejaVu Sans Mono", monospace;
  font-size: 0.9em;
}
pre {
  background-color: #efece4;
  padding: 0.75em;
  overflow: auto;
}

hr {
  border: 0;
  border-top: 1px solid #c9c4b8;
  margin: 2em 0;
}

table { border-collapse: collapse; }
th, td {
  border: 1px solid #c9c4b8;
  padding: 0.3em 0.6em;
  text-align: left;
  vertical-align: top;
}
caption { font-weight: bold; text-align: left; }

img {
  display: block;
  max-width: 100%;
  height: auto;
  border: 0;
}

input, select, textarea { font-size: 1em; font-family: inherit; }

/* Body variants: light */
body.mews-warm { background-color: #fbf4e8; color: #2a2420; }
body.mews-warm a { color: #8a3d14; }
body.mews-cool { background-color: #f3f6fa; color: #1c2430; }
body.mews-cool a { color: #1a4f9c; }
body.mews-green { background-color: #f2f6ef; color: #1f2a1f; }
body.mews-green a { color: #24502a; }
body.mews-mono { background-color: #e8ebe1; color: #1e2219; }
body.mews-mono a { color: #1e2219; }

/* Dark theme: follows the system setting */
@media (prefers-color-scheme: dark) {
  body { background-color: #18191b; color: #e3e1dc; }
  a { color: #8fb8f5; }
  a:visited { color: #c9a3f2; }
  a:focus, a:active { outline-color: #8fb8f5; }
  blockquote, hr, th, td { border-color: #45464a; }
  pre { background-color: #222326; }

  body.mews-warm { background-color: #1d1916; color: #e8dfd3; }
  body.mews-warm a { color: #f0b48a; }
  body.mews-cool { background-color: #161a20; color: #dde4ee; }
  body.mews-cool a { color: #8fb8f5; }
  body.mews-green { background-color: #161b16; color: #dbe6d8; }
  body.mews-green a { color: #9fd39a; }
  body.mews-mono { background-color: #1b1d18; color: #c8d0b8; }
  body.mews-mono a { color: #c8d0b8; }
}

html { color-scheme: light dark; }

5.2 Linking it

A Mews page SHOULD link the default stylesheet with exactly one element:

<link rel="stylesheet" type="text/css" href="mews-0.1.css" />

Sites SHOULD host their own copy rather than linking a central URL, so no single server sees traffic across all sites. A copy on another site is also a resource from another site, which section 7.4 forbids; the project's own copy at mews.page/mews-0.1.css is the one exception a validator tolerates, and it warns about it. Authors MUST NOT modify their copy, except to add @font-face rules that load font files from their own site; any other change makes the page non-conforming.

5.3 Body variants

To let sites look distinct without author styling, body MAY carry one class from this list. The default stylesheet and Mews clients choose how each variant looks.

ClassIntent
mews-warmWarm palette
mews-coolCool palette
mews-greenGreen palette
mews-monoMonochrome, like an early phone screen

Mews clients MAY ignore variants and instead derive colors from the hostname.

6. Subscriptions

Any Mews page can be subscribed to through dated links. Sites MAY also offer an Atom feed for ordinary feed readers.

6.1 Dated links

A link is an entry when it starts a list item (li) and its text begins with a date in YYYY-MM-DD format, followed by a space and a title:

<ul>
  <li><a href="2026-10-08-retro-phones.html">2026-10-08 Collecting retro phones</a></li>
  <li><a href="2026-09-21-first-post.html">2026-09-21 First post</a></li>
</ul>

Rules:

6.2 Atom feeds

A site MAY publish an Atom feed and link it from the head:

<link rel="alternate" type="application/atom+xml" href="feed.xml" title="Posts" />

The feed SHOULD contain the same entries as the dated-links page. Entry content in the feed, if any, SHOULD itself follow section 4.

7. Transport and serving

Mews pages are served over ordinary HTTP. No special server software is needed.

7.1 MIME type

Servers SHOULD send Mews pages as text/html, so browsers still display a page that has a small markup error. Servers MAY send application/xhtml+xml, or application/vnd.wap.xhtml+xml, to clients whose Accept header prefers it. Mews clients parse pages as XML whatever the MIME type.

7.2 HTTPS and HTTP

Sites SHOULD serve over HTTPS. Because WAP 2.0 handsets cannot negotiate modern TLS, sites MAY also serve the same pages over plain HTTP. A site serving both MUST NOT redirect HTTP requests to HTTPS for clients that cannot follow it; a common approach is to redirect only when the User-Agent is a modern browser.

7.3 Caching

Servers SHOULD send Last-Modified or ETag headers so clients and aggregators can check for changes cheaply.

7.4 No tracking

Mews pages MUST NOT load resources from other sites. Servers MUST NOT set cookies on requests for Mews pages, except as part of a form the reader submits.

8. Clients

Any browser can read a Mews page. This section applies to Mews clients, which present pages their own way.

8.1 Requirements

A Mews client:

8.2 Recommendations

A Mews client SHOULD:

8.3 Freedom

Clients MAY present pages in any way that keeps their structure intact, including reflowing tables on narrow screens, or hiding images until requested.

9. Validation, directory and versioning

9.1 Validation

A page conforms when it passes two checks:

  1. The Mews DTD. The XHTML-MP 1.2 DTD, restricted as in section 4 and extended with lang and dir, published with each spec version at mews.page/dtd/mews-<version>.dtd (this one at mews.page/dtd/mews-0.1.dtd). It encodes the permitted elements and attributes (4.1), the head rules (3.3), the body variant values (5.3) and the ban on nested tables (4.2).
  2. Rule checks. The rules a DTD cannot express: image sources, formats and sizes (4.2), page size (4.3), the default stylesheet link and its unmodified copy (5.2), and no resources from other sites (7.4).

Apart from lang and dir, every page that passes the Mews DTD is also valid XHTML-MP 1.2. Pages keep the XHTML-MP doctype from 3.1; the Mews DTD is used only by validators. The project publishes a validator that runs both checks and reports each failure with its section number, at mews.page/check and as a command line tool.

The project also hosts a copy of the original XHTML-MP 1.2 DTD at mews.page/dtd/xhtml-mobile12.dtd, so validation never depends on the Open Mobile Alliance's server. Browsers and clients MUST NOT fetch either DTD.

9.2 Directory

The Mews directory at mews.page/directory lists only sites whose pages pass validation. Anyone may submit a page address: the page is fetched and checked, and a page that passes lists its site at once. Nobody reviews submissions, and the directory holds no contact details.

Listed sites are rechecked periodically. A site whose page stops conforming is removed; submitting the page again once it is fixed lists the site again straight away. A site the checker simply cannot reach is retried for a few days before it is removed, because downtime is not a conformance failure. The checks say nothing about what a site publishes, so the project also removes a listing on request.

9.3 Versioning

The spec version uses MAJOR.MINOR. A minor version may only relax rules or add recommendations, so pages valid under an earlier minor version remain valid. A major version may tighten rules. Clients SHOULD accept any version with a major number they support.

Appendix A. Example Mews page

A complete conforming page with a posts list and a feed link:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
  "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Signal Bars</title>
    <meta name="mews-profile" content="0.1" />
    <meta name="viewport" content="width=device-width" />
    <meta name="description" content="Notes on old phones and small screens." />
    <link rel="stylesheet" type="text/css" href="mews-0.1.css" />
    <link rel="alternate" type="application/atom+xml" href="feed.xml" title="Posts" />
  </head>
  <body class="mews-green">
    <h1>Signal Bars</h1>
    <p>Notes on old phones, small screens and <em>slow</em> software.</p>

    <h2>Posts</h2>
    <ul>
      <li><a href="2026-10-08-retro-phones.html" accesskey="1">2026-10-08 Collecting retro phones</a></li>
      <li><a href="2026-09-21-first-post.html" accesskey="2">2026-09-21 First post</a></li>
    </ul>

    <hr />
    <p><a href="about.html" accesskey="0">About this site</a></p>
  </body>
</html>