OSS Repository Structure

We have one repository for each program.

These repositories contain a lot of different parts and can initially seem to be overwhelming - so let's break the repository folder structure (and important files) down one by one on the example of our marketplace repository:

  • .github | parts for our CI/CD pipeline
  • clients | generated clients to interact with the program
    • anchor | only used for legacy clients, can be ignored
    • js | JavaScript client
      • src | source code of the client
        • generated | core part of the client, autogenerated with kinobi
          • accounts | on-chain accounts types
          • errors | error types and their corresponding error code
          • instructions | instructions, their arguments and functions to retrieve them
          • pdas | program derived addresses and the seeds used to derive them
          • programs | useful functionality for identifying instructions and accounts
          • shared | autogenerated helper functions, can be ignored
          • types | types defined by the program, mostly used for custom instruction arguments
        • hooked | custom helper functions, resolvers, types etc.
      • test | integration tests
    • rust | Rust client
      • src | source code of the client
        • generated | core part of the client, autogenerated with kinobi
          • accounts | on-chain accounts types
          • errors | error types and their corresponding error code
          • instructions | instructions, their arguments and functions to retrieve them
          • types | types defined by the program, mostly used for custom instruction arguments
  • cpitest | tests for cross program invocations
  • examples | exemplary usage of the clients
  • program | on-chain rust program source code
    • instructions | source code for instructions
    • idl.json | contains the program's IDL
  • scripts | scripts to customize client generation, building, testing etc
    • client | client testing scripts
    • kinobi | together with generate-clients.mjs used for generating clients and adding custom logic into generated clients
    • generate-clients.mjs | main kinobi script, used to generate all clients and customize them