hetu script

Hetu Script

A lightweight scripting language written in Dart for embedding in Flutter apps.

简体中文页面

Introduction

Hetu is a lightweight scripting language purely written in Dart for embedding in Flutter apps. Our goal is to enable Flutter app & game to have hotfix and scripting ability.

Documentation 中文文档

Features

  • Modern programming language syntax likes typescript/kotlin/swift, need very little time to get familiar with.
  • Full scripting language abilities: class OOP, prototype OOP, FP, module, errors, etc.
  • Runs on all platforms that flutter supports, including web browsers and desktop.
  • Extremely easy on binding, call Dart functions in script or call script functions in Dart with just one line.

Test Hetu script in the online playground.

Quick start

To eval a string literal of Hetu code in Dart.

import 'package:hetu_script/hetu_script.dart';

void main() {
  final hetu = Hetu();
  hetu.init();
  hetu.eval(r'''
    var ht = {
      name: 'Hetu',
      greeting: () {
        print('Greetings from ${this.name}!')
      }
    }
    ht.greeting()
  ''');
}

To pass a Map to script, modify it in script and get it back:

import 'package:hetu_script/hetu_script.dart';

void main() {
  final hetu = Hetu();
  hetu.init(externalFunctions: {
    'hello': () => {'greetings': 'greetings from Dart!'},
  });
  var hetuValue = hetu.eval(r'''
      external fun hello
      var dartValue = hello()
      dartValue['reply'] = 'Hi, this is Hetu.'
      dartValue // the script will return the value of it's last expression
      ''');

  print('hetu value: $hetuValue');
}

You can check the documentation for more information on the grammar and binding.

IDE extension

If you are using VS Code, you can download this extension to get basic highlight and dart snippets on bindings.

Command line tool

We have a command line REPL tool for quick testing. You can activate by the following command:

dart pub global activate hetu_script_dev_tools

Then you can use command line tool 'hetu' in any directory on your computer.

More information about the command line tool can be found by enter 'hetu -h'.

If no arguments is provided, enter REPL mode.

In REPL mode, every exrepssion you entered will be evaluated and print out immediately.

If you want to write multiple line in REPL mode, use '\' to end a line.

>>>var a = 42
null // repl print
>>>a
42 // repl print
>>>fun meaning {\
return a }
null // repl print
>>>meaning
meaning() -> any // repl print
>>>hello()
42 // repl print

You can check this official document for more information on 'pub global activate'.

Discussion group

Discord: https://discord.gg/aJedwcRPr8

中文交流可以加 QQ 群:812529118

Support

You can support my project by simply giving it a star on GitHub.

Or you can buy me a coffee:

Buy me a coffee

Libraries

abstract_parameter
abstract_type_declaration
analysis_error
analysis_manager
analysis_result
analyzer
analyzer
analyzer_impl
ast
binding
bundler
bytecode_module
bytecode_reader
cast
class
class_binding
class_declaration
class_namespace
compiler
computer
constant
constant
constant_interpreter
constants
crc32b
declaration
declaration_namespace
declarations
diagnostic
disassembler
element
entity
error
error_handler
error_severity
errors
external
external_class
external_enum
external_function
external_instance
formatter
function
function
function_declaration
gaussian_noise
generic_type_parameter
global_constant_table
goto_info
grammar
hetu
hetu_binding
hetu_script
Hetu Script A lightweight scripting language for embedding in Flutter apps.
instance
instance_binding
instance_namespace
interpreter
jsonify
lexer
lexicon
lexicon_default_impl
line_info
literal
locale
math
named_struct
namespace
nominal
overlay_context
overlay_manager
parameter
parameter_declaration
parser
parser
parser_default_impl
preinclude_functions
preinclude_module
recursive_ast_visitor
resource
resource_context
resource_manager
source
source_range
struct
structural
token
token_reader
type
type_alias_declaration
type_checker
types
uid
union
unresolved
unresolved_import_statement
util
util
values
variable
variable_declaration
version