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 description
firm-stack
Pure-Python ports of the Rails Solid stack — database-backed, no Redis required.
firm-stack is the meta-package for 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 |
Solid Queue |
| Cache store | firm-cache |
Solid Cache |
| Pub/sub | firm-channel |
Solid Cable |
| Audit log | firm-audit |
— |
| Web dashboard | 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:
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:
import firm.queue
from firm.cache import Cache
from firm.channel import Channel
Why "firm-stack" and not "firm"? The PyPI name
firmis held by a dormant, release-less registration; a PEP 541 name-transfer request is pending. If it is granted, the meta-package will also be published asfirmandfirm-stackwill remain as a compatible alias.
See the project README and documentation for full usage.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file firm_stack-0.1.0.tar.gz.
File metadata
- Download URL: firm_stack-0.1.0.tar.gz
- Upload date:
- Size: 3.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d49fbd7e51edbae5ea998d1fad8b381b041ba3edd7f8b3425d45278ed51e10b
|
|
| MD5 |
06072422c29f31a62492dcf891e61f30
|
|
| BLAKE2b-256 |
c600c4cc32f8933a014e3534a09c3517fd008562c5ff42cb36ba6e7110c0187f
|
File details
Details for the file firm_stack-0.1.0-py3-none-any.whl.
File metadata
- Download URL: firm_stack-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c5ad3714b6e58c583f49e510a9d0f86b129feb14b3012f5f3c5a574bfacc660
|
|
| MD5 |
e95b9f132e4c63ba661730e4980599f9
|
|
| BLAKE2b-256 |
2d4bf1774db06953ebacdd330c62e489c9829f55547fd28cc0c604f4a9450f6e
|