scale

package module
v0.4.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 18, 2024 License: Apache-2.0 Imports: 18 Imported by: 3

README


Logo

A framework for building high-performance plugin systems into any application, all powered by WebAssembly.

Discord

With Scale Functions your users can write fully typed plugins in any language they choose, and your application can easily and safely run those plugins with the Scale Runtime, which provides state-of-the-art sandboxing, low startup times, and extremely high performance.

Currently, guest plugins can be written in Golang, Rust, and Typescript, with the Runtime supporting Golang and Typescript host applications.

Getting Started

First, install the CLI.

Create a new function, passing <name>:<tag> to the new command:

scale new hello:1.0

The following files will be generated:

version: v1alpha
name: hello
tag: 1.0
signature: http@v0.3.4
language: go
dependencies:
- name: github.com/loopholelabs/scale-signature
version: v0.2.9
- name: github.com/loopholelabs/scale-signature-http
version: v0.3.4
source: scale.go
//go:build tinygo || js || wasm
package scale

import (
    signature "github.com/loopholelabs/scale-signature-http"
)

func Scale(ctx *signature.Context) (*signature.Context, error) {
    ctx.Response().SetBody("Hello, World!")
    return ctx.Next()
}
module scale

go 1.18

require github.com/loopholelabs/scale-signature v0.2.9
require github.com/loopholelabs/scale-signature-http v0.3.4

For more information on these files, see the full Quick Start Guide.

Build the above function:

scale function build

And run:

scale run local/hello:1.0

This will start a local HTTP server on port 8080 and will run the function whenever you make a request to it.

Et Voilà! Your first Scale Function! 🎉


Functions be chained together, embedded in other language's apps, and used independently. For more information, as well as usage with other supported language, including Rust and TypeScript/JavaScript, see the documentation.

Documentation

Full instructions and documentation for Scale is available at https://scale.sh/docs.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/loopholelabs/scale. For more contribution information check out the contribution guide.

License

The Scale project is available as open source under the terms of the Apache License, Version 2.0.

Code of Conduct

Everyone interacting in the Scale project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the CNCF Code of Conduct.

Project Managed By:

Documentation

Overview

Package scale implements the Scale Runtime in Go.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNoConfig        = errors.New("no config provided")
	ErrNoFunctions     = errors.New("no functions provided")
	ErrInvalidFunction = errors.New("invalid function")
	ErrInvalidEnv      = errors.New("invalid environment variable")
)

Functions

This section is empty.

Types

type Config

type Config[T interfaces.Signature] struct {
	// contains filtered or unexported fields
}

Config is the configuration for a Scale Runtime

func NewConfig

func NewConfig[T interfaces.Signature](newSignature interfaces.New[T]) *Config[T]

NewConfig returns a new Scale Runtime Config

func (*Config[T]) WithContext

func (c *Config[T]) WithContext(ctx context.Context) *Config[T]

func (*Config[T]) WithExtension added in v0.4.6

func (c *Config[T]) WithExtension(e extension.Extension) *Config[T]

func (*Config[T]) WithFunction

func (c *Config[T]) WithFunction(function *scalefunc.V1BetaSchema, env ...map[string]string) *Config[T]

func (*Config[T]) WithFunctions

func (c *Config[T]) WithFunctions(function []*scalefunc.V1BetaSchema, env ...map[string]string) *Config[T]

func (*Config[T]) WithRawOutput

func (c *Config[T]) WithRawOutput(rawOutput bool) *Config[T]

func (*Config[T]) WithSignature

func (c *Config[T]) WithSignature(newSignature interfaces.New[T]) *Config[T]

func (*Config[T]) WithStderr

func (c *Config[T]) WithStderr(w io.Writer) *Config[T]

func (*Config[T]) WithStdout

func (c *Config[T]) WithStdout(w io.Writer) *Config[T]

type Instance

type Instance[T interfaces.Signature] struct {
	// contains filtered or unexported fields
}

Instance is a single instance of a Scale Function chain

func (*Instance[T]) Run

func (i *Instance[T]) Run(ctx context.Context, signature T) error

type Next

type Next[T interfaces.Signature] func(ctx T) (T, error)

Next is the next function in the middleware chain. It's meant to be implemented by whatever adapter is being used.

type Parsed

type Parsed struct {
	Organization string
	Name         string
	Tag          string
}

func Parse

func Parse(name string) *Parsed

Parse parses a function or signature name of the form <org>/<name>:<tag> into its organization, name, and tag

type Scale

type Scale[T interfaces.Signature] struct {
	TraceDataCallback func(data string)
	// contains filtered or unexported fields
}

Scale is the Scale Runtime. It is responsible for initializing and managing the WASM runtime as well as the scale function chain.

func New

func New[T interfaces.Signature](config *Config[T]) (*Scale[T], error)

func (*Scale[T]) Clear added in v0.4.6

func (r *Scale[T]) Clear()

func (*Scale[T]) Instance

func (r *Scale[T]) Instance(next ...Next[T]) (*Instance[T], error)

Instance returns a new instance of a Scale Function chain with the provided and optional next function.

Directories

Path Synopsis
compile
go
compile Module
Package integration holds integration tests for Scale
Package integration holds integration tests for Scale
Package scalefile implements the ScaleFile type, as well as any helper functions for interacting with ScaleFile types
Package scalefile implements the ScaleFile type, as well as any helper functions for interacting with ScaleFile types
Package scalefunc implements the Schema type, as well as any helper functions for interacting with Schema types
Package scalefunc implements the Schema type, as well as any helper functions for interacting with Schema types
Package signature implements the interfaces, types, and utility functions that can be used by Guest and Host implementations of Scale Signatures.
Package signature implements the interfaces, types, and utility functions that can be used by Guest and Host implementations of Scale Signatures.
converter
Package converter generates a polyglot-encoded buffer from a signature schema and a data payload
Package converter generates a polyglot-encoded buffer from a signature schema and a data payload
Package storage is used to store and retrieve built Scale Functions
Package storage is used to store and retrieve built Scale Functions

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL