Skip to content

Local-first deep link collections, versioned in your Git repository

RYNO stores every deep link request, path parameter, query string and environment as a flat JSON file in a .ryno/ folder at the root of your mobile repository. Secrets stay in local files on your Mac that Git ignores, so a commit never carries a token.

The request editor in RYNO, shown with an example project and sample data.
How it works

Why everything lives in one folder, as flat JSON files

One file per request: readable in a diff, mergeable, and owned by your repository rather than a vendor.
  • Review deep links with your code

    A new route ships with its request file. Reviewers see the exact URL and parameters in the diff.

  • No account or server for one developer

    Open the repository in RYNO and start. Nothing leaves your Mac.

.ryno/ — example layout
.ryno/
├── collections/
│   ├── checkout/
│   │   ├── add-to-cart.json
│   │   └── apply-promo.json
│   └── onboarding/
│       └── welcome.json
├── environments/
│   ├── staging.env.json
│   └── staging.env.local.json   # secrets, ignored by Git
├── flows/
│   └── checkout-happy-path.json
├── screenshots/                  # ignored by Git
└── .gitignore
Variables

Parameters, variables and environments

Write the route once. RYNO fills path parameters, query strings and variables for the environment you pick.
add-to-cart.json — example
{
  "name": "Add to cart",
  "protocol": "https",
  "host": "shop.example.com",
  "path": "/cart/:productId",
  "queryParams": [
    {
      "key": "ref",
      "value": "{{campaign}}",
      "enabled": true
    },
    {
      "key": "qty",
      "value": "2",
      "enabled": true
    }
  ],
  "pathParams": [
    {
      "name": "productId",
      "value": "42"
    }
  ]
}
  • Switch between staging, QA and production in one click
  • Path parameters like :productId and query parameters you can turn on or off
  • Variables such as {{campaign}} resolved per environment
  • Secrets in *.env.local.json, excluded from every commit
  • Links escaped for you before they reach the device
Start fast

Start from what you already have

Bring your existing links in minutes.
  • Import a CSV

    Turn a spreadsheet of links into requests. RYNO shows a line-by-line summary of what it imported.

    CSV import in the docs
  • Clone a repository

    Clone a Git repository that already has a .ryno/ folder and run its links right away.

    Clone in the docs
  • Share through Git

    Commit .ryno/ and push it: your team gets the same collections on their next pull.

Comparison

Where deep links usually live, and where they belong

Three ways to keep a team's deep links.
Keeping deep links in proprietary cloud storage, in a wiki, or in a folder of your Git repository
Proprietary cloud storageWiki or shared notes.ryno/ in your Git repository
Reviewed with your codeNoNoYes, in the same review
Works offlineDepends on the vendorRead onlyYes
Secrets protectedStored by the vendorOften pasted in clear textLocal files, never committed
Leaving the toolExport, if allowedCopy and pasteFiles stay in your repository
Cost for one developerOften a paid seatFreeFree
FAQ

Questions about the project folder

How collections and secrets are stored.

Where does RYNO store deep link collections?

RYNO stores each request as a JSON file under .ryno/collections/ in your repository. Environments live in .ryno/environments/ and flows in .ryno/flows/. Nothing is stored on a RYNO server for individual use.

How does RYNO keep secrets out of Git?

RYNO reads secrets from *.env.local.json files and creates a .gitignore in .ryno/ that excludes them. Shared environments go in *.env.json, which you commit.

What happens if a .ryno/ file is broken?

RYNO skips a file it cannot read and keeps loading the rest of the workspace, so one bad merge never blocks the whole team.

Put your deep links where your code lives

Open your mobile repository in RYNO, and .ryno/ is created for you. To get started, contact the team.