#entrypoint #solana #programs


A custom lightweight entrypoint for Solana programs

2 unstable releases

0.1.0 May 2, 2024
0.0.0 Apr 29, 2024

#2973 in Magic Beans

Download history 343/week @ 2024-04-29 12/week @ 2024-05-06 52/week @ 2024-05-13 30/week @ 2024-05-20 7/week @ 2024-06-03 28/week @ 2024-06-10

66 downloads per month


455 lines



A custom lightweight entrypoint for Solana programs.

Getting started

From your project folder:

cargo add nitrate

On your entrypoint definition:

use nitrate::{entrypoint, program::AccountInfo};
use solana_program::{

// custom entrypoint definition:
//   1. name of the process instruction function
//   2. expected number of accounts
entrypoint!(process_instruction, 10);

pub fn process_instruction(
    program_id: &Pubkey,
    accounts: &[AccountInfo],
    instruction_data: &[u8],
) -> ProgramResult {
    msg!("Hello from my program!");


The main difference from the standard entrypoint! macro is that nitrate represents an entrypoint that does not perform allocations or copies when reading the input buffer, and therefore uses less compute units to parse the input accounts.

The entrypoint is bundled with a companion macro and program types crates.

[!IMPORTANT] A program can receive more than the specified maximum number of accounts, but any account exceeding the maximum will be ignored. On an ideal scenario, this number should be equal to the number of accounts required by the largest instruction of your program.


Copyright (c) 2024 nifty-oss maintainers

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at


Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


~418K SLoC