# ninja-links

> iPhone app to scan and keep Social Stream Ninja and VDO.Ninja links (AltStore)

- Price: free, open source
- Warranty: none; built with AI assistance and provided as is
- Built with: Swift
- Author: Kshitiz Wagle (https://kshitizwagle.com.np)
- Source: https://github.com/kshitizwagle/ninja-links
- Page: https://projects.kshitizwagle.com.np/ninja-links
- Last updated: 2026-10-13

## FAQ

### Is ninja-links free?

Yes. ninja-links is free to use and open source. The full source code is on GitHub at https://github.com/kshitizwagle/ninja-links.

### How do I get ninja-links?

Get the source from https://github.com/kshitizwagle/ninja-links; the README there covers installation and usage.

### Is there a warranty or support for ninja-links?

No. ninja-links was built with AI assistance and is provided as is, without warranty. Kshitiz Wagle is not liable for damage or loss. Use it at your own risk.

### Who makes ninja-links?

ninja-links is built and maintained by Kshitiz Wagle, a software engineer in Lalitpur, Nepal. Portfolio: https://kshitizwagle.com.np.

## README

An iPhone app that keeps your Social Stream Ninja and VDO.Ninja links in one place. Scan the QR code a
page shows on your computer and the link is saved, named after what it is.

- **Scan** a QR code with the camera (torch for dark rooms), or paste or type a link.
- **Recognises** Social Stream Ninja pages (Dock, Featured and other overlays, with the session id) and
  VDO.Ninja links (Camera/push, Viewer, Director, Scene, Room guest). Anything else is kept under
  "Other links".
- **Manage**: rename, add notes, search, reorder, delete. Scanning a link you already have shows the saved one.
- **Use**: open in-app or in Safari, copy, share, or show it again as a big QR code for another device.
- Links stay on the phone (Application Support, file protection on). Session ids work like passwords, so
  the app never sends them anywhere.

## Install with AltStore

In AltStore, go to Browse › Sources › + and add:

```
https://kshitizwagle.com.np/altstore
```

Or download `NinjaLinks-unsigned.ipa` from the latest release and open it with AltStore or Sideloadly,
which sign it with your Apple ID. Needs iOS 16 or later.

## Build

The app is SwiftUI with an [XcodeGen](https://github.com/yonaskolb/XcodeGen) spec (`ios/project.yml`), so the
`.xcodeproj` isn't committed.

```
cd ios && xcodegen && open NinjaLinks.xcodeproj
```

On every push, GitHub Actions (`.github/workflows/ci.yml`) runs the tests on a macOS runner and builds an
unsigned IPA. Each green build on `main` becomes the next `vX.Y.Z` release (`[minor]` or `[major]` in the
commit message bumps those). The AltStore source is built from these releases in
[kshitizwagle/altstore](https://github.com/kshitizwagle/altstore), which also lists my other apps.

The icon is drawn by `scripts/make-icon.ps1` (copy it to `icons/ninja-links.png` in the altstore repo too).
