Un logiciel libre, et comment l’installer chez vous
Soldlyne est sous licence GNU Affero General Public License v3.0 : faites-le tourner, étudiez-le, modifiez-le et partagez-le. Si vous proposez une version modifiée à d’autres par le réseau, publiez vos modifications sous la même licence.
Ce qu’il vous faut
- Node 20 ou plus et pnpm
- Postgres
- Une adresse et un secret pour l’installation
- Pour l’essayer en local : Docker pour la base
docker run -d --name soldlyne-db \
-e POSTGRES_USER=soldlyne -e POSTGRES_PASSWORD=soldlyne -e POSTGRES_DB=soldlyne \
-p 55433:5432 postgres:17-alpine
cp .env.example .env # then fill it in
pnpm install
pnpm db:migrate
pnpm dev --port 3100Sur un serveur
Il tourne partout où tournent Node et Postgres. Sur Vercel, pnpm vercel-build applique les migrations à chaque déploiement et vercel.json fixe la région et la tâche horaire. Ailleurs :
pnpm install
pnpm db:migrate
pnpm build
pnpm startAppelez ensuite /api/cron/sync chaque heure avec Authorization: Bearer <CRON_SECRET>, si vous connectez des boîtes. Sans boîte connectée nulle part, l’appel s’arrête sur une réponse en cache sans toucher à la base.
Les réglages qui comptent d’abord
| Variable | À quoi elle sert |
|---|---|
| DATABASE_URL | Postgres, avec un rôle autorisé à faire SET ROLE soldlyne_app. |
| DATABASE_URL_UNPOOLED | L’adresse directe du propriétaire, pour les migrations, quand votre hébergeur mutualise les connexions. |
| BETTER_AUTH_URL | L’adresse publique de l’installation. |
| BETTER_AUTH_SECRET | Signe les sessions et les liens de devis. |
| SOLDLYNE_ADMINS | Qui peut obtenir un compte sans invitation et créer des espaces. Vide, personne. |
La liste complète, avec les emails et la synchronisation des boîtes, est dans le README.
Les rôles de la base
Les migrations tournent avec l’adresse du propriétaire, et la première crée soldlyne_app, un rôle sans connexion qui ne peut pas contourner la sécurité au niveau des lignes. L’application se connecte avec une adresse autorisée à prendre ce rôle. Chaque opération sur les données d’un espace est alors une transaction qui prend le rôle et fixe l’espace : la sécurité au niveau des lignes la limite aux lignes de cet espace, quoi que dise la requête.
Un point à vérifier : un superutilisateur ou un rôle avec BYPASSRLS voit toutes les lignes tant qu’il n’a pas pris ce rôle. Certains hébergeurs donnent cet attribut à leur rôle propriétaire.
La connexion
Le fournisseur d’identité de votre société
N’importe quel serveur OpenID Connect. Quand il est configuré, c’est le seul moyen d’entrer, et il doit se porter garant de chaque adresse.
Adresses et mots de passe
La connexion reste fermée tant qu’un lien envoyé par email n’a pas prouvé l’adresse : cette voie demande un compte Resend et un expéditeur.
Dans les deux cas, personne n’obtient de compte tant que son adresse n’est pas dans SOLDLYNE_ADMINS ou n’a pas d’invitation encore valable.
Brancher un assistant
Ajoutez l’adresse /api/mcp de votre installation à Claude, ChatGPT ou tout client MCP comme connecteur distant. Le client s’enregistre, vous vous connectez et vous l’approuvez, et il agit pour vous dans tous vos espaces. Dans Claude Code :
claude mcp add --transport http soldlyne <your address>/api/mcpContribuer
Signalez un problème ou proposez une idée dans les tickets. Le README et le document produit du dépôt disent comment il est construit et ce qu’il ne fera pas.
Ouvrir un ticket