<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Pages on HyperCrux.com</title>
    <link>https://hypercrux.com/pages/</link>
    <description>Recent content in Pages on HyperCrux.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://hypercrux.com/pages/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>About</title>
      <link>https://hypercrux.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://hypercrux.com/about/</guid>
      <description>&lt;p&gt;HyperCrux.com is the home of HyperCrux, a small database where every record has four handles. You can look a record up by its key, query it with SQL, follow its links to other records, or find it by how close its vector is to a question. All four reach the same records, in one SQLite file, so they always agree.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-it-exists&#34;&gt;Why It Exists&lt;/h2&gt;&#xA;&lt;p&gt;Apps that use AI tend to spread one set of facts across three systems. The records sit in a regular database. Their embeddings sit in a vector database, so the app can search by meaning. The connections between them sit in a graph database. Every change then has to be copied from one to the others, and sooner or later a copy goes missing. Search finds a document that was deleted. A link points at a record that isn&amp;rsquo;t there. For a small team, that&amp;rsquo;s three systems to run and a sync job to babysit, often for a few thousand documents.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://hypercrux.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://hypercrux.com/contact/</guid>
      <description>&lt;p&gt;HyperCrux.com would like to hear from:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anyone trying HyperCrux out.&lt;/strong&gt; What worked, what got in the way, and what you used before.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anyone who found a bug.&lt;/strong&gt; A search that missed a closer record, a link that outlived its record, an error you didn&amp;rsquo;t expect.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anyone with an idea&lt;/strong&gt; for something HyperCrux should do, or a language it should have an example for.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Write to &lt;strong&gt;&lt;a href=&#34;mailto:info@hypercrux.com&#34;&gt;info@hypercrux.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bug reports are also welcome on &lt;a href=&#34;https://github.com/hypercrux/hypercrux/issues&#34;&gt;GitHub&lt;/a&gt;. It helps to include what &lt;code&gt;hypercrux version&lt;/code&gt; prints, your operating system, and the steps that show the problem. Please don&amp;rsquo;t send real customer data: a few made-up records that show the same thing are enough.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Download HyperCrux</title>
      <link>https://hypercrux.com/download/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://hypercrux.com/download/</guid>
      <description>&lt;p&gt;The &lt;code&gt;hypercrux&lt;/code&gt; command is one file with nothing else to install. Each archive below holds it with its license files. The links always point to the latest release.&lt;/p&gt;&#xA;&lt;div style=&#34;overflow-x:auto&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;System&lt;/th&gt;&#xA;          &lt;th&gt;Download&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hypercrux/hypercrux/releases/latest/download/hypercrux_linux_amd64.tar.gz&#34;&gt;hypercrux_linux_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, ARM64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hypercrux/hypercrux/releases/latest/download/hypercrux_linux_arm64.tar.gz&#34;&gt;hypercrux_linux_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Apple silicon&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hypercrux/hypercrux/releases/latest/download/hypercrux_darwin_arm64.tar.gz&#34;&gt;hypercrux_darwin_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Intel&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hypercrux/hypercrux/releases/latest/download/hypercrux_darwin_amd64.tar.gz&#34;&gt;hypercrux_darwin_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Windows, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hypercrux/hypercrux/releases/latest/download/hypercrux_windows_amd64.zip&#34;&gt;hypercrux_windows_amd64.zip&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;em&gt;Checksums are in &lt;a href=&#34;https://github.com/hypercrux/hypercrux/releases/latest/download/SHA256SUMS&#34;&gt;SHA256SUMS&lt;/a&gt;. Every release is listed on &lt;a href=&#34;https://github.com/hypercrux/hypercrux/releases&#34;&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&gt;&#xA;&lt;p&gt;On Linux or macOS:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xzf hypercrux_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mv hypercrux /usr/local/bin/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hypercrux version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Linux binaries are static, so they run on any distribution. The macOS binaries aren&amp;rsquo;t signed by Apple, so macOS may block the first run; allow it in System Settings under Privacy &amp;amp; Security, or run &lt;code&gt;xattr -d com.apple.quarantine hypercrux&lt;/code&gt;. On Windows, unzip the archive and put &lt;code&gt;hypercrux.exe&lt;/code&gt; in a folder on your PATH.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick Start</title>
      <link>https://hypercrux.com/quick-start/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://hypercrux.com/quick-start/</guid>
      <description>&lt;p&gt;HyperCrux is a database where every record can be reached four ways: by key, by SQL, by following links and by similarity. This page takes you from nothing to all four in a few minutes, from the command line, from Go and from any other language.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-get-the-hypercrux-command&#34;&gt;1. Get the hypercrux Command&lt;/h2&gt;&#xA;&lt;p&gt;Download the archive for your system from &lt;a href=&#34;https://hypercrux.com/download/&#34;&gt;the download page&lt;/a&gt;, unpack it and put &lt;code&gt;hypercrux&lt;/code&gt; somewhere on your PATH. Check it works:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reference</title>
      <link>https://hypercrux.com/reference/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://hypercrux.com/reference/</guid>
      <description>&lt;p&gt;Everything HyperCrux offers, in one place: the Go calls, the commands, the SQL functions and the rules for keys, fields, links and vectors. The &lt;a href=&#34;https://github.com/hypercrux/hypercrux#readme&#34;&gt;README on GitHub&lt;/a&gt; explains each of them at more length, and &lt;a href=&#34;https://github.com/hypercrux/hypercrux/blob/main/FORMAT.md&#34;&gt;FORMAT.md&lt;/a&gt; describes the file for programs that write it without HyperCrux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-rules&#34;&gt;The Rules&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Keys&lt;/strong&gt; are written &lt;code&gt;table:id&lt;/code&gt;, such as &lt;code&gt;docs:7&lt;/code&gt;. The table name is lower-case letters, digits and underscores, starting with a letter, up to 63 characters. Anything can follow the colon, up to 1,024 bytes for the whole key. A key never changes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fields&lt;/strong&gt; are the table&amp;rsquo;s columns. A put sets the fields it&amp;rsquo;s given, leaves the others alone, and adds a column for a field the table hasn&amp;rsquo;t seen. Setting a field to null clears it. Maps and lists are stored as JSON text.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Vectors&lt;/strong&gt; go in the field &lt;code&gt;vec&lt;/code&gt;, stored as float32 values. The first vector in a table sets the size for the whole table. A vector can&amp;rsquo;t be empty, all zeros, or contain NaN or infinity.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Links&lt;/strong&gt; go one way, from one record to another, with a type of 1 to 200 characters, such as &lt;code&gt;owns&lt;/code&gt; or &lt;code&gt;cites&lt;/code&gt;. Both records must exist. Deleting a record deletes its links.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Distance&lt;/strong&gt; is cosine distance: 0 for the same direction, 1 for unrelated, 2 for opposite. Search compares every vector that passes the filter, so results are exact.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;go&#34;&gt;Go&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go get github.com/hypercrux/hypercrux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style=&#34;overflow-x:auto&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Call&lt;/th&gt;&#xA;          &lt;th&gt;Does&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Open(path)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Opens a file, creating it if needed&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Get(key)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A record&amp;rsquo;s fields, or &lt;code&gt;ErrNotFound&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Put(key, fields)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Creates or updates a record&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Delete(key)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Deletes a record and its links&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Scan(prefix, after, limit)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Records whose keys start with &lt;code&gt;prefix&lt;/code&gt;, in key order&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Exec&lt;/code&gt;, &lt;code&gt;Query&lt;/code&gt;, &lt;code&gt;QueryRow&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Plain SQL, with HyperCrux&amp;rsquo;s functions available&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Link(from, type, to)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Links two records&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Unlink(from, type, to)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Removes a link. An empty type removes every type&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Neighbours(key, dir, type)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;A record&amp;rsquo;s links: &lt;code&gt;Out&lt;/code&gt;, &lt;code&gt;In&lt;/code&gt; or &lt;code&gt;Both&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Walk(key, dir, type, depth)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Every record up to &lt;code&gt;depth&lt;/code&gt; links away, nearest first&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Nearest(table, vector, k, where, args...)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;The &lt;code&gt;k&lt;/code&gt; closest vectors, with an optional SQL filter&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Update(func(tx) error)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Runs a function as one transaction. &lt;code&gt;Tx&lt;/code&gt; has all the calls above&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Adopt(table)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Makes a table created with plain SQL a record table, or brings one back in step after a schema change&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Drop(table)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Deletes a record table with its records and their links&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;Check()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Confirms keys, rows, links and vectors agree&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Errors that break a rule wrap &lt;code&gt;ErrInvalid&lt;/code&gt;, and missing keys, links and tables wrap &lt;code&gt;ErrNotFound&lt;/code&gt;. The full documentation is on &lt;a href=&#34;https://pkg.go.dev/github.com/hypercrux/hypercrux&#34;&gt;pkg.go.dev&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
