Liquidart is a Dart HTTP server framework for building REST APIs. Includes PostgreSQL ORM and OAuth2 provider. Revival of the abandoned AQUEDUCT project.

Overview

Liquidart

OSX/Linux Build Status Windows Build status codecov

Liquidart is a modern Dart HTTP server framework. The framework is composed of libraries for handling and routing HTTP requests, object-relational mapping (ORM), authentication and authorization (OAuth 2.0 provider) and documentation (OpenAPI). These libraries are used to build scalable REST APIs that run on the Dart VM.

If this is your first time viewing Liquidart, check out the tour.

Getting Started

  1. Install Dart.

  2. Activate Liquidart

     pub global activate liquidart
    
  3. Create a new project.

     liquidart create my_project
    

Open the project directory in IntelliJ IDE, Atom or Visual Studio Code. All three IDEs have a Dart plugin. For IntelliJ IDEA users, there are file and code templates for Liquidart.

Tutorials, Documentation and Examples

Step-by-step tutorials for beginners are available here.

You can find the API reference here or you can install it in Dash.

You can find in-depth and conceptual guides here.

An ever-expanding repository of Liquidart examples is here.

Comments
  • Global search and replace issues

    Global search and replace issues

    Global search and replace in the documentation has inadvertently replaced some references to Aqueduct that shouldn't have been:

    "This is a revival of the Liquidart project, which was abandoned by the StableKernel team. They did a great job with the Liquidart package, but reached a point where they can no longer support its active development."

    Great to see you keep the abandoned project alive as Liquidart.

    opened by jocubeit 3
  • Failed to precompile liquidart

    Failed to precompile liquidart

    my system is : Flutter 2.0.1 • channel stable • Dart SDK version: 2.12.0 (stable) on "macos_x64", I just command with

    pub global activate liquidart

    , it failed on precompile with this message:

    • _fe_analyzer_shared 14.0.0 (19.0.0 available)
    • analyzer 0.41.2 (1.3.0 available)
    • args 1.6.0 (2.0.0 available)
    • async 2.5.0
    • buffer 1.1.0
    • charcode 1.2.0
    • checked_yaml 1.0.4 (2.0.1 available)
    • cli_util 0.3.0
    • codable 1.0.0 (discontinued)
    • collection 1.15.0
    • convert 2.1.1 (3.0.0 available)
    • crypto 2.1.5 (3.0.1 available)
    • file 6.1.0
    • glob 2.0.1
    • isolate_executor 2.0.2+3 (discontinued)
    • json_annotation 4.0.1
    • liquidart 4.0.1-b2
    • logging 0.11.4 (1.0.1 available)
    • meta 1.3.0
    • open_api 2.0.1 (discontinued)
    • package_config 1.9.3 (2.0.0 available)
    • password_hash 2.0.0 (discontinued)
    • path 1.8.0
    • pedantic 1.11.0
    • postgres 2.2.0 (2.3.1 available)
    • pub_cache 0.2.3 (0.3.0 available)
    • pub_semver 1.4.4 (2.0.0 available)
    • pubspec_parse 0.1.8 (1.0.0 available)
    • runtime 1.0.0-9 (discontinued)
    • safe_config 3.0.0-b2 (discontinued)
    • source_span 1.8.1
    • string_scanner 1.1.0
    • term_glyph 1.2.0
    • typed_data 1.3.0
    • watcher 1.0.0
    • yaml 2.2.1 (3.1.0 available) Downloading liquidart 4.0.1-b2... Downloading safe_config 3.0.0-b2... Downloading runtime 1.0.0-9... Downloading password_hash 2.0.0... Downloading open_api 2.0.1... Downloading codable 1.0.0... Downloading yaml 2.2.1... Downloading pub_cache 0.2.3... Downloading logging 0.11.4... Downloading pub_semver 1.4.4... Downloading pubspec_parse 0.1.8... Downloading checked_yaml 1.0.4... Downloading isolate_executor 2.0.2+3... Downloading args 1.6.0... Downloading postgres 2.2.0... Downloading buffer 1.1.0... Downloading crypto 2.1.5... Downloading charcode 1.2.0... Downloading convert 2.1.1... Downloading path 1.8.0... Downloading json_annotation 4.0.1... Downloading string_scanner 1.1.0... Downloading source_span 1.8.1... Downloading collection 1.15.0... Downloading term_glyph 1.2.0... Downloading typed_data 1.3.0... Downloading meta 1.3.0... Downloading analyzer 0.41.2... Downloading _fe_analyzer_shared 14.0.0... Downloading cli_util 0.3.0... Downloading package_config 1.9.3... Downloading glob 2.0.1... Downloading async 2.5.0... Downloading pedantic 1.11.0... Downloading file 6.1.0... Downloading watcher 1.0.0... Precompiling executables... (7.1s) Failed to precompile liquidart:liquidart: ../../../../../.pub-cache/hosted/pub.dartlang.org/isolate_executor-2.0.2+3/lib/src/source_generator.dart:6:8: Error: Error when reading '../../../../../.pub-cache/hosted/pub.dartlang.org/analyzer-0.41.2/lib/analyzer.dart': No such file or directory import 'package:analyzer/analyzer.dart'; ^ ../../../../../.pub-cache/hosted/pub.dartlang.org/isolate_executor-2.0.2+3/lib/src/source_generator.dart:52:17: Error: Type 'ClassDeclaration' not found. static Future _getClass(Type type) async { ^^^^^^^^^^^^^^^^ ../../../../../.pub-cache/hosted/pub.dartlang.org/isolate_executor-2.0.2+3/lib/src/source_generator.dart:54:22: Error: Method not found: 'parseDartFile'. final fileUnit = parseDartFile(uri.toFilePath(windows: Platform.isWindows)); ^^^^^^^^^^^^^ ../../../../../.pub-cache/hosted/pub.dartlang.org/isolate_executor-2.0.2+3/lib/src/source_generator.dart:58:28: Error: 'ClassDeclaration' isn't a type. .where((u) => u is ClassDeclaration) ^^^^^^^^^^^^^^^^ ../../../../../.pub-cache/hosted/pub.dartlang.org/isolate_executor-2.0.2+3/lib/src/source_generator.dart:59:28: Error: 'ClassDeclaration' isn't a type. .map((cu) => cu as ClassDeclaration) ^^^^^^^^^^^^^^^^
    bug critical 
    opened by xijun-j 2
  • Own documentation

    Own documentation

    Currently in the readme, there is a link to the aqueduct docs. It would be nice if there is an own documentation linked (https://aldrinsartfactory.github.io/liquidart/).

    opened by CodeDoctorDE 3
  • Migration Aqueduct to Liquidart error:

    Migration Aqueduct to Liquidart error: "Bad state: No element" when run: liquidart serve

    I migration Aqueduct to Liquidart but I can't run command line: liquidart serve I using liquidart: ^5.0.0-b7

    liquidart serve Unhandled exception: Bad state: No element #0 ListMixin.first (dart:collection/list.dart:99:22) #1 EntityBuilder.getTableDefinitionForType (package:liquidart/src/runtime/orm/entity_builder.dart:246:35) #2 new EntityBuilder (package:liquidart/src/runtime/orm/entity_builder.dart:18:31) #3 DataModelCompiler.compile.<anonymous closure> (package:liquidart/src/runtime/orm/data_model_compiler.dart:15:42) #4 MappedIterator.moveNext (dart:_internal/iterable.dart:389:20) #5 new _GrowableList._ofOther (dart:core-patch/growable_array.dart:198:26) #6 new _GrowableList.of (dart:core-patch/growable_array.dart:152:26) #7 new List.of (dart:core-patch/array_patch.dart:50:28) #8 Iterable.toList (dart:core/iterable.dart:366:12) #9 DataModelCompiler.compile (package:liquidart/src/runtime/orm/data_model_compiler.dart:15:60) #10 LiquidartCompiler.compile (package:liquidart/src/runtime/compiler.dart:26:34) #11 new MirrorContext._.<anonymous closure> (package:replica/src/mirror_context.dart:13:34) #12 List.forEach (dart:core-patch/growable_array.dart:403:8) #13 new MirrorContext._ (package:replica/src/mirror_context.dart:12:15) #14 instance (package:replica/src/mirror_context.dart:7:41) #15 instance (package:replica/src/mirror_context.dart) #16 RuntimeContext.current (package:replica/src/context.dart:10:33) #17 CLICommand.decode (package:liquidart/src/cli/command.dart:110:27) #18 CLICommand.showColors (package:liquidart/src/cli/command.dart:71:26) #19 CLICommand.colorSymbol (package:liquidart/src/cli/command.dart:218:10) #20 CLICommand.displayError (package:liquidart/src/cli/command.dart:203:27) #21 CLICommand.process (package:liquidart/src/cli/command.dart:173:7) <asynchronous suspension> #22 main (file:///Users/dino/.pub-cache/hosted/pub.dartlang.org/liquidart-5.0.0-b7/bin/liquidart.dart:9:14) <asynchronous suspension>

    opened by dinozero 1
  • Liquidart will be re-written from scratch - Here's why

    Liquidart will be re-written from scratch - Here's why

    Please read to the end to understand how Liquidart started

    22nd April 2021 - 11:10 PM IST

    The initial idea I had, before beginning Liquidart was to create a server framework from scratch. At that point, even the name Liquidart didn't exist. The idea was simple. The idea was to provide a minimalistic framework which was fresh and modular, so that people can use it to expand their server applications.

    When I found out that Aqueduct was discontinued, I decided to migrate the package and revive it. I actually liked Aqueduct and it was the reason that I never wanted to learn nodejs just for server side programming. There were great tutorials explaining the use of Aqueduct for Server Applications, from programmers like Nick Manning @seenickcode ... The Aqueduct documentation was also helpful in explaining the structure of the framework and the proper way to use it.

    The entire Aqueduct package was a nightmare to migrate to Null Safety with more than 6000 errors showing up during migration. It took me 4 consecutive days of work to resolve all of those. I rescheduled all of my other projects to accommodate this. I barely had proper sleep for those 4 days. I hoped that the migration to null safety will prepare the package for publishing. Little did I know that the entire Aqueduct codebase was absolutely messed up. I have been trying to solve some list-related errors for the past 2 days, only to find out that those errors have been present in the project for more than 8 or so months. It was not the migration that caused all these problems. The codebase was messed up even before migration. That's why it is almost impossible to bring this package to a functioning state. And I am all alone working in this project, which makes it even worse.

    At this point, after going through so much complexities and troubles trying to revive the project all on my own, I am forced to go back to my initial decision. I will be creating a server framework from scratch and changing the documentation and examples to support the new codebase. I believe that is the right decision to make at this point, especially since the Liquidart package hasn't been adopted by many programmers. It is only a month old. It's better to provide a working alternative than to shove a broken package on people's faces pretending that it is the best thing in the world.

    enhancement critical 
    opened by AldrinMathew 11
  • Null check operator used on a null value using in Router constructor, RouteNode constructor

    Null check operator used on a null value using in Router constructor, RouteNode constructor

    Constructor has notation: Router({String? basePath, Future notFoundHandler(Request request)?}) That means that the notFoundHandler value can be null. In aexamples, you use default parameters (null). But in constructor you use : _unmatchedController = notFoundHandler!

    opened by ifuterman 3
  • "liquidart create newapp" Unhandled exception: Bad state: No element

    Unhandled exception:
    Bad state: No element
    #0 ListMixin.firstWhere (dart:collection/list.dart:167:5)
    #1 firstMetadataOfType (package:replica/src/mirror_context.dart:70:23)
    #2 new MirrorContext._. (package:replica/src/mirror_context.dart:31:22)
    #3 WhereIterator.moveNext (dart:_internal/iterable.dart:436:13)
    #4 new _GrowableList.ofOther (dart:core-patch/growable_array.dart:198:26)
    #5 new GrowableList.of (dart:core-patch/growable_array.dart:152:26)
    #6 new List.of (dart:core-patch/array_patch.dart:50:28)
    #7 Iterable.toList (dart:core/iterable.dart:366:12)
    #8 new MirrorContext. (package:replica/src/mirror_context.dart:32:8)
    #9 instance (package:replica/src/mirror_context.dart:7:41)
    #10 instance (package:replica/src/mirror_context.dart)
    #11 RuntimeContext.current (package:replica/src/context.dart:10:33)
    #12 CLICommand.decode (package:liquidart/src/cli/command.dart:104:27)
    #13 CLICommand.showColors (package:liquidart/src/cli/command.dart:64:26)
    #14 CLICommand.colorSymbol (package:liquidart/src/cli/command.dart:219:10)
    #15 CLICommand.displayError (package:liquidart/src/cli/command.dart:201:12)
    #16 CLICommand.process (package:liquidart/src/cli/command.dart:168:7)
    
    #17 main (file:///C:/Users/Everton/AppData/Local/Pub/Cache/hosted/pub.dartlang.org/liquidart-5.0.0-b4/bin/liquidart.dart:9:14)
    
    Unhandled exception:
    Bad state: No element
    #0 ListMixin.firstWhere (dart:collection/list.dart:167:5)
    #1 firstMetadataOfType (package:replica/src/mirror_context.dart:70:23)
    #2 new MirrorContext.. (package:replica/src/mirror_context.dart:31:22)
    #3 WhereIterator.moveNext (dart:_internal/iterable.dart:436:13)
    #4 new _GrowableList._ofOther (dart:core-patch/growable_array.dart:198:26)
    #5 new GrowableList.of (dart:core-patch/growable_array.dart:152:26)
    #6 new List.of (dart:core-patch/array_patch.dart:50:28)
    #7 Iterable.toList (dart:core/iterable.dart:366:12)
    #8 new MirrorContext. (package:replica/src/mirror_context.dart:32:8)
    #9 instance (package:replica/src/mirror_context.dart:7:41)
    #10 instance (package:replica/src/mirror_context.dart)
    #11 RuntimeContext.current (package:replica/src/context.dart:10:33)
    #12 CLICommand.decode (package:liquidart/src/cli/command.dart:104:27)
    #13 CLICommand.showColors (package:liquidart/src/cli/command.dart:64:26)
    #14 CLICommand.colorSymbol (package:liquidart/src/cli/command.dart:219:10)
    #15 CLICommand.displayError (package:liquidart/src/cli/command.dart:201:12)
    #16 CLICommand.process (package:liquidart/src/cli/command.dart:168:7)
    
    #17 main (file:///C:/Users/Everton/AppData/Local/Pub/Cache/hosted/pub.dartlang.org/liquidart-5.0.0-b4/bin/liquidart.dart:9:14)
    

    Dart SDK version: 2.12.3 (stable) (Wed Apr 14 11:02:39 2021 +0200) on "windows_x64"

    bug help wanted critical 
    opened by EvErTrEk 7
Owner
Aldrin's Art Factory
A platform to express the art inside you. Brought to you by Aldrin Mathew
Aldrin's Art Factory
A lightweight HTTP server framework for Dart.

arowana A lightweight HTTP server framework for Dart.It is based on the shelf library for handling HTTP requests and implements a high-performance rou

arcticfox 15 Nov 3, 2022
A simple dart http server in Koa2 style

Dia A simple dart http server like KoaJS. This package allows you to create a http / http server in a couple of lines. Dia creates a context from a bu

Andrey Unger 21 Dec 18, 2022
A Flutter Plugin for Requesting and Writing Reviews for the App Store and Google Play.

app_review Description Flutter Plugin for Requesting and Writing Reviews in Google Play and the App Store. Apps have to be published for the app to be

Rody Davis 37 Oct 10, 2022
Flutter package for makes it easy to integrate dialogflow and support dialogflow v2

Dialogflow v1 & v2 for Flutter apps. ❤️ Star ❤️ the repo to support the project. Thanks! A new Flutter package. Example Awesome Tutorials Flutter and

Victor Alfonso Rodas Oña 207 Dec 7, 2022
Google places picker plugin for flutter. Opens up the google places picker on ios and android returning the chosen place back to the flutter app.

flutter_places_dialog Shows a places picker dialog in ios and android, returning the data in the places picker to the app. Getting Started Generate yo

null 44 Dec 6, 2022
Dart HTTP server framework for building REST APIs. Includes PostgreSQL ORM and OAuth2 provider.

Aqueduct is a modern Dart HTTP server framework. The framework is composed of libraries for handling and routing HTTP requests, object-relational mapp

Stable Kernel 2.4k Jan 5, 2023
Dart HTTP server framework for building REST APIs. Includes PostgreSQL ORM and OAuth2 provider.

Aqueduct is a modern Dart HTTP server framework. The framework is composed of libraries for handling and routing HTTP requests, object-relational mapp

Abdelrahman Saed 2 Jul 7, 2021
💙 A simple Flutter app sample with hooks_riverpod, includes HTTP requests by dio using GitHub APIs.

?? A simple Flutter app sample with hooks_riverpod, includes HTTP requests by dio using GitHub APIs.

Kosuke Saigusa 16 Oct 13, 2022
Mentorup App developed using Flutter/Dart and Aqueduct as backend server is an app to help the startups

Mentorup App developed using Flutter/Dart and Aqueduct as backend server is an app to help the startups of various domains initiated by the budding entrepreneurs to get guidance and funding from the mentors and funders respectively.

Ekta Masrani 1 Dec 14, 2021
A library for building REST APIs easily with Dart

A library for building REST APIs easily with Dart modeled after Express JS for Node Js. The library is still a work in progress and open to contributi

Albert Oboh 43 Oct 4, 2022
Study Aqueduct(Dart Backend Framework)

study_aqueduct Running the Application Locally Run aqueduct serve from this directory to run the application. For running within an IDE, run bin/main.

null 0 Dec 14, 2021
Flutter Rest API using Http and Provider State.

Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is your first Flutter project:

Joshua Jeremia 2 Aug 31, 2022
This is a simple client of Reddit built with MVVM and Provider powered by a custom OAuth2.0 login

?? ?? ?? Flutter Starter Architecture (MVVM + Hive) My custom starter project for Flutter apps. I was looking for a simple way to build Flutter app in

Junior Medehou 13 Oct 26, 2022
This is a simple client of Reddit built with MVVM and Provider powered by a custom OAuth2.0 login

?? ?? ?? Flutter Starter Architecture (MVVM + Hive) My custom starter project for Flutter apps. I was looking for a simple way to build Flutter app in

Junior Medehou 13 Oct 26, 2022
Backbone - A Dart framework for writing REST APIs from an Open API spec

The Backbone Dart Backend Framework A Dart framework for writing REST APIs from

Marcus Twichel 39 Oct 6, 2022
In this tutorial, we'll create a Quiz application using AQUEDUCT FRAMEWORK.

Quiz API Dart An application built with aqueduct. Topics Covered How to Setup Aqueduct ? How to write your first REST API ? How to make controllers ?

Pawan Kumar 19 Mar 2, 2022
Gobook is a golang boilerplate with web framework Gin & Gorm ORM.

Gobook Gobook is a golang boilerplate with web framework Gin & Gorm ORM. Features: MVC Pattern Login, Register, Logout & Profile System Middleware Sys

Yusril Rapsanjani 12 Oct 24, 2022
server side dart micro-framework to handle incoming http requests

Queen Palace ???? Introduction server side dart micro-framework to handle incoming http requests

Ahmed Masoud 32 Aug 30, 2022
A lightweight HTTP server framework for Dart.

arowana A lightweight HTTP server framework for Dart.It is based on the shelf library for handling HTTP requests and implements a high-performance rou

arcticfox 15 Nov 3, 2022
Neha Tanwar 4 Feb 2, 2022