GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - adiled/orchd: A versatile toolkit for declaring, compiling, and supervising services. Grow your own orch(ar)d!

BranchesTags
Open more actions menu

Latest commit

 

History

176 Commits
176 Commits

Folders and files

NameName
Last commit message
Last commit date
.githooks
.githooks
 
 
.github/workflows
.github/workflows
 
 
src
src
 
 
.gitignore
.gitignore
 
 
CONFIG.md
CONFIG.md
 
 
LICENSE
LICENSE
 
 
ORCHARD.md
ORCHARD.md
 
 
README.md
README.md
 
 
build.zig
build.zig
 
 
build.zig.zon
build.zig.zon
 
 
install
install
 
 
justfile
justfile
 
 
release.sh
release.sh
 
 

Repository files navigation

orchd

Keep your services running with one simple file.

You write a short file listing what you want running (a web app, a database, a worker). orchd starts them, starts them in the right order, restarts them if they crash, and stops them cleanly when you ask. On a Mac it uses launchd; on Linux it uses systemd. You do not need to know how either works.

Install

curl -fsSL https://raw.githubusercontent.com/adiled/orchd/main/install | sh

From source: just install (Zig 0.17.1, with orch on your PATH).

Write an Orchfile

Put a file named Orchfile next to your project. Each SERVICE is one thing to run. Here is a database and a web app that needs it:

SERVICE database
FROM postgres:16
ENV POSTGRES_PASSWORD=secret
HEALTHCHECK pg_isready -h localhost

SERVICE web
RUN myapp --port 8000
REQUIRES database
HEALTHCHECK http://localhost:8000
RESTART on-failure

REQUIRES database means web waits until the database is actually ready. That is the whole idea: say what you want, orchd handles the rest. (The full list of options lives in the Orch spec.)

A service with FROM is a Linux container. On a Mac, tell orchd to use the Apple rootstock once, by putting this in a file named .orchrc next to your Orchfile:

rootstock=apple

(Services with RUN are plain programs and need no setup. On Linux, containers use containerd or cri instead.)

Use it

orchd grow               # start everything
orchd grow web --reload  # run web's RELOAD instead of restarting it
orchd survey             # see what is running
orchd logs web           # watch one service
orchd fell web           # stop one service and clean it up
orchd fell               # stop everything and clean up

That is the day-to-day. Run orchd grow again any time you change the Orchfile.

Set defaults in .orchrc (one KEY=value per line, like grove=myapp) so you do not type flags every time. Full list of settings, env vars, and precedence: CONFIG.md.

Power usage

orchd grow is really three small steps. Run them yourself when you want to slip your own logic in the middle:

orch resolve --json Orchfile \
  | orchd sow --rootstock apple \        # services -> run commands
  | orchd plant --platform launchd \     # -> native service files
  | orchd tend                           # -> running

Every step is plain JSON in, JSON out, so you can pipe anything between them:

... | orchd sow | jq 'del(.cuttings[0])' | orchd plant | ...

orchd has no opinion about how you compose; that part is yours. Full reference: ORCHARD.md.

A rootstock is what runs each service, and each is its own small program beside orchd: bare (a plain process), on Linux containerd and cri (CRI-O, or any runtime that speaks Kubernetes' CRI), and on a Mac apple (Apple's container) and applz. Any orchd-rootstock-<name> beside orchd or on your PATH is one more. Bring your own: the contract is a few verbs and some JSON, in ORCHARD.md.

On a Mac, applz runs Linux containers with no Docker and no background daemon at all, using only macOS itself. Install it and grow with --rootstock applz; orchd ships the orchd-rootstock-applz that speaks to it.

Take the parts

orchd is one Zig package that publishes three modules: contract (the envelope, service and exec set a rootstock speaks), grpc (a small gRPC client over nghttp2 on a unix socket, with protobuf as grpc.pb), and network (a TCP port forwarder, a CNI client, and pinned network namespaces on Linux).

zig fetch --save git+https://github.com/adiled/orchd
const orchd = b.dependency("orchd", .{ .target = target, .optimize = optimize });
exe.root_module.addImport("grpc", orchd.module("grpc"));

License

Licensed under the Apache License, Version 2.0. See LICENSE.

About

A versatile toolkit for declaring, compiling, and supervising services. Grow your own orch(ar)d!

Topics

apple-containerscontainerdcontainerizationcriorchvirtualization

Resources

Readme
Apache-2.0 license
Activity

Stars

1 star

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.