> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gelato.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

## Determining your Needs

### Off-chain Data or Computation?

Sometimes, automation tasks require data that isn't readily available on the blockchain, or they might need computations that are better performed off-chain. In such cases, Typescript Functions should be the choice.

### All Checks On-chain?

If all the conditions necessary for your automation task can be directly verified on the blockchain, you have the option to select between Typescript Functions, Solidity Functions & Automated Transactions.

## Implementation path

{(() => {
const implementationSteps = [
  { 
    step: "How you want to trigger your run?", 
    description: "Start by deciding on the type of trigger you want to use. (Time, event, or every block)" 
  },
  { 
    step: "What to run?", 
    description: [
      "Typescript Function",
      "Solidity Function", 
      "Transaction"
    ]
  },
  { 
    step: "Task Creation", 
    description: "Create a Web3 Function task to allow the execution of typescript, solidity or transaction" 
  },
  { 
    step: "Finalize & Monitor", 
    description: "Once you've defined your function ensure you monitor its execution to confirm that it works as expected. Make any necessary adjustments." 
  }
];

return (
  <div className="w-full max-w-4xl mx-auto">
    <div className="overflow-x-auto rounded-lg border border-gray-200 dark:border-gray-700">
      <div className="flex w-full bg-gray-50 dark:bg-gray-900">
        <div className="flex-1 py-4 px-6 font-semibold text-gray-800 dark:text-white text-sm sm:text-base">
          Step
        </div>
        <div className="flex-1 py-4 px-6 font-semibold text-gray-800 dark:text-white text-sm sm:text-base">
          Description
        </div>
      </div>
      {implementationSteps.map((item, idx) => (
        <div
          key={idx}
          className="flex w-full border-b border-gray-100 dark:border-gray-800 transition-colors duration-200"
        >
          <div className="flex-1 py-4 px-6 font-medium text-gray-700 dark:text-gray-300 text-sm sm:text-base">
            {item.step}
          </div>
          <div className="flex-1 py-4 px-6 text-gray-600 dark:text-gray-400 text-sm sm:text-base">
            {Array.isArray(item.description) ? (
              <ul className="list-disc list-inside space-y-1">
                {item.description.map((desc, idx) => (
                  <li key={idx}>{desc}</li>
                ))}
              </ul>
            ) : (
              item.description
            )}
          </div>
        </div>
      ))}
    </div>
  </div>
);
})()}

## Core Features of Web3 Functions

Main features of Web3 Functions include Typescript Functions, Solidity Functions & Automated Transactions.

Before jumping into the core features of the Web3 Functions, it is highly recommended that you first learn how you'd like to trigger your run. To learn more:

### Trigger Types

Learn more about each of the 3 actions that your trigger can run:

* [Typescript Function](/web3-functions/introduction/typescript-functions)
* [Solidity Function](/web3-functions/introduction/solidity-functions)
* [Automated Transactions](/web3-functions/introduction/automated-transactions)

## Pre-Requisite of Target Smart Contract

Smart contract functions in the target contract that can be automated should follow these properties:

* They need to be functions that are usually called by the development team or external keepers, not "user facing" functions called by users directly
* They need to be either public or external
* They do not have access restrictions like an onlyOwner modifier, unless the user's dedicated msg.sender address is whitelisted through the proxy module
* They do not require msg.sender to be tx.origin
