CLI tool
heylinda/heylinda-app avatar
heylinda/heylinda-app

Hey Linda: a free meditation app built with React Native and Expo

The open source and free meditation app alternative for everyone. Built with React Native and Expo.

726 stars177 forksTypeScriptAGPL-3.0

At a glance

What is it?
Hey Linda is an open source meditation app that tracks sessions, streaks and calendar activity on the web and Android, with iOS coming soon, with offline support and a community contribution model for the audio itself. It suits a user who wants a free tracker with no subscription and a developer who wants a working React Native meditation app to fork.
Who is it for?
Hey Linda fits a person who wants a meditation tracker with no subscription, no account requirement and a meditation library that contributors can add to, and it fits a React Native developer who wants a working example of a session-based app with a Redux store, a calendar view and offline persistence to fork.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 96 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A meditation tracker whose distinguishing feature is that it is free

Hey Linda is described in the README as the open source and free meditation app alternative for everyone, built with React Native and Expo. The word alternative is doing the work there. The meditation app market is dominated by subscription products, and the pitch of this project is a tracker that costs nothing and whose source anyone can read.

The feature list is short and it is a tracker, not a course. You can meditate, track progress, toggle dark mode, keep a current streak, and see calendar activity and time listened. There is offline support, and there is manual entry of a meditation that you did somewhere else.

That last item is more interesting than it looks. A meditation app whose content is contributed by its community can never know about the session you did on your own, so the app lets you record it by hand. That is a small design decision that makes the tracker usable for people whose practice includes sitting with a teacher, in a group, or outdoors with a podcast.

The audience is two groups, and the README addresses both. The end user is somebody who wants a free tracker, and the app is published on the web at webheylinda.netlify.app and on Android as a beta in the Play Store, with iOS listed as coming soon. The second audience is a developer, and the project is unusually open about that: there is a badge offering to build a meditation app at scale, a link to contact the author on X, and a line saying the app was built by Adrian.

The licence is the GNU Affero General Public License v3.0, which is the copyleft licence with the network clause, and the last push was on 2026-07-19 with no GitHub releases.

Expo, Redux and a screens directory, which is the whole architecture

The repository layout describes the application in the conventional React Native way, and reading it tells you the structure without any guessing.

The entry point is App.tsx at the top level, with app.json carrying the Expo configuration and eas.json the build configuration for EAS, the hosted build service. There is a screens directory for the screen components, a navigation directory, a components directory for shared pieces, hooks, utils and constants. State lives in a redux directory, and there is a data directory.

The package.json pins the versions, and they are the significant fact here. Expo is on ^44.0.0, React and React DOM are both pinned at 17.0.1, and react-native is pinned at 0.64.3. Navigation is React Navigation 6, with the native, bottom-tabs and stack packages, and state is Redux Toolkit at ^1.6.2.

The expo package list describes the feature set in a way the README does not. There is expo-av for audio playback, expo-file-system and expo-asset for handling media on device, expo-blur for the blur effects, expo-font and expo-splash-screen, and expo-tracking-transparency, which is the iOS permission prompt for tracking, present because the project includes expo-analytics and expo-analytics-amplitude.

Two of those entries deserve a note. The analytics packages mean the app reports usage events, and the tracking transparency module is what makes that permissible on iOS by asking the user first, which is a sign the author thought about the consent side rather than just shipping the SDK. And react-native-calendars at ^1.1267.0 is what draws the calendar activity view.

The persistence layer is @react-native-async-storage/async-storage, which is the local key-value store, and that is where the offline support comes from. Sessions are recorded locally, and the calendar and streak views are computed from that local record.

Running it locally takes the expo-cli, a yarn install and a device

The developer install is two commands, and the run is two more.

bash
- `yarn global add expo-cli`
- `yarn install`

The README describes this as: navigate to the directory and run those two. The run commands then open the app on a platform.

bash
- `yarn android`
- `yarn ios`

Behind those script names the package.json shows what actually happens. The android script is expo start --android, the ios script is expo start --ios, and there is a web script, expo start --web, which is what produces the web deployment. A start script runs expo start for the plain development server.

The project uses yarn rather than npm, with a yarn.lock in the repository, and there is a patches directory together with patch-package in the dependencies, with a postinstall script that runs it. That combination means some dependency is patched in place, and the patches directory is part of the build, so a fork has to keep it.

The tooling around the app is also set up. There is a .husky directory with a prepare script running husky install, so git hooks are installed on install, and a .prettierrc with a prettier script and an .eslintrc.js with a lint script that runs eslint over js, jsx, ts and tsx files. The jest configuration uses the jest-expo preset, and the test script is jest --watchAll, which is the interactive mode.

For end-to-end work there is Cypress, with a cypress.json at the top level and two scripts, test:e2e running cypress open and test:e2e:headless running cypress run. There is a debug script too, which opens the React Native debugger with a host and port of localhost and 8081.

The meditation library is a separate file, and it is the contribution model

The most distinctive thing in the repository is a file called MEDITATIONS, linked from the licence section, and a separate contributors entry for Meditation Contributors.

The contribution section says it plainly: you can contribute to Hey Linda by beta testing, recording meditations, or submitting code. Recording meditations is listed first among the non-code routes, and the MEDITATIONS file is where that content lives. The contributors and backers sections both point at OpenCollective, and the project is funded there rather than through a paid tier in the app.

That design decision explains the feature set. If the audio is contributed rather than licensed, there is no catalog to buy, so there is no subscription, and the app is free with no in-app purchase. The same logic explains the manual entry feature, because community content cannot cover every practice.

It also sets the boundary of what the project is. There is no adaptive guidance, no curriculum, no sleep content, no streak negotiation, no account system and no social feed in the feature list. It is a timer, a log and a calendar. A user who wants a structured multi-week programme is not going to find one here, and a user who wants a quiet free tracker is.

The credit list in the README is by GitHub account, with named contributors and avatars, and the project carries a code of conduct, a contribution guide and a style guide file. The style guide matters for a codebase that expects outside contributions to audio and to code.

A single maintainer, a web deployment and a beta Android build

The distribution situation is uneven, and the README is honest about which parts exist.

The web build is the one that is fully live, hosted on Netlify, with a deploys by Netlify badge in the credits. The Android build is published on the Play Store and is labelled beta in the install list. iOS is listed as coming soon, and the web install link points at a separate webheylinda.netlify.app origin while the project homepage is heylinda.netlify.app.

Behind the app is a set of channels rather than a project board. There is a Slack workspace with an invite link, a Facebook page, a Twitter account and an Instagram account, each with a badge in the README.

The maintenance facts are modest. The last push was on 2026-07-19, and the repository has no GitHub releases, so there is no tagged version to pin and the commit history is the only version record. The default branch is main.

The dependency versions make the age of the project visible. Expo 44, React 17 and React Native 0.64 are all from the 2021 to 2022 period, and expo-cli is the older command line tool rather than the newer local installation. A developer picking this up today inherits a stack where the surrounding tooling has moved on, and the upgrade path from Expo 44 to a current SDK is a migration rather than a dependency bump.

The AGPL-3.0 licence is worth thinking about for a fork. It is the network clause version of the GPL, so a modified version offered over a network must have its source offered too. For an app that a company might rebrand and ship, that obligation is a commercial consideration, and the separate MEDITATIONS file with its own contributors entry raises the question of what happens to contributed audio under a copyleft licence.

Editorial conclusion

Hey Linda fits a person who wants a meditation tracker with no subscription, no account requirement and a meditation library that contributors can add to, and it fits a React Native developer who wants a working example of a session-based app with a Redux store, a calendar view and offline persistence to fork. It does not fit a clinical user expecting a research-backed protocol or adaptive guidance, since the feature list stops at tracking, and it does not fit a team that needs a maintained iOS release, because the README lists iOS as coming soon while only the web and a beta Android build are published. Before building on it, read the MEDITATIONS file and the contribution guide, since the audio library rather than the code is where most of the community work goes, and check the Expo and React Native versions in package.json against what you need, since the manifest pins Expo 44 and React Native 0.64.

Frequently asked questions

What platforms is the Hey Linda meditation app available on?

The install list gives a web version, an Android version marked beta in the Play Store, and iOS as coming soon. The web build is hosted on Netlify.

How do I run the Hey Linda app from source?

Navigate to the project directory, run yarn global add expo-cli and then yarn install. To run it, use yarn android or yarn ios, which the package.json maps to expo start --android and expo start --ios, and there is a yarn web script for the browser.

What features does Hey Linda actually include?

The feature list is meditate, track progress, dark mode, current streak, calendar activity, time listened, offline support, and manually enter meditation. The manual entry option lets you record a session you did elsewhere, which matters because the audio library is community contributed.

How can I contribute meditations to Hey Linda?

The README lists three ways to contribute: beta testing, recording meditations, and submitting code, with the contribution guide in CONTRIBUTING.md. Meditations are tracked in a MEDITATIONS file in the repository, and the project is funded through OpenCollective.

Official sources

  1. heylinda/heylinda-app on GitHub
  2. Issues
  3. License: AGPL-3.0
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/heylinda-heylinda-app.svg)](https://hysenlabs.com/projects/heylinda-heylinda-app)

Was this useful?