Use of AI: AudioSilo is developed by me (a human), with assistance from AI, primarily Claude Code, to help me write, clean up, document, and review the code. That doesn't mean the app is generated on autopilot or "vibe coded". Nothing goes out until I've read it, tested it, and decided it belongs. AI is what lets one person keep up this pace, and I think it's important to disclose that.
Website · Player · Docs · Discord · Sponsor
The audiobook player for audiosilo-server - one Expo / React Native codebase shipping to web PWA + iOS + Android.
See CLAUDE.md for architecture, conventions, and the full stack; docs/PLAN.md for the roadmap.
-
Node
24.16.0(pinned in.nvmrc;nvm use). -
That's it -
npm installpulls nothing private:npm install
Icons are FontAwesome Pro glyphs vendored as plain SVG in
src/components/ui/icon-data.ts, so building the app needs no FontAwesome token. A token is only needed to add/regenerate an icon - seescripts/glyphs/README.md.
npm run web # expo start --web (no native build needed)
npm run ios | npm run android # needs a dev build (npx expo prebuild first)
npm run gen:tokens # after editing colour tokens in src/theme/tokens.jsonStyling is Uniwind (Tailwind v4): the theme lives in
src/global.css, with its colour block generated from
src/theme/tokens.json - see the Styling notes in
CLAUDE.md.
Run the same checks CI runs, locally:
npx tsc --noEmit # typecheck (strict; must stay clean)
npm run lint # eslint flat config (eslint-config-expo + prettier)
npm run format # prettier --check . (CI-gated; fails on unformatted files)
npm test # colour-token drift + style guards + jest-expo unit tests
npm test -- --coverage # …with coverage
npx prettier --write . # auto-fix formatting before committingTests use jest-expo (jest 29) + @testing-library/react-native 14, with
in-memory mocks for expo-secure-store and AsyncStorage in
jest.setup.ts. Initial coverage targets the framework-free
logic: the API client, pairing parser, playback queue/timeline math, the offline
progress-sync queue, secure-store, and the session store. Add tests next to the
code as *.test.ts.
.github/workflows/ci.yml runs typecheck + lint +
format (prettier --check, via npm run format) + tests on every pull request
and push to main, and gates merges. After changing dependencies, run
npm install and commit the updated package-lock.json in sync - CI uses
npm ci (frozen lockfile). The web-export image build
(web.yml) stays separate.
The player is licensed under the GNU Affero General Public License v3.0
(AGPL-3.0-only), the same licence as
audiosilo-server. See
LICENSE.
Two exceptions are not covered by the AGPL. The icon glyphs vendored in
src/components/ui/icon-data.ts are
Font Awesome Pro icons, used under the Font
Awesome Pro licence; reusing them outside AudioSilo needs your own Font Awesome
Pro licence. The bundled Google Fonts typefaces are under the SIL Open Font
License.
