RepoPilotOpen in app →

Cuberto/liquid-swipe

Mixed

Stale — last commit 6y ago

worst of 4 axes
Use as dependencyMixed

last commit was 6y ago; no tests detected…

Fork & modifyConcerns

no tests detected; no CI workflows detected…

Learn fromMixed

no description (proxy for README missing); last commit was 6y ago

Deploy as-isMixed

last commit was 6y ago; no CI workflows detected

  • 4 active contributors
  • MIT licensed
  • Stale — last commit 6y ago
Show 4 more →
  • 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 MixedHealthy if: 1 commit in the last 365 days; add a test suite
  • Fork & modify ConcernsMixed if: add a test suite
  • Learn from MixedHealthy if: add a README + repo description
  • Deploy as-is MixedHealthy 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:

  1. 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.
  2. 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.
  3. 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 |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>Cuberto/liquid-swipe</code></summary>
#!/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).

</details>

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 API
  • liquid-swipe/Classes/WaveLayer.swift — CALayer subclass that renders the animated wave effect using Core Graphics—the visual heart of the liquid swipe animation
  • Example/liquid-swipe/ViewController.swift — Demonstrates real-world usage of LiquidSwipeContainerController with datasource implementation—shows how to integrate the library
  • liquid-swipe/Classes/Bundle.swift — Provides access to bundled assets like button images—necessary for the library to load UI resources
  • liquid-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() method
  • LiquidSwipeContainerControllerDatasource — Queries numberOfPages and viewControllerAtIndex to retrieve next page
  • LiquidSwipeContainerControllerWaveLayer — Creates CABasicAnimation targeting wave layer with progress key
  • CADisplayLinkWaveLayer.draw() — Invokes rendering on each frame; progress parameter updates wave shape
  • WaveLayerScreen — Core Graphics renders animated wave path to view hierarchy
  • Animation CompletionUIViewController Transition — On progress == 1.0, old view controller removed and new one presented

🛠️How to make changes

Customize the Wave Animation Color & Duration

  1. Open WaveLayer.swift and locate the draw(_:) method where the wave is rendered with Core Graphics (liquid-swipe/Classes/WaveLayer.swift)
  2. Modify the fill color and stroke color CGColor properties to change the wave appearance (liquid-swipe/Classes/WaveLayer.swift)
  3. 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

  1. Create a new view controller or view that will be presented by the liquid swipe transition (Example/liquid-swipe/ViewController.swift)
  2. Implement the LiquidSwipeContainerController datasource protocol methods (e.g., numberOfPages, viewControllerAtIndex) (liquid-swipe/Classes/LiquidSwipeContainerController.swift)
  3. Configure and assign your datasource to the LiquidSwipeContainerController instance before presentation (Example/liquid-swipe/ViewController.swift)

Add Custom Navigation Buttons or UI Elements

  1. Replace or supplement the default button assets in liquid-swipe/Assets/ with custom button images (liquid-swipe/Assets/btnNext.png)
  2. Update Bundle.swift to load your custom assets via Bundle(for:) if using a custom bundle (liquid-swipe/Classes/Bundle.swift)
  3. 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 validationliquid-swipe/Classes/WaveLayer.swift: Wave color set directly

🪤Traps & gotchas

  1. Must run pod install in 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.
  • 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

📝Recent commits

Click to expand
  • 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.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · Cuberto/liquid-swipe — RepoPilot