<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>MotionScript Blog</title>
        <link>https://motionscript.dev/blog</link>
        <description>MotionScript Blog</description>
        <lastBuildDate>Mon, 08 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Motion Script 1.0.0]]></title>
            <link>https://motionscript.dev/blog/motion-script-1-0-0</link>
            <guid>https://motionscript.dev/blog/motion-script-1-0-0</guid>
            <pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Today we're thrilled to announce Motion Script 1.0.0 — the first stable]]></description>
            <content:encoded><![CDATA[<p>Today we're thrilled to announce <strong>Motion Script 1.0.0</strong> — the first stable
release of our open-source motion design tool. Motion graphics with code, right
in your browser.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_FZQ1" id="what-is-motion-script">What is Motion Script?<a href="https://motionscript.dev/blog/motion-script-1-0-0#what-is-motion-script" class="hash-link" aria-label="Direct link to What is Motion Script?" title="Direct link to What is Motion Script?" translate="no">​</a></h2>
<p>Motion Script lets you describe animations as TypeScript/JSX scenes and render
them in real time in the browser. You write declarative scene code; the engine
turns it into frames using a Skia (CanvasKit) rendering backend, and the bundled
player gives you a timeline-based editor to preview, scrub, and export.</p>
<div class="language-tsx codeBlockContainer_D9ov theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_oRCK"><pre tabindex="0" class="prism-code language-tsx codeBlock_jyRc thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_CiKC"><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name" style="color:hsl(29, 54%, 61%)">Scene</span><span class="token imports punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token imports"> createRef</span><span class="token imports punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name" style="color:hsl(29, 54%, 61%)">Rect</span><span class="token imports punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name" style="color:hsl(29, 54%, 61%)">Ellipse</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'@motion-script/core'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">class</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(29, 54%, 61%)">ShapeScene</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(29, 54%, 61%)">Scene</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">  </span><span class="token operator" style="color:hsl(207, 82%, 66%)">*</span><span class="token function" style="color:hsl(207, 82%, 66%)">build</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> lens </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:hsl(207, 82%, 66%)">createRef</span><span class="token generic-function generic class-name operator" style="color:hsl(207, 82%, 66%)">&lt;</span><span class="token generic-function generic class-name" style="color:hsl(29, 54%, 61%)">Ellipse</span><span class="token generic-function generic class-name operator" style="color:hsl(207, 82%, 66%)">&gt;</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">this</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token method function property-access" style="color:hsl(207, 82%, 66%)">add</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(220, 14%, 71%)">&lt;</span><span class="token tag class-name" style="color:hsl(29, 54%, 61%)">Rect</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">width</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript number" style="color:hsl(29, 54%, 61%)">400</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">height</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript number" style="color:hsl(29, 54%, 61%)">400</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">fill</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(220, 14%, 71%)">"</span><span class="token tag attr-value" style="color:hsl(95, 38%, 62%)">white</span><span class="token tag attr-value punctuation" style="color:hsl(220, 14%, 71%)">"</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">borderRadius</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript number" style="color:hsl(29, 54%, 61%)">20</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag punctuation" style="color:hsl(220, 14%, 71%)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(220, 14%, 71%)">&lt;</span><span class="token tag class-name" style="color:hsl(29, 54%, 61%)">Ellipse</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript" style="color:hsl(355, 65%, 65%)">lens</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">x</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript number" style="color:hsl(29, 54%, 61%)">200</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">y</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript number" style="color:hsl(29, 54%, 61%)">200</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">width</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript number" style="color:hsl(29, 54%, 61%)">350</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag attr-name" style="color:hsl(29, 54%, 61%)">height</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(220, 14%, 71%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token tag script language-javascript number" style="color:hsl(29, 54%, 61%)">350</span><span class="token tag script language-javascript punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token tag" style="color:hsl(355, 65%, 65%)"> </span><span class="token tag punctuation" style="color:hsl(220, 14%, 71%)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(220, 14%, 71%)">&lt;/</span><span class="token tag class-name" style="color:hsl(29, 54%, 61%)">Rect</span><span class="token tag punctuation" style="color:hsl(220, 14%, 71%)">&gt;</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)">// Animate: tween the ellipse to x=700 over 3 seconds.</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">yield</span><span class="token operator" style="color:hsl(207, 82%, 66%)">*</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">lens</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token method function property-access" style="color:hsl(207, 82%, 66%)">to</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> x</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">700</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">3</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><br></div></code></pre></div></div>
<p>Animations are driven by generators — <code>yield*</code> a tween and the engine advances
time, interpolating attributes frame by frame.</p>
<h2 class="anchor anchorTargetStickyNavbar_FZQ1" id="whats-in-100">What's in 1.0.0<a href="https://motionscript.dev/blog/motion-script-1-0-0#whats-in-100" class="hash-link" aria-label="Direct link to What's in 1.0.0" title="Direct link to What's in 1.0.0" translate="no">​</a></h2>
<p>This release marks the point where the core API is stable and ready for real
projects:</p>
<ul>
<li class=""><strong>Declarative scenes</strong> — describe animations as TypeScript/JSX and let the
engine render them frame by frame.</li>
<li class=""><strong>Reactive signals</strong> — derive values that update automatically as time and
state change.</li>
<li class=""><strong>Skia/CanvasKit rendering</strong> — a WASM-powered backend for crisp, high-quality
frames, plus a built-in video exporter.</li>
<li class=""><strong>Rich primitives</strong> — flex layout, fills, gradients, filters, SkSL shader
effects, paths, text, and audio are all supported.</li>
<li class=""><strong>Timeline editor</strong> — the bundled player lets you preview, scrub, and export
your animations with hot reload.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_FZQ1" id="getting-started">Getting started<a href="https://motionscript.dev/blog/motion-script-1-0-0#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no">​</a></h2>
<p>Scaffold a new project with the <code>create</code> CLI:</p>
<div class="language-bash codeBlockContainer_D9ov theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_oRCK"><pre tabindex="0" class="prism-code language-bash codeBlock_jyRc thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_CiKC"><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">npm create motion-script@latest</span><br></div></code></pre></div></div>
<p>Then:</p>
<div class="language-bash codeBlockContainer_D9ov theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_oRCK"><pre tabindex="0" class="prism-code language-bash codeBlock_jyRc thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_CiKC"><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">cd my-video</span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">npm install</span><br></div><div class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">npm run dev</span><br></div></code></pre></div></div>
<p>This launches a Vite dev server with the Motion Script player. Edit the scenes
in <code>src/</code>, and the preview updates with hot reload.</p>
<p>For a full walkthrough, see the <a href="https://motionscript.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">Getting Started guide</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_FZQ1" id="thank-you">Thank you<a href="https://motionscript.dev/blog/motion-script-1-0-0#thank-you" class="hash-link" aria-label="Direct link to Thank you" title="Direct link to Thank you" translate="no">​</a></h2>
<p>A huge thank you to everyone who tested early builds, filed issues, and helped
shape the API along the way. This is just the beginning — we can't wait to see
what you create.</p>
<p>Happy animating! 🎬</p>]]></content:encoded>
            <category>Release</category>
            <category>Motion Script</category>
        </item>
        <item>
            <title><![CDATA[Welcome]]></title>
            <link>https://motionscript.dev/blog/welcome</link>
            <guid>https://motionscript.dev/blog/welcome</guid>
            <pubDate>Thu, 26 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Docusaurus blogging features are powered by the blog plugin.]]></description>
            <content:encoded><![CDATA[<p><a href="https://docusaurus.io/docs/blog" target="_blank" rel="noopener noreferrer" class="">Docusaurus blogging features</a> are powered by the <a href="https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog" target="_blank" rel="noopener noreferrer" class="">blog plugin</a>.</p>
<p>Here are a few tips you might find useful.</p>
<!-- -->
<p>Simply add Markdown files (or folders) to the <code>blog</code> directory.</p>
<p>Regular blog authors can be added to <code>authors.yml</code>.</p>
<p>The blog post date can be extracted from filenames, such as:</p>
<ul>
<li class=""><code>2019-05-30-welcome.md</code></li>
<li class=""><code>2019-05-30-welcome/index.md</code></li>
</ul>
<p>A blog post folder can be convenient to co-locate blog post images:</p>
<p><img decoding="async" loading="lazy" alt="Docusaurus Plushie" src="https://motionscript.dev/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_FudZ"></p>
<p>The blog supports tags as well!</p>
<p><strong>And if you don't want a blog</strong>: just delete this directory, and use <code>blog: false</code> in your Docusaurus config.</p>]]></content:encoded>
            <category>Facebook</category>
            <category>Hello</category>
            <category>Docusaurus</category>
        </item>
    </channel>
</rss>