Install

fenecdb is two programs, fenec-server and the shell, fenec, and a package for each language that reaches the server. Pick the way that suits your machine.

The commands here install release 0.1.12, so what they print is what that release prints. The rest of these docs describe the repository's main, which can be ahead of the release: a flag or a statement they show that your install lacks is in the next one, and fenec-server --help lists what yours has.

WayGives youOn
The install scriptfenec-server and fenec, in your home directory, no sudomacOS and Linux, arm64 and x86_64
Homebrewthe same two, kept up to date by brewmacOS and Linux, arm64 and x86_64
.deb and .rpmthe same two, in /usr/binDebian, Ubuntu, Fedora, RHEL; amd64 and arm64
A tarballthe same two, in a foldermacOS and Linux, arm64 and x86_64
The Docker imagefenec-server alone, under 3 MBanywhere Docker runs, amd64 and arm64
A package for your languagea client for the server, or the database in your appby language
From sourcewhatever main is todaywhere Rust builds

There is no Windows build of the programs yet: run the image, or the script inside WSL. The clients run anywhere their language does.

The install script

curl -fsSL https://fenecdb.com/install.sh | sh

It puts fenec-server and fenec in ~/.fenecdb/bin (FENEC_INSTALL names another directory) with no sudo, and edits no shell file: it prints the line that puts the directory on your PATH and leaves that to you.

export PATH="$HOME/.fenecdb/bin:$PATH"   # in ~/.zshrc, ~/.bashrc or ~/.profile to keep it
  • It downloads the latest release from GitHub over https, with curl or a wget that checks certificates; FENEC_VERSION=0.1.12 names a release.
  • It checks the tarball against the release's SHA256SUMS before it unpacks anything. That sum comes from the same release as the file, so it catches a damaged or cut-short download, not a release someone replaced.
  • Nothing runs until its last line. The script is functions, and main "$@" on its last line is what starts them, so a download cut short runs nothing. To read it before it runs: curl -fsSL https://fenecdb.com/install.sh | less (install.sh).
  • To remove it, delete ~/.fenecdb.

Homebrew

brew install fenecdb/tap/fenecdb

The formula installs fenec-server and fenec, the shell, on macOS and Linux (arm64 and x86_64): the release's own binaries, checked against their SHA-256, not built on your machine. brew upgrade fenecdb takes the next release and brew uninstall fenecdb removes it.

.deb and .rpm

Each release carries a package for amd64 and one for arm64, with its checksum in SHA256SUMS; releases from 0.1.12 on have them.

Debian, Ubuntu
curl -fLO https://github.com/fenecdb/fenecdb/releases/download/v0.1.12/fenecdb_0.1.12-1_amd64.deb   # arm64 on an ARM machine
sudo apt install ./fenecdb_0.1.12-1_amd64.deb
Fedora, RHEL
curl -fLO https://github.com/fenecdb/fenecdb/releases/download/v0.1.12/fenecdb-0.1.12-1.x86_64.rpm   # aarch64 on an ARM machine
sudo dnf install ./fenecdb-0.1.12-1.x86_64.rpm

They install fenec and fenec-server in /usr/bin and depend on nothing: the binaries are static.

A release tarball

TARGET=aarch64-apple-darwin   # or x86_64-apple-darwin, aarch64-unknown-linux-musl, x86_64-unknown-linux-musl
curl -LO https://github.com/fenecdb/fenecdb/releases/download/v0.1.12/fenec-v0.1.12-$TARGET.tar.gz
tar -xzf fenec-v0.1.12-$TARGET.tar.gz
cd fenec-v0.1.12-$TARGET
./fenec-server --help

The folder holds fenec-server and fenec, and nothing needs installing: run them from there, or copy them where your PATH looks. The release page lists every file.

The Docker image

The image holds fenec-server and nothing else: no shell, no libc, under 3 MB. Its data lives in /data, which the command below keeps in a volume.

docker run -d --name fenecdb -v fenecdata:/data \
  -p 127.0.0.1:8080:8080 -e FENEC_HTTP_TOKEN=a-token \
  ghcr.io/fenecdb/fenec-server:0.1.12

A container listens beyond localhost, so the server asks for a token, or for --insecure where you publish the port to your own machine only, as the Quickstart does. Its command is --http 0.0.0.0:8080 --file /data/data.fenec --sync 250: write every flag out when you override it, or the file is dropped. Run it in a container has the rest: one instance a file, memory limits, Kubernetes.

A package for your language

A server is reached from any language with its own HTTP client; these packages are the ones that do the typing for you, each its standard library alone, and the ones that keep the database in your app or your page.

LanguageInstallRead
Pythonpip install fenecdb (PyPI)Your language
JavaScript, TypeScriptnpm install @fenecdb/web: the client, and the database in a pageQuickstart: in the browser, JavaScript and TypeScript
Gogo get github.com/fenecdb/fenecdb/integrations/goYour language
.NETdotnet add package FenecDb (NuGet)Your language
SwiftSwiftPM: github.com/fenecdb/fenecdb, product FenecDBMobile and native apps
Kotlin, Javacom.fenecdb:fenecdb-android (the AAR) or com.fenecdb:fenecdb (the JVM), on Maven CentralMobile and native apps
Dart, Flutterflutter pub add fenecdb_flutter, or fenecdb in Dart alone (pub.dev)Mobile and native apps
Rustfenec-core and fenec-ql from the repository: the engine as a library, with no dependenciesEmbedded Rust
Java, PHP, Rubynothing: the language's own HTTP clientYour language

React, Cloudflare and LangChain have packages of their own (Integrations).

From source

For a build the releases do not have, or to work on fenecdb: clone the repository and build with cargo and make. Build from source has the commands, the tests and what each make target does.

Checking a download

A release's files are listed with their checksums in SHA256SUMS:

curl -LO https://github.com/fenecdb/fenecdb/releases/download/v0.1.12/SHA256SUMS
shasum -a 256 -c --ignore-missing SHA256SUMS    # Linux: sha256sum -c --ignore-missing SHA256SUMS

Next

  • Run the server and write a row: the Quickstart.
  • Open a file in the shell: The shell.
  • Run it for real: tokens, durability, limits and containers are on Server.