A .mp.html file contains screens, state, behavior, theme, and data.
Open it — it runs. Send it — it travels. No server, no account, no build step.
Most app formats are deployment artifacts — they depend on a server, a runtime,
an account, a build pipeline. Mere is different. A .mp.html file is a
complete, self-contained, executable artifact. It declares its own screens, state,
actions, and theme. The runtime is embedded. Nothing is left out.
The name is the philosophy. A mere is a lake — still, bounded, self-contained. Mere means only, just — it's merely a file. That is enough.
Mere extends HTML attributes with four sigil prefixes. They describe every possible relationship between an element and the workbook's state.
One-way binding. Reads state into the element. On a list container, iterates the array — one child per item.
Bidirectional sync between an input element and a state value.
Invokes a named action on click. Arguments follow after with.
Annotation for AI composers. Describes what an element should become.
Everything in one file. Screens, state, actions, theme — nothing implicit.
<!-- tasks.mp.html — a complete Mere workbook -->
<workbook theme="proton-mail">
<state>
<value name="tasks" type="list" value="[]" />
<value name="new-task" type="text" value="" />
</state>
<computed>
<value name="task-count" from="tasks" op="count" />
</computed>
<actions>
<action name="add-task">
add-to tasks title @new-task
clear new-task
</action>
</actions>
<screen name="home">
<header>
<heading>Tasks</heading>
<badge @task-count></badge>
</header>
<field ~new-task placeholder="New task…"></field>
<button !add-task>Add</button>
<card-list @tasks>
<card><heading @item.title></heading></card>
</card-list>
</screen>
</workbook>
Install the CLI, write your first workbook, open it in a browser. No framework, no server, no ceremony.