# artsy/eigen: inside Artsy's React Native mobile app repository

> Eigen is the open source React Native codebase behind Artsy's iOS and Android apps, not a general purpose starter kit. Here is what the repository actually contains, how the documented setup works, and who should stay away.

**artsy/eigen** — The Art World in Your Pocket or Your Trendy Tech Company's Tote, Artsy's mobile app.

- Repository: https://github.com/artsy/eigen
- Stars: 3,783 · Forks: 593
- Language: TypeScript
- License: MIT
- Published: 2026-09-23 · Updated: 2026-09-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/artsy-eigen

## What artsy/eigen is, and the problem it solves for Artsy

Eigen is the mobile app repository for Artsy, described in its README as "Artsy's mobile app repository" and tagged as being in production. It is not a library you import. It is the source tree that produces the Artsy app on the App Store and Google Play, and the topics list confirms the scope: android, app, app-store, art, ios, objective-c, react-native, swift. The problem it solves is Artsy's own: one codebase that ships a marketplace and discovery client to two mobile platforms, with the release cadence visible in the release tags, which are iOS version submissions such as v9.18.0 dated 2026-09-23.

Who it is for is narrower than the topic list suggests. The README names three point people, links a getting started document, a best practices document, a docs folder, and separate deployment guides for beta and App Store releases. That is an internal engineering handbook that happens to be public. If you are outside Artsy, the value is as a reference implementation rather than a dependency.

## Relay, Expo and Fastlane: the architecture visible in the tree

The top level of the repository shows the shape of the app. There is an android directory and an expo directory, an e2e directory for end to end tests, a fastlane directory for release automation, a codemods directory, and a data directory. Configuration files include babel.config.js, app.json, eas.json, .gqlconfig, .watchmanconfig and fingerprint.config.js. The presence of .gqlconfig alongside a relay step in the CI script indicates a GraphQL client generated at build time rather than hand written query strings.

That reading is supported by the ci script in package.json, which removes src/__generated__ and then runs yarn relay before tests. Generated artifacts are not committed as the source of truth; they are rebuilt. The same script runs tsc and eslint first, so type checking and linting gate the pipeline ahead of the GraphQL generation and the test run. For anyone reading the codebase, the practical consequence is that a fresh clone will not type check until Relay has run, because the generated types are missing.

The native side is mixed rather than pure JavaScript. The topics list includes objective-c and swift, and there is a Brewfile and a Gemfile at the root, which is the usual signature of a Ruby driven iOS toolchain alongside a Node one.

## Installing artsy/eigen and running it for the first time

The README does not put setup steps inline. It points to docs/getting_started.md and says to get set up there, so that file is the authority and you should read it before running anything. What the repository does pin down is the toolchain. The engines field in package.json requires Node 24.x and Yarn 4.10.3, and there is an .nvmrc and a .tool-versions file at the root for version managers. Treat those as hard requirements rather than suggestions.

Assuming the documented setup is complete, the scripts in package.json give the entry points. For Android:

```bash
yarn android
```

That maps to react-native run-android --active-arch-only, so it builds only the active architecture. The cached variant goes through Expo instead:

```bash
WITH_ROZENITE=true npx expo run:android
```

Note the environment variable name exactly as written. For iOS, the README defers to the getting started document, and the scripts expose clean-ios and a combined clean:builds target that wipes both platform build directories when a build goes stale.

Before a first run, the ci script shows the order the project expects: type check, lint, prettier check, delete src/__generated__, regenerate with Relay, then test. Running yarn ci locally is the closest thing to reproducing what CircleCI does, and it will surface a missing Relay generation step immediately.

## Where eigen is the wrong tool

The most obvious limitation is that this is a client for one company's backend. The README links Artsy's public API and the docs point at Artsy's own services, deploy targets and beta channels. There is no configuration path described for pointing the app at a different GraphQL endpoint, and the deploy documentation covers Artsy's App Store and beta processes specifically. If you want to build an art marketplace app, forking this gives you a large amount of Artsy specific product logic you would have to strip out.

The second limitation is operational weight. A first build requires Node 24.x, Yarn 4.10.3, a Ruby toolchain implied by the Gemfile and Brewfile, Xcode and Android tooling, and a Relay generation step. The scripts for cleaning include rimraf on the Xcode DerivedData directory and a Gradle clean, which tells you builds accumulate state that has to be cleared. This is not a repository you clone to evaluate in ten minutes.

The third is documentation depth in the README itself. Rollback, environment configuration beyond .env.development, and the meaning of flags such as WITH_ROZENITE are not explained in the README. They live in the docs folder, and where they are absent there, they are absent.

## How eigen differs from a starter kit like Ignite or a plain React Native template

The natural alternative for someone evaluating this repository is a React Native starter such as Ignite, or the bare template produced by the React Native CLI. The difference in approach is that a starter kit is designed to be emptied: it ships navigation, state management and a folder convention, and expects you to delete the sample screens. Eigen is the opposite. It is a finished product with real screens, real Relay queries against a production GraphQL schema, and a release pipeline already wired to Fastlane and Expo Application Services through eas.json.

That distinction changes what you can reuse. From a starter kit you copy structure. From Eigen you copy decisions: how a large React Native app splits generated GraphQL types from source, how it runs end to end tests in an e2e directory, how it keeps native Swift and Objective-C modules alongside JavaScript. Those decisions are only legible if you read the code, and they come with Artsy's constraints attached. If your goal is a clean slate, a starter kit is less work. If your goal is to see how a production app of this kind is organised, a template will not show you.

## Maintenance, releases and the MIT licence

The repository is not archived, and the last push was on 2026-09-23. Recent release tags follow a regular pattern: v9.18.0 on 2026-09-23, v9.17.0 on 2026-09-09, v9.16.0 on 2026-08-27. Those are iOS submission tags, and the naming includes the submission timestamp, which suggests they are cut automatically rather than by hand. Note that the package.json version, 1.21.52, is a separate numbering scheme from the iOS release tags, so do not treat the two as the same version line.

Upgrade cost is the part worth thinking about before adopting anything here. The dependency set is pinned to Node 24.x and Yarn 4.10.3, and the CI script regenerates GraphQL types on every run. Any change to the upstream schema can invalidate generated code, which means an upgrade is not just a dependency bump. The .yarn directory and .yarnrc.yml at the root indicate a Yarn release checked into the repository, so version drift is handled inside the project rather than by whatever Yarn you have installed globally.

The licence is MIT, stated in the README and in package.json. That permits reuse and modification with the licence and copyright notice retained. It says nothing about the Artsy API terms, the App Store review process, or the trademarks involved in shipping something called Artsy, and those are separate questions from the code licence.

## Conclusion

Adopt artsy/eigen if you are working on Artsy's own mobile clients, or if you want a production React Native codebase to read for patterns around Relay, Expo and Fastlane. Do not adopt it if you need a generic app shell, a template to fork, or a client for a different art marketplace: the docs point at Artsy's API and Artsy's deploy pipelines throughout. Before committing any time, open docs/getting_started.md, confirm your Node and Yarn versions match the engines field in package.json, and check whether the API access it assumes is something you can actually obtain.

## FAQ

### Is artsy/eigen actively maintained?

The repository is not archived, and the last push was on 2026-09-23. Release tags such as v9.18.0, v9.17.0 and v9.16.0 appear at roughly two week intervals through August and September 2026.

### What Node and Yarn versions does artsy/eigen require?

The engines field in package.json specifies Node 24.x and Yarn 4.10.3. The repository also carries an .nvmrc and a .tool-versions file at the root for version managers.

### How do I install and run artsy/eigen?

The README does not list setup steps inline; it points to docs/getting_started.md and says to get set up there. Once set up, yarn android runs react-native run-android with the active architecture only, and the CI script shows the expected order of type check, lint, Relay generation and tests.

### Is artsy/eigen the same as the Eigen C++ linear algebra library?

No. artsy/eigen is a React Native mobile app repository for Artsy, written primarily in TypeScript with Swift and Objective-C native code. It has no relation to the Eigen C++ template library for linear algebra.

### Can I use artsy/eigen for my own art marketplace app?

The repository is MIT licensed, so the code can be reused with the licence notice retained. However, the documentation points at Artsy's own API, deploy targets and beta channels, and no configuration path for a different GraphQL endpoint is described.

## Sources

- [artsy/eigen on GitHub](https://github.com/artsy/eigen)
- [Issues](https://github.com/artsy/eigen/issues)
- [License: MIT](https://github.com/artsy/eigen/blob/main/LICENSE)
- [README](https://github.com/artsy/eigen/blob/main/README.md)
- [Releases](https://github.com/artsy/eigen/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/artsy-eigen
