Formo
Coming Soon
Design. Animate. Interact. Ship.
The vector editor where shapes come alive. Draw with vector networks, write reactive formulas, simulate physics, build components, and export working applications — all in your browser.
What makes it different
Vector Networks
Not just paths — a graph. Connect any vertex to any other vertex. Create shapes impossible with traditional tools. → Learn more
Reactive Formulas
Type Ball.x = mouse.x and the ball follows your cursor. No programming degree required — just expressions that react. → Learn more
Built-In Physics
Add physics to any shape with one click. Dynamic, static, kinematic bodies. Collision events with joints, attractors, and sensors. → Learn more
Formula Keyframes
Animate with keyframes that hold formulas, not just numbers. Per-bone timelines, IK solvers, mock-based blending. → Learn more
Reusable Components
Group shapes into components with typed inputs and outputs. Instances share definitions, not state. Non-visual components for logic. → Learn more
Export Everywhere
Standalone JavaScript. React components. Lottie JSON. CSS @keyframes. PIXI.js and THREE.js targets. Your creation runs without the editor. → Learn more
See it in action
title: "Eyes that follow your cursor"
description: "A character whose eyes track mouse position using two formulas"
nodes:
- type: ELLIPSE, name: "Face", x: 200, y: 200, w: 200, h: 200, fill: "#FFD93D"
- type: ELLIPSE, name: "LeftEye", w: 30, h: 30, fill: "#333", parent: "Face"
- type: ELLIPSE, name: "RightEye", w: 30, h: 30, fill: "#333", parent: "Face"
formulas:
- node: "LeftEye", prop: "x", value: "clamp(mouse.x - Face.x, -20, 20) + 70"
- node: "LeftEye", prop: "y", value: "clamp(mouse.y - Face.y, -20, 20) + 80"
- node: "RightEye", prop: "x", value: "clamp(mouse.x - Face.x, -20, 20) + 130"
- node: "RightEye", prop: "y", value: "clamp(mouse.y - Face.y, -20, 20) + 80"
tools_visible: [select, play]
ui_visible: [properties, formulas]Build Arkanoid in 60 seconds
The real test: can you build a game from scratch in under a minute?
- Draw a paddle — set
x = mouse.x. Done, it follows your cursor. - Draw a ball — add physics, set initial velocity. It bounces.
- Draw bricks — duplicate into a grid, tag them
#brick. - Add collision —
if (event.target.is("brick")) event.target.destroy() - Press Space — it runs.
No other design tool can do this. Figma is static. Rive can't do arbitrary logic. Flash could — and Flash is dead.
title: "Breakout prototype"
description: "Paddle follows mouse, ball bounces, bricks break on collision"
nodes:
- type: RECT, name: "Paddle", x: 200, y: 380, w: 100, h: 15, fill: "#ECF0F1"
- type: ELLIPSE, name: "Ball", x: 200, y: 300, w: 16, h: 16, fill: "#E74C3C"
- type: RECT, name: "Brick1", x: 80, y: 60, w: 55, h: 20, fill: "#3498DB", tags: ["brick"]
- type: RECT, name: "Brick2", x: 150, y: 60, w: 55, h: 20, fill: "#2ECC71", tags: ["brick"]
- type: RECT, name: "Brick3", x: 220, y: 60, w: 55, h: 20, fill: "#F39C12", tags: ["brick"]
- type: RECT, name: "Brick4", x: 290, y: 60, w: 55, h: 20, fill: "#9B59B6", tags: ["brick"]
- type: RECT, name: "WallL", x: 0, y: 200, w: 10, h: 400, fill: "#2C3E50"
- type: RECT, name: "WallR", x: 390, y: 200, w: 10, h: 400, fill: "#2C3E50"
- type: RECT, name: "Ceiling", x: 200, y: 0, w: 400, h: 10, fill: "#2C3E50"
modules:
- node: "Paddle", module: "physics", config: { bodyType: "kinematic" }
- node: "Ball", module: "physics", config: { bodyType: "dynamic", restitution: 1, friction: 0, gravityScale: 0 }
- node: "Brick1", module: "physics", config: { bodyType: "static" }
- node: "Brick2", module: "physics", config: { bodyType: "static" }
- node: "Brick3", module: "physics", config: { bodyType: "static" }
- node: "Brick4", module: "physics", config: { bodyType: "static" }
- node: "WallL", module: "physics", config: { bodyType: "static" }
- node: "WallR", module: "physics", config: { bodyType: "static" }
- node: "Ceiling", module: "physics", config: { bodyType: "static" }
formulas:
- node: "Paddle", prop: "x", value: "mouse.x"
events:
- node: "Ball", event: "collide", code: "if (event.target.is('brick')) event.target.destroy()"
tools_visible: [select, play]
ui_visible: [properties, formulas, layers]Not just a design tool
| Feature | Figma | Rive | Flash | Formo |
|---|---|---|---|---|
| Vector networks | Basic | No | No | Full graph topology |
| Reactive formulas | No | No | ActionScript | Signal graph |
| Physics simulation | No | No | External libs | Box2D built in |
| Interactive events | No | State machine | MovieClip events | Code + visual |
| Animation timeline | No | Yes | Yes | Formula keyframes |
| Components | Static variants | Limited | MovieClip | Typed I/O + non-visual |
| IK / Procedural | No | No | Bone tool | 3 IK solvers |
| Browser-native | Yes | Yes | Plugin (dead) | Yes |
| Export targets | Static assets | .riv runtime | .swf (dead) | JS, React, Lottie, CSS |
The Flash successor
Adobe Animate ends March 2026. Flash animators need a new home.
Formo combines everything Flash did — vector drawing, animation, interactivity, scripting — in a modern browser-native tool. No plugins. No downloads. And where Flash forced you to learn ActionScript, Formo gives you reactive formulas for 80% of cases and TypeScript for the rest.
What Flash got right, we kept:
- Vector editor + timeline + scripting in one tool
- Instant visual feedback for every code change
- Low floor, high ceiling
- Component model (MovieClips → Components with typed I/O)
What we fixed:
| Flash limitation | Formo |
|---|---|
| ActionScript: full language, steep curve | Reactive formulas for most cases |
| Frame-based timeline | Per-property keyframes with easing |
onEnterFrame polling | Reactive dependency graph |
| Opaque .swc components | Components with visible I/O |
| Browser plugin (dead) | Canvas rendering + JS/React export |
| No type safety | TypeScript |
Everything it does
| Category | Features |
|---|---|
| Drawing | Vector networks, multi-paint, gradients, blend modes, brush tool |
| Shapes | 5 parametric types, mirror symmetry, frames, gizmos |
| Formulas | Reactive expressions, signal graph, events, methods, tags |
| Physics | Bodies & colliders, joints, attractors, sensors, collision events |
| Animation | Formula keyframes, per-bone timelines, IK, blending |
| Components | Typed I/O, instances, non-visual, custom editors |
| Editor | 4 modes, timeline, snap, undo, play/stop |
| Export | JS, React, Lottie, CSS, PIXI.js, THREE.js targets |
| Docs | API reference, tutorials, interactive examples |
| About | Why Formo exists, roadmap, pricing |
Join the beta {#beta}
Formo is in active development. We're building the Flash successor — and we want early users who'll push it hard.
What you get:
- Full editor access before public launch
- Direct feedback channel with the development team
- Your name in the credits
- Free Pro tier for life when we launch
Who we're looking for:
- Flash animators looking for a new home
- Creative coders who think in formulas
- Indie devs building interactive web content
- Anyone who's frustrated that design tools can't make things move
No spam. No waitlist games. We read every application.