Metadata-Version: 2.4
Name: firm-stack
Version: 0.1.0
Summary: Pure-Python ports of the Rails Solid stack: database-backed background jobs (queue), caching (cache), pub/sub (channel), and an append-only audit log. No Redis required. This is a meta-package: pick modules via extras — firm-stack[queue], firm-stack[cache], firm-stack[channel], firm-stack[audit], or firm-stack[all].
Project-URL: Homepage, https://github.com/h11t-labs/firm
Project-URL: Documentation, https://github.com/h11t-labs/firm/tree/main/docs
Project-URL: Repository, https://github.com/h11t-labs/firm
Project-URL: Issues, https://github.com/h11t-labs/firm/issues
Author: firm contributors
License-Expression: MIT
License-File: LICENSE
License-File: NOTICE
Keywords: audit,background,cache,channel,jobs,mysql,postgresql,queue,solid_cable,solid_cache,solid_queue,sqlite,tasks
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Database
Classifier: Topic :: System :: Distributed Computing
Classifier: Typing :: Typed
Requires-Python: >=3.11
Provides-Extra: all
Requires-Dist: firm-cache[encryption,msgpack]~=0.1.0; extra == 'all'
Requires-Dist: firm-core[mysql,postgres]~=0.1.0; extra == 'all'
Requires-Dist: firm-queue[fastapi,flask]~=0.1.0; extra == 'all'
Requires-Dist: firm-ui~=0.1.0; extra == 'all'
Provides-Extra: audit
Requires-Dist: firm-audit~=0.1.0; extra == 'audit'
Provides-Extra: cache
Requires-Dist: firm-cache~=0.1.0; extra == 'cache'
Provides-Extra: channel
Requires-Dist: firm-channel~=0.1.0; extra == 'channel'
Provides-Extra: encryption
Requires-Dist: firm-cache[encryption]~=0.1.0; extra == 'encryption'
Provides-Extra: fastapi
Requires-Dist: firm-queue[fastapi]~=0.1.0; extra == 'fastapi'
Provides-Extra: flask
Requires-Dist: firm-queue[flask]~=0.1.0; extra == 'flask'
Provides-Extra: msgpack
Requires-Dist: firm-cache[msgpack]~=0.1.0; extra == 'msgpack'
Provides-Extra: mysql
Requires-Dist: firm-core[mysql]~=0.1.0; extra == 'mysql'
Provides-Extra: postgres
Requires-Dist: firm-core[postgres]~=0.1.0; extra == 'postgres'
Provides-Extra: queue
Requires-Dist: firm-queue~=0.1.0; extra == 'queue'
Provides-Extra: ui
Requires-Dist: firm-ui~=0.1.0; extra == 'ui'
Description-Content-Type: text/markdown

# firm-stack

**Pure-Python ports of the Rails Solid stack — database-backed, no Redis required.**

`firm-stack` is the meta-package for [firm](https://github.com/h11t-labs/firm): it installs the
modules you pick via extras, in one shot. Each component is also published independently, so
you can just as well install only what you need:

| Component       | Package                                                  | Ports           |
|-----------------|----------------------------------------------------------|-----------------|
| Background jobs | [`firm-queue`](https://pypi.org/project/firm-queue/)     | Solid Queue     |
| Cache store     | [`firm-cache`](https://pypi.org/project/firm-cache/)     | Solid Cache     |
| Pub/sub         | [`firm-channel`](https://pypi.org/project/firm-channel/) | Solid Cable     |
| Audit log       | [`firm-audit`](https://pypi.org/project/firm-audit/)     | —               |
| Web dashboard   | [`firm-ui`](https://pypi.org/project/firm-ui/)           | Mission Control |

Everything runs on SQLite, PostgreSQL, or MySQL via SQLAlchemy.

## Install

`firm-stack` is extras-only — a bare `pip install firm-stack` installs no modules, so always
pick at least one:

```bash
pip install "firm-stack[queue]"              # background jobs
pip install "firm-stack[queue,cache]"        # jobs + caching
pip install "firm-stack[ui]"                 # web dashboard (pulls all four modules)
pip install "firm-stack[all]"                # everything, all drivers and integrations

# or skip the meta-package and install components directly:
pip install firm-queue
pip install "firm-cache[encryption]"
```

Imports are always under the `firm` namespace regardless of which packages you installed:

```python
import firm.queue
from firm.cache import Cache
from firm.channel import Channel
```

> **Why "firm-stack" and not "firm"?** The PyPI name `firm` is held by a dormant, release-less
> registration; a [PEP 541 name-transfer request](https://github.com/pypi/support/issues/11384)
> is pending. If it is granted, the meta-package will also be published as `firm` and
> `firm-stack` will remain as a compatible alias.

See the [project README and documentation](https://github.com/h11t-labs/firm) for full usage.
