Skip to content

Your data is about to get faster

The high-performance columnar database engineered for lightning-fast analytics and seamless data operations.

⚡ Blazing Fast 📊 Columnar Storage 🔧 Zero Dependencies ☁️ Cloud Native 🧠 In-Process Embedding 🚀 Sub-millisecond Queries 💾 Under 1MB Binary 🔓 MIT License ⚡ Blazing Fast 📊 Columnar Storage 🔧 Zero Dependencies ☁️ Cloud Native 🧠 In-Process Embedding 🚀 Sub-millisecond Queries 💾 Under 1MB Binary 🔓 MIT License

Think fast. Build faster.

  • Blazing Fast


    Columnar storage with vectorized operations delivers sub-millisecond query performance on analytical workloads.

  • Simple Syntax


    Intuitive LISP-like syntax flattens the learning curve. Write powerful queries in minutes, not hours.

    Learn Syntax

  • Pure C, Zero Dependencies


    Under 1MB binary fits in CPU cache. No external dependencies means simple deployment anywhere.

  • Production Ready


    Battle-tested columnar engine optimized for real-world analytics and data processing pipelines.

  • In-Process Embedding


    No separate database server needed. Embed directly in your application for immediate data access with zero network overhead.

  • Cloud Native Scaling


    Scale effortlessly on any cloud. No limits, no bottlenecks. Save costs by optimizing memory usage and CPU hours.

Expressive. Readable. Fast.

Rayfall combines the power of array programming with the clarity of Lisp syntax.

; Create a table
(set employees (table [name dept salary hire_date] 
  (list 
    (list "Alice" "Bob" "Charlie" "David") 
    ['IT 'HR 'IT 'IT] 
    [75000 65000 85000 72000] 
    [2021.01.15 2020.03.20 2019.11.30 2022.05.10])))

; Select with filtering
(select {
  name: name 
  salary: salary 
  from: employees 
  where: (> salary 70000)})

; Group by and aggregate
(select {
  avg_salary: (avg salary)
  headcount: (count name)
  from: employees
  by: dept})
; Create a table
(set employees (table [name age] (list ['Alice 'Bob] [25 30])))

; Insert a single row
(set employees (insert employees (list 'Charlie 35)))

; Insert multiple rows
(set employees (insert employees (list ['David 'Eve] [40 25])))

; In-place insertion
(insert 'employees (list "Mike" 75))
; Create a table
(set employees (table [name dept salary] 
  (list 
    (list "Alice" "Bob" "Charlie") 
    ['IT 'HR 'IT] 
    [75000 65000 85000]))))

; Update with where clause
(set employees (update {
  salary: (* salary 1.1)
  from: employees
  where: (> salary 70000)}))

; Update with grouping
(set employees (update {
  salary: (+ salary 1000)
  from: employees
  by: dept
  where: (> salary 55000)}))
; Create a table with key column
(set employees (table [id name age] (list [1 2] ['Alice 'Bob] [25 30]))))

; Upsert: updates id=2, inserts id=3
(set employees (upsert employees 1 (list [2 3] ['Bob-updated 'Charlie] [30 35]))))

; Upsert single row
(set employees (upsert employees 1 (list 4 'David 40))))

; In-place upsert
(upsert 'employees 1 (list 11 'Kate 27))
; Alter vector elements
(set prices [100 200 300])
(set prices (alter prices + 1 10))
; → [100 210 300]

; Alter table column
(set trades (table [price volume] (list [100 200] [50 60]))))
(set trades (alter trades + 'price 10))
; → price: [110 210], volume: [50 60]

; In-place alteration
(alter 'prices + 10)
; Create tables
(set trades (table [symbol order_id price quantity] 
    (list ['AAPL 'MSFT 'GOOG] [1001 1002 1003] 
          [150.25 300.50 125.75] [100 200 150]))))

(set orders (table [order_id client_id timestamp status] 
   (list [1001 1002 1004] 
         ['CLIENT_A 'CLIENT_B 'CLIENT_C] 
         [09:00:00 09:05:00 09:10:00] 
         ['FILLED 'FILLED 'PENDING]))))

; Left join - keeps all rows from left table
(left-join [order_id] trades orders)

; Inner join - only matching rows
(inner-join [order_id] trades orders)

; As-of join for time-series data
(asof-join [Sym Ts] trades quotes)

Integrate with your Stack

  • Python Bindings


    Native Python integration through FFI bindings. Use RayforceDB directly from your Python applications with zero overhead.

    Python Docs

  • WebAssembly


    Run RayforceDB directly in your browser. Try the interactive WASM playground with zero installation required.

    Try Playground

  • C Plugin System


    Extend functionality with dynamic C plugins. Load custom functions and modules at runtime for maximum flexibility.

    Load Function

Get started in minutes

RayforceDB is open source under MIT license. Download, build, and run your first query today.

Read the Docs