Skip to content

Outconceive UIThe Parallel Strings Framework

Build web UIs with flat markup, not nested trees. One line of Markout = one row of your app. No JSX, no virtual DOM trees, no reconciliation complexity.

The Counter App

The iconic framework demo, in one line of Markout:

{button:dec "-" outline}  {label:count}  {button:inc "+" primary}

Compare to React:

jsx
function Counter() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <button onClick={() => setCount(c => c - 1)}>-</button>
      <span>{count}</span>
      <button onClick={() => setCount(c => c + 1)}>+</button>
    </div>
  );
}

Same result. Zero nesting. Zero build step.

Quick Start

bash
npm install outconceive
html
<div id="app"></div>
<script src="outconceive.js"></script>
<script type="module">
  import init, { OutconceiveApp } from './pkg/outconceive.js';
  await init();

  var app = new Outconceive(new OutconceiveApp());
  app.from_markout(`
    @card padding:24
    | Hello, {input:name}!
    | {button:greet "Say Hello" primary}
    | {label:message}
    @end card
  `);
  app.mount('app');

  app.on('greet', (wasmApp) => {
    app.set('message', 'Hello, ' + app.get('name') + '!');
  });
</script>

Released under the MIT License.