Docs

Bluetext curated technologies that makes fulfilling enterprise-grade requirements easy

Bluetext comes with recommendations for which technology to use for each of the capabilities that are commonly needed in enterprise software systems. Each technology is selected on how much easier it makes fulfilling the enterprise-grade requirements: compliance, security, reliability, maintainability, scalability, performance, flexibility, cost-effectiveness and development velocity.

The stack is chosen, not assembled, and each entry in it is here for reasons that can be stated.

Kubernetes

Kubernetes is what makes Bluetext possible. It is the same idea one layer down: replace instructions with a description, state what should be true, and let something else make it true, repeatedly. Without a substrate that already worked that way there would be nothing for a declaration to render into — the platform would have to issue commands and hope, which is the thing it exists not to do. Because both layers are declarative, the properties §3 and §4 claim do not stop at the edge of the repository; they carry through to what is actually running.

Four fundamentals do the work, and every requirement Kubernetes helps with comes from one of them.

Declared desired state, continuously reconciled. You submit an object saying what should be true, and controllers compare the world against it and act — not once, but forever. Reliability and scalability are both this single loop: a pod that dies has diverged from what was declared so it comes back, a lost node's workloads are rescheduled, a rollout is a walk from one declared state to another gated on its own health checks, and scaling is a number becoming true. Idempotence comes with it — applying the same objects twice does nothing — which is what makes a deploy reproducible rather than a sequence somebody has to get right.

One uniform API, and it is the only door. Workloads, networking, storage, configuration, secrets and access control are all resources of the same shape, reached with the same verbs. Maintainability comes from that: one vocabulary and one lifecycle for a vendor's identity server, a gateway, a database and your own binaries alike, which is what lets a single declaration cover a system assembled largely from products nobody here wrote. So does flexibility, because the contract is the API rather than any implementation of it — every major cloud offers it, every on-premises distribution provides it, and the same objects describe a cluster on a laptop and hardware in your own data centre. And because the API is the only way in, every change to the system is an authorizable, loggable event, which is where the compliance contribution sits.

Immutable workloads on fungible machines. A pod is a specification rather than a machine somebody configured, and a scheduler places it against resource requests rather than an operator pinning it. Instances become interchangeable, which is what makes horizontal scaling trivial, node loss survivable, and bin-packing possible at all — and bin-packing is the actual source of the cost-effectiveness, together with cheap or ARM hardware and prices that stay negotiable because you can leave.

Isolation and policy are objects too. Namespaces, quotas, network policy and role bindings are declared like everything else, so the security posture is reviewable in the same way the workloads are. The primitives are real, and permissive by default: the network is flat until a policy says otherwise.

But, many enterprises have rejected Kubernetes for many of their workloads, because it is hard to manage — which is where Bluetext comes in handy.

With Bluetext it becomes easy to deploy systems to Kubernetes. Deployments, services, ingress rules, secret projections and the ordering between them are rendered from the same declaration that produces the code, so the objects are the platform's output rather than a parallel artifact a team maintains beside it. Where providers genuinely differ — an ingress controller, a storage class, a node architecture — the difference is named on the target instead of scattered through the components. Preparing a cluster is still real work, and §9 says what that involves.

And the local cluster is the development environment. Components run as containers, so nothing is installed on a developer's machine, and a request in development traverses the same ingress, the same router and the same policy it will meet in production.

Rust

Rust is memory-safe, fast and predictable at the same time. Safety is checked when the code compiles, so there is no garbage collector pausing a request, no runtime to pay for per instance, and no use-after-free or data race for an attacker to reach. Managed languages give up the first two to get safety; systems languages give up the third to get speed.

And Rust is the right language for AI-generated code. The risk in generated code is not that it fails to compile — it is that it compiles and looks right. Rust is the language in which the most of looks right but isn't is caught before anything runs: a reference that outlives what it points at, a match that misses a case, an error nothing handles, a value passed where a different type belongs. Each of those is a build failure rather than something a reviewer has to notice. The instinct, when AI generates the code, is to pick a forgiving language; the opposite is correct. The stricter the checker, the more of the review is done by something that does not get tired.

It also makes the generation itself converge. The compiler's diagnostics name the offending item and frequently the fix, so an agent working against them is iterating against a precise signal rather than guessing — which is the difference between generated code that arrives correct and generated code that arrives plausible.

Four fundamentals do the work, and every requirement Rust helps with comes from one of them.

Ownership, checked when it compiles. Memory is released exactly once and aliasing rules are enforced before the program runs, so use-after-free, double-free and data races are build failures rather than runtime risks. That removes the category that dominates vulnerability counts in systems software, and a large class of crashes with it — security and reliability obtained before a test runs.

No runtime and no garbage collector. Memory is freed deterministically, so nothing pauses a request at an unpredictable moment and there is no runtime to pay for per instance. Latency is predictable and the footprint is small — performance nobody has to tune for, and cost-effectiveness that compounds, because more instances fit on a node and bin-packing is where the hosting saving actually comes from.

Types that cannot be ignored. An error is a value of a type the compiler makes you handle, and there is no null. That is what gives the generated clients their totality: every failure an operation declares is a case its caller has to answer, so an unhandled path is a build failure rather than a production incident — reliability, again from the compiler rather than from discipline.

A type system that can carry the platform's own rules. Visibility decides what is an entry point, ownership decides what a part may reach, and a newtype keeps an identifier from being passed where a different one belongs. Security and maintainability both rest on this: a refactor that breaks one of those boundaries fails to build instead of failing later.

But, many enterprises have rejected Rust because it is hard to learn, which is where Bluetext comes in handy.

With Bluetext, you don't write most of it. The clients, the wire types, the component configuration and the serving layer are all generated from the declaration, so what a developer writes is the business logic — the part that is actually theirs. And the source and the build cache stay on the developer's machine rather than moving into the cluster, so the compile cycle stays short enough to work in.

Couchbase

Couchbase is one data service where most systems need three or four, and what that removes is complexity. A document store, a cache, a search index and something for reporting is four products to operate: four sets of credentials, four backup and restore procedures, four audit surfaces, four upgrade cycles, and four opportunities for the same fact to exist in two states at once. Every one of those is a place where a practice has to be followed and a review has to reach. Doing the same work with one engine over the same documents does not make that work easier — it removes it.

Five fundamentals do the work.

Memory-first storage, backed by disk. Reads are served from RAM and writes are acknowledged there before being persisted, so the latency a caller sees is memory latency. That is performance nobody has to tune for, and it is why nothing needs to sit in front of it — no cache tier means no invalidation logic and no chance of serving something stale.

Purpose-optimized access mechanisms. Key-value access for the hot path, SQL++ for queries that join and aggregate, and full-text search, all over the same documents. SQL++ matters more than it sounds: it is a real query language, so reporting does not need a second store, and it is a skill teams already have. Maintainability and development velocity.

Services that scale independently. Data, query, index and search run on separate nodes and are sized separately, so you buy memory where memory is needed and processors where processors are. Most stores scale as a single unit, which means over-buying one resource to get more of another — cost-effectiveness and scalability both come from this.

Virtual buckets, and operations that stay online. Data is partitioned into virtual buckets mapped onto nodes, and the client holds the map and talks to the node that owns the data — one hop, no proxy in between. Adding nodes, rebalancing, building an index and upgrading the cluster all happen while it serves. Scalability is adding capacity, and reliability is that none of it needs a maintenance window or application code that knows about it.

Replication, and durability chosen per write. Replicas inside the cluster make failover possible and cross-datacenter replication makes a second region possible — reliability, and the compliance answer where data has to stay in one place. And how durable a write is before it is acknowledged is a per-operation choice rather than a cluster-wide setting, so consistency is bought where it is needed rather than paid for everywhere.

It is the same product self-hosted, on Kubernetes, or managed. It runs under its own operator on the cluster §6.1 describes, on ordinary machines, or as Capella with somebody else operating it. That is why moving between those is a variant flip rather than a migration, and why the choice stays reversible.

And it reaches the edge. An embedded copy in a client, syncing bidirectionally, is what makes an offline-capable application possible without building synchronisation yourself. Bluetext's own analysis tooling runs on an embedded Couchbase store, so this is a road already travelled rather than a datasheet entry.

Most enterprise developers don't understand the benefits of Couchbase. In a normal enterprise system everything is complex, so the cost of running four data products alongside each other disappears into the noise — nobody prices it, because nothing else is priced either. Bluetext puts a system's composition in front of you, and a saving you can see is a saving you can act on.

And many have rejected schema-less stores outright, because they were not willing to trade control for the cost-effectiveness, scalability, performance and flexibility that schema-less storage brings. With Bluetext that trade is not on the table: the state variables and the model say what the documents are and what may touch them, so the control is kept and the benefits arrive anyway.

With Bluetext, you don't wire it up or write its schema. A fresh node has no cluster and no administrator, so nothing can even authenticate to it until it is initialised — that is a declared bootstrap call, run as part of the deploy, rather than a page in a runbook. The client is a published package the declaration names, so it updates on its own cadence rather than the platform's. Credentials and coordinates arrive by projection, so no connection string is written anywhere. And the schema Couchbase deliberately does not enforce is supplied from the other side: the declared shapes and state variables say what the documents are, and the code that reads and writes them is generated from that.

Redpanda

Redpanda makes event streaming easier to manage, faster and cheaper to run. Redpanda is fully Kafka API compliant. What differs is one binary instead of a broker plus a coordinator plus a JVM to tune, latency that stays predictable under load, and fewer machines for the same volume of traffic.

Five fundamentals do the work.

One binary, and no coordinator beside it. Consensus is built in, so there is no ZooKeeper to run, no separate quorum to keep healthy and no JVM heap to tune. Installing, upgrading and scaling are all the same one operation, and the surface an operator watches is one process per node. That is maintainability, reliability because fewer parts means fewer parts that fail, and cost-effectiveness because a cluster is a set of nodes rather than two clusters of different kinds.

Thread-per-core, writing straight to disk. Work is pinned per core and I/O bypasses the page cache, so latency stays predictable under load instead of degrading at the ninety-ninth percentile. That is performance, and cost-effectiveness as well, because the same volume needs fewer machines.

The Kafka API, fully compliant. Every Kafka client library, every tool and every engineer who has used Kafka works here without changing anything — and so does leaving, because the interface belongs to the ecosystem rather than to the vendor. That is flexibility.

Tiered storage onto object storage. Older segments move to object storage and stay readable, so retention costs what object storage costs rather than what disks attached to brokers cost. That is cost-effectiveness, and a compliance answer too: an ordered, durable record of what happened, kept as long as the rules require, is the hardest kind of evidence to produce after the fact.

Replicated by consensus, with transactions. A write is acknowledged once a quorum holds it, and a producer can publish and commit its offsets together, so a consumer sees each fact once rather than once-or-twice. That is reliability, and it is what lets a flow across components be correct rather than usually correct.

With Bluetext, standing up and maintaining an enterprise-grade event stream is a sinch. A broker is an online-service component like any other: its coordinates and credentials a rrive by projection, its client is a published package the declaration names, and where it sits in the system is declared beside everything else. What does not exist yet is a streaming driver, or constructs that declare topics and their shapes the way endpoints and state variables are declared today. §9 records that.

Curity and Kong

Curity and Kong makes it easy to access control a distributed system fulfilling the toughest security requirements. They give a system one public front door and keep tokens out of the browser, without anybody writing the security-critical part.** Kong is the gateway that everything a browser touches answers behind; Curity is the identity server, and also supplies the two Kong plugins that do the cookie-to-token exchange at the edge. They are one entry because the arrangement needs both halves and one vendor provides them.

Five fundamentals do the work.

One public origin. The page, the API and the login flow all answer at the same address, because the gateway fronts them. That is what makes the session cookie first-party and lets it be SameSite=strict, and it is why there is no CORS configuration to get wrong. Security, and maintainability because there is one address to reason about rather than three.

The browser holds a reference, not a token. What the cookie carries is an opaque reference; the gateway decrypts it, exchanges it at the identity server and forwards a JWT, so the API sees only JWTs. A stolen cookie works at that one gateway and stops working the moment the session is revoked, because introspection is a live check rather than a signature check — where a lifted token is portable and valid until it expires. Security, as blast radius and as exposure window.

Policy at the edge, declared rather than coded. Which prefixes are forwarded, which plugins run on each, and what each requires are statements in a file that is validated before it ships. The security posture at the front door is reviewable the same way the rest of the system is, which is what §4 asks of everything.

Standards, implemented properly. OAuth 2.0, OpenID Connect and the token handler pattern as specified — so the clients, the libraries and the auditors all recognise what they are looking at, and nobody maintains a bespoke authentication system. Compliance and maintainability, and flexibility because a standard is something you can move away from.

The identity server is a product, not your code. Delegations, tokens, sessions, accounts, multi-factor, step-up, account linking and the exchange itself are things you would otherwise build and get subtly wrong. This is where the licence goes, and it goes there deliberately: it buys the piece you least want hand-written, and it also keeps the gateway on its open-source edition, because the plugins that would otherwise justify an enterprise gateway licence arrive with it.

But, setting up world-class access control is rejected by most enterprise developers, because it is incredibly difficult and hard to understand the configuration. Bluetext, boils setting up and maintaining world-class access control down to a few easily comprehenisble system declarations. The gateway's configuration renders from the declaration, so no backend address or prefix is written twice. The distinction that makes it declarable at all is that the gateway forwards the API and the login pages and calls introspection — routes and links, one component consumed two ways. Curity's own configuration is a template with coordinates and credentials interpolated on the pod, so nothing sensitive is committed. A component the gateway fronts may not also be published directly, and the build refuses the pair. And the identity server is a container in development and somebody else's hosted tenant in production, which is one line.