Skip to main content

GWAY

GWAY is a lightweight project manager and command dispatcher for the Arthexis/GWAY ecosystem.

The 1.x generation discovers and manages projects from GitHub and exposes each project's commands through a common gway <project> <command> interface. Framework-specific command discovery is provided by adapters, including Python function introspection and Django management commands.

Install the released package with:

python -m pip install gway

GWAY also keeps a first-class Python API. The intended stable import is:

from gway import gway as gw

# Mirrors the CLI namespace once the relevant managed projects are installed.
gw.wireguard.status()
gw.arthexis.check()

from gway import gw remains available as a compatibility alias. The Python facade uses the same registry, adapter, dispatcher, and runner as the CLI rather than bypassing managed project isolation.

Sigils on the CLI

gway-sigils is GWAY's single runtime dependency and provides the sigils Python package used as part of the command-value language. Project names and command paths stay literal for predictable routing; argument values are interpolated before adapter parsing.

Because Sigils is a required GWAY runtime component, installing GWAY already installs it into the same Python environment. The short GWAY-facing name remains sigils, so this is an idempotent runtime install/verification command rather than a second managed-project checkout:

gway install sigils
# installed sigils    gway-sigils@0.4.4

The PyPI distribution name gway-sigils is therefore an implementation/distribution detail; users do not need to type the gway- prefix through GWAY. The command refers to the environment that owns the gway executable: a global GWAY installation gives Sigils the same global scope, while virtualenv or pipx installations remain scoped to that environment.

gway web build --output "[project.path]/dist"
gway ocpp connect --label "%[cwd]-[project.name]"

%[...] expressions are captured eagerly before project-provided lazy context is requested. [...] expressions resolve immediately before the selected adapter parses the command arguments.

The built-in GWAY context includes:

  • [cwd] and [home]
  • [gway.config_dir] and [gway.data_dir]
  • [project.name], [project.path], [project.adapter], [project.aliases], [project.repository], [project.revision], and [project.environment]
  • [command.name] and [command.path]

Adapters may add lazy-only top-level roots through the optional SigilContextAdapter capability. Added roots cannot replace GWAY's reserved cwd, home, gway, project, or command namespaces.

Django projects can configure an explicit provider in gway.toml:

[adapter]
type = "django"
manage = "manage.py"
settings = "config.settings"
sigils = "apps.sigils.gway:context"

The provider is imported after django.setup() and is called as:

def context(*, project, command_path):
    return {"NODE": ...}

It must return a mapping. For model-backed data, prefer sigils.SafeNamespace so only explicitly exposed keys may be traversed and resolution cannot fall through to arbitrary attributes, callables, or Sigils tools.

All regular Sigils built-ins remain available outside protected namespaces, including the environment tool and eager/lazy recursive semantics supplied by the sigils library itself.

The pre-1.0 implementation has been preserved in arthexis/gway-legacy. Legacy bundled projects, recipes, shared mutable context, and application-specific dependencies are intentionally not part of this codebase.

See PLAN.md for the architecture and implementation sequence. gway-epaper is now explicitly scheduled immediately after the Django/Arthexis end-to-end milestone; see PLAN-EPAPER.md for that roadmap extension.

For a reproducible bridge validation before enabling a real ORM-backed provider, see MANUAL-SIGIL-CONTEXT.md.

System / appliance installation

GWAY 1.x can be installed or upgraded as a system command without changing the operating system's default python3:

curl -fsSL https://raw.githubusercontent.com/arthexis/gway/main/install.sh | sudo bash

The bootstrap installer:

  • selects an available Python 3.11 or newer interpreter;
  • installs GWAY into /opt/gway/venv;
  • creates system state under /etc/gway and /var/lib/gway;
  • installs /usr/local/bin/gway as the system dispatcher;
  • automatically archives an existing unmanaged /usr/local/bin/gway as /usr/local/bin/gway-legacy before replacement;
  • preserves additional differing legacy commands with collision-safe timestamped archive names;
  • can be rerun safely to upgrade an existing managed GWAY installation.

Validate prerequisites without changing the machine:

curl -fsSL https://raw.githubusercontent.com/arthexis/gway/main/install.sh -o /tmp/gway-install.sh
bash /tmp/gway-install.sh --check

After installation, managed projects can be installed directly, for example:

sudo gway install wireguard
sudo gway wireguard --help

Upgrading GWAY and managed projects

GWAY owns the lifecycle of projects installed through gway install. Upgrade one managed project with:

sudo gway upgrade wireguard

Upgrade all managed projects while leaving GWAY itself unchanged:

sudo gway upgrade --all

Upgrade only GWAY in the Python environment that owns the current gway executable:

sudo gway upgrade --self

A bare upgrade performs both operations in order: GWAY itself first, then every managed project:

sudo gway upgrade

Managed project upgrades normally require a clean checkout whose origin still matches the trusted repository recorded by GWAY. Normal upgrades use git pull --ff-only, refresh the project's isolated Python environment, re-read gway.toml, and record the new revision. Locally registered projects created with gway register are not modified by --all; naming one explicitly is rejected.

For appliance recovery, --force deliberately discards local managed-checkout changes after validating the registered origin and current branch. It fetches the trusted upstream, resets the checkout to origin/<branch>, and removes ordinary untracked files/directories; ignored files are preserved. It can target one project or all managed projects:

sudo gway upgrade wireguard --force
sudo gway upgrade --all --force
sudo gway upgrade --force

The last form upgrades GWAY itself normally, then force-resets and upgrades all managed projects.

Development

python -m pip install -e '.[dev]'
python -m gway --help
gway --help
pytest

The package and executable remain named gway; the stable 1.x line starts at version 1.0.0.

Metadata

Release files for gway 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gway 1.0.1
File Size Uploaded
gway-1.0.1.tar.gz 35.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gway 1.0.1
File Interpreter ABI Platform
gway-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 65.0 kB

Release files / gway-1.0.1.tar.gz

Download URL gway-1.0.1.tar.gz
Size 35.6 kB
Tags Source
SHA-256 checksum
How to use checksums
cd3edcf47f482f6ca06e415748a98020b1afe584742fec453a05e2f493bb78c6
BLAKE2b-256 checksum
How to use checksums
eb14b42acbe11bb4d3c9b7a56133f6b1e3ace109a191c6427ff3e6ff78acd55c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / gway-1.0.1-py3-none-any.whl

Download URL gway-1.0.1-py3-none-any.whl
Size 29.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
86e16c8595db3af06c2cdf5816ebe3a3c2b8f323bf1ffae1d61c76ca605597e5
BLAKE2b-256 checksum
How to use checksums
eefad3f2bc39382381d6e6446b4c98493c3863635d95198fba1899ed0d8c50ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

0.4.66

2 release files

0.4.59

2 release files

0.4.58

2 release files

0.4.57

2 release files

0.4.56

2 release files

0.4.55

2 release files

0.4.54

2 release files

0.4.53

2 release files

0.4.52

2 release files

0.4.51

2 release files

0.4.50

2 release files

0.4.49

2 release files

0.4.48

2 release files

0.4.47

2 release files

0.4.46

2 release files

0.4.45

2 release files

0.4.44

2 release files

0.4.43

2 release files

0.4.42

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.3.40

2 release files

0.3.39

2 release files

0.3.38

2 release files

0.3.37

2 release files

0.3.36

2 release files

0.3.35

2 release files

0.3.34

2 release files

0.3.33

2 release files

0.3.32

2 release files

0.3.31

2 release files

0.3.30

2 release files

0.3.29

2 release files

0.3.28

2 release files

0.3.27

2 release files

0.3.26

2 release files

0.3.25

2 release files

0.3.24

2 release files

0.3.23

2 release files

0.3.22

2 release files

0.3.21

2 release files

0.3.20

2 release files

0.3.19

2 release files

0.3.18

2 release files

0.3.17

2 release files

0.3.16

2 release files

0.3.15

2 release files

0.3.14

2 release files

0.3.13

2 release files

0.3.12

2 release files

0.3.11

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.2.56

2 release files

0.2.55

2 release files

0.2.54

2 release files

0.2.53

2 release files

0.2.52

2 release files

0.2.51

2 release files

0.2.50

2 release files

0.2.48

2 release files

0.2.47

2 release files

0.2.46

2 release files

0.2.18

2 release files

0.2.17

2 release files

0.2.16

2 release files

0.2.15

2 release files

0.2.14

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.1.48

2 release files

0.1.47

2 release files

0.1.44

2 release files

0.1.43

2 release files

0.1.42

2 release files

0.1.41

2 release files

0.1.40

2 release files

0.1.39

2 release files

0.1.38

2 release files

0.1.37

2 release files

0.1.36

2 release files

0.1.35

2 release files

0.1.34

2 release files

0.1.33

2 release files

0.1.32

2 release files

0.1.31

2 release files

0.1.30

2 release files

0.1.29

2 release files

0.1.28

2 release files

0.1.27

2 release files

0.1.26

2 release files

0.1.25

2 release files

0.1.24

2 release files

0.1.23

2 release files

0.1.22

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.0.26

2 release files

0.0.24

2 release files

0.0.23

2 release files

0.0.21

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page