Critto staat normaal in je Critto-account. Wil je liever alles bewaren op een computer van jezelf, dan kun je de Critto-server zelf draaien: je crittos, hun herinneringen en je chats blijven op die computer. De desktop- en telefoonapps van Critto maken er verbinding mee.
Deze handleiding is voor Linux. Je hebt nodig:
- een 64-bits Linux-computer (Intel/AMD of ARM, bijvoorbeeld een Raspberry Pi 4/5) die aan blijft staan: een thuisserver, mini-pc of kleine cloudserver;
- ongeveer 1 GB vrij geheugen en een paar GB schijfruimte;
- beheerdersrechten (
sudo).
Voor NixOS is er een flake met een NixOS-module. Voor Debian, Ubuntu, Fedora, RHEL-achtige systemen en openSUSE zijn er pakketten met automatische updates. Andere systemen kunnen de containerimage of statische build gebruiken.
NixOS
Voeg de Critto-flake toe aan je systeemflake:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
critto.url = "https://downloads.critto.app/nix/critto.tar.gz";
critto.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { nixpkgs, critto, ... }: {
nixosConfigurations.myserver = nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; # or aarch64-linux
modules = [
./configuration.nix
critto.nixosModules.default
({ pkgs, ... }: {
services.critto = {
enable = true;
# Secrets (Boat key, backup key) stay out of the Nix store:
environmentFile = "/etc/critto/secrets.env";
# AI apps for your subscriptions (you sign in from the app):
aiPackages = [ pkgs.codex pkgs.nodejs_22 ];
# publicUrl = "https://critto.example.com";
};
})
];
};
};
}
Voer daarna sudo nixos-rebuild switch --flake .#myserver uit en koppel je apps met sudo crittod pair (stap 2).
- Updates:
nix flake update crittoen bouw opnieuw. Het pakket is de ondertekende, vooraf gebouwde release (een statisch binair bestand, dus geen problemen met glibc). Gebruikservices.critto.package = critto.packages.${system}.crittod-beta;voor het bètakanaal. - Geheimen: zet
BOAT_API_KEY=…enCRITTO_BACKUP_KEY=…inenvironmentFile(eigendom van root, modus 600; agenix en sops-nix werken ook). Het bestand wordt bij het starten van de dienst gelezen en nooit naar de store gekopieerd. - Instellingen:
listen(standaard127.0.0.1:8787),publicUrl,webHost,openFirewall(standaard uit),dataDir(standaard/var/lib/critto) ensettingsvoor andereCRITTO_*-variabelen.den.backendbepaalt waar het Hol draait (boat,localofnone; zie het Hol). - AI-apps: gebruik bij voorkeur pakketten uit nixpkgs in
aiPackages(bijvoorbeeldpkgs.codexenpkgs.claude-code; voor dat laatste isallowUnfreenodig). Voor apps die nixpkgs niet heeft, zet jeprograms.nix-ld.enable = true;aan en gebruik jesudo crittod setup ai(stap 3). Voor Pi is alleenpkgs.nodejs_22nodig inaiPackages; voer daarnasudo crittod setup ai piuit. - Toegang op afstand: zet
services.tailscale.enable = true;aan en voer daarnasudo tailscale serve --bg 8787uit, of stelservices.cloudflaredin met een ingress-regel naarhttp://127.0.0.1:8787(zie stap 5). - De dienst is met systemd afgeschermd, maar gebruikersnaamruimten blijven beschikbaar (bubblewrap en het lokale Hol hebben die nodig). Stel daarom
security.allowUserNamespaces = falseniet in.
De rest van deze handleiding geldt ook voor NixOS, behalve dat updates via nix flake update komen in plaats van apt of dnf.
1. Installeren
Open een terminal op de server en voer dit uit:
curl -fsSL https://downloads.critto.app/install-server.sh | sh
Dit voegt Critto's pakketbron toe, installeert critto-server, start de server en toont een koppelcode. Ga naar Je apps koppelen. Gebruik voor nieuwe versies vóór anderen het bètakanaal: curl -fsSL https://downloads.critto.app/install-server.sh | CRITTO_CHANNEL=beta sh.
Controleer eerst het installatieprogramma (optioneel)
Het installatieprogramma is ondertekend met Critto's releasesleutel. Controleer het desgewenst voordat je het uitvoert:
curl -fsSLO https://downloads.critto.app/install-server.sh
curl -fsSLO https://downloads.critto.app/install-server.sh.minisig
minisign -Vm install-server.sh -P RWTRac/2j5M3cvVpvtz0flaOy7sH5PFSc4LwbB7PxG0OMO2h8APoZtLG
sh install-server.sh
(minisign zit in de pakketbronnen van de meeste distributies.) De controlesom staat in install-server.sh.sha256. De pakketten zijn ook ondertekend en je pakketbeheerder controleert ze bij installatie en updates. Je kunt de pakketbron ook zelf instellen voor Debian/Ubuntu of Fedora/RHEL. De sleutelvingerafdruk is C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3 (‘Critto Packages packages@critto.app’).
Of stel de pakketbron zelf in
Debian / Ubuntu:
sudo install -d -m 755 /etc/apt/keyrings
sudo curl -fsSLo /etc/apt/keyrings/critto.gpg https://downloads.critto.app/keys/critto-archive-keyring.gpg
cat <<EOF | sudo tee /etc/apt/sources.list.d/critto.sources
Types: deb
URIs: https://downloads.critto.app/apt
Suites: stable
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/critto.gpg
EOF
sudo apt update && sudo apt install critto-server
Fedora / RHEL / Rocky / Alma:
sudo rpm --import https://downloads.critto.app/keys/critto-archive-keyring.asc
cat <<EOF | sudo tee /etc/yum.repos.d/critto.repo
[critto]
name=Critto
baseurl=https://downloads.critto.app/rpm/stable
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://downloads.critto.app/keys/critto-archive-keyring.asc
EOF
sudo dnf install critto-server
De vingerafdruk van de sleutel is C78E FB7F 67CC 8184 1F70 EE3D D121 DC94 C534 50E3 (‘Critto Packages packages@critto.app’).
Of gebruik Docker / Podman
docker run -d --name critto --restart unless-stopped \
-p 127.0.0.1:8787:8787 \
-v critto-data:/var/lib/critto -v critto-keys:/etc/critto -v critto-ai:/opt/critto-ai \
ghcr.io/nexferra-ltd/critto-server:latest
docker exec critto crittod pair
De container heeft geen speciale rechten nodig. Je gegevens staan in volume critto-data, de hoofdsleutel van de kluis in critto-keys (gescheiden van de gegevens, zodat een kopie van het ene niet het andere kan openen; zie Back-ups) en de AI-apps in critto-ai. Je kunt ook een Docker-secret koppelen aan /etc/critto/vault.key. Werk bij met docker pull ghcr.io/nexferra-ltd/critto-server:latest en maak de container daarna opnieuw aan met dezelfde volumes.
Of gebruik de statische build
Elke release heeft ook één bestand voor elke Linux-computer: https://downloads.critto.app/releases/<version>/critto-server-<version>-linux-x86_64.tar.gz (of -aarch64). Pak het uit en voer ./crittod serve uit. Je moet de server zelf actief en bijgewerkt houden; de pakketten zijn daarom eenvoudiger.
2. Je apps koppelen
De server laat alleen apparaten toe die je hebt gekoppeld. Zo koppel je een apparaat:
Vraag op de server een code op. Die is 10 minuten geldig en werkt één keer:
sudo crittod pairKies op het inlogscherm van de Critto-app Mijn eigen Critto-server gebruiken en vul het serveradres en de code in.
- Op de server zelf:
http://127.0.0.1:8787 - Voor andere apparaten heb je een bereikbaar adres nodig; zie Bereikbaar maken voor je andere apparaten.
- Op de server zelf:
Koppel meer apparaten via Instellingen → Apparaten → Telefoon koppelen. De QR-code bevat het luisteradres van de server. Als apparaten de server via een tunnel, proxy of domein bereiken, stel je CRITTO_PUBLIC_URL in (zie Instellingen).
Desktopapp op dezelfde computer? De desktopapp start normaal een eigen privé-Critto-server. Gebruik je de hier geïnstalleerde server, kies dan Mijn eigen Critto-server gebruiken met
http://127.0.0.1:8787, zodat beide dezelfde crittos gebruiken.
3. Je AI's koppelen
Crittos denken met een AI die je kiest. Er zijn twee manieren om die te koppelen.
Je AI-abonnementen (ChatGPT, Claude, Grok…)
Critto gebruikt hiervoor de officiële opdrachtregelapps. Installeer die eenmalig op de server:
sudo crittod setup ai
Kies de apps die je gebruikt of geef hun namen rechtstreeks op: sudo crittod setup ai codex claude.
| App | Te gebruiken met |
|---|---|
codex |
ChatGPT-abonnement (Plus, Pro, Business…) |
claude |
Claude-abonnement (Pro, Max…) |
grok |
SuperGrok / X Premium |
muse |
Meta AI (vereist Node.js 20+; installer voegt dit zo mogelijk toe) |
antigravity |
Google Antigravity. Lees eerst de waarschuwing: Google zegt dat andere software geen Antigravity-inlogsessie mag gebruiken en heeft accounts hiervoor opgeschort. |
De apps komen in /opt/critto-ai en werken zichzelf niet bij. Voer af en toe sudo crittod setup ai --update uit om ze bij te werken. Open daarna Koppelingen in de Critto-app en log bij elke app in. De inlogsessies staan op je server, niet in de app.
Aangepaste AI: lokale modellen en API-sleutels
Zet Instellingen → Geavanceerde modus aan en kies Instellingen → Aangepaste AI → Koppeling toevoegen. Alles wat de ‘OpenAI-compatibele’ API gebruikt, werkt. Kies een voorinstelling bij Beginnen met of vul zelf het adres in:
| Dienst | Basis-URL | API-sleutel |
|---|---|---|
| Ollama op de server | http://localhost:11434/v1 |
geen |
| LM Studio op de server | http://localhost:1234/v1 |
geen |
| Ollama op een andere computer thuis | http://192.168.1.20:11434/v1 |
geen |
| OpenRouter | https://openrouter.ai/api/v1 |
je OpenRouter-sleutel |
Kies Verbinding testen, selecteer een model en sla op. Daarna kun je die AI voor elke critto kiezen. Start Ollama op een andere computer met OLLAMA_HOST=0.0.0.0 zodat die verbindingen uit je netwerk accepteert. ‘localhost’ betekent altijd de Critto-server zelf.
4. Het Hol (optioneel)
Het Hol is de eigen cloudcomputer van je crittos voor grotere klussen (bouwen, browsen en apps gebruiken). Een zelf gehoste server draait Dens via je eigen Boat-account. Plak de Boat API-sleutel in de app bij Koppelingen, of zet die als BOAT_API_KEY in het instellingenbestand en start opnieuw.
Handig om te weten:
- Je server hoeft niet vanaf internet bereikbaar te zijn. Hij maakt verbinding met het Hol, niet andersom.
- Werk in het Hol vereist een AI met een openbaar internetadres (je abonnement of bijvoorbeeld OpenRouter). Een AI op je eigen netwerk (Ollama, LM Studio) kan chatten, maar het cloud-Hol kan die niet bereiken.
- Boat brengt Holtijd in rekening op je account.
Je eigen Hol op je eigen computer
Zonder Boat-account kan de server het Hol van elke persoon als kleine virtuele machine op deze computer draaien. Daarvoor zijn /dev/kvm, ongeveer 4 GB geheugen per draaiend Hol en een eenmalige imagebuild nodig. Stel dit in op NixOS:
services.critto.den.backend = "local";
Stel op andere systemen CRITTO_DEN_BACKEND=local in /etc/critto/critto.env in. De volledige handleiding (vereisten, groottes, wat een Hol kan bereiken en hoe je de image bouwt) staat in Je eigen Hol op je eigen computer.
5. Bereikbaar maken voor je andere apparaten
Standaard luistert de server alleen op de eigen computer (127.0.0.1:8787), de veilige instelling. Kies een optie om je telefoon of laptop overal te gebruiken. De eerste twee geven een veilig https://-adres zonder poorten op je router te openen.
Tailscale (het makkelijkst voor persoonlijk gebruik)
Installeer Tailscale op de server en je apparaten, log op elk apparaat in met hetzelfde account en voer op de server uit:
sudo tailscale serve --bg 8787
Gebruik het getoonde adres, bijvoorbeeld https://myserver.tail1234.ts.net. Alleen je eigen apparaten kunnen erbij.
Cloudflare Tunnel (een openbaar adres op je eigen domein)
Heb je een domein bij Cloudflare? Installeer dan cloudflared en voer uit:
cloudflared tunnel login
cloudflared tunnel create critto
cloudflared tunnel route dns critto critto.example.com
cat > ~/.cloudflared/config.yml <<EOF
tunnel: critto
credentials-file: $HOME/.cloudflared/$(cloudflared tunnel list | awk '/critto/{print $1}').json
ingress:
- hostname: critto.example.com
service: http://127.0.0.1:8787
- service: http_status:404
EOF
sudo cloudflared service install
De server staat daarna op https://critto.example.com. Elk apparaat heeft nog steeds een koppelcode nodig.
Een bestaande reverseproxy
Laat de proxy verbinden met http://127.0.0.1:8787 en WebSockets doorlaten. Met Caddy, dat HTTPS zelf regelt:
critto.example.com {
reverse_proxy 127.0.0.1:8787
}
Alleen op je thuisnetwerk
Zijn al je apparaten thuis, stel dan CRITTO_LISTEN=0.0.0.0:8787 in (zie Instellingen) en gebruik http://<server's IP address>:8787 in de apps. Dit is gewone http; gebruik het alleen op een vertrouwd netwerk. Stel CRITTO_PUBLIC_URL in op het gekozen adres zodat koppelings-QR-codes ernaar verwijzen.
6. Updates
De server werkt bij met de rest van je systeem:
- Debian / Ubuntu:
sudo apt update && sudo apt upgrade - Fedora / RHEL:
sudo dnf upgrade - openSUSE:
sudo zypper update
De dienst start vanzelf opnieuw na een update. Werk desktop- en telefoonapps apart bij.
7. Back-ups
Alles staat in /var/lib/critto: je crittos, herinneringen, chats, bestanden en AI-inlogsessies. Instellingen staan in /etc/critto/critto.env.
Maak zelf een kopie. Stop de server voor een consistente kopie:
sudo systemctl stop critto
sudo tar czf critto-backup-$(date +%F).tar.gz --exclude=/etc/critto/vault.key /var/lib/critto /etc/critto
sudo systemctl start critto
De server bewaart ook een recente databasekopie in /var/lib/critto/backups/latest.db zolang hij actief is.
Back-ups op een andere locatie (S3, Cloudflare R2, Backblaze B2…). Zet in de app Geavanceerde modus aan en kies Instellingen → Back-ups → Doel wijzigen…. Versleutel de back-ups voordat ze je server verlaten door een back-upsleutel toe te voegen:
sudo crittod backup keygen
Kopieer de regel CRITTO_BACKUP_KEY=… naar /etc/critto/critto.env. Bewaar ook een kopie op een veilige, offline plek; zonder deze sleutel kun je back-ups niet terugzetten. Herstart daarna met sudo systemctl restart critto.
Back-ups op een andere locatie worden voortdurend bijgewerkt:
- databasewijzigingen worden elke 10 seconden geüpload;
- bestanden van gebruikers worden elke 10 minuten geüpload;
- elke dag wordt een volledige kopie geüpload.
Je kunt elk moment van de afgelopen 7 dagen rechtstreeks vanuit de opslaglocatie herstellen:
sudo systemctl stop critto
sudo -u critto crittod backup list
sudo -u critto crittod backup pitr --to /var/lib/critto/restore --at "2026-10-02 14:30"
sudo -u critto mv /var/lib/critto/restore/critto.db /var/lib/critto/critto.db
sudo systemctl start critto
(--at is UTC; laat het weg voor de nieuwste status. De herstelde map users/ staat op dezelfde plek.)
Een enkel gedownload back-upbestand herstellen (een dagelijkse snapshot): zet het op een plek die gebruiker critto kan lezen (bijvoorbeeld /var/lib/critto) en voer dit uit:
Voor herstel download je het bestand, zet je het op een plek die gebruiker critto kan lezen (bijvoorbeeld /var/lib/critto) en voer je uit:
sudo systemctl stop critto
sudo crittod backup restore --from /path/to/downloaded-backup --to /var/lib/critto/restored.db
sudo -u critto mv /var/lib/critto/restored.db /var/lib/critto/critto.db
sudo systemctl start critto
De sleutels van de kluis.
Opgeslagen sleutels en wachtwoorden zijn versleuteld met een hoofdsleutel in /etc/critto/vault.key (aangemaakt bij installatie, alleen leesbaar voor gebruiker critto; in Docker staat die in volume critto-keys; op NixOS in services.critto.vaultKeyFile, standaard /var/lib/critto-keys/vault.key: altijd buiten de gegevens). De sleutel staat nooit in een back-up. De lijst met accountsleutels die ermee worden ontsloten (/var/lib/critto/vault/keys.db) krijgt alleen een eigen versleutelde back-up naast de andere, in vault/, die 30 dagen wordt bewaard als je een herstelsleutel instelt:
sudo crittod vault recovery-keygen
Zet de regel CRITTO_VAULT_BACKUP_RECIPIENT=… in /etc/critto/critto.env en start de server opnieuw. Bewaar de getoonde herstelidentiteit en een kopie van /etc/critto/vault.key offline in je wachtwoordmanager, nooit op de server. Zet na verlies van de server vault.key terug en download vault/latest.db.age:
sudo -u critto crittod vault restore --identity /path/to/recovery.txt /path/to/latest.db.age
Instellingen
De server leest /etc/critto/critto.env. Alle opties staan erin met uitleg. Bewerk het bestand met sudo nano /etc/critto/critto.env en voer daarna sudo systemctl restart critto uit. Veelgebruikte opties:
| Instelling | Wat doet die? |
|---|---|
CRITTO_LISTEN |
Waar de server luistert. Standaard 127.0.0.1:8787 (alleen deze computer). |
CRITTO_PUBLIC_URL |
Adres voor je apparaten, bijvoorbeeld https://critto.example.com. |
BOAT_API_KEY |
Boat-sleutel voor het Hol. |
CRITTO_BACKUP_KEY |
Versleutelt back-ups op afstand. |
CRITTO_ANTIGRAVITY=0 |
Verbergt Antigravity. |
CRITTO_PROACTIVE=0 |
Crittos nemen niet zelf contact op (ingeplande dingen wachten). Zonder Critto Smarts gebruiken check-ins de eigen AI van de critto. |
CRITTO_JOB_WORKERS |
Aantal achtergrondtaken (check-ins en ingeplande dingen) tegelijk. Standaard 4. |
Handige opdrachten:
| Opdracht | |
|---|---|
sudo crittod pair |
koppelcode voor een nieuw apparaat |
sudo crittod setup ai |
AI-apps installeren of bijwerken |
sudo crittod users |
accounts op deze server |
systemctl status critto |
serverstatus |
journalctl -u critto -f |
serverlog |
curl http://127.0.0.1:8787/health |
snelle gezondheidscontrole |
/health toont "desktop": "on-demand" totdat een Hol desktopsoftware nodig heeft. Dat is normaal; de server downloadt die dan.
Verwijderen
- Debian / Ubuntu:
sudo apt purge critto-server - Fedora / RHEL:
sudo dnf remove critto-server - Docker:
docker rm -f critto(voer ookdocker volume rm critto-data critto-keys critto-aiuit om gegevens te verwijderen)
Dit stopt de server en verwijdert het pakket en, als er geen andere Critto-pakketten zijn, de pakketbron. Je gegevens in /var/lib/critto blijven staan voor als je terugkomt. Alles verwijderen:
sudo rm -rf /var/lib/critto /etc/critto /opt/critto-ai
sudo userdel critto
Voorkom dat pakketten de pakketbron toevoegen door vóór installatie echo CRITTO_REPO=no | sudo tee /etc/default/critto uit te voeren.
Problemen oplossen
- De app zegt dat de server niet bereikbaar is. Controleer
systemctl status crittoen of het adres bereikbaar is vanaf het apparaat. Op een telefoon verwijst127.0.0.1naar de telefoon zelf. - ‘De koppelcode werkte niet.’ Codes zijn 10 minuten geldig en werken één keer. Maak een nieuwe met
sudo crittod pair. Gebruiksudo; anders krijg je een code voor een andere, persoonlijke server. - Een AI-app staat niet bij Koppelingen. Voer
sudo crittod setup ai <name>opnieuw uit; daarna start de server opnieuw. - Iets anders.
journalctl -u critto -n 100vertelt meestal wat er mis is.