Woodglue
JSON-RPC 2.0 server with auto-generated docs, sign-in, and hosted UIs, built on lythonic.
Architecture
┌──────────────────────────────────────────────────────────┐
│ woodglue │
│ HTTP server · JSON-RPC · Docs │
│ Users · Roles · Grants · Sign-in (OIDC, GitHub, proxy) │
│ Console · project UIs (static, Streamlit) │
├──────────────────────────────────────────────────────────┤
│ lythonic │
│ Namespaces · DAGs · Caching · Triggers │
└──────────────────────────────────────────────────────────┘
▲ optional: Caddy in front for TLS and static files
lythonic provides the core runtime: namespaces for organizing methods, DAG-based orchestration, result caching, and scheduled triggers.
woodglue adds the serving layer: a Tornado HTTP server, JSON-RPC 2.0 dispatch, generated docs (llms.txt, OpenAPI, per-method markdown), Users with Roles and per-namespace Grants, browser sign-in, the Console, and hosting for your own UIs.
Features
- JSON-RPC 2.0 with multi-namespace routing (
billing.create_invoice,analytics.query) - Auto-generated docs:
llms.txtindex, per-method markdown, OpenAPI 3.0.3, each showing only what the caller may use - Users, Roles, and per-namespace Grants (
call,read,trigger,view,admin); Personal Access Tokens, optionally narrowed and expiring - Sign-in with Google, Entra ID, Okta, Auth0 (any OpenID Connect provider) or GitHub, or behind Cloudflare Access, Google IAP, or oauth2-proxy
- The Console: browse the API, runs, and triggers, and manage your tokens
- Project UIs next to the Console: a single-page app, or a Streamlit app (or any web server) that woodglue runs and proxies, calling the API as the viewer
- Runs and trigger changes record which User caused them
wgl loginfor remote servers, likegh auth login- Optional Caddy edge:
wgl caddy configprints a Caddyfile - Typed async client with auto-resolved return types via
x-global-ref - YAML-driven namespace configuration; DAG orchestration with scheduled triggers (via lythonic)
Quick Start
pip install woodglue
Define a namespace with methods:
# myapp/api.py
from lythonic.compose.namespace import Namespace
from pydantic import BaseModel
class GreetIn(BaseModel):
name: str
class GreetOut(BaseModel):
message: str
def greet(input: GreetIn) -> GreetOut:
return GreetOut(message=f"Hello, {input.name}!")
ns = Namespace()
ns.register(greet, nsref="greet", tags=["api"])
Point data/woodglue.yaml at it and start the server:
namespaces:
myapp:
gref: "myapp.api:ns"
wgl start
Auth is on by default. The server keeps Users, Roles, and tokens in
data/auth.db, and on first start creates a token for the built-in admin
User. wgl start never prints it:
wgl token # print the admin token
wgl token --new # rotate it
Open http://127.0.0.1:5321/ and sign in with that token, or configure an
Identity Provider so people sign in with their own accounts. wgl user manages
Users, their Roles, and their Personal Access Tokens.
Endpoints:
POST /rpc-- JSON-RPC 2.0GET /docs/llms.txt-- LLM-friendly method indexGET /docs/openapi.json-- OpenAPI 3.0.3 specGET /console/-- the ConsoleGET /ui/<name>/-- your project UIsGET /auth/login-- browser sign-in
Documentation
walnutgeek.github.io/woodglue, including how-to guides for access control, Identity Providers, project UIs, Streamlit, and Caddy.
Metadata
Release files for woodglue 0.0.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| woodglue-0.0.9.tar.gz | 823.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| woodglue-0.0.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 948.7 kB
Release files / woodglue-0.0.9.tar.gz
| Download URL | woodglue-0.0.9.tar.gz |
|---|---|
| Size | 823.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e43bef75ef70dc305c072a2c9f6388696d185af840f9b1b0c1f94fd2230daa4
|
|
BLAKE2b-256 checksum How to use checksums |
b68b2461676205142eb676c0604d58a8d5afec819234144fa078f68f89edb7f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 21, 2026.
Transparency logRelease files / woodglue-0.0.9-py3-none-any.whl
| Download URL | woodglue-0.0.9-py3-none-any.whl |
|---|---|
| Size | 125.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
86d302bbccb41f2fc760afc7fef983062187d5cc5ef84145b29da2541041e86d
|
|
BLAKE2b-256 checksum How to use checksums |
3ed4e86525d4e2aa0c68537c4a62c7b8a7086ff48d4886c5e8bf720f5bfd4452
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 21, 2026.
Transparency logSecurity for woodglue 0.0.9
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for woodglue-0.0.9.tar.gz
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 Oct 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.