<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Cyanea</title>
    <subtitle>Modern bioinformatics platform for genomic data management and analysis</subtitle>
    <link rel="self" type="application/atom+xml" href="https://cyanea.bio/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://cyanea.bio"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-03-12T00:00:00+00:00</updated>
    <id>https://cyanea.bio/atom.xml</id>
    <entry xml:lang="en">
        <title>Introducing Cyanea</title>
        <published>2026-03-12T00:00:00+00:00</published>
        <updated>2026-03-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cyanea.bio/blog/introducing-cyanea/"/>
        <id>https://cyanea.bio/blog/introducing-cyanea/</id>
        
        <content type="html" xml:base="https://cyanea.bio/blog/introducing-cyanea/">&lt;p&gt;Cyanea is live at &lt;a href=&quot;https:&#x2F;&#x2F;app.cyanea.bio&quot;&gt;app.cyanea.bio&lt;&#x2F;a&gt;. You can sign up, create a space, upload datasets, write protocols, run notebooks, and share your work. Everything described in this post is deployed and working today.&lt;&#x2F;p&gt;
&lt;p&gt;This post walks through what we built, how it works, and the decisions behind it. It is long. If you just want to try it, go to &lt;a href=&quot;https:&#x2F;&#x2F;app.cyanea.bio&quot;&gt;app.cyanea.bio&lt;&#x2F;a&gt; and create an account. Come back here when you want to understand what is going on under the hood.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-situation&quot;&gt;The situation&lt;&#x2F;h2&gt;
&lt;p&gt;If you work in biology, you already know the tooling situation. Your sequencing data lives on a shared drive or an S3 bucket with cryptic folder names. Your protocols are in Google Docs, Word files, or someone’s lab notebook. Your analysis code is scattered across Jupyter notebooks that nobody can reproduce because the environment is gone. Your results live in a slide deck.&lt;&#x2F;p&gt;
&lt;p&gt;There is no single place where a research group can put their datasets, protocols, notebooks, and results, version them, share them with collaborators, and make them discoverable by the wider community. GitHub solved this for code. Hugging Face solved it for ML models. Biology has nothing equivalent.&lt;&#x2F;p&gt;
&lt;p&gt;The tools that do exist fall into two camps. Enterprise LIMS&#x2F;ELN systems like Benchling are built for internal compliance workflows, not public sharing or community discovery. General-purpose tools like Jupyter and Google Drive were never designed for biological data and have no understanding of FASTA files, protein structures, or experimental protocols.&lt;&#x2F;p&gt;
&lt;p&gt;We built Cyanea to fill this gap.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-cyanea-is&quot;&gt;What Cyanea is&lt;&#x2F;h2&gt;
&lt;p&gt;Cyanea is a platform where researchers organize their work into &lt;strong&gt;spaces&lt;&#x2F;strong&gt;. A space is like a GitHub repository for research. It contains datasets, protocols, notebooks, and discussions, all versioned and all shareable.&lt;&#x2F;p&gt;
&lt;p&gt;A space belongs to a user or an organization. It can be public (anyone can see it), internal (only your org members), consortium-level (shared with partner organizations), or private (only explicit collaborators). You control what is visible and to whom.&lt;&#x2F;p&gt;
&lt;p&gt;Inside a space you will find:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Datasets&lt;&#x2F;strong&gt; with files, metadata, and tags. Upload a FASTA file and Cyanea extracts metadata automatically, recognizes the format, computes a content hash, and stores it in content-addressed storage. We support metadata extraction for 21 file formats including FASTA, FASTQ, VCF, BED, GFF3, CSV, Parquet, GenBank, EMBL, Newick, NEXUS, SDF, PDB, mmCIF, Stockholm, Clustal, Phylip, bigWig, and bedGraph.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Protocols&lt;&#x2F;strong&gt; with structured steps, reagent lists, equipment requirements, quality control checkpoints, and troubleshooting notes. Protocols are versioned, so you can track exactly what changed between runs. We ship 18 protocol templates covering common wet-lab workflows (TRIzol RNA extraction, CRISPR-Cas9 knockout, 10x Chromium scRNA-seq, PCR-free WGS, nanopore adaptive sampling, ChIP-seq, ATAC-seq, bisulfite sequencing, Hi-C, long-read amplicon) and dry-lab workflows (RNA-seq DESeq2, GATK variant calling, 16S amplicon metagenomics, scRNA-seq clustering, genome assembly QC, phylogenetic analysis, structural variant calling, epigenome peak calling).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Notebooks&lt;&#x2F;strong&gt; where you write and run code. More on these below, because they are unusual.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Discussions&lt;&#x2F;strong&gt; for conversation around the work. Ask questions, report problems, request features, or review results. We provide templates for common discussion types so you do not start from a blank page.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;notebooks-with-two-execution-engines&quot;&gt;Notebooks with two execution engines&lt;&#x2F;h2&gt;
&lt;p&gt;Cyanea notebooks are not Jupyter. They have two execution environments that run simultaneously.&lt;&#x2F;p&gt;
&lt;p&gt;The first is a &lt;strong&gt;browser-native WASM runtime&lt;&#x2F;strong&gt;. When you write code in a Cyanea cell and press Shift+Enter, it executes immediately in your browser through WebAssembly. No kernel startup, no server round-trip, no waiting. The WASM module loads once and stays warm. You get instant feedback.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;let dna = &amp;quot;ATGGCTAGCGTACGATCG&amp;quot;
let protein = Seq.translate(dna)
print(protein)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That runs entirely in your browser. The output renders with type-aware formatting: DNA sequences get color-coded bases, alignments get match&#x2F;mismatch highlighting, tables get sortable grids, protein sequences get amino acid coloring.&lt;&#x2F;p&gt;
&lt;p&gt;The second engine is &lt;strong&gt;server-side Elixir execution&lt;&#x2F;strong&gt;. For heavier work, like processing large datasets, running database queries, or operations that need server resources, you write Elixir cells that execute in a sandboxed environment on the server. The sandbox validates your code against an AST blocklist (no System, File, IO, Port, Process, or Code module access) and enforces a 30-second timeout. Results are persisted to the database and available to all collaborators.&lt;&#x2F;p&gt;
&lt;p&gt;The notebook automatically routes each cell to the right engine based on the language tag. Cyanea cells go to WASM, Elixir cells go to the server.&lt;&#x2F;p&gt;
&lt;p&gt;Multiple researchers can work on the same notebook simultaneously. You see other users’ cursors and cell updates in real time, powered by Phoenix Presence and PubSub. Every significant change creates a version snapshot. You can browse version history, diff any two versions at the cell level (additions, modifications, removals, moves), and restore previous states.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-rust-bioinformatics-ecosystem&quot;&gt;The Rust bioinformatics ecosystem&lt;&#x2F;h2&gt;
&lt;p&gt;The compute layer underneath all of this is not Python. It is Rust.&lt;&#x2F;p&gt;
&lt;p&gt;We have a workspace called &lt;a href=&quot;&#x2F;labs&quot;&gt;Cyanea Labs&lt;&#x2F;a&gt; containing 15 Rust crates with over 3,700 tests. These crates cover the core domains of bioinformatics:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-seq&lt;&#x2F;strong&gt; handles DNA, RNA, and protein sequences. FASTA and FASTQ parsing at 2 GB&#x2F;s, roughly 10x faster than BioPython. K-mer extraction, quality scores, sequence manipulation.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-align&lt;&#x2F;strong&gt; does pairwise and multiple sequence alignment with affine gap penalties. Needleman-Wunsch, Smith-Waterman, semi-global alignment, banded alignment for long sequences, and GPU dispatch for batch operations.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-omics&lt;&#x2F;strong&gt; provides expression matrices (dense and sparse), genomic coordinates with interval trees, variant representation, and single-cell data structures. The single-cell module handles MTX&#x2F;10X formats, RNA velocity computation, and batch correction (ComBat, LISI, ARI), all feature-gated behind a &lt;code&gt;single-cell&lt;&#x2F;code&gt; flag.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-stats&lt;&#x2F;strong&gt; covers descriptive statistics, correlation, t-tests, distributions, multiple testing correction, and PCA. These are the statistical methods you actually use in life sciences, not a general-purpose stats library.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-ml&lt;&#x2F;strong&gt; has clustering (k-means, DBSCAN, hierarchical), distance metrics, embeddings, dimensionality reduction (PCA, t-SNE), and k-nearest neighbors.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-chem&lt;&#x2F;strong&gt; parses SMILES and SDF, computes Morgan fingerprints, calculates molecular properties, and does substructure search.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-struct&lt;&#x2F;strong&gt; parses PDB files, assigns secondary structure (simplified DSSP), does Kabsch superposition, and builds contact maps.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-phylo&lt;&#x2F;strong&gt; handles Newick and NEXUS I&#x2F;O, distance models (JC69, K2P, and others), and tree building with UPGMA and neighbor-joining. Fitch and Sankoff parsimony reconstruction.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-meta&lt;&#x2F;strong&gt; is the metagenomics crate. Taxonomy and LCA assignment, community profiling, alpha and beta diversity metrics, compositional data transforms (CLR, ILR, ALDEx2, ANCOM), functional annotation, binning, and assembly QC.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-epi&lt;&#x2F;strong&gt; covers epigenomics. MACS2-style peak calling, pileup computation, motif discovery with PWM and MEME-format support, ChromHMM state modeling, differential binding analysis, nucleosome positioning, and ATAC-seq QC.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-io&lt;&#x2F;strong&gt; is the unified file format parser. 21 formats behind feature flags, so you only compile what you need.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-gpu&lt;&#x2F;strong&gt; abstracts over CUDA and Metal, providing a single API for GPU-accelerated computation. Same code runs on NVIDIA and Apple Silicon.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-wasm&lt;&#x2F;strong&gt; compiles all the pure-Rust crates to WebAssembly with JavaScript bindings. This is what powers the browser-side execution in notebooks.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;cyanea-core&lt;&#x2F;strong&gt; has the shared primitives: traits, error types, SHA-256 hashing, zstd compression, memory-mapped file utilities.&lt;&#x2F;p&gt;
&lt;p&gt;Every crate is open source. You can use them in your own projects without touching the Cyanea platform. &lt;code&gt;cargo add cyanea-seq&lt;&#x2F;code&gt; and you are set.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;why-rust&quot;&gt;Why Rust&lt;&#x2F;h3&gt;
&lt;p&gt;Four reasons.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Performance.&lt;&#x2F;strong&gt; Rust compiles to native code with zero-cost abstractions. When you are processing terabytes of genomic data, the difference between 200 MB&#x2F;s and 2 GB&#x2F;s matters.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Safety.&lt;&#x2F;strong&gt; Memory safety without a garbage collector. No segfaults in production when you are halfway through a large alignment job.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Portability.&lt;&#x2F;strong&gt; The same codebase compiles to native binaries, WASM for browsers, Python bindings via PyO3, and Elixir NIFs via Rustler. Write the algorithm once, deploy it everywhere.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;GPU readiness.&lt;&#x2F;strong&gt; The Rust ecosystem has solid CUDA and Metal support. As GPU-accelerated bioinformatics becomes standard, our compute layer is ready.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-rust-connects-to-the-platform&quot;&gt;How Rust connects to the platform&lt;&#x2F;h3&gt;
&lt;p&gt;The platform itself is Elixir&#x2F;Phoenix. Rust powers the compute through two paths:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;In the browser (WASM).&lt;&#x2F;strong&gt; When you preview a FASTA file or run an alignment in a notebook, that is cyanea-seq and cyanea-align compiled to WebAssembly. No server needed.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;On the server (NIFs).&lt;&#x2F;strong&gt; Heavy operations like file checksumming, metadata extraction, and batch alignment run as Rust NIFs inside the Elixir runtime through Rustler. You get Rust speed with Erlang’s concurrency model and fault tolerance.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rest-api-and-cli&quot;&gt;REST API and CLI&lt;&#x2F;h2&gt;
&lt;p&gt;Not everything belongs in a web browser. Pipelines need to push data programmatically. Automation scripts need to create spaces and upload datasets. CI systems need to validate outputs.&lt;&#x2F;p&gt;
&lt;p&gt;The Cyanea API covers everything you can do in the web interface. Spaces, notebooks, protocols, datasets, search, webhooks, all through a standard REST API.&lt;&#x2F;p&gt;
&lt;p&gt;Authentication works two ways. &lt;strong&gt;API keys&lt;&#x2F;strong&gt; with the &lt;code&gt;cyn_&lt;&#x2F;code&gt; prefix, scoped to read, write, or admin permissions, good for service accounts and automation. &lt;strong&gt;JWT tokens&lt;&#x2F;strong&gt; issued via email and password, valid for one hour, good for interactive scripts. Rate limiting is 1,000 requests per 15 minutes for API keys and 5,000 for JWT sessions.&lt;&#x2F;p&gt;
&lt;p&gt;We also built a CLI tool called &lt;code&gt;cyn&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;cyn login
cyn spaces list
cyn spaces create --name &amp;quot;RNA-Seq Analysis&amp;quot; --visibility public
cyn datasets upload my-space&amp;#x2F;counts.csv .&amp;#x2F;data&amp;#x2F;counts.csv
cyn notebooks import my-space .&amp;#x2F;analysis.ipynb
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It is a standalone Elixir escript, no dependencies beyond the binary. Configuration lives in &lt;code&gt;~&#x2F;.config&#x2F;cyn&#x2F;config.json&lt;&#x2F;code&gt; or environment variables.&lt;&#x2F;p&gt;
&lt;p&gt;Webhooks let you subscribe to events across the platform. Space created, dataset updated, protocol modified, notebook changed. Each delivery is HMAC-SHA256 signed and retried up to 5 times with exponential backoff.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;federation&quot;&gt;Federation&lt;&#x2F;h2&gt;
&lt;p&gt;This is the part that makes Cyanea structurally different from other platforms.&lt;&#x2F;p&gt;
&lt;p&gt;Cyanea is federated. Your institution can run its own Cyanea node, a self-contained instance with full functionality. Data stays on your infrastructure, under your control. When you are ready to share, you selectively publish datasets, protocols, or notebooks to the Cyanea network. Other nodes and the public hub can discover and reference your published work. Attribution and provenance travel with the data.&lt;&#x2F;p&gt;
&lt;p&gt;Think of it like email. Your organization runs its own mail server, but you can send messages to anyone.&lt;&#x2F;p&gt;
&lt;p&gt;This matters because centralized platforms have a fundamental tension with science. Researchers need to share data openly, but institutions need to control where sensitive data lives. Regulatory compliance, data sovereignty laws, and institutional policies all create constraints that a single SaaS platform cannot accommodate.&lt;&#x2F;p&gt;
&lt;p&gt;Every file in Cyanea is content-addressed using SHA-256 hashes. This gives you deduplication (two researchers uploading the same reference genome results in one stored copy) and integrity (a content hash is a permanent, verifiable proof of what the data contained). Federated nodes can verify that synced data has not been tampered with without trusting the source.&lt;&#x2F;p&gt;
&lt;p&gt;Federation is live today. Nodes can register, sync manifests, and publish to the hub. We are actively building incremental sync, signed manifests using organizational keys, cross-node citations, and pull mirroring.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-tech-stack&quot;&gt;The tech stack&lt;&#x2F;h2&gt;
&lt;p&gt;The platform is Elixir&#x2F;Phoenix end to end. LiveView for real-time UI updates without writing JavaScript. Phoenix Channels for collaboration features. Oban for reliable background job processing (file uploads, webhook deliveries, metadata extraction, notebook execution).&lt;&#x2F;p&gt;
&lt;p&gt;The database layer supports both SQLite and PostgreSQL through a compile-time adapter. The open-source version defaults to SQLite for simple single-file deployment. The hosted version at app.cyanea.bio can use PostgreSQL. Both adapters share the same schema and migrations.&lt;&#x2F;p&gt;
&lt;p&gt;File storage is content-addressed. Every blob gets a SHA-256 hash, and that hash is its identity. Blobs are deduplicated automatically. Storage quotas are enforced per user and per organization.&lt;&#x2F;p&gt;
&lt;p&gt;Authentication supports email&#x2F;password with Guardian JWT tokens and API key authentication. Organizations have role-based access with owner, admin, member, and viewer levels. Site admins have a global bypass for all authorization checks.&lt;&#x2F;p&gt;
&lt;p&gt;The deployment runs on Hetzner, built with Vela, with SQLite on a mounted volume. It is simple on purpose. One server, one file, no external database process to manage.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;plans-and-pricing&quot;&gt;Plans and pricing&lt;&#x2F;h2&gt;
&lt;p&gt;Cyanea is free for public work. Free accounts get 1 GB of storage, 50 MB max file size, 20 versions per notebook, and WASM notebook execution.&lt;&#x2F;p&gt;
&lt;p&gt;Pro accounts ($39&#x2F;month) get 50 GB storage, 200 MB max file size, unlimited versions, server-side Elixir execution, and private spaces.&lt;&#x2F;p&gt;
&lt;p&gt;Organizations start at $499&#x2F;workspace&#x2F;month with 200 GB storage, unlimited members, and all Pro features.&lt;&#x2F;p&gt;
&lt;p&gt;The open-source version is free to self-host with no restrictions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-we-are-building-next&quot;&gt;What we are building next&lt;&#x2F;h2&gt;
&lt;p&gt;The platform is live but we are not done. Here is what is coming:&lt;&#x2F;p&gt;
&lt;p&gt;Community-contributed protocol templates. If you have a well-tested protocol, we want to include it in the template library.&lt;&#x2F;p&gt;
&lt;p&gt;More crate development. The Rust ecosystem keeps growing. Python bindings via PyO3, broader GPU acceleration for batch operations, and more file format support.&lt;&#x2F;p&gt;
&lt;p&gt;Incremental federation sync. Right now nodes can publish and sync, but the sync is full rather than incremental. We are building efficient delta updates.&lt;&#x2F;p&gt;
&lt;p&gt;Signed manifests. Organizational keys for attestation, so you can verify who published what and when.&lt;&#x2F;p&gt;
&lt;p&gt;Better single-cell workflows. The &lt;code&gt;single-cell&lt;&#x2F;code&gt; feature in cyanea-omics already handles MTX loading, RNA velocity, and batch correction. We are expanding this with more integration methods and visualization.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;&#x2F;h2&gt;
&lt;p&gt;Go to &lt;a href=&quot;https:&#x2F;&#x2F;app.cyanea.bio&quot;&gt;app.cyanea.bio&lt;&#x2F;a&gt; and create an account. Create a space, upload some data, start a notebook, write a protocol. Everything works today.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to use the Rust libraries directly, they are on &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cyanea-bio&#x2F;labs&quot;&gt;GitHub&lt;&#x2F;a&gt;. Every crate is documented and tested.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to self-host, the open-source version is at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cyanea-bio&#x2F;cyanea&quot;&gt;github.com&#x2F;cyanea-bio&#x2F;cyanea&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you have questions, feedback, or protocols you would like to contribute, &lt;a href=&quot;&#x2F;contact&quot;&gt;reach out&lt;&#x2F;a&gt;. We read everything.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
