Reserved Words in Envio
Overview
When creating your Envio indexer, certain words cannot be used in entity names, field names, contract names, or event names because they are reserved by the underlying programming languages or by Envio itself. Using these reserved words will trigger validation errors (such as EE102
for configuration files or EE210
for schema files).
Reserved words in Envio are taken from JavaScript, TypeScript, and ReScript because Envio generates code in these languages to power your indexer. Using these reserved words would create syntax conflicts in the generated code.
Why This Matters
When you define names in your:
config.yaml
file (for contracts and events)schema.graphql
file (for entities and fields)
Envio automatically generates code based on these names. If you use reserved words, the generated code will contain syntax errors and will not compile, causing your indexer to fail.
Common Error Scenarios
If you use reserved words, you'll encounter these errors:
- Error
EE102
: Reserved words in the configuration file - Error
EE210
: Reserved words in the schema file - Error
EE212
: Reserved enum names that conflict with Envio internal types
How to Fix Reserved Word Errors
When you encounter these errors, you need to rename the offending identifiers:
- Identify which names in your configuration or schema are using reserved words
- Choose alternative names that aren't reserved
- Update all references to these names in your code
- Run codegen again to regenerate the code
Example Problem
# In config.yaml
contracts:
- name: class # Error: 'class' is a reserved word in JavaScript
abi_file_path: ./abis/MyContract.json
# In schema.graphql
type interface { # Error: 'interface' is a reserved word in JavaScript and TypeScript
id: ID!
name: String!
}
Example Solution
# Fixed config.yaml
contracts:
- name: ClassContract # Good: Not a reserved word
abi_file_path: ./abis/MyContract.json
# Fixed schema.graphql
type UserInterface { # Good: Not a reserved word
id: ID!
name: String!
}
Tips for Avoiding Reserved Word Conflicts
- Use camelCase or PascalCase for naming (e.g.,
userAccount
instead ofclass
) - Add a prefix or suffix to potentially conflicting names (e.g.,
userInterface
instead ofinterface
) - Use domain-specific terms that are less likely to be programming keywords
- When in doubt, check against the lists below before finalizing your schema or configuration
Complete List of Reserved Words
JavaScript Reserved Words
These keywords cannot be used as identifiers in your Envio configuration or schema:
abstract, arguments, await, boolean, break, byte, case, catch, char,
class, const, continue, debugger, default, delete, do, double, else,
enum, eval, export, extends, false, final, finally, float, for, function,
goto, if, implements, import, in, instanceof, int, interface, let, long,
native, new, null, package, private, protected, public, return, short,
static, super, switch, synchronized, this, throw, throws, transient, true,
try, typeof, var, void, volatile, while, with, yield
TypeScript Reserved Words
In addition to JavaScript keywords, these TypeScript-specific keywords are also reserved:
any, as, boolean, break, case, catch, class, const, constructor, continue,
declare, default, delete, do, else, enum, export, extends, false, finally,
for, from, function, get, if, implements, import, in, instanceof, interface,
let, module, new, null, number, of, package, private, protected, public,
require, return, set, static, string, super, switch, symbol, this, throw,
true, try, type, typeof, var, void, while, with, yield
ReScript Reserved Words
These ReScript-specific keywords are also reserved:
and, as, assert, constraint, else, exception, external, false, for, if, in,
include, lazy, let, module, mutable, of, open, rec, switch, true, try, type,
when, while, with
Envio Internal Reserved Types
These types are used internally by Envio and cannot be used as enum or entity names:
EVENT_TYPE
CONTRACT_TYPE
Best Practices
- Use descriptive names that are unlikely to be programming keywords
- Check these lists before finalizing your schema design
- Run validation early with
pnpm codegen
to catch issues before spending time on implementation - Use prefixes for domain entities (e.g.,
TokenTransfer
instead ofTransfer
)
If you encounter persistent issues with reserved words or need help refactoring your schema to avoid them, please reach out for support on our Discord community.