Rafiki
An open-source, comprehensive Interledger service for wallet providers, enabling them to provide Interledger functionality to their users.
Install / Use
/learn @interledger/RafikiREADME
Rafiki
What is Rafiki?
Rafiki is open source software that provides an efficient solution for an account servicing entity to enable Interledger functionality on its users' accounts.
This includes
- sending and receiving payments (via SPSP and Open Payments)
- allowing third-party access to initiate payments and view transaction data (via Open Payments)
❗ Rafiki is intended to be run by account servicing entities only and should not be used in production by non-regulated entities.
Rafiki is made up of several components, including an Interledger connector, a high-throughput accounting database called TigerBeetle, and several APIs:
- the Admin APIs to create peering relationships, add supported assets, and issue wallet addresses
- the Open Payments API to allow third parties (with the account holder's consent) to initiate payments and to view the transaction history
- the SPSP API for simple Interledger Payments
Additionally, this package also includes a reference implementation of a GNAP authorization server, which handles the access control for the Open Payment API. For more information on the architecture, check out the Architecture documentation.
New to Interledger?
Never heard of Interledger before? Or would you like to learn more? Here are some excellent places to start:
Contributing
Please read the contribution guidelines before submitting contributions. All contributions must adhere to our code of conduct.
Community Calls
Our Rafiki community calls are open to our community members. We have them every Tuesday at 15:30 GMT, via Google Meet.
Google Meet joining info
Video call link: https://meet.google.com/sms-fwny-ezc
Or dial: (GB) +44 20 3956 0467 PIN: 140 111 239#
More phone numbers: https://tel.meet/sms-fwny-ezc?pin=5321780226087
Local Development Environment
Prerequisites
- Git for version control
- Docker to run containerized services
- Node Version Manager (NVM) to manage Node.js versions
Environment Setup
After you have Git, Docker, and NVM installed, run the following commands to continue setting up your local development environment.
Clone the Rafiki repository
git clone https://github.com/interledger/rafiki.git
cd rafiki
git submodule update --init --recursive
Install Node.js
nvm install
nvm use
Install pnpm -- a quick and efficient Node.js package manager
corepack enable
If you were previously using Yarn as a package manager, run this:
pnpm clean
Install dependencies
pnpm i
Git submodules
This repository uses a git submodule for Open Payments specifications located at open-payments-specifications/.
- Initialize submodules after cloning:
git submodule update --init --recursive
- Alternatively, clone the repository with submodules in one step:
git clone --recurse-submodules https://github.com/interledger/rafiki.git
Local Development
The Rafiki local environment is the best way to explore Rafiki locally. The localenv directory contains instructions for setting up a local playground. Please refer to the README for each individual package for more details.
Useful commands
| Description | Command |
| ------------------------------------------------------- | ---------------------------------------- |
| Build all of the packages in the repo | pnpm -r build |
| Build a specific package (e.g. backend, frontend, etc.) | pnpm --filter backend build |
| Generate types from specific package GraphQL schema | pnpm --filter backend generate |
| Run individual tests (e.g. backend) | pnpm --filter backend test |
| Run all tests | pnpm -r --workspace-concurrency=1 test |
| Format and lint code | pnpm format |
| Format documentation | pnpm format:docs |
| Lint code | pnpm lint |
| Lint documentation | pnpm lint:docs |
| Check lint and formatting | pnpm checks |
| Verify code formatting | pnpm check:prettier |
| Verify lint | pnpm check:lint |
Formatting and Linting
Rafiki uses Prettier for code formatting and ESLint with TypeScript support for linting. All code must be properly formatted and pass linting checks before committing.
Formatting Code
To automatically format all code in the repository:
pnpm format
This command will:
- Format all files using Prettier
- Automatically fix ESLint issues where possible
Note: The documentation package (packages/documentation) has its own Prettier configuration and is excluded from the root formatting. To format documentation files, use:
pnpm format:docs
Checking Code Quality
Before committing your changes, verify that your code passes all formatting and linting checks:
pnpm checks
This runs both Prettier and ESLint checks without modifying files. You can also run them individually:
- Check formatting only:
pnpm check:prettier - Check linting only:
pnpm check:lint
Editor Integration
For the best development experience, we recommend configuring your editor to:
- Format on save using Prettier
- Show ESLint errors inline
Most modern editors have extensions/plugins available for both Prettier and ESLint.
