Code Monkey home page Code Monkey logo

critter's Introduction

critter

Critter will look at your source code and generate type safe criteria builders for each model object. To use it, you simply need to add a plugin to your maven pom:

<plugin>
    <groupId>dev.morphia.critter</groupId>
    <artifactId>critter-maven</artifactId>
    <version>${critter.version}</version>
    <executions>
        <execution>
            <id>critter</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <force>false</force>
                <criteriaPackage>com.bob.bar</criteriaPackage>
            </configuration>
        </execution>
    </executions>
</plugin>

This will generate your criteria classes in target/generated-sources/critter and add the directory as a source directory of your maven project. If the criteriaPackage option is left out, the code will be generated using the package of your entities with .criteria appended. (The options are shown here for documentation purposes using the default values. They can be left out altogether if the defaults are acceptable.)

Include the dependency in your pom.xml like this:

<dependency>
    <groupId>dev.morphia.critter</groupId>
    <artifactId>critter-core</artifactId>
    <version>${critter.version}</version>
</dependency>

Critter also requires Morphia 2.0.0 and is built for Java 11.

What difference does it make?

Before critter, your criteria might look something like this:

Query<Book> query = ds.find(Book.class)
    .filter(and(
        eq("bookmark",bookmark),
        eq("database",database)));

But using critter, it would look like this:

Query<Book> query = ds.find(Book.class)
    .filter(and(
        Person.bookmark().eq(bookmark),
        Person.database().eq(database)));

Notice how bookmark() and database() methods were created based on the model object Book's fields. The query filters you're familiar with from Morphia's filters API are all there but now only take the type of the field itself. With this code in place if the model object changes, the code above runs the risk of failing to compile allowing you to catch model/query conflicts at compile time rather than waiting for things to fail at runtime (or in your tests if you're lucky enough to have those).

You can see a working example in the tests.

IDEA Users

IDEA users will need to enable the plugin registry in the maven configuration options for IDEA to pick up the plugin.

critter's People

Contributors

dependabot[bot] avatar evanchooly avatar felixxxxxs avatar github-actions[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

critter's Issues

Critter fails, when module-info.java is present

Hello,

I tried to add critter to our maven project, but it fails with the following error. Removing module-info.java from the project resolves the error. Not sure, if this needs to be fixed in critter or roaster.

Thanks for your help,
Alexander Schepp

[ERROR] Failed to execute goal dev.morphia.critter:critter-maven:4.4.3:generate (critter) on project x: Execution critter of goal dev.morphia.critter:critter-maven:4.4.3:generate failed: Could not find type declaration in Java source - is this actually code? -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal dev.morphia.critter:critter-maven:4.4.3:generate (critter) on project sso-domain: Execution critter of goal dev.morphia.critter:critter-maven:4.4.3:generate failed: Could not find type declaration in Java source - is this actually code?
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:333)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:833)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution critter of goal dev.morphia.critter:critter-maven:4.4.3:generate failed: Could not find type declaration in Java source - is this actually code?
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:133)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:833)
Caused by: org.jboss.forge.roaster.ParserException: Could not find type declaration in Java source - is this actually code?
    at org.jboss.forge.roaster.spi.JavaParserImpl.parseUnit (JavaParserImpl.java:93)
    at org.jboss.forge.roaster.Roaster.parse (Roaster.java:260)
    at org.jboss.forge.roaster.Roaster.parse (Roaster.java:285)
    at org.jboss.forge.roaster.Roaster.parse (Roaster.java:210)
    at org.jboss.forge.roaster.Roaster.parse (Roaster.java:117)
    at dev.morphia.critter.java.JavaContext$scan$2.invoke (JavaContext.kt:57)
    at dev.morphia.critter.java.JavaContext$scan$2.invoke (JavaContext.kt:57)
    at kotlin.sequences.TransformingSequence$iterator$1.next (Sequences.kt:210)
    at kotlin.sequences.FilteringSequence$iterator$1.calcNext (Sequences.kt:170)
    at kotlin.sequences.FilteringSequence$iterator$1.hasNext (Sequences.kt:194)
    at dev.morphia.critter.java.JavaContext.scan (JavaContext.kt:108)
    at dev.morphia.critter.Critter.scan (Critter.kt:36)
    at dev.morphia.critter.CritterMojo.execute (CritterMojo.kt:62)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:833)

Cannot invoke "org.jboss.forge.roaster.model.source.FieldSource.isStatic()" because the return value of "org.jboss.forge.roaster.model.source.PropertySource.getField()" is null

Hello,

I'm getting the following issue with my code base, but due to lacking debug output, I can't pinpoint it to a file.

Thanks for your help,
Alexander Schepp

[ERROR] Failed to execute goal dev.morphia.critter:critter-maven:4.4.3:generate (critter) on project x: Execution critter of goal dev.morphia.critter:critter-maven:4.4.3:generate failed: Cannot invoke "org.jboss.forge.roaster.model.source.FieldSource.isStatic()" because the return value of "org.jboss.forge.roaster.model.source.PropertySource.getField()" is null -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal dev.morphia.critter:critter-maven:4.4.3:generate (critter) on project sso-domain: Execution critter of goal dev.morphia.critter:critter-maven:4.4.3:generate failed: Cannot invoke "org.jboss.forge.roaster.model.source.FieldSource.isStatic()" because the return value of "org.jboss.forge.roaster.model.source.PropertySource.getField()" is null
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:333)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:833)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution critter of goal dev.morphia.critter:critter-maven:4.4.3:generate failed: Cannot invoke "org.jboss.forge.roaster.model.source.FieldSource.isStatic()" because the return value of "org.jboss.forge.roaster.model.source.PropertySource.getField()" is null
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:133)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:833)
Caused by: java.lang.NullPointerException: Cannot invoke "org.jboss.forge.roaster.model.source.FieldSource.isStatic()" because the return value of "org.jboss.forge.roaster.model.source.PropertySource.getField()" is null
    at dev.morphia.critter.java.extensions.PropertySourceExtensionsKt.ignored (PropertySourceExtensions.kt:69)
    at dev.morphia.critter.java.types.CritterClass.allProperties (CritterClass.kt:35)
    at dev.morphia.critter.java.JavaCriteriaBuilder.processFields (JavaCriteriaBuilder.kt:68)
    at dev.morphia.critter.java.JavaCriteriaBuilder.build (JavaCriteriaBuilder.kt:54)
    at dev.morphia.critter.Critter.generateCriteria (Critter.kt:42)
    at dev.morphia.critter.CritterMojo.execute (CritterMojo.kt:63)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:833)

The parameters 'outputType' for goal dev.morphia.critter:critter-maven:4.1.0:generate are missing or invalid

Hi,

I've tried to run the critter generate goal but it ended up with the previous error.
I used this configuration:

<plugin>
    <groupId>dev.morphia.critter</groupId>   
    <artifactId>critter-maven</artifactId>
    <version>4.1.0</version>
    <executions>
        <execution>
            <id>critter</id>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <force>false</force>
                <criteriaPackage>data</criteriaPackage>
                <outputType>java</outputType>
            </configuration>
        </execution>
    </executions>
</plugin>

Error: type UpdateResults does not take parameters

I've pulled in your Entity classes into a new project; included the 2 dependencies. The classes get generated; however, there are compilation errors:

InvoiceCriteria.java:[66,50] error: type UpdateResults does not take parameters.

Any help with this would be awesome.

Thanks,
Chris

Generated code use a lot of deprecated methods

e.g., critter/tests/gradle/kotlin/build/generated/critter/dev/morphia/critter/codec/UserEncoder.kt: (71, 10): 'postPersist(Any, Document, Mapper): Unit' is deprecated. Deprecated in Java

ClassCastException: org.jboss.forge.roaster.model.impl.JavaEnumImpl cannot be cast to org.jboss.forge.roaster.model.source.JavaClassSource

Using Morphia 2.2.3 and Critter 4.1.0 on Java 11, Failed to execute goal dev.morphia.critter:critter-maven:4.1.0:generate (critter) on project: A type incompatibility occurred while executing dev.morphia.critter:critter-maven:4.1.0:generate

This happens even when I don't have any classes annotated with Morphia annotations.

Verbose output from Maven:

Caused by: java.lang.ClassCastException: class org.jboss.forge.roaster.model.impl.JavaEnumImpl cannot be cast to class org.jboss.forge.roaster.model.source.JavaClassSource (org.jboss.forge.roaster.model.impl.JavaEnumImpl and org.jboss.forge.roaster.model.source.JavaClassSource are in unnamed module of loader org.codehaus.plexus.classworlds.realm.ClassRealm @32177fa5)
    at dev.morphia.critter.java.JavaClass.<init> (JavaClass.kt:12)
    at dev.morphia.critter.Walker.directoryWalkStep (Critter.kt:77)
    at org.codehaus.plexus.util.DirectoryWalker.fireStep (DirectoryWalker.java:171)
    at org.codehaus.plexus.util.DirectoryWalker.scanDir (DirectoryWalker.java:381)
    at org.codehaus.plexus.util.DirectoryWalker.scanDir (DirectoryWalker.java:375)
    at org.codehaus.plexus.util.DirectoryWalker.scanDir (DirectoryWalker.java:375)
    at org.codehaus.plexus.util.DirectoryWalker.scanDir (DirectoryWalker.java:375)
    at org.codehaus.plexus.util.DirectoryWalker.scanDir (DirectoryWalker.java:375)
    at org.codehaus.plexus.util.DirectoryWalker.scan (DirectoryWalker.java:334)
    at dev.morphia.critter.Critter.scan (Critter.kt:42)
    at dev.morphia.critter.CritterMojo.execute (CritterMojo.kt:40)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)

OR queries result in a StackOverflowError

Probably AND too

java.lang.StackOverflowError
at java.util.HashMap.hash(HashMap.java:338)
at java.util.HashMap.put(HashMap.java:611)
at org.bson.BasicBSONObject.put(BasicBSONObject.java:303)
at org.mongodb.morphia.query.FieldCriteria.addTo(FieldCriteria.java:107)
at org.mongodb.morphia.query.CriteriaContainerImpl.addTo(CriteriaContainerImpl.java:81)
at org.mongodb.morphia.query.CriteriaContainerImpl.addTo(CriteriaContainerImpl.java:97)
at org.mongodb.morphia.query.CriteriaContainerImpl.addTo(CriteriaContainerImpl.java:81)

Revive Gradle plugin

is there a gradle plugin for Critter ? if so pls share coordinates and will that suffice to make IDEA "intellisense" aware of the critter generated specs i.e. is there something else one needs to do to configure Idea in the context of gradle/critter

thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.