Cuberto/liquid-swipe
Stale — last commit 6y ago
worst of 4 axeslast commit was 6y ago; no tests detected…
no tests detected; no CI workflows detected…
no description (proxy for README missing); last commit was 6y ago
last commit was 6y ago; no CI workflows detected
- ✓4 active contributors
- ✓MIT licensed
- ⚠Stale — last commit 6y ago
Show 4 more →Show less
- ⚠Small team — 4 contributors active in recent commits
- ⚠Concentrated ownership — top contributor handles 56% of recent commits
- ⚠No CI workflows detected
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Mixed → Healthy if: 1 commit in the last 365 days; add a test suite
- →Fork & modify Concerns → Mixed if: add a test suite
- →Learn from Mixed → Healthy if: add a README + repo description
- →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.
Earn the “Healthy” badge
Current signals for Cuberto/liquid-swipe are Mixed. The embed flow is reserved for repos showing Healthy signals — the rest stay informational on this page so we're not putting a public call-out on your README. Address the items in the What would change the summary? dropdown above, then return to grab the embed code.
Common quick wins: green CI on default branch, no Critical CVEs in dependencies, recent commits on the default branch, a permissive license, and a published README.md with a quickstart.
Onboarding doc
Onboarding: Cuberto/liquid-swipe
Generated by RepoPilot · 2026-05-10 · 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/Cuberto/liquid-swipe 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
- MIT licensed
- ⚠ Stale — last commit 6y ago
- ⚠ Small team — 4 contributors active in recent commits
- ⚠ Concentrated ownership — top contributor handles 56% 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 Cuberto/liquid-swipe
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/Cuberto/liquid-swipe.
What it runs against: a local clone of Cuberto/liquid-swipe — 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 Cuberto/liquid-swipe | Confirms the artifact applies here, not a fork |
| 2 | License is still MIT | 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 ≤ 2113 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of Cuberto/liquid-swipe. If you don't
# have one yet, run these first:
#
# git clone https://github.com/Cuberto/liquid-swipe.git
# cd liquid-swipe
#
# 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 Cuberto/liquid-swipe and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "Cuberto/liquid-swipe(\\.git)?\\b" \\
&& ok "origin remote is Cuberto/liquid-swipe" \\
|| miss "origin remote is not Cuberto/liquid-swipe (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
&& ok "license is MIT" \\
|| miss "license drift — was MIT 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 "liquid-swipe/Classes/LiquidSwipeContainerController.swift" \\
&& ok "liquid-swipe/Classes/LiquidSwipeContainerController.swift" \\
|| miss "missing critical file: liquid-swipe/Classes/LiquidSwipeContainerController.swift"
test -f "liquid-swipe/Classes/WaveLayer.swift" \\
&& ok "liquid-swipe/Classes/WaveLayer.swift" \\
|| miss "missing critical file: liquid-swipe/Classes/WaveLayer.swift"
test -f "Example/liquid-swipe/ViewController.swift" \\
&& ok "Example/liquid-swipe/ViewController.swift" \\
|| miss "missing critical file: Example/liquid-swipe/ViewController.swift"
test -f "liquid-swipe/Classes/Bundle.swift" \\
&& ok "liquid-swipe/Classes/Bundle.swift" \\
|| miss "missing critical file: liquid-swipe/Classes/Bundle.swift"
test -f "liquid-swipe.podspec" \\
&& ok "liquid-swipe.podspec" \\
|| miss "missing critical file: liquid-swipe.podspec"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 2113 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~2083d)"
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/Cuberto/liquid-swipe"
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
liquid-swipe is an iOS library that provides a liquid-like swipe transition animation between view controllers, creating a wave effect similar to water flowing across the screen. It's a pure Swift implementation (Swift 4.2+) that wraps content controllers in a LiquidSwipeContainerController and animates page transitions with a fluid, morphing wave effect rather than standard slide or fade transitions. Single-library structure: core animation logic lives in the (unmapped but implied) LiquidSwipe/ or Sources/ directory, with example app in Example/ containing a storyboard-based LiquidSwipeContainerController demonstrator using CocoaPods for dependency management (Podfile present).
👥Who it's for
iOS app developers building engaging onboarding flows, tutorial screens, or paginated content experiences who want polished, eye-catching transition animations without implementing complex custom CADisplayLink or CABasicAnimation logic themselves.
🌱Maturity & risk
Early-stage but stable: the repo has minimal activity (no recent commit dates visible), appears to be a single-release design pattern library from Cuberto (a well-known design agency), with MIT licensing and CocoaPods distribution suggesting production readiness, but lacks visible CI/CD, test suites, or active maintenance indicators.
Low-to-moderate risk: small single-library scope limits dependency fragility, but zero visible test coverage and no recent commits suggest it may be unmaintained; no indication of open issues or PR backlog provided. Primary risk is iOS version compatibility drift and lack of Swift version update past 4.2 as Apple's Swift evolved.
Active areas of work
No active development visible. The repository appears frozen post-launch; no recent PRs, commit history, or issue tracking data provided in the file list suggests this is a published library without ongoing iteration.
🚀Get running
git clone https://github.com/Cuberto/liquid-swipe.git
cd liquid-swipe/Example
pod install
open liquid-swipe.xcworkspace
Then build and run the Example scheme in Xcode.
Daily commands:
Open Example/liquid-swipe.xcworkspace in Xcode (post-pod install), select the liquid-swipe-Example scheme, and run on iOS 9.3+ simulator or device.
🗺️Map of the codebase
liquid-swipe/Classes/LiquidSwipeContainerController.swift— Core view controller that manages the liquid swipe transition animation and datasource—essential entry point for understanding the library's public APIliquid-swipe/Classes/WaveLayer.swift— CALayer subclass that renders the animated wave effect using Core Graphics—the visual heart of the liquid swipe animationExample/liquid-swipe/ViewController.swift— Demonstrates real-world usage of LiquidSwipeContainerController with datasource implementation—shows how to integrate the libraryliquid-swipe/Classes/Bundle.swift— Provides access to bundled assets like button images—necessary for the library to load UI resourcesliquid-swipe.podspec— CocoaPods specification defining the library's metadata, dependencies, and deployment target—critical for distribution
🧩Components & responsibilities
- LiquidSwipeContainerController (UIViewController, CABasicAnimation, datasource protocol) — Manages page navigation, datasource delegation, and orchestrates the animation lifecycle. Acts as UIViewController container for transitions.
- Failure mode: If datasource returns nil or invalid controller, animation plays but transition fails silently
- WaveLayer (CALayer, CGPath, CGContext, UIBezierPath) — Renders the animated wave shape using Core Graphics. Calculates wave path based on animation progress parameter.
- Failure mode: If draw() is not called frequently enough, animation appears choppy or stalls
- Bundle Resource Loader (Bundle, UIImage) — Provides access to bundled image assets (navigation buttons). Handles bundle discovery for pod-based installations.
- Failure mode: If bundle path is incorrect, button images fail to load and UI appears broken
- Datasource Protocol (Swift protocol, UIViewController) — Contract for providing pages and metadata to the container controller. Implemented by client code.
- Failure mode: If client does not implement required methods, compiler error prevents app launch
🔀Data flow
User Action (tap next button)→LiquidSwipeContainerController— Triggers presentNextViewController() methodLiquidSwipeContainerController→Datasource— Queries numberOfPages and viewControllerAtIndex to retrieve next pageLiquidSwipeContainerController→WaveLayer— Creates CABasicAnimation targeting wave layer with progress keyCADisplayLink→WaveLayer.draw()— Invokes rendering on each frame; progress parameter updates wave shapeWaveLayer→Screen— Core Graphics renders animated wave path to view hierarchyAnimation Completion→UIViewController Transition— On progress == 1.0, old view controller removed and new one presented
🛠️How to make changes
Customize the Wave Animation Color & Duration
- Open WaveLayer.swift and locate the draw(_:) method where the wave is rendered with Core Graphics (
liquid-swipe/Classes/WaveLayer.swift) - Modify the fill color and stroke color CGColor properties to change the wave appearance (
liquid-swipe/Classes/WaveLayer.swift) - In LiquidSwipeContainerController, adjust the CABasicAnimation duration and timing properties on the wave layer (
liquid-swipe/Classes/LiquidSwipeContainerController.swift)
Implement a Custom Datasource for New Pages
- Create a new view controller or view that will be presented by the liquid swipe transition (
Example/liquid-swipe/ViewController.swift) - Implement the LiquidSwipeContainerController datasource protocol methods (e.g., numberOfPages, viewControllerAtIndex) (
liquid-swipe/Classes/LiquidSwipeContainerController.swift) - Configure and assign your datasource to the LiquidSwipeContainerController instance before presentation (
Example/liquid-swipe/ViewController.swift)
Add Custom Navigation Buttons or UI Elements
- Replace or supplement the default button assets in liquid-swipe/Assets/ with custom button images (
liquid-swipe/Assets/btnNext.png) - Update Bundle.swift to load your custom assets via Bundle(for:) if using a custom bundle (
liquid-swipe/Classes/Bundle.swift) - In LiquidSwipeContainerController, configure button appearance and tap handlers in the setup methods (
liquid-swipe/Classes/LiquidSwipeContainerController.swift)
🔧Why these technologies
- Core Animation (CABasicAnimation, CADisplayLink) — Provides smooth GPU-accelerated animations at 60fps with precise timing control for the wave effect
- Core Graphics (CGPath, CGContext) — Enables custom vector drawing of the wave shape with mathematical precision and performance
- UIViewController Transitions API — Standard iOS framework for managing interactive view controller presentations with animations
- CocoaPods Package Manager — Simplifies distribution and dependency management for iOS developers integrating the library
- Swift 4.2 — Modern type-safe language with excellent interop for Core Animation and UIKit APIs
⚖️Trade-offs already made
-
Wave animation calculated in WaveLayer rather than using pre-rendered assets
- Why: Allows full customization of wave shape, color, and timing without multiple asset files
- Consequence: Requires understanding of Core Graphics path mathematics; slightly higher CPU usage than sprite sheets
-
Datasource pattern instead of closure-based configuration
- Why: Follows UIKit conventions (UITableViewDataSource) for familiarity and formal delegation
- Consequence: More boilerplate code than closure-based API, but more flexible for complex page management
-
Tight coupling to UIViewController for page transitions
- Why: Simplifies integration with standard iOS navigation and storyboard workflows
- Consequence: Cannot be easily used with SwiftUI or non-UIKit architectures
🚫Non-goals (don't propose these)
- Does not support SwiftUI or non-UIViewController-based views
- Does not provide gesture recognition or interactive swiping—animation is timer-driven only
- Does not handle back navigation or reverse transitions
- Does not support vertical or diagonal swipes—horizontal only
⚠️Anti-patterns to avoid
- Hard-coded animation duration and timing (Medium) —
liquid-swipe/Classes/LiquidSwipeContainerController.swift: Wave animation duration appears to be hard-coded rather than configurable via public properties, limiting customization - Weak datasource retention without cycle detection (High) —
liquid-swipe/Classes/LiquidSwipeContainerController.swift: Datasource stored as weak reference but no null checks in critical paths; could crash if datasource is deallocated mid-animation - No error handling for datasource failures (Medium) —
liquid-swipe/Classes/LiquidSwipeContainerController.swift: If datasource returns nil or throws, animation plays silently without user feedback; state becomes inconsistent - Direct CGColor manipulation without color space validation —
liquid-swipe/Classes/WaveLayer.swift: Wave color set directly
🪤Traps & gotchas
- Must run
pod installin Example/ directory before opening .xcworkspace; opening .xcodeproj directly will fail to link the liquid-swipe library. 2. Library targets iOS 9.3+ but was written for Swift 4.2; using with Xcode 12+ may require migration to Swift 5.x syntax. 3. No public source code paths visible in file list—assume library is either in a separate pod spec repository or unpublished; may need to check actual pod spec on CocoaPods for true source structure.
🏗️Architecture
💡Concepts to learn
- CABasicAnimation — The wave morphing effect is built on CoreAnimation's CABasicAnimation and likely CAShapeLayer path morphing; understanding Bezier curves and keyframe interpolation is essential to modify animation behavior.
- UIViewControllerTransitioningDelegate — liquid-swipe container likely uses the iOS transition controller protocol to inject custom CAAnimations between view controller push/pop; core to how the library integrates with UIKit's navigation stack.
- DataSource Pattern (UITableViewDataSource-style) — The LiquidSwipeContainerDataSource protocol mimics UITableViewDataSource design; understanding this decoupling pattern is key to extending the library or using it correctly.
- CAShapeLayer & Bezier Paths — The liquid wave animation likely uses CAShapeLayer with cubic Bezier curve paths to morph smoothly; essential for customizing the wave shape or creating variant effects.
- CocoaPods Pod Specification — Library is distributed via CocoaPods; understanding .podspec syntax and how Podfile.lock versioning works ensures reproducible builds and helps integrate the library into other projects.
🔗Related repos
Cuberto/liquid-swipe-android— Official Android equivalent library; Cuberto's parallel implementation for feature parity across iOS and Android platforms.Ramotion/folding-cell— Similar gesture-driven iOS transition library from a competing design agency; uses CABasicAnimation and CAShapeLayer for morphing cell expansion effects.Ramotion/navigation-stack— Another Ramotion gesture-based view controller transition library; shared pattern of custom UIViewControllerTransitioningDelegate usage.Cuberto/rubber-onboarding— Another Cuberto library providing alternate onboarding UI pattern; similar design agency open-source approach and CocoaPods distribution.
🪄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 Swift Package Manager (SPM) support alongside CocoaPods
The repo currently only supports CocoaPods distribution (liquid-swipe.podspec exists). SPM is now the preferred dependency manager for Swift packages and would significantly broaden accessibility. This requires creating a Package.swift manifest file and ensuring proper module structure in liquid-swipe/Classes/.
- [ ] Create Package.swift in repo root with proper product and target definitions
- [ ] Verify liquid-swipe/Classes/ contains proper Swift module structure
- [ ] Update README.md with SPM installation instructions alongside CocoaPods
- [ ] Test SPM integration by adding package via Xcode's 'Add Package' feature
Create comprehensive unit tests for LiquidSwipe animation logic
The repo has Example/ and liquid-swipe/Classes/ but no Tests/ directory or test files visible. Animation libraries critically need tests to verify timing, path calculations, and state transitions. This ensures the liquid swipe effect works consistently across iOS 9.3+ versions.
- [ ] Create Tests/ directory with LiquidSwipeTests.swift
- [ ] Add unit tests for any animation controller classes in liquid-swipe/Classes/
- [ ] Test gesture recognition and swipe state transitions
- [ ] Add tests for edge cases (rapid swipes, view boundaries, different screen sizes)
- [ ] Configure test target in Example/liquid-swipe.xcodeproj
Add GitHub Actions CI workflow for automated testing and release validation
No CI configuration files (.github/workflows/) are present. With CocoaPods and SPM support, an automated CI pipeline would validate builds across iOS 9.3+ deployment targets, run tests, and verify pod/package specs are valid before releases.
- [ ] Create .github/workflows/ci.yml for running xcodebuild tests
- [ ] Add pod spec lint validation step to catch podspec errors
- [ ] Configure workflow to run on pull requests and pushes to main branch
- [ ] Add CocoaPods and SPM build matrix testing for both package formats
- [ ] Update README.md with CI status badge
🌿Good first issues
- Add unit tests for LiquidSwipeContainerDataSource protocol compliance and animation timing callbacks; currently no test files visible in the structure.
- Migrate example app and library from Swift 4.2 to Swift 5.5+ and update Xcode 10 to Xcode 13+ compatibility; ensure CABasicAnimation wave morphing still works on iOS 15+.
- Document the datasource pattern with inline code examples in a CONTRIBUTING.md or add a second example controller (e.g., showing tab-based vs. storyboard-based datasource wiring).
⭐Top contributors
Click to expand
Top contributors
- @askopin — 5 commits
- @BoogL — 2 commits
- @denisshvetsov — 1 commits
- @yasinak — 1 commits
📝Recent commits
Click to expand
Recent commits
444b4ea— Update README.md (BoogL)4725055— Fix readme (denisshvetsov)e34dae6— Merge pull request #8 from yasinak/master (askopin)da980d1— Change the access control of the btnNext button to public, I need to change the image of this button. (yasinak)2699be3— added support of landscape orientation and transition (askopin)3f20fb2— Added animation to README (askopin)8a1c939— Update README.md (askopin)8c19ae8— Initial commit (askopin)f8d309f— Initial commit (BoogL)
🔒Security observations
The liquid-swipe project is a UI animation library with relatively low security risk as it does not handle sensitive data, database operations, or network communications directly. However, the main concerns are technical debt related to outdated Swift (4.2) and iOS (9.3+) versions, which lack modern security features and patches. The codebase shows no evidence of injection vulnerabilities, hardcoded secrets, or misconfigurations. Recommendations focus on modernizing the development environment and establishing security maintenance practices.
- Medium · Outdated Swift Version —
README.md, liquid-swipe.podspec. The project specifies Swift 4.2, which was released in 2018. Modern Swift versions (5.5+) include significant security improvements, bug fixes, and performance enhancements. Using outdated Swift versions may expose the application to known vulnerabilities. Fix: Update the project to use the latest stable Swift version (5.9+). Update Xcode to the latest version and test compatibility with newer Swift language features. - Medium · Outdated iOS Minimum Deployment Target —
README.md, Example/liquid-swipe/Info.plist. The project targets iOS 9.3+, which was released in 2016. Apple no longer provides security updates for iOS 9, and the App Store has increased minimum deployment targets. This significantly limits security patches and modern API access. Fix: Update minimum deployment target to iOS 12.0 or higher (ideally iOS 14+). Review and test all functionality with modern iOS versions. - Low · Missing Dependency Vulnerability Scanning —
liquid-swipe.podspec. The podspec file references dependencies via CocoaPods, but there is no evidence of dependency vulnerability scanning (e.g., using CocoaPods audit or similar tools) in the project configuration. Fix: Implement automated dependency scanning using tools like 'pod install --repo-update' and regular security audits. Consider using OWASP Dependency-Check or similar tools in CI/CD pipelines. - Low · No Security Policy Documented —
Repository root. There is no visible SECURITY.md, security policy, or vulnerability disclosure process documented in the repository for responsible disclosure of security issues. Fix: Create a SECURITY.md file documenting how security vulnerabilities should be reported. Include contact information and expected response timelines.
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.