# 🪵 WoodGlue

![example workflow](https://github.com/walnutgeek/woodglue/actions/workflows/ci.yml/badge.svg)

> **Stronger than wood when used right**

WoodGlue is a self-documenting, opinionated async server framework that hosts both logic and data. Like the finest wood glue that creates bonds stronger than the wood itself, WoodGlue creates connections more robust than traditional server architectures.

## Why WoodGlue?

In woodworking, the right glue applied correctly creates joints that are stronger than the surrounding wood. WoodGlue follows the same principle - when properly configured, it creates server architectures that are more resilient, performant, and maintainable than traditional approaches.

### Key Features

- **Self-documenting**: Your server documents itself
- **Opinionated**: Built with best practices baked in
- **Async-first**: Modern Python async/await patterns
- **Data + Logic**: Host both your business logic and data together
- **Type-safe**: Built on Pydantic for robust data validation
- **Fast**: Powered by Polars for high-performance data operations

## Quick Start

```bash
# Install WoodGlue
pip install woodglue

# Start the server with auto-discovered methods from your module
wgl server start --module_path=mypackage.api

# JSON-RPC call
curl -X POST http://localhost:8888/rpc \
  -d '{"jsonrpc":"2.0","method":"mypackage.api:my_function","params":{"name":"world"},"id":1}'

# OpenAPI spec
curl http://localhost:8888/docs

# Human-readable API docs
open http://localhost:8888/docs/ui
```

## Let's Build Something Together

WoodGlue is more than just a framework - it's a foundation for building robust, scalable applications. Whether you're crafting a simple API or architecting a complex distributed system, WoodGlue provides the adhesive that holds everything together.

Ready to start building? Check out our examples, contribute to the project, or join our community of builders who believe in creating connections that last.

---

*"The strength of the team is each individual member. The strength of each member is the team."* - Phil Jackson

Just like the finest wood glue, WoodGlue works best when we work together. Let's build something amazing.

## Key Blocks

### Action

Method that take one `BaseModel` argument, and return one.  Action may be invoked remotely via JSON-RPC within cluster by default, or can be exposed to as external API. Actions are building block of dataflow.

### ActiveData action


Decorated action with persistence logic. It could be for temporary caching or long time storage. 

### Workflow

DAG of tasks. Task is any method Tasks has to take care of data storage.

### Kits

Kit is combination of tightly related actions, workflows, public API, and UI.

### 








