diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..6021851 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ['https://infinitytechstack.uk/consulting'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..fceccb9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,28 @@ +--- +name: Bug report +about: Report something that's broken in one of the Infinity Stack services +title: "[] " +labels: bug +--- + +**Service affected** +`infinity-id` / `infinity-observe` / `infinity-data` / `infinity-stream` + +**Describe the bug** +A clear, concise description of what's wrong. + +**Steps to reproduce** +1. +2. +3. + +**Expected behavior** +What you expected to happen instead. + +**Environment** +- OS: +- Rust version (`rustc --version`): +- Run mode: local (`cargo run`) / Docker + +**Logs / output** +Paste any relevant server logs or error output. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..051f898 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,21 @@ +--- +name: Feature request +about: Suggest an idea for one of the Infinity Stack services +title: "[] " +labels: enhancement +--- + +**Service affected** +`infinity-id` / `infinity-observe` / `infinity-data` / `infinity-stream` / stack-wide + +**Is your feature request related to a problem?** +A clear description of the problem — e.g. "I can't do X without also running a separate tool." + +**Describe the solution you'd like** +What you want to happen. + +**Describe alternatives you've considered** +Other approaches or workarounds you've tried. + +**Additional context** +Anything else — links, references, prior art in the SaaS product this service replaces. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..2e83f68 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,23 @@ +## Summary + + + +## Service(s) affected + +- [ ] infinity-id +- [ ] infinity-observe +- [ ] infinity-data +- [ ] infinity-stream +- [ ] stack-wide (root README, CI, docs) + +## Checklist + +- [ ] `cargo check --workspace --all-targets` passes for each affected service +- [ ] `cargo test --workspace` passes for each affected service +- [ ] `cargo clippy --workspace --all-targets -- -D warnings` passes for each affected service +- [ ] `cargo audit` is clean (or a new advisory is documented in `.cargo/audit.toml` with reasoning) +- [ ] Relevant README(s) updated (API reference, config table, roadmap) if behavior changed + +## Related issues + + diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..1a936bb --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,41 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement Responsibilities + +Project maintainers are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue in this repository, or, if the report concerns another user and you'd prefer not to be public about it, by contacting a maintainer directly through their GitHub profile. All complaints will be reviewed and investigated promptly and fairly. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2b34a7f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,38 @@ +# Contributing to Infinity Stack + +Thanks for considering a contribution. Infinity Stack is a Cargo-workspace-per-service monorepo (`infinity-id`, `infinity-observe`, `infinity-data`, `infinity-stream`) — each service builds, tests, and runs independently. + +## Getting set up + +You'll need a stable Rust toolchain (see each service's `Cargo.toml` for the edition). No other services or databases are required — each ships with SQLite by default. + +```bash +cd infinity-id # or infinity-observe / infinity-data / infinity-stream +cargo run --bin infinity-id +``` + +See the Quickstart section of the service's own README for its default port and admin credentials. + +## Before opening a PR + +Run the same checks CI runs (see `.github/workflows/ci.yml`), from inside the service directory you changed: + +```bash +cargo check --workspace --all-targets +cargo test --workspace +cargo clippy --workspace --all-targets -- -D warnings +cargo audit +``` + +A PR that only touches one service only needs that service's checks to pass. + +## Guidelines + +- Keep PRs scoped to one service where possible — the CI matrix runs each service independently, and focused PRs are easier to review. +- New dependencies should be justified in the PR description; `cargo audit` must stay clean (or the advisory must be documented in that service's `.cargo/audit.toml` with reasoning, matching the existing pattern). +- Security-relevant changes (auth, session handling, RBAC, crypto) should call out the threat being addressed or mitigated in the PR description — see each README's "Security" table for the existing threat model. +- Update the relevant README (API reference, config table, roadmap checkbox) alongside behavior changes. + +## Reporting security issues + +Please do not open a public issue for a suspected vulnerability. Open a private security advisory via the repository's **Security** tab instead. diff --git a/README.md b/README.md index 55a5f75..7863d76 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,11 @@ Predictable performance. Memory safety. No GC pauses. Self-hostable. No per-seat [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](./infinity-id/LICENSE) [![Rust](https://img.shields.io/badge/built%20with-Rust-000000?logo=rust)](https://www.rust-lang.org/) [![CI](https://github.com/ModernOps888/infinity-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/ModernOps888/infinity-stack/actions/workflows/ci.yml) +[![Stars](https://img.shields.io/github/stars/ModernOps888/infinity-stack?style=social)](https://github.com/ModernOps888/infinity-stack/stargazers) +[![Forks](https://img.shields.io/github/forks/ModernOps888/infinity-stack?style=social)](https://github.com/ModernOps888/infinity-stack/network/members) +[![Last commit](https://img.shields.io/github/last-commit/ModernOps888/infinity-stack)](https://github.com/ModernOps888/infinity-stack/commits/main) + +If this stack is useful to you, a ⭐ helps other people building on Rust find it. @@ -16,6 +21,14 @@ Predictable performance. Memory safety. No GC pauses. Self-hostable. No per-seat Rust's memory safety, C-like performance, and lack of garbage collection (predictable tail latency) make it the ideal tool to commoditize expensive cloud infrastructure. Infinity Stack spans four heavily-monopolized verticals — **identity, observability, data, and streaming** — each a self-hostable, security-hardened Rust service with an embedded admin dashboard. +| Infinity ID | Infinity Observe | +|---|---| +| ![Infinity ID overview](./infinity-id/docs/img/overview.png) | ![Infinity Observe overview](./infinity-observe/docs/img/overview.png) | + +| Infinity Data | Infinity Stream | +|---|---| +| ![Infinity Data overview](./infinity-data/docs/img/overview.png) | ![Infinity Stream overview](./infinity-stream/docs/img/overview.png) | + ## The products | Product | Replaces | Status | @@ -65,3 +78,9 @@ infinity-stack/ ## License [Apache-2.0](./infinity-id/LICENSE) © Infinity Stack. + +--- + +## ⭐ Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=ModernOps888/infinity-stack&type=Date)](https://star-history.com/#ModernOps888/infinity-stack&Date) diff --git a/docs/social-preview.png b/docs/social-preview.png new file mode 100644 index 0000000..8570096 Binary files /dev/null and b/docs/social-preview.png differ diff --git a/infinity-data/README.md b/infinity-data/README.md index c8b36a4..b9d608d 100644 --- a/infinity-data/README.md +++ b/infinity-data/README.md @@ -84,6 +84,20 @@ infinity-data/ --- +## 🆚 How it compares + +| | **Infinity Data** | Snowflake / Databricks | Pinecone | +|---|---|---|---| +| Open source | ✅ Apache-2.0 | ❌ | ❌ | +| Self-hosted single binary | ✅ | ❌ | ❌ | +| Per-credit / usage billing | ✅ none | ❌ | ❌ | +| Vector search (HNSW) included | ✅ | ⚠️ separate product | ✅ | +| Tabular analytics included | ✅ | ✅ | ❌ | +| RBAC + audit included | ✅ | ⚠️ tiered | ⚠️ tiered | +| Runtime footprint | 🟢 tiny (Rust), runs on a laptop | 🔴 cloud-compute only | n/a managed only | + +--- + ## 🚀 Quickstart ```bash diff --git a/infinity-observe/README.md b/infinity-observe/README.md index 9a3c37a..7650985 100644 --- a/infinity-observe/README.md +++ b/infinity-observe/README.md @@ -124,6 +124,19 @@ infinity-observe/ --- +## 🆚 How it compares + +| | **Infinity Observe** | Datadog / New Relic | Splunk | Sentry | +|---|---|---|---|---| +| Open source | ✅ Apache-2.0 | ❌ | ⚠️ partial | ⚠️ partial | +| Self-hosted single binary | ✅ | ❌ | ⚠️ heavy | ⚠️ heavy | +| Event-based billing | ✅ none | ❌ | ❌ | ❌ | +| Logs + metrics + traces + alerts | ✅ | ✅ | ⚠️ tiered | ❌ traces/errors only | +| RBAC included | ✅ | ⚠️ tiered | ⚠️ tiered | ⚠️ tiered | +| Runtime footprint | 🟢 tiny (Rust) | n/a | 🔴 heavy | n/a | + +--- + ## 🚀 Quickstart ### Run locally (Rust) diff --git a/infinity-stream/README.md b/infinity-stream/README.md index 88f62a6..37b0f52 100644 --- a/infinity-stream/README.md +++ b/infinity-stream/README.md @@ -81,6 +81,20 @@ infinity-stream/ --- +## 🆚 How it compares + +| | **Infinity Stream** | Kafka / Confluent | Elasticsearch | Algolia / Pusher | +|---|---|---|---|---| +| Open source | ✅ Apache-2.0 | ⚠️ partial | ⚠️ partial | ❌ | +| Self-hosted single binary | ✅ | ❌ needs JVM + ZooKeeper/KRaft | ❌ JVM, RAM-hungry | ❌ | +| Usage-spike billing | ✅ none | ⚠️ Confluent Cloud tiers | ⚠️ managed tiers | ❌ | +| Durable topics + full-text search in one binary | ✅ | ❌ search not included | ⚠️ search only | ❌ streaming not included | +| Realtime pub/sub (WebSocket) | ✅ | ⚠️ via Kafka Streams/Connect | ❌ | ✅ | +| RBAC + scoped API keys | ✅ | ⚠️ tiered (ACLs, no built-in RBAC UI) | ⚠️ tiered | ⚠️ tiered | +| Runtime footprint | 🟢 tiny (Rust) | 🔴 heavy (JVM) | 🔴 heavy (JVM) | n/a managed only | + +--- + ## 🚀 Quickstart ```bash