A blueprint for a more open, accessible, future-proof world.
🙉 What's EXO about?
EXO is a new type of scaffolding that transforms existing sites to be 5-30X faster and more accessible, in less code. EXOs can be layered, related, transformed and embedded by other EXOs.
An example of EXO (top) transforming an existing site (below) using EXO CDN. Shorter is better:
Achieving the above would translate into a 2-3X increase in conversions. EXOs aim to enforce WCAG 2.1 AA, achieve PageSpeed scores on Mobile of >90 and 100 on Desktop consistently in production. Those who use EXO are trusted to create good with it.
It's comprised of a few key pieces:
- A universal data schema, served over a free API
- A lightweight smart loader to enable those with autism to use the web without frustration.
- A bottomless, high-performance ReactJS web shell which connects to headless systems and APIs
EXO is a collaboration of folks who care about making the world usable for people with autism. It turns out when we do that, the business metrics improve too. We're excited to have Gatsby, Rudderstack, Sanity and others involved in us building a true enterprise-grade, scalable and open-source framework we continually will improve.
- EXO for Gatsby + Gatsby Cloud + Sanity + Tailwind
- Gatsby Head
- Gatsby Script
- TextKit SDK by Statflo
- EXO Cloud - a free CDN and transformation service
- Pre-alpha until Oct 15, 2022
- Currently in closed beta.
- EXO API - Documentation
- EXO Cloud - A management UI
- RFC on the Touchless Schema spec for Person, Accomodation
- RFC for Entity, Relationship, Location, Identity
- EXO for SolidJS
- EXO theme for Remix
- EXO theme for NextJS
- EXO theme for Svelte
How to Run
This project uses Nx to manage the repo.
Adding capabilities to the workspace
Nx supports many plugins. Ones we use:
npm install --save-dev @nrwl/react
- NestJS - preferred for services
npm install --save-dev @nrwl/nest
- Web (no framework frontends)
npm install --save-dev @nrwl/web
There are also many community plugins. We intend to contribute to the NX ecosysem over time.
Generate an application
nx g @nrwl/react:app my-app-name to generate an application.
When using Nx, you can create multiple applications and libraries in the same workspace.
Generate a library
nx g @nrwl/react:lib my-lib to generate a library.
You can also use any of the plugins above to generate libraries as well.
Libraries are shareable across libraries and applications. They can be imported from
Default Development server
nx serve gatsby for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.
nx g @nrwl/react:component my-component --project=gatsby to generate a new component.
nx build gatsby to build the project. The build artifacts will be stored in the
dist/ directory. Use the
--prod flag for a production build.
Running unit tests
nx test gatsby to execute the unit tests via Jest.
nx affected:test to execute the unit tests affected by a change.
Running end-to-end tests
nx e2e gatsby to execute the end-to-end tests via Cypress.
nx affected:e2e to execute the end-to-end tests affected by a change.
Understand your workspace
nx graph to see a diagram of the dependencies of your projects.
nvm use 16 yarn install yarn run build
npx nx storybook shared-ui