VaneStack Logo

VaneStack

A powerful, easy-to-use Dart backend framework inspired by PocketBase.

Website ยท Documentation


Features

  • Authentication: JWT-based auth with login, logout, refresh tokens, password reset
  • Dynamic Collections: Create collections with custom attributes, rules, and indexes
  • Real-time: Server-Sent Events (SSE) for watching collections and users
  • Admin Dashboard: Web UI for managing your data
  • SQLite Database: Built-in Drift ORM with SQLite
  • REST API: Full REST API for all resources
  • Middleware: CORS, logging, JWT decoding, rate limiting, request injection
  • Code Generation: Automatic route generation and client SDK

Quick Start

Option 1: Standalone Server (No Custom Code)

If you just need the server as-is without custom routes or endpoints, install the CLI globally and run it:

dart pub global activate vanestack
vanestack start

That's it. The server will start on http://localhost:8080 with all built-in endpoints ready to go.

Option 2: Custom Routes & Endpoints

If you want to add custom routes, middleware, or extend the server, add VaneStack as a dependency in your project:

  1. Add vanestack to your pubspec.yaml:
dependencies:
  vanestack: # see pub.dev for latest version
  1. Create bin/main.dart:
import 'package:vanestack/vanestack.dart';

void main(List<String> args) async {
  final server = VaneStack();
  await server.run(args);
}
  1. Run the server:
dart run bin/main.dart start

From here you can add custom routes with addRoute and extend the server however you like. See the Adding Custom Routes section below.

Admin Setup

Create your first admin user:

vanestack users create -e admin@example.com -p yourpassword -s
# or, if running from a project:
dart run bin/main.dart users create -e admin@example.com -p yourpassword -s

Adding Custom Routes

Use the addRoute method to register custom endpoints:

import 'package:vanestack/vanestack.dart';
import 'package:shelf/shelf.dart';

void main(List<String> args) async {
  final vanestack = VaneStack();

  vanestack.addRoute(HttpMethod.get, '/hello', (request) => Response.ok('Hello!'));
  vanestack.addRoute(HttpMethod.get, '/users/<userId>', (request) async {
    // ...
  });

  await vanestack.run(args);
}

Routes added with addRoute are automatically included in the generated client SDK. Pass ignoreForClient: true to exclude a route from the client.

Architecture

VaneStack is built with:

  • Server: Shelf web framework
  • Database: Drift ORM with SQLite
  • Auth: JWT tokens with refresh tokens
  • Real-time: Server-Sent Events
  • Dashboard: Jaspr web app
  • Client: Generated Dart client SDK

Development

Code Generation

dart run bin/main.dart generate   # regenerate client SDK

Testing

dart test

Packages

Package Description
vanestack_annotation @Route annotation and HttpMethod enum
vanestack_common Shared models and types
vanestack_client Generated HTTP client SDK
vanestack_generator Build runner code generator

License

This project is licensed under the BSD 3-Clause License.

Libraries

vanestack