Material Motion Exploring solutions that will empower creators with the tools needed to describe and implement rich, interactive motion on any platform. Edit this page · History

January 26-February 01, 2017

Want to contribute? Check out our Android and iOS milestones, many of which are ready for someone to take ownership of. Also check out our newbie-friendly tasks.

This weekly update captures what changed in a given week across the Material Motion ecosystem.

Check out current focus to see what we’re working on next.

Check out stability to learn about the current state of each feature.


View all of our contributors

Android platform

🎉 Formalized Interaction type. Enable constraints via chaining of operators.

🎉 Implemented directly manipulable interactions.

The source:

runtime.addInteraction(new DirectlyManipulable(), target);

You can add a lockToYAxis constraint:

The source:

DirectlyManipulable interaction = new DirectlyManipulable();


runtime.addInteraction(interaction, target);

Apple platforms

📝 Continued improvements to L1/L2 APIs.

🎉 Implemented an interactive “push back” transition example.

The source:

func willBeginTransition(_ transition: Transition, runtime: MotionRuntime) {
  let bounds = transition.containerView().bounds
  runtime.add(spring(back: bounds.height + transition.fore.view.layer.bounds.height / 2,
                     fore: bounds.midY,
                     transition: transition),
              to: runtime.get(transition.fore.view.layer).positionY)

  runtime.add(spring(back: 1, fore: 0.95, transition: transition),
              to: runtime.get(transition.back.view.layer).scale)

🎉 Implemented a contextual photo transition, complete with flick-to-dismiss and the ability to cancel the transition by dragging the photo back to the center of the screen.

🎉 Implemented a sticker editor interaction.

Example code:

runtime.add(DirectlyManipulable(targetView: stickerView), to: stickerView)

Web frameworks

🎉 Tappable Bottom Sheet transition working

Current state

Android platform support

Library Build status Coverage Version Issues
catalog-android passing 0%   0 open
conventions-android       0 open
expression-android       2 open
family-direct-manipulation-android passing 100% v1.2.0 2 open
family-rebound-android passing 100% v1.1.0 3 open
family-tween-android passing 100% v2.1.0 2 open
gestures-android passing 91% v1.0.0 4 open
indefinite-observable-android passing 100% v2.0.0 0 open
runtime-android passing 95% v6.0.1 13 open
streams-android passing 39% v1.0.0 14 open
transitions-android       9 open

Apple platform support

Library Build status Coverage Version Platforms Docs Issues
catalog-swift passing         10 open
conventions-objc           0 open
coreanimation-swift passing 61% v2.0.0 ios   6 open
coreanimation-transitions-swift passing 84% v1.0.0 ios -1% 0 open
direct-manipulation-swift passing 84% v1.1.0 ios   5 open
indefinite-observable-swift passing 100% v3.1.0 ios / osx 54% 0 open
pop-swift passing 42%     21% 6 open
pop-transitions-swift passing 71% v1.0.0 ios   0 open
runtime-objc passing 91% v6.0.1 ios 100% 16 open
streams-swift [-passing-]{+canceled+} [-12%-]{+10%+}       [-2-]{+8+} open
transitions-objc passing 48% v1.1.0 ios 90% 5 open

Web platform support

Library Build status Coverage Version Issues
indefinite-observable-js passing 100% v1.0.1 3 open
material-motion-js passing     41 open
streams-experiment-js       1 open

Misc libraries

Library Build status Coverage Version Issues
apidiff passing 86% v1.0.0 11 open
chrome-inspector       4 open
ci-staging-area       0 open
direct-web       0 open
hubot       0 open
material-motion       37 open
milemarker       18 open
sprints       32 open
starmap       48 open
sublime       4 open
tools       100 open

Learn more

Join us on Discord!