To all who write CSS,

We are bringing your CSS to iOS and Android too.

Dragon turns your CSS into real native apps. No web view.

Every rule is checked against Chrome and clearly marked: exact, caveat or unsupported. Nothing is hidden.

The web is done. The phones are next. Tap any place on the map to see how far we have come.

Signed and sealed,
Dragon CSS

Drag the map sideways to explore. Tap a place.

A frontier village: where your styles are written today ← your CSS sets out here Sea of Devices Parity Ford, the goal of milestone 2, where iOS and Android meet at parity: not reached yet the M2 goal won ← the host marches here

Touch a place to unroll its account.

How it works

Three steps. Your tools do most of it for you.

  1. 1Write CSS

    Plain CSS, the kind you already write. Nothing new to learn.

    .card {  padding: 16px;  border-radius: 12px;}
  2. 2Check every platform

    One check covers all of them. Old or unsupported CSS gives you the file, the line and a fix.

    app.css:4:3: error  clip: rect(0 0 0 0)  deprecated, not supported  fix: Remove the declaration
  3. 3Get native code

    Real native views. No web view, and no CSS read on the phone.

    // iOS, from .cardlayer.cornerRadius = 12// padding: placed by// Dragon's layout engine

The package and its API are below.

What you get from npm install dragon

A small API. Most people never call it: your framework or build tool does.

import {  createProject, formatDiagnostics, querySupport,} from 'dragon'// One project for every platform you ship toconst project = createProject({  projectId: 'my-app',  targets: { web: {}, ios: { minimum: '15.0' } },})// Check: errors name the file, the line and a fixconst report = project.check(input)if (!report.ok) {  const { diagnostics, sources } = report  console.log(formatDiagnostics(diagnostics, sources))}// Compile: native output for each platformconst result = project.compile(input)result.outputs.ios// Ask before you writequerySupport({  kind: 'possibilities',  target: { kind: 'ios', minimum: '15.0' },  css: 'gap: 7px',})
createProject()
Say which platforms you ship to, once.
check()
Checks your CSS for every platform at once. No output, just answers.
compile()
Turns your CSS into native code for each platform.
formatDiagnostics()
Prints errors people can read: file, line, why, and the fix.
querySupport()
Asks if a CSS rule works on a platform: exact, caveat or unsupported.

Targets today: web and iOS. Android is being added now. Early design; the package is not published yet.

Dragon CSS, plainly

Write regular CSS once. Dragon compiles it at build time into native view properties, and proves the result against Chrome, number by number, never by screenshots.

Conquered

Done: milestone 1 (web)

Marching now

Now: milestone 2 (iOS and Android, at parity)

Native engines are generated from the one TypeScript engine, and each device lane is checked against Chrome.

Not yet ridden

Later

Custom properties (for utility CSS such as Tailwind), then 1.0.

Support labels

exact, caveat, unsupported. Nothing is marked supported without a passing test.

Install: npm install dragon (coming soon; not yet published).