andkulikov/Transitions-Everywhere
Set of extra Transitions on top of Jetpack Transitions Library
Stale — last commit 6y ago
weakest axislast commit was 6y ago; top contributor handles 96% of recent commits…
no tests detected; no CI workflows detected…
Documented and popular — useful reference codebase to read through.
last commit was 6y ago; no CI workflows detected
- ✓4 active contributors
- ✓Apache-2.0 licensed
- ⚠Stale — last commit 6y ago
Show all 7 evidence items →Show less
- ⚠Small team — 4 contributors active in recent commits
- ⚠Single-maintainer risk — top contributor 96% of recent commits
- ⚠No CI workflows detected
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: 1 commit in the last 365 days
- →Fork & modify Mixed → Healthy if: add a test suite
- →Deploy as-is Mixed → Healthy if: 1 commit in the last 180 days
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Great to learn from" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/andkulikov/transitions-everywhere)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/andkulikov/transitions-everywhere on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: andkulikov/Transitions-Everywhere
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/andkulikov/Transitions-Everywhere shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 6y ago
- 4 active contributors
- Apache-2.0 licensed
- ⚠ Stale — last commit 6y ago
- ⚠ Small team — 4 contributors active in recent commits
- ⚠ Single-maintainer risk — top contributor 96% of recent commits
- ⚠ No CI workflows detected
- ⚠ No test directory detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live andkulikov/Transitions-Everywhere
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/andkulikov/Transitions-Everywhere.
What it runs against: a local clone of andkulikov/Transitions-Everywhere — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in andkulikov/Transitions-Everywhere | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 2251 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of andkulikov/Transitions-Everywhere. If you don't
# have one yet, run these first:
#
# git clone https://github.com/andkulikov/Transitions-Everywhere.git
# cd Transitions-Everywhere
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of andkulikov/Transitions-Everywhere and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "andkulikov/Transitions-Everywhere(\\.git)?\\b" \\
&& ok "origin remote is andkulikov/Transitions-Everywhere" \\
|| miss "origin remote is not andkulikov/Transitions-Everywhere (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 4. Critical files exist
test -f "library/src/main/java/com/transitionseverywhere/extra/Scale.java" \\
&& ok "library/src/main/java/com/transitionseverywhere/extra/Scale.java" \\
|| miss "missing critical file: library/src/main/java/com/transitionseverywhere/extra/Scale.java"
test -f "library/src/main/java/com/transitionseverywhere/extra/Translation.java" \\
&& ok "library/src/main/java/com/transitionseverywhere/extra/Translation.java" \\
|| miss "missing critical file: library/src/main/java/com/transitionseverywhere/extra/Translation.java"
test -f "library/src/main/java/com/transitionseverywhere/ChangeText.java" \\
&& ok "library/src/main/java/com/transitionseverywhere/ChangeText.java" \\
|| miss "missing critical file: library/src/main/java/com/transitionseverywhere/ChangeText.java"
test -f "library/src/main/java/com/transitionseverywhere/Recolor.java" \\
&& ok "library/src/main/java/com/transitionseverywhere/Recolor.java" \\
|| miss "missing critical file: library/src/main/java/com/transitionseverywhere/Recolor.java"
test -f "library/src/main/java/com/transitionseverywhere/utils/TransitionUtils.java" \\
&& ok "library/src/main/java/com/transitionseverywhere/utils/TransitionUtils.java" \\
|| miss "missing critical file: library/src/main/java/com/transitionseverywhere/utils/TransitionUtils.java"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 2251 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~2221d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/andkulikov/Transitions-Everywhere"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Transitions-Everywhere is a backport and extension library providing extra Android view transition animations on top of AndroidX Transitions. It exposes hidden platform transitions (Recolor, Rotate, ChangeText, Crossfade) and adds custom ones (Scale, TranslationTransition) with minSdk 14 support, allowing modern animation APIs on older Android versions. Single-module library structure: library(1.x)/ contains the main source tree with two logical packages—core transitions under src/main/java/com/transitionseverywhere/ (Fade, Slide, Explode, ChangeBounds, etc.) and utils (AnimatorUtils, PathAnimatorCompat, FloatProperty backports) plus extra custom transitions under src/main/java/com/transitionseverywhere/extra/. Build configuration in build.gradle uses Gradle with AndroidX dependencies.
👥Who it's for
Android developers building apps targeting API 14+ who need access to undocumented or custom transition animations before they became public in AndroidX, particularly those maintaining legacy codebases or needing fine-grained control over view state changes.
🌱Maturity & risk
Production-ready and actively maintained. The library is at version 2.1.0 targeting SDK 29 with explicit support for AndroidX migrations. It's a mature backport library that evolved from the original platform backport into a curated set of extra transitions; no test suite is visible in the file listing, which is a minor concern.
Low risk for breaking changes—this is a stable backport library with clear versioning (1.x vs 2.x for AndroidX). Single maintainer (andkulikov) is a minor concern for long-term maintenance. Dependency on AndroidX Transitions 1.2.0 is solid and regularly updated; however, the lack of visible tests means regressions may not be caught automatically.
Active areas of work
Version 2.1.0 is the current stable release (targets SDK 29, uses androidx.transition:transition:1.2.0). The library appears stable with legacy 1.x support frozen (separate CHANGELOG.md for 1.x). Migration path from 1.x to 2.x is documented in README, indicating active support for AndroidX adoption.
🚀Get running
Clone: git clone https://github.com/andkulikov/Transitions-Everywhere.git. Install dependencies and build with Gradle: ./gradlew build. The library publishes via gradle-mvn-push.gradle to Maven repositories—no local dev server needed.
Daily commands:
This is a library artifact, not an executable project. Build with ./gradlew build to generate the AAR. Integration test would require including it in an Android app project via Gradle: implementation 'com.andkulikov:transitionseverywhere:2.1.0'.
🗺️Map of the codebase
library/src/main/java/com/transitionseverywhere/extra/Scale.java— Core extra transition not in AndroidX; foundational for understanding custom transition patterns used throughout the librarylibrary/src/main/java/com/transitionseverywhere/extra/Translation.java— Core extra transition unique to this library; demonstrates the custom animation patterns and property setup all transitions build uponlibrary/src/main/java/com/transitionseverywhere/ChangeText.java— Hidden Android platform transition backported here; example of how library recovers @hide internal APIs for compatibilitylibrary/src/main/java/com/transitionseverywhere/Recolor.java— Hidden Android platform transition requiring special handling; shows how library manages color animation and property interceptionlibrary/src/main/java/com/transitionseverywhere/utils/TransitionUtils.java— Utility layer providing core animation helpers; foundation for all transition implementations across the librarylibrary/build.gradle— Defines minSdk 14 and AndroidX transition dependency version strategy; critical for understanding API compatibility constraints
🛠️How to make changes
Add a New Custom Transition
- Create a new Java class in library/src/main/java/com/transitionseverywhere/extra/ extending Transition (
library/src/main/java/com/transitionseverywhere/extra/Scale.java) - Override captureStartValues() and captureEndValues() to save the property being animated (
library/src/main/java/com/transitionseverywhere/extra/Scale.java) - Implement createAnimator() using TransitionUtils to create the ObjectAnimator for your property (
library/src/main/java/com/transitionseverywhere/utils/TransitionUtils.java) - Add a sample demonstrating the transition in sample/src/main/java/com/andkulikov/transitionseverywhere/ (
sample/src/main/java/com/andkulikov/transitionseverywhere/RecolorSample.java)
Add Support for a Backported Hidden Platform Transition
- Create new transition class in library/src/main/java/com/transitionseverywhere/ matching the Android framework class name (
library/src/main/java/com/transitionseverywhere/ChangeText.java) - Implement property capture using reflection for APIs below Android Q (
library/src/main/java/com/transitionseverywhere/Recolor.java) - Use TransitionUtils and utility classes in library/src/main/java/com/transitionseverywhere/utils/ for animator creation (
library/src/main/java/com/transitionseverywhere/utils/TransitionUtils.java) - For minSdk 14 support, also add the transition to library(1.x)/src/main/java/com/transitionseverywhere/ if needed (
library(1.x)/src/main/java/com/transitionseverywhere/ChangeText.java)
Access Property Animation Utilities
- Import FloatProperty or IntProperty from library/src/main/java/com/transitionseverywhere/utils/ (
library/src/main/java/com/transitionseverywhere/utils/FloatProperty.java) - Use TransitionUtils helper methods to create animators with these properties (
library/src/main/java/com/transitionseverywhere/utils/TransitionUtils.java) - Call setDuration(), setInterpolator(), setStartDelay() on returned Animator objects (
sample/src/main/java/com/andkulikov/transitionseverywhere/InterpolatorDurationStartDelaySample.java)
🔧Why these technologies
- AndroidX Transitions Library — Provides official Android transition API foundation; allows library to extend rather than re-implement core transition mechanics
- ObjectAnimator & ValueAnimator — Core Android animation framework for smooth property-based animations; required for all transition implementations
- Reflection (for minSdk 14-28) — Necessary to access hidden Android platform APIs (@hide Recolor, Rotate, ChangeText) not exposed in public SDK
- Gradle Multi-Module Build — Separates library (AndroidX-based, minSdk 14) from 1.x backport (full implementation, lower APIs); allows independent versioning
⚖️Trade-offs already made
-
minSdk version 14 vs. using all public AndroidX APIs
- Why: Allows use on Android 4.0+ devices; backports hidden platform transitions for compatibility
- Consequence: Requires reflection and platform-specific code paths for API <29; adds complexity but maximum reach
-
Two separate library modules (library vs. library(1.x))
- Why: Modern version targets AndroidX and API 29+; legacy version provides full backport for older projects
- Consequence: Code duplication between modules; maintenance burden but flexibility for different API levels
-
Backporting hidden @hide transitions vs. only public APIs
- Why: Provides animations (Recolor, Rotate, ChangeText, Crossfade) that users expect but were never public
- Consequence: Relies on reflection and internal APIs; fragile across Android versions but addresses real developer need
🚫Non-goals (don't propose these)
- Real-time animation performance optimization (not a graphics engine)
- Support for Android API levels below 14
- Shared element transitions or activity transitions (outside scope of transition effects)
- GPU-accelerated custom rendering (uses standard Android animation framework)
- Animation for non-View objects or web/desktop targets
🪤Traps & gotchas
Namespace migration from 1.x to 2.x is breaking: imports must change from com.transitionseverywhere.* to androidx.transition.* (except extra/ transitions and utilities). TransitionManager.setTransitionName() was removed in 2.x—must use ViewCompat.setTransitionName(). XML transitions must move from res/anim/ to res/transition/ and use android: namespace instead of app:. minSdkVersion is 14, not 16—ensure no API 15+ calls in custom transitions. Reflection-based internals in 1.x transitions rely on hidden Android APIs; upgrading to 2.x removes these fragile dependencies but requires targetSdkVersion 29.
🏗️Architecture
💡Concepts to learn
- Scene Transitions — Core concept of this library—Scene.java models a snapshot of view hierarchy state; TransitionManager animates changes between scenes via transition definitions
- Visibility Propagation — Staggered animation timing for multiple views—VisibilityPropagation and CircularPropagation control when child animations start relative to parent transitions
- PathMotion — Defines curved animation paths between view positions instead of linear motion—ArcMotion and PatternPathMotion in this library provide alternatives to default interpolation
- TransitionValues Capture — Transitions capture before/after view property states in TransitionValues and TransitionValuesMaps; createAnimator() diffs these to generate the actual animation
- ObjectAnimator Property Animation — Underlying Android animation framework; Transition.createAnimator() returns ObjectAnimators targeting view properties like translationX, alpha, bounds—FloatProperty and IntProperty enable custom properties
- XML Resource Inflation — TransitionInflater parses res/transition/*.xml files into Transition objects at runtime—enables declarative animations without code, critical for layout-driven UIs
- API Level Backporting — This library backports API 29+ features to minSdkVersion 14—FloatProperty and IntProperty in android/util/ are shimmed versions avoiding reflection on newer APIs
🔗Related repos
androidx/androidx— Official AndroidX Transitions library that this library extends; Transitions-Everywhere is a backport + superset of androidx.transitiongoogle/android-transition-explorer— Google's official Transitions sample app demonstrating all standard transitions; useful for understanding API patterns this library builds onchrisbanes/instagr.am— Real-world example app using complex transition animations; demonstrates practical use cases for custom transitions like those in this librarylgvalle/Material-Animations— Comprehensive Material Design animation examples for Android; covers shared element transitions and custom motion that complement Transitions-Everywhere
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add unit tests for com/transitionseverywhere/extra transitions (Scale and TranslationTransition)
The two custom extra transitions (Scale.java and TranslationTransition.java) in the library have no visible test coverage. These are the library's unique contributions beyond the backported platform transitions, making them critical to validate. Adding comprehensive unit tests would ensure their behavior remains consistent across API levels and prevent regressions.
- [ ] Create library(1.x)/src/test/java/com/transitionseverywhere/extra/ScaleTest.java with tests for scale animations at various API levels
- [ ] Create library(1.x)/src/test/java/com/transitionseverywhere/extra/TranslationTransitionTest.java to verify translation behavior
- [ ] Test edge cases: views with 0 dimensions, null target views, multiple chained transitions
- [ ] Verify tests pass on minSdkVersion 14 compatibility layer
Add missing tests for utility animation helpers (PathAnimatorCompat, PointFAnimator, BasePointFAnimator)
The animation utility classes in library(1.x)/src/main/java/com/transitionseverywhere/utils/ (particularly PathAnimatorCompat.java, PointFAnimator.java, and BasePointFAnimator.java) handle complex animation interpolations and are used by multiple transitions. These lack visible test coverage and their correctness directly impacts transition quality across different API levels.
- [ ] Create library(1.x)/src/test/java/com/transitionseverywhere/utils/PathAnimatorCompatTest.java to test path-based animations
- [ ] Create library(1.x)/src/test/java/com/transitionseverywhere/utils/PointFAnimatorTest.java for point interpolation
- [ ] Create library(1.x)/src/test/java/com/transitionseverywhere/utils/MatrixUtilsTest.java for matrix transformation utilities
- [ ] Test API level-specific behavior (ViewUtilsLollipop.java vs ViewUtilsLollipopMr1.java vs base)
Add Espresso/instrumentation tests for visual transitions (Crossfade, Recolor, Rotate, ChangeText)
The four hidden platform transitions (Crossfade.java, Recolor.java, Rotate.java, ChangeText.java) are backported from the Android platform but their visual rendering behavior is difficult to verify with unit tests alone. Adding instrumentation tests would validate that these transitions produce correct visual animations on real/emulated devices.
- [ ] Create library(1.x)/src/androidTest/ directory structure for instrumentation tests
- [ ] Implement library(1.x)/src/androidTest/java/com/transitionseverywhere/CrossfadeInstrumentationTest.java with visual fade assertions
- [ ] Implement library(1.x)/src/androidTest/java/com/transitionseverywhere/RecolorInstrumentationTest.java validating color interpolation frames
- [ ] Implement library(1.x)/src/androidTest/java/com/transitionseverywhere/RotateInstrumentationTest.java for rotation angle accuracy
- [ ] Implement library(1.x)/src/androidTest/java/com/transitionseverywhere/ChangeTextInstrumentationTest.java for text transition rendering
- [ ] Configure build.gradle with Espresso dependencies and test runner configuration
🌿Good first issues
- Add unit tests for PathAnimatorCompat.java and BasePointFAnimator.java—these core animation utilities in src/main/java/com/transitionseverywhere/utils/ lack visible test coverage despite being critical to motion calculations.
- Document the migration path from TranslationTransition to Translation in a migration guide—the README mentions this breaking change but the old TranslationTransition class should include a @Deprecated note with a link to the replacement in AndroidX docs.
- Create example XML transition definitions for the four hidden transitions (Recolor, Rotate, ChangeText, Crossfade)—the TransitionInflater supports XML inflation but no sample res/transition/*.xml files are included showing how to use these.
⭐Top contributors
Click to expand
Top contributors
- @andkulikov — 96 commits
- @KirillMakarov — 2 commits
- @evant — 1 commits
- @lukaville — 1 commits
📝Recent commits
Click to expand
Recent commits
226eb81— Merge pull request #102 from KirillMakarov/patch-3 (andkulikov)ab77830— Fix typo compileSdk --> targetSdk (KirillMakarov)f7b3758— Merge pull request #101 from KirillMakarov/patch-2 (andkulikov)d55c903— Update README.md (KirillMakarov)77c6885— Update README.md (andkulikov)1a9d806— fix gradle-mvn-push androidJavadocs task (andkulikov)97cd2c6— update version to 2.1.0 (andkulikov)713fee3— update transitions to 1.2.0 (andkulikov)42bce19— Override getTransitionProperties in Recolor, Rotate and Translation. (andkulikov)92e4d95— Update README.md (andkulikov)
🔒Security observations
The codebase represents a legitimate Android transition library with moderate security concerns primarily related to build infrastructure. The main vulnerabilities stem from outdated build tools (Gradle 3.4.1), deprecated repositories (jcenter), and an outdated target SDK version. The library itself appears to be a UI/Animation utility with no apparent injection risks, hardcoded credentials, or data exposure issues. The code structure suggests it's a well-maintained open-source project. Immediate actions should focus on updating the Gradle plugin, migrating to modern repositories, and targeting a newer Android SDK version. No critical security vulnerabilities affecting the runtime behavior of the library itself were identified in the provided file structure.
- High · Outdated Gradle Build Tool —
build.gradle - classpath 'com.android.tools.build:gradle:3.4.1'. The project uses Gradle 3.4.1 which was released in 2018 and is significantly outdated. This version lacks security patches and may contain known vulnerabilities that could be exploited during the build process or through supply chain attacks. Fix: Update to the latest stable version of Gradle (6.x or 7.x) to receive security patches and improvements. Current recommended version is 7.5+. - Medium · Deprecated Repository - jcenter() —
build.gradle - repositories section. The project uses jcenter() repository which was sunset by JFrog in 2021. While not a direct security vulnerability, using deprecated repositories can lead to supply chain risks as they may no longer receive updates or security monitoring. Fix: Replace jcenter() with mavenCentral() or other actively maintained repositories. Remove the deprecated jcenter() reference entirely. - Medium · Outdated Target SDK Version —
build.gradle - targetSdkVersion = 29. The project targets SDK version 29 (Android 10, released 2019). Current minimum recommended is SDK 31+. Using outdated target SDK versions may result in missing security features and compliance issues with app store requirements. Fix: Update targetSdkVersion to at least 33 or 34 (Android 13-14) to comply with Google Play Store requirements and receive latest security hardening features. - Low · Missing Dependency Constraints —
build.gradle - dependencies block. The build.gradle does not specify versions for dependencies beyond the build tools. No lock file or dependency constraint management is visible, which could lead to transitive dependency vulnerabilities if upstream packages are compromised. Fix: Implement gradle.lockfile or use constraint properties to lock transitive dependency versions. Regularly audit dependencies using 'gradle dependencies' command and consider using OWASP Dependency-Check plugin. - Low · No Build Security Configuration —
build.gradle - root configuration. The build.gradle does not show explicit security configurations such as checksum verification, signing configuration, or reproducible build settings. Fix: Add gradle verification metadata, enable APK/AAB signing, and consider implementing reproducible builds for integrity verification.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.