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.
| Way | Gives you | On |
|---|---|---|
| The install script | fenec-server and fenec, in your home directory, no sudo | macOS and Linux, arm64 and x86_64 |
| Homebrew | the same two, kept up to date by brew | macOS and Linux, arm64 and x86_64 |
| .deb and .rpm | the same two, in /usr/bin | Debian, Ubuntu, Fedora, RHEL; amd64 and arm64 |
| A tarball | the same two, in a folder | macOS and Linux, arm64 and x86_64 |
| The Docker image | fenec-server alone, under 3 MB | anywhere Docker runs, amd64 and arm64 |
| A package for your language | a client for the server, or the database in your app | by language |
| From source | whatever main is today | where 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 | shIt 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
curlor awgetthat checks certificates;FENEC_VERSION=0.1.12names a release. - It checks the tarball against the release's
SHA256SUMSbefore 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/fenecdbThe 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.
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.debcurl -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.rpmThey 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 --helpThe 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.12A 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.
| Language | Install | Read |
|---|---|---|
| Python | pip install fenecdb (PyPI) | Your language |
| JavaScript, TypeScript | npm install @fenecdb/web: the client, and the database in a page | Quickstart: in the browser, JavaScript and TypeScript |
| Go | go get github.com/fenecdb/fenecdb/integrations/go | Your language |
| .NET | dotnet add package FenecDb (NuGet) | Your language |
| Swift | SwiftPM: github.com/fenecdb/fenecdb, product FenecDB | Mobile and native apps |
| Kotlin, Java | com.fenecdb:fenecdb-android (the AAR) or com.fenecdb:fenecdb (the JVM), on Maven Central | Mobile and native apps |
| Dart, Flutter | flutter pub add fenecdb_flutter, or fenecdb in Dart alone (pub.dev) | Mobile and native apps |
| Rust | fenec-core and fenec-ql from the repository: the engine as a library, with no dependencies | Embedded Rust |
| Java, PHP, Ruby | nothing: the language's own HTTP client | Your 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 SHA256SUMSNext
- 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.