Giter Site home page Giter Site logo

lecaillon / evolve Goto Github PK

View Code? Open in Web Editor NEW
825.0 21.0 109.0 4.37 MB

Database migration tool for .NET and .NET Core projects. Inspired by Flyway.

Home Page: https://evolve-db.netlify.com

License: MIT License

C# 99.00% PLpgSQL 0.26% TSQL 0.73%
evolve sql flyway database migration mysql sqlserver cassandra mariadb sqlite

evolve's Introduction

Evolve AppVeyor build status Azure build Status Code coverage NuGet Twitter

Evolve is a personal, free-time project with no funding. If you use Evolve in your daily work and feel that it makes your life easier, consider supporting its development via GitHub Sponsors ❤️ and by adding a star to this repository ⭐

I’m very passionate about doing personal projects and very grateful that other people find them useful, too. I want to share as much as possible, but it doesn’t pay the bills. With your help, I can focus on open-source work more and make it sustainable. If your company uses any of my libraries, consider donating too as a sign of gratitude and for priority support!

Beloved sponsors

Introduction

Evolve is a cross platform database migration tool inspired by Flyway, that uses plain SQL scripts.

Its purpose is to automate your database changes, and help keep those changes synchronized through all your environments and development teams. This makes it an ideal tool for continuous integration / delivery.

Overall Evolve embraces simplicity. Every time you run your project, it will automatically ensure that your database is up-to-date. Install it and forget it!

Installation

Evolve is available as a .NET library, a .NET tool and a standalone CLI.

Evolve Evolve Tool Evolve CLI
Repository NuGet Evolve NuGet Evolve.Tool GitHub CLI

Supported databases

Documentation

You can read the latest documentation at https://evolve-db.netlify.com and find samples here.

Changelog

Detailed changes for each release are documented in the release notes.

evolve's People

Contributors

gitblit avatar jaydzimmerman avatar jinhong- avatar lecaillon avatar leonborko avatar pvlerick avatar sacrelicious avatar stefandevo avatar wite27 avatar zarun1 avatar

Stargazers

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

Watchers

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

evolve's Issues

Setup Travis CI

Add Travis CI in order to unit test .NET Core on Linux vs AppVeyor

A number of DBs at the same server on production

I wanted to know if I could run the production on a different DBs(at the same server) dynamically and if so what do I need to change in the code so it will work?
Also, do I need to add the "In-app mode" code that was mention at the getting started section to my code? If so, where?

Is it possible to get connection string from connectionStrings section?

We have the connection string in the connectionStrings section and it us subtited from env to env. Is there possibility just say something:

   <configuration>
      <connectionStrings>
               <add name="MyConnString" providerName="System.Data.SqlClient" connectionString="..." />  
      </connectionStrings>
      ...
      <appSettings>
         <add key="Evolve.ConnectionStringName" value="MyConnString" />
         ...
      </appSettings>
   </configuration>

depsFile required?

I'm initialising Evolve like so:

                   var evolve = new Evolve.Evolve("evolve.json") // retrieve the MSBuild configuration
                    {
                        Locations = new List<string> { "db/migrations" }, // exclude db/datasets from production environment
                        IsEraseDisabled = true, // ensure erase command is disabled in production
                    };

Contents of evolve.json:

{
  "Evolve.Driver": "SqlClient",
  "Evolve.ConnectionString": "data source=localhost;database=evolve;user id=user;password=xxx", // "Data Source=:memory:"
  "Evolve.Locations": "db",
  "Evolve.Command": "migrate",
  "Evolve.Placeholder.table4": "table_4"
}

When running I get the following exception:

System.ArgumentException: The string cannot be empty.
Parameter name: depsFile
   at Evolve.Utilities.Check.NotNullOrEmpty(String text, String parameterName)
   at Evolve.Connection.CoreDriverConnectionProviderBase..ctor(String driverName, String connectionString, String depsFile, String nugetPackageDir, String msBuildExtensionsPath)
   at Evolve.Evolve.GetConnectionProvider()
   at Evolve.Evolve.InitiateDatabaseConnection()
   at Evolve.Evolve.InternalExecuteCommand(Action`1 commandAction)

It looks like the correct constructor is being called and looking through the Evolve source I can't see why depsFile is required.

CoreMicrosoftDataSqliteDriverForNet_NET_Core_2_0_works test is erratic

It fails now and then with this message:

Message: Evolve.EvolveCoreDriverException : Error openning a connection to the database with the previously created SqliteConnection
Driver details: 
- Assembly: Microsoft.Data.Sqlite
- Type: Microsoft.Data.Sqlite.SqliteConnection
- OS platform: win
- Process architecture: x86
- Deps file: c:\Users\pvler\Documents\GitHub\Evolve\test\Evolve.Core2.Test.Resources.SupportedDrivers\bin/Debug/netcoreapp2.0/Evolve.Core2.Test.Resources.SupportedDrivers.deps.json
- Managed dependencies found: 
    C:\Users\pvler/.nuget/packages\microsoft.data.sqlite.core/2.0.0\lib/netstandard2.0/Microsoft.Data.Sqlite.dll
    C:\Program Files\dotnet\sdk\NuGetFallbackFolder\sqlitepclraw.core/1.1.7\lib/netstandard1.1/SQLitePCLRaw.core.dll
    C:\Program Files\dotnet\sdk\NuGetFallbackFolder\sqlitepclraw.bundle_green/1.1.7\lib/netcoreapp/SQLitePCLRaw.batteries_green.dll
    C:\Program Files\dotnet\sdk\NuGetFallbackFolder\sqlitepclraw.bundle_green/1.1.7\lib/netcoreapp/SQLitePCLRaw.batteries_v2.dll
    C:\Program Files\dotnet\sdk\NuGetFallbackFolder\sqlitepclraw.provider.e_sqlite3.netstandard11/1.1.7\lib/netstandard1.1/SQLitePCLRaw.provider.e_sqlite3.dll
- Native dependencies found: 
    C:\Program Files\dotnet\sdk\NuGetFallbackFolder\sqlitepclraw.lib.e_sqlite3.v110_xp/1.1.7\runtimes/win7-x86/native/e_sqlite3.dll

You need to call SQLitePCL.raw.SetProvider().  If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init(). You need to call SQLitePCL.raw.SetProvider().  If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().
---- System.Exception : You need to call SQLitePCL.raw.SetProvider().  If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().

This is likely a orchestration issue in the tests, because it doesn't fail when run alone.

Support Repeatable Migrations

Add support for repeatable migrations. This will allow better support of databases that contain a lot of logic stored in the database. These database objects are best supported by a state-driven engineering workflow. For example, views, procedures, functions etc.

Having this feature will better support this workflow and greatly reduce challenges faced with wanting to use a migration-driven versioning approach.

On-Board project to the .NET Foundation

Getting into the .NET Foundation

  • Make sure the project has a good name that is easy to remember and
    spell. Check that it doesn't conflict with another existing project
  • Make sure the people involved in the project want to join the .NET Foundation
  • Make sure the project has a clear understanding about how it accepts contributions and the process
    it follows when selecting new committers to the project.
  • Register an interest in joining the .NET Foundation
  • Work with the .NET Foundation to fill out an On-Boarding Questionaire
  • .NET Foundation sends out completed questionaire to .NET Foundation Advisory Council for comments
  • .NET Foundation Executive Director submits new project proposal to the .NET Foundation Board
  • Configure a CI build for the project and ensure build status badges are available from the README

Once accepted into the .NET Foundation

  • Sign the contribution / assignment agreement
  • Agree a date to move into the .NET Foundation
  • Prepare a guest blog post announcing the move on the .NET Foundation Blog
  • Read the code of conduct,
    link to it in your code and
    understand what to do if you are concerned about any behaviour or have
    concerns reported to you.
  • Tell the world we have joined!
  • Get CLA Automation enabled to ensure contributors can easily sign the
    Contribution License Agreement
  • Send a PR to add the Project into the .NET Foundation
    list
  • Ensure the repo contents are up to date with .NET Foundation guidance
  • Review the README guidance and update if necessary
  • If applicable update the LICENSE file to show Copyright has been assigned to the .NET Foundation
    and look to update any file headers.
  • If applicable, update any copyright statements in websites owned by the project to reflect
    assignment to the .NET Foundation
  • If applicable, update any websites associated with the project to include
    "Supported by the .NET Foundation" or
    similar link back to the .NET Foundation in the footer. If applicable, please
    include image links from our swag repo. (We think a link in the footer using the horizontal logo looks very nice.)
  • Sign up for Project Leader news
  • Configure any resources requested from the .NET Foundation (SSL Certs, Code Signing,
    Secret Management, Build Servers etc)

Support for cluster configurations

Place a lock on an application resource of the database, to coordinate multiple nodes.
Ensures that even if even multiple instances attempt to migrate the database at the same time, only one will process it.

Provide configuration via environment variables

Current configuration techniques (App.config / Web.config / evolve.json) have you hardcode connection string into a file that will likely be committed to source control. This is not desirable since the connection string contains credentials. It would be great to be able to provide certain configuration via environment variables, for example:

DB_USER=my-user DB_PASSWORD=password dotnet build

This can be achieved programmatically using in-app mode, but it would be nice to have this option for other modes.

Alternatively, a CLI that accepts connection string parameters would also meet this need.

Feature request: scoping migrations

Relatively common scenario is that multiple systems or services might share a primary transactional database. Multiple setup programs (or deployments) can set MustEraseOnValidationError = false, but you loose some functionality.

Ideally, there'd be an optional parameter for "scope" or "namespace" so that multiple installations can use the same migrations table store for tracking, but be isolated. Insight Database Schema does something similar

The same goal can be accomplished if I use different MetadataTableName but that's a little messy in the db.

Evolve + Octopus

Do you have any guidance on how to integrate Evolve with Octopus. It's likely that our migrations would be run as a standalone application and since there is no command line tool (yet), I'm curious how you would recommend doing this.

Also, is it possible to disable the MS Build task?

Support for already existing databases

Say I have a database updated to version 3 and want to begin using Evolve to migrate version 4 and onward. It is not currently possible without manipulating file names or moving old scripts to a different project folder.

I would be interested in seeing functionality for Evolve to recognize certain scripts have already been executed, and to only migrate scripts after a particular version number. This could be accomplished with a config option to set version number, for example.

Running more than once the same script

I'm running the script V1_1__CreateTestTable and then the script V1_2_InsertIntoTestTable. When I will run them again, it will fail because I already have the testTable in my db. When I run V1_2_InsertIntoTestTable script its running again even even though that in the changeLog table success = 1 and they both gets the same checksum value.
If I understand correctly whats written in the "Concepts" section :
"Once executed, the name and checksum of the migration are saved to a metadata table in your database. This table is checked every time Evolve is run, to see if the migration script has already been applied."
what i described above does not suppose to happen.

Config-option "EnableClusterMode" missing from docs

Takes a RDBMS-level session-bound Evolve-specific application/advisory lock on the database before making any changes. This prevents two distinct Evolve executions from executing an Evolve command on the same database at the same time.

Cassandra support

Have you ever considered supporting Cassandra?

The DataStax drivers (https://github.com/datastax/csharp-driver) do support some the ADO.NET interfaces (https://docs.datastax.com/en/developer/csharp-driver/3.4/features/components/adonet/ and https://github.com/datastax/csharp-driver/tree/78a1e81195875302ca288d054211e95053004ab9/src/Cassandra/Data) so it looks like it would be possible, but I'm not familiar with the Evolve code base to tell.

If that looks possible, I'd be happy to give it a shot.

SQLite Errors on running .migrate()

I'm using Evolve through the InApp configurations. When I run Evolve.migrate(), some SQLite errors are produced.

SQLite error (1): near "SHOW": syntax error
SQLite error (1): no such function: version
SQLite error (1): unrecognized token: "@"

These don't actually impact the functionality of the migration tool. It works well. However as I add more migrations, each of the aforementioned errors gets repeated. So if I have 3 migrations, I get each of those errors 3 times.
**EDIT: The repeating must have been an error on my implementation, the errors do not stack as I introduce more migrations **

This happens with SQLite databases. I'm using System.Data.SQLite 1.0.99.0, Evolve version 1.5.1.
It can be reproduced without a migration to apply either, so I imagine it has something to do with the metadata collection.

Add .NET Core project support to Evolve

.NET Core projects have a completly different build folder arrangement.
Apart from the main assembly, all the others (database drivers in our case) are in the NuGet cache. So finding and loading them on the fly at build time is quite delicate. Even more when you need to deal with their native dependencies.

  • Add new MsBuild task for .NET Core projects
  • Add new assembly loading strategy for .NET Core db drivers

In App without Evolve.json configuration file

Hello Philippe,

When I build my projects (.net core 2) without configuration file "Evolve.json", my build crash because Evolve.json is not found and i would like to run Evolve only In App.

I have changed evolve.targets in my nuget package to solve this :
here is my code :

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Evolve_PlatformSuffix Condition=" '$(Evolve_PlatformSuffix)' == '' and '$(MSBuildRuntimeType)' == 'Core' ">MSBuildCore/</Evolve_PlatformSuffix>
    <Evolve_PlatformSuffix Condition=" '$(Evolve_PlatformSuffix)' == '' ">MSBuildFull/</Evolve_PlatformSuffix>
    <IsConfigurationFile>False</IsConfigurationFile>
    <IsConfigurationFile Condition="Exists('Evolve.json')">True</IsConfigurationFile>
  </PropertyGroup>
  
  <UsingTask TaskName="Evolve.MsBuild.EvolveBoot" AssemblyFile="$(MSBuildThisFileDirectory)$(Evolve_PlatformSuffix)Evolve.dll" />
  
  <Target Name="SqlMigration" AfterTargets="Build">
    <EvolveBoot Condition="'$(IsConfigurationFile)' == 'True'" TargetPath="$(TargetPath)" ProjectDir="$(ProjectDir)" EvolveNugetPackageBuildDir="$(MSBuildThisFileDirectory)" IsDotNetStandardProject="true" Configuration="$(Configuration)" />
  </Target>
</Project>

Increase Command Timeout

I don't know if this is just not an intended use for migration files, but I'm trying to seed postal code data in a migration. To me it makes sense because it is a default set of data that my my application will need in order to run and the table is meaningless without its data. Since it is tens of thousands of rows to insert, it takes a while to complete and Evolve's command is timing out. We tried breaking it up into smaller batches using "GO" (this is SQL Server 2016), but it still times out. Maybe we just didn't go small enough on the batches (they only take about 12 seconds to execute individually in SSMS) but is there a way to configure the command timeout?

Feature request: support Secrets Manager

I can't tell if you support this or not... can one use the Secrets Manager to store the Evolve.ConnectionString?

As in:
https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?tabs=visual-studio

That would be great if it did. Initial testing leads to believe this is not yet supported.

For instance, this command adds the secret:

dotnet user-secrets set ConnectionStrings:Evolve.ConnectionString "Host=localhost;Username=postgres;Password=postgres;Database=todo"

But when I run the app after removing Evolve.ConnectionString from evolve.json, I get "Value cannot be null" for "Parameter name: connectionString"

Rollback support

It would be great to have a rollback feature so that the schema can be rolled back to a specific migration. The functionality could be similar to EF migrations rollback.

Here's the intended functionality:

Assume there are 4 migration scripts 1.1, 1.2, 1.3, 1.4

When migrate command is executed with a specific version e.g. 1.3 all migrations greater than that (1.4) will be rolled back by executing the corresponding rollback script. This means, in addition to the migrations directory, users need to provide a rollback directory with the rollback scripts (Similar to Up() and Down() methods in EF).

This functionality will be similar to EF Update-Database command.

Cassandra: Add a cluster level lock to prevent any migration while the topology of the cluster is being modified

Following a discussion with @doanduyhai, it appears that it is an extremely bad idea to make any schema changes while the topology of the cluster is being modified (more on this here: https://www.slideshare.net/doanduyhai/cassandra-nice-use-cases-and-worst-anti-patterns-no-sqlmatters-barcelona/44).

The best approach seems to create an applicative lock (implementing CassandraCluster.TryAcquireApplicationLock) that checks the existence of a predetermined keyspace and not execute migration if this item exists.

Using this, a system administrators could create that keyspace to prevent any Evolve migration from taking place (it would be wise to wait for all deployments to complete though since some migration could potentially be taking place still, the only guarantee is that no new Evolve migration is going to start), then make change to the topology and finally deleting the keyspace to release the lock and allow deployments again.

@doanduyhai, if you have any comments/suggestions ;-)

Support to drop temporal tables in MSSQL Server

Temporal tables follow a similar structure (period for date tange declared as row start/end), and they are not dropped automatically when performing a new migration. They return the actual error, which reads as follows:

Drop table operation failed on table 'myDB.mySchema.myTable' because it is not supported operation on system-versioned temporal tables.

I haven't found a way to do so manually through scripts (please let me know if I'm mistaken, I haven't found any in the docs), so it would be great if you could could perform these operations in the right order:

  1. Set system versioning off: ALTER TABLE [myTable] SET(SYSTEM_VERSIONING = OFF)
  2. Drop the period: ALTER TABLE [myTable] DROP PERIOD FOR SYSTEM_TIME;
  3. Drop the history table. I don't know how can you do that dynamically since the name is customized, but there must be a reference somewhere.

I assume this has nothing to do with versioning, but I'm using Evolve 1.7.0 on .NET Framework 4.7 and targeting a MSSQL Server.

CREATE DATABASE in a migration

Will appreciate the help with the next issue-
I'm working with .Net and trying to run the next migration (on MSBuild mode):
EXEC sp_executesql N'CREATE DATABASE evolveshared'

At the end of the build I'm getting the next error:
'EvolveException: Error executing script: V01__evolveSharedCreateDataBase.sql. CREATE DATABASE statement not allowed within multi-statement transaction. Sql query: EXEC sp_executesql N'CREATE DATABASE evolveshared' CREATE DATABASE statement not allowed within multi-statement transaction.'

When I run the same migration on SQL Management Tool (2017) it works fine and creating the asked DB.

When I'm changing the migration to the next one:
COMMIT TRAN; GO EXEC sp_executesql N'CREATE DATABASE evolveshared'
The DB is created but I'm getting a different error:
'EvolveException: Error executing script: V01__evolveSharedCreateDataBase.sql. This SqlTransaction has completed; it is no longer usable.'

Support for multiple databases

Does Evolve support migration of multiple databases? I have a logging database separate from my application database and it would be great if it could be configured for migrations of both.

Optionally not run migrations on build

I would like to use Evolve in our project, but we would like to run it on a build server, which does not have access to the database, so we would like to have the option to not try to run migrations on build. I'd suggest either adding a new Command that's "Ignore" (or something), or have it default to not doing anything if the Command option isn't set.

Add different configuration settings for different environments

Motivation:

Actually Evolve does not support different configuration for different environments for .NET Core projects.
It only uses a simple json file called Evolve.js for it.
Not ideal when you want to have different setup between Development, Staging and Production.

Solution:

Allow to specfiy multiple configuration files merged at build-time by Evolve depending the selected build configuration. A little like the appsettings.json file behavior.

Exemple:

2 configurations files:

  • Evolve.js
  • Evolve.Staging.js

Assuming you've created a specfic build configuration called Staging, the result will be:

  • In Debug configuration mode, only the Evolve.js file is loaded by Evolve.
  • In Staging configuration mode, the Evolve.js file will be loaded first and then, will be overriden by the Evolve.Staging.js file.

Cassandra unit test projects fail with not enough replicas

@Pvlerick

Trying to finalize the 1.9.0 version, I came with an exception building my Cassandra test package projects, that I didn't have before.

Evolve.Cassandra.AspNetCore20.Test

EvolveSqlException: Not enough replicas available for query at consistency Serial (1 required but only 0 alive) Sql query: delete from my_keyspace.evolve_change_log where id = 0 if exists Not enough replicas available for query at consistency Serial (1 required but only 0 alive)

I think it comes from the locking strategy. All the other tests pass. I'm not too concerned about it.
Have you got any idea ?

In-app mode not working

I have an application on .NET 4.5.2, database is SQL Server 2016. MSBuild mode works just fine, but in-app mode is not working and an exception is not thrown.Here is the code I used to create the reference:

SqlConnection conn = new SqlConnection(WebConfiguration.sqlConnectionString);
var evolve = new Evolve.Evolve(conn, msg => Console.WriteLine(msg))
{
Locations = new List { "Migration_Scripts" },
Command = CommandOptions.Migrate,
MetadataTableName = "changelog",
Driver = "SqlClient",
SqlMigrationPrefix = "V",
SqlMigrationSeparator = "__",
SqlMigrationSuffix = ".sql",
PlaceholderPrefix = "${",
PlaceholderSuffix = "}"
};
try
{
evolve.Migrate();
}
catch (Exception ex)
{
}

Upgrade to .net core 2.0 is trying to look for db connection configuraion

Hi ,
I tried upgrading my project to .net core 2.0 from 1.1.Now I see when I do the build in VS2017 (msbuild)
it is running the post build command. I want to run migrations or configure migrations on startup of the app and not on build. Please let me know any settings I need to do to override this behavior

Consider changing build message for in-app mode

Hi, I'm using Evolve 1.7.0 with .NET Core 2.0 in in-app mode.
As such, I'm not using an Evolve.json file.

Being new to .NET (and NuGet), the message that gets logged when the Evolve.json file is not found (introduced in #14) was kind of misleading to me:
Evolve.json configuration file not found. MsBuild task execution cancelled.

I read this as: My whole build didn't execute because this file was mising. I know now that this is not what's happening, but it took me a while.

I would suggest inverting the logic of that message condition and log something like:
Evolve.json configuration file found, executing migrations.
and just do (and log) nothing when no Evolve.json file was found.

What do you think?

PostgreSQL 10: Validation of the database connection failed. Exception while reading from stream

Initial migration for Postgresql failed
v1.6.0 - v1.7.0
PostgreSQL 10
.NET Core 2.0
Install clean postgresql server 10.0 and try make initial migration with simple queries.
Same code works with Postgresql 9.6

{Evolve.EvolveException: Validation of the database connection failed. Exception while reading from stream ---> Npgsql.NpgsqlException: Exception while reading from stream ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at Npgsql.ReadBuffer.d__27.MoveNext()
--- End of inner exception stack trace ---
at Npgsql.ReadBuffer.d__27.MoveNext()

MSBuild task fails if path contains parentheses

Greetings!
First of all I want to thank you for this cool project.

In my project I use Evolve v.1.7.0 for net.core and net451, Jenkins to build the application.
Problem occurs when path to the project contains "(" or ")".
Here is the error reported to msBuild.
Seems like build file "Evolve.targets" miss the fix suggested by MS team.
Can you, please, fix Evolve.targets so it can be used with projects where parentheses are present?
Thank you in advance.

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.