Giter Club home page Giter Club logo

dotenv_validator's Introduction

Dotenv Validator

Gem Version Matrix Testing + Lint codecov Docs Contributor Covenant

This gem validates .env variables. You can configure validation rules by adding the appropriate comments to the .env.sample or .env.template file.

Installation

Add the gem to your Gemfile:

gem "dotenv_validator"

Call DotenvValidator.check! in an initializer:

echo "DotenvValidator.check!" > "config/initializers/1_dotenv_validator.rb"

Note the 1_ in the name so it's executed before any other initializer, since initializers are run in alphabetical order.

You can use DotenvValidator.check without the ! to show warnings instead of raising an exception.

Updating

Simply run:

bundle update dotenv_validator

Configuring env variable

In your .env.sample or .env.template file, you can add comments to tell DotenvValidator how to validate the variable:

MY_REQUIRED_VAR=value #required
THIS_IS_AN_OPTIONAL_INT=123 #format=int
THIS_IS_A_REQUIRED_EMAIL=123 #required,format=email

Formats

  • int or integer or Integer
  • float or Float (note that all integers are floats too)
  • str or string or String (accepts anything)
  • email (checks value against /[\w@]+@[\w@]+\.[\w@]+/)
  • url (checks value against /https?:\/\/.+/)
  • bool or boolean or Boolean (checks value against true or false, case sensitive)
  • uuid or UUID (checks value against /\A[\da-f]{32}\z/i or /\A[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}\z/i)
  • any other value acts as a regexp!

Regexp format

If you have a complex format, you can use a regexp for validation:

MY_WEIRD_ENV_VAR=123_ABC #required,format=\d{3}_\w{3}

In the above example, \d{3}_\w{3} is converted to a regexp and the value is checked against it.

If you use docker-compose, read this

Docker Compose automatically reads .env files present in the project's root when running docker-compose up. What this means is that, if you use dotenv_validator in an app you run using Docker Compose, you might get exceptions or warnings about your variables being in the wrong format even though they're right. The reason is that, when running docker-compose up, docker-compose parses the .env file before the Rails application starts. It reads each line as is with a really simple parser (no quotes, comments and trailing spaces handling).

Then, since docker-compose already set the environment variables, the Dotenv gem won't override them. It parses the file as we'd expect, but it won't change env variables that are already set.

For more information check this page from their docs.

The workaround is to rename your .env file when using docker. Here you'll find all naming options acceptable for dotenv and that Docker will not automatically parse.

If renaming is not an option, then you need to remove any comments or trailing whitespaces from your .env file:

SMTP_PORT=25         #format=int

needs to become:

SMTP_PORT=25

TL;DR

Rename your .env file according to this table

or

Remove all comments and trailing whitespaces

Contributing

Want to make your first contribution to this project? Get started with some of our good first issues!

Bug reports and pull requests are welcome on GitHub at https://github.com/fastruby/dotenv_validator. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

When Submitting a Pull Request:

  • If your PR closes any open GitHub issues, please include Closes #XXXX in your comment

  • Please include a summary of the change and which issue is fixed or which feature is introduced.

  • If changes to the behavior are made, clearly describe what changes.

  • If changes to the UI are made, please include screenshots of the before and after.

Sponsorship

FastRuby.io | Rails Upgrade Services

dotenv_validator is maintained and funded by FastRuby.io. The names and logos for FastRuby.io are trademarks of The Lean Software Boutique LLC.

dotenv_validator's People

Contributors

arielj avatar bronzdoc avatar cgrothaus avatar etagwerker avatar fbuys avatar joshcheek avatar juanvqz avatar kindoflew avatar lubc avatar mateusdeap avatar rdormer 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

dotenv_validator's Issues

[REQUEST] A UUID format

IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.

Before we start...:

  • I checked the documentation and didn't find this feature
  • I checked to make sure that this feature has not already been requested

Branch/Commit:

v1.1.0

Describe the feature:

Please include a detailed description of the feature you are requesting and any detail on it’s expected behavior.

As a developer
I do use UUID env variables
And I want to use a UUID format

Problem:

Please include a detailed description of the problem this feature would solve.

As a developer
I want to use a UUID format
So that I don't have to set a regex format every time I use a UUID

Mockups:

It should support both compact and default UUID formats:

  # It checks the value to check if it is a UUID or not.
  #
  # @param [String] A string
  # @return [Boolean] True if it is a UUID value. False otherwise.
  def self.uuid?(string)
    string.match?(/\A[\da-f]{32}\z/i) ||
      string.match?(/\A[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}\z/i)
  end

Resources:

UUID.validate

I will abide by the code of conduct

[REQUEST] Use regexes already shipped with ruby standard library for validating emails and URLs

Branch/Commit:

main

Describe the feature:

Suggestion: uses regexes already shipped with the ruby standard library for validating emails and URLs.

The ruby standard library already contains elaborate regexes for validation of emails and URLs:

  • email - URI::MailTo::EMAIL_REGEXP
  • HTTP URL - URI::DEFAULT_PARSER.make_regexp(['http', 'https'])

These should be used instead of rolling own regexes.

[BUG] README doesn't mention how to install the gem from Rubygems.org

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Version, Branch, or Commit:

main branch.

Expected behavior:

README should mention how to install this gem.

Actual behavior:

README tells people to install from GitHub (which can be a bit risky)

Steps to reproduce:

Read our README.

Context:

dotenv_validator v1.0.0 has been released over here: https://rubygems.org/gems/dotenv_validator

I will abide by the code of conduct

Add a GitHub Action that runs `standardrb` to flag style issues

Branch/Commit:

Main branch.

Describe the feature:

As a developer, I want GitHub to show a failing CI status if the PR includes code that don't follow the expected code style.

Problem:

Currently, it depends only on overcommit to run the check locally, but that can be skipped or have some incorrect local setup.

I will abide by the code of conduct

[BUG] Repo does not include the Gemfile.lock file

Version, Branch, or Commit:

Main branch

Expected behavior:

The Gemfile.lock shouldn't be ignored from git, it should be added to make sure everybody uses the same versions of gems.

Actual behavior:

Gemfile.lock is missing, so running bundle install is not predictable and different developers can have different versions of dependencies.

I will abide by the code of conduct

Drop dependency on `dotenv`?

Before we start...:

  • I checked the documentation and didn't find this feature
  • I checked to make sure that this feature has not already been requested

Branch/Commit:

main branch.

Describe the feature:

Maybe we don't need to have that dependency? At the end of the day, we use ENV to check the values associated with the environment variables. Someone could be using something else (another gem or a snippet of code) to load their env variables...

Problem:

I don't see any references to classes from the dotenv library, which leads me to believe that that dependency is not needed at all. But the gemspec file lists dotenv as a dependency.

I will abide by the code of conduct

[REQUEST] Display the expected format for variables with the wrong format

Branch/Commit:

Main branch / v 1.2.0

Describe the feature:

When the format of an environment variable is invalid, we have a message like this: Environment variables with invalid format: EMAIL_TO_DEFAULT. It would be better to list the issues with the expected format from the .sample file, like:

Environment variables with invalid format:
- EMAIL_TO_DEFAULT: value "some-string-with-issue" expected to match "email" format
- ANOTHER_ENV: value "......." expected to match "url" format
- etc...

Problem:

Currently, when something fails, we know the env variable with the problem, but we have to find the problem (sometimes it might not be obvious when doing more complex stuff like regexs or if the value is not what we thought)

I will abide by the code of conduct

[BUG] Integer values return Invalid format

IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Version, Branch, or Commit:

dotenv_validator 1.0.0

Expected behavior:

Please include a detailed description of the behavior you were expecting when you encountered this issue.

Actual behavior:

Integer values

I have some integer values in my .env file

FOO=10                                                   #required,format=int

when starting the rails server (with Procfile.dev) it returns the following error, I'm not using docker.

09:33:06 web.1       | /Users/juanvqz/.asdf/installs/ruby/3.1.3/lib/ruby/gems/3.1.0/bundler/gems/dotenv_validator-dbfe346afdb8/lib/dotenv_validator.rb:73:in `check!': Environment variables with invalid format: FOO(RuntimeError)

Steps to reproduce:

  1. set some integer values in yout .env file
FOO=10    #required,format=int
  1. when starting the rails server (not using docker) it returns the following error.
09:33:06 web.1       | /Users/juanvqz/.asdf/installs/ruby/3.1.3/lib/ruby/gems/3.1.0/bundler/gems/dotenv_validator-dbfe346afdb8/lib/dotenv_validator.rb:73:in `check!': Environment variables with invalid format: FOO(RuntimeError)

Context and environment:

Provide any relevant information about your setup (Customize the list accordingly based on what info is relevant to this project)

  1. dotenv_validator 1.0.0
  2. Mac OS
  3. Sonoma
  4. 3.1.3

Delete any information that is not relevant.

Logs

Include relevant log snippets or files here.

I will abide by the code of conduct

[REQUEST] Support `.env.template` as an alternative to `.env.sample`

Branch/Commit:

Main branch.

Describe the feature:

The gem currently looks for a file named .env.sample by default to look for the validation comments, but the dotenv gem includes a feature that generates a .env.template file to create something similar https://github.com/bkeepers/dotenv/tree/master#should-i-commit-my-env-file

We should support both files.

Problem:

Users of dotenv may be using a .env.template file to store the "sample" file and we shouldn't expect that to be renamed.

I will abide by the code of conduct

[BUG] Incorrect validation of format `string`

Version, Branch, or Commit:

Main branch.

Expected behavior:

Any value should be valid if format is string (unless empty and required).

Actual behavior:

Variables set as format=string are considered as invalid format always.

Changing the when 'str', 'string' then false to true fixes the problem.

I will abide by the code of conduct

[BUG] Code of conduct is missing

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Version, Branch, or Commit:

main branch.

Expected behavior:

CoC link in PRs and issues should point to the right file.

Actual behavior:

CoC link in PRs and issues is broken.

Steps to reproduce:

Go to #15 and follow the CoC link

I will abide by the code of conduct

[BUG] GitHub "Lint" Action fails because of missing `runs-on` property

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Expected behavior:

GitHub Actions run without failing due to config.

Actual behavior:

GitHub Actions fail with the following error message:
The workflow is not valid. .github/workflows/main.yml (Line: 15, Col: 5): Required property is missing: runs-on

Steps to reproduce:

How do I achieve this behavior?:

Step 1: Open a PR or push to any currently open PR in this repository.

I didn't get a notification in the PR itself, I got an email telling me that the Workflow run failed at startup. #48 should help us notice stuff like this sooner 😏 .

I will abide by the code of conduct

We should publish a new build to RubyGems

Version, Branch, or Commit:

Main branch

Expected behavior:

Users finding the gem listed in RubyGems will expect the gem to work from there and not from the github repo.

Actual behavior:

Version 1.0.0 has the bug that it can't find the .env.sample file so it doesn't work.

Steps to reproduce:

Use the gem from rubygems instead of the git repo and add invalid values in the .env file. The gem will not report any issue.

I will abide by the code of conduct

[REQUEST] Add domain or url format

IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.

Before we start...:

  • I checked the documentation and didn't find this feature
  • I checked to make sure that this feature has not already been requested

Branch/Commit:

Inform what branch/commit/version of "dotenv_validator" you are using.
Commit: 5ff3cb7

Describe the feature:

Please include a detailed description of the feature you are requesting and any detail on it’s expected behavior.

As a developer
I do add "url"
And then I do run the app
And I see that it reports when an ENV is not a url

Problem:

Please include a detailed description of the problem this feature would solve.

As a developer
I want to check that a ENV is formatted as a domain/url
So that I can ensure that a ENV is correctly formatted as a URL
I believe this is fairly common and then as a developer I don't need to add regex for a domain

Resources:

If you have resources related to the implementation or research for this feature, add them here.

Something similar to this: ^(http|https)://|[a-z0-9]+([-.]{1}[a-z0-9]+).[a-z]{2,6}(:[0-9]{1,5})?(/.)?$/ix
https://stackoverflow.com/a/13311941

I will abide by the code of conduct

[BUG]: There is still an issue with GitHub Actions - Linting

IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Version, Branch, or Commit:

main and feature/describe-workaround-for-docker

Expected behavior:

For the lint job to run as expected, like the Matrix Testing does.

Actual behavior:

In #51, all of the Test jobs finished yesterday, but I just cancelled the workflow for Linting after it had been searching for 17 hours for a 'self-hosted runner'.

Steps to reproduce:

How do I achieve this behavior? Use the following format to provide a step-by-step guide:

  1. Open PR or push changes.
  2. Watch Lint never run, but continue searching for a runner.

Logs

I cancelled the job before I could get an image of the log, but next time someone pushes, I will grab a screenshot.
EDIT:
Screen Shot 2021-11-24 at 2 06 50 PM

I will abide by the code of conduct

[BUG] DotenvValidator cannot find sample file from within a normal Rails app

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Version, Branch, or Commit:

v1.0.0, but probably main branch too

Expected behavior:

DotenvValidator.check! should use Rails application's .env.sample file.

Actual behavior:

DotenvValidator.check! does not use the application's .env.sample file.

Steps to reproduce:

  1. Step 1: Install v1.0.0 in any Rails application that is also using dotenv and has both .env and .env.sample files
  2. Step 2: Add a basic rule to the .env.sample file
  3. Step 3: Make sure that your app's .env breaks the rule in step 2 (e.g. missing key/value)
  4. Step 4: Run rails console and then DotenvValidator.check!

Context and environment:

Not really relevant.

Debugging: Console Output

Relevant lines of the .env.sample file:

MY_REQUIRED_VAR=value #required

Relevant lines of the .env file:

MY_REQUIRED_VAR123=value

MY_REQUIRED_VAR is NOT defined in .env on purpose.

Byebug:

(byebug) ENV["MY_REQUIRED_VAR"]
nil
(byebug) ENV["MY_REQUIRED_VAR123"]
"value"
(byebug) DotenvValidator.check!
nil
(byebug) DotenvValidator.check
true
(byebug) DotenvValidator.analyze_variables
[[], []]
(byebug) DotenvValidator.sample_file
"/Users/etagwerker/.rvm/gems/ruby-2.6.6@frio/gems/dotenv_validator-1.0.0/lib/.env.sample"

Root Cause

The path calculation for the .env.sample file is incorrect in v1.0.0: https://github.com/fastruby/dotenv_validator/blob/v1.0.0/lib/dotenv_validator.rb#L121-L123

I tested with the version in the main branch and it is also incorrectly calculating the file path:
https://github.com/fastruby/dotenv_validator/blob/main/lib/dotenv_validator.rb#L121-L123

I will abide by the code of conduct

[BUG] README looks broken in Rubydoc.info

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Version, Branch, or Commit:

main branch.

Expected behavior:

HTML should look okay?

Actual behavior:

HTML looks a little broken.

Steps to reproduce:

Go to: https://rubydoc.info/github/fastruby/dotenv_validator/main

Screenshots:

Screen Shot 2021-07-23 at 3 41 38 PM

I will abide by the code of conduct

[REQUEST] Missing badges in README

Before we start...:

  • I checked the documentation and didn't find this feature
  • I checked to make sure that this feature has not already been requested

Branch/Commit:

main branch

Describe the feature:

As a potential user/contributor of the gem I'd like to see relevant badges in the README.

Resources:

Potential badges:

  • CI badge
  • Codecov badge
  • Documentation badge

I will abide by the code of conduct

[REQUEST] A bool format

IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.

Before we start...:

  • I checked the documentation and didn't find this feature
  • I checked to make sure that this feature has not already been requested

Branch/Commit:

4aba844

Describe the feature:

Please include a detailed description of the feature you are requesting and any detail on it’s expected behavior.

As a developer
I add boolean (TRUE/FALSE) values to my .env.sample file
And I would like to use a bool format

Problem:

Please include a detailed description of the problem this feature would solve.

As a developer
I want to use a boolean format
So that I don't have to set a regex or string format every time I use a bool

I will abide by the code of conduct

[BUG] RuboCop 'New Cops' message causes overcommit to fail

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Version, Branch, or Commit:
I made my own local branch, but confirmed with Francois that the issue is also happening on main.

Expected behavior:
When commiting changes, RuboCop should only fail when it is supposed to (as per config).

Actual behavior:
RuboCop fails because of 'unexpected output' to overcommit. There is a message from RuboCop detailing new cops that have not been configured yet, which seems to trip up overcommit.

Steps to reproduce:

How do I achieve this behavior? Use the following format to provide a step-by-step guide:

Step 1: Clone repo
Step 2: Run setup script (ensure both overcommit and rubocop are installed)
Step 3: Make changes and commit.

Context and environment:
I found some relevant (but old) issues while trying to solve:
sds/overcommit#704
rubocop/rubocop#7731

One fix recommended in the linked overcommit issue is to add --disable-pending-cops to RuboCop.flags in the config.

Provide any relevant information about your setup (Customize the list accordingly based on what info is relevant to this project)

  1. Ruby version: 2.7.2
  2. RuboCop version: 1.20.0
  3. Overcommit version: 0.58.0

Logs

Analyze with RuboCop........................................[RuboCop] FAILED
Unexpected output: unable to determine line number or type of error/warning for output:

Please also note that you can opt-in to new cops by default by adding this to your config:
  AllCops:
    NewCops: enable
Gemspec/DateAssignment: # new in 1.10
  Enabled: true
Layout/LineEndStringConcatenationIndentation: # new in 1.18
  Enabled: true
Layout/SpaceBeforeBrackets: # new in 1.7
  Enabled: true
Lint/AmbiguousAssignment: # new in 1.7
  Enabled: true
Lint/AmbiguousRange: # new in 1.19
  Enabled: true
Lint/DeprecatedConstants: # new in 1.8
  Enabled: true
Lint/DuplicateBranch: # new in 1.3
  Enabled: true
Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
  Enabled: true
Lint/EmptyBlock: # new in 1.1
  Enabled: true
Lint/EmptyClass: # new in 1.3
  Enabled: true
Lint/EmptyInPattern: # new in 1.16
  Enabled: true
Lint/LambdaWithoutLiteralBlock: # new in 1.8
  Enabled: true
Lint/NoReturnInBeginEndBlocks: # new in 1.2
  Enabled: true
Lint/NumberedParameterAssignment: # new in 1.9
  Enabled: true
Lint/OrAssignmentToConstant: # new in 1.9
  Enabled: true
Lint/RedundantDirGlobSort: # new in 1.8
  Enabled: true
Lint/SymbolConversion: # new in 1.9
  Enabled: true
Lint/ToEnumArguments: # new in 1.1
  Enabled: true
Lint/TripleQuotes: # new in 1.9
  Enabled: true
Lint/UnexpectedBlockArity: # new in 1.5
  Enabled: true
Lint/UnmodifiedReduceAccumulator: # new in 1.1
  Enabled: true
Naming/InclusiveLanguage: # new in 1.18
  Enabled: true
Style/ArgumentsForwarding: # new in 1.1
  Enabled: true
Style/CollectionCompact: # new in 1.2
  Enabled: true
Style/DocumentDynamicEvalDefinition: # new in 1.1
  Enabled: true
Style/EndlessMethod: # new in 1.8
  Enabled: true
Style/HashConversion: # new in 1.10
  Enabled: true
Style/HashExcept: # new in 1.7
  Enabled: true
Style/IfWithBooleanLiteralBranches: # new in 1.9
  Enabled: true
Style/InPatternThen: # new in 1.16
  Enabled: true
Style/MultilineInPatternThen: # new in 1.16
  Enabled: true
Style/NegatedIfElseCondition: # new in 1.2
  Enabled: true
Style/NilLambda: # new in 1.3
  Enabled: true
Style/QuotedSymbols: # new in 1.16
  Enabled: true
Style/RedundantArgument: # new in 1.4
  Enabled: true
Style/RedundantSelfAssignmentBranch: # new in 1.19
  Enabled: true
Style/StringChars: # new in 1.12
  Enabled: true
Style/SwapValues: # new in 1.1
  Enabled: true
For more information: https://docs.rubocop.org/rubocop/versioning.html

βœ— One or more pre-commit hooks failed

I will abide by the code of conduct

Raise exception if `.env.sample` file is not found?

Before we start...:

  • I checked the documentation and didn't find this feature
  • I checked to make sure that this feature has not already been requested

Branch/Commit:

main branch.

Describe the feature:

Maybe we should raise an exception if the user is trying to use the library without a .env.sample file?

Problem:

This library doesn't do anything if you don't have a .env.sample file in the root directory of your application, which could lead to bug reports because .env.sample is not found.

Resources:

Trying to follow the "principle of least astonishment" here: https://en.wikipedia.org/wiki/Principle_of_least_astonishment

I will abide by the code of conduct

[BUG] Add foreman to docker config described in the README

IMPORTANT: please make sure you ask yourself all intro questions and fill all sections of the template.

Before we start...:

  • I checked the documentation and found no answer
  • I checked to make sure that this issue has not already been filed
  • I'm reporting the issue to the correct repository (for multi-repository projects)

Expected behavior:

Information about how to run dotenv_validator when you use foreman.

Actual behavior:

No informatino about how use dotenv_validator when you use foreman.

Context and environment:

We can update this part of the README: https://github.com/fastruby/dotenv_validator#if-you-use-docker-compose-read-this
to explain that it applies to foreman too.

For more context refer to this issue: fastruby/rails-template#23

I will abide by the code of conduct

Publish the gem

Currently it's only available through github, bundle it an upload to rubygems. Then update README.

[REQUEST] Rename to DotenvValidator

Branch/Commit:

Main branch

Describe the feature:

Rename this gem as DotenvValidator

Problem:

DotenvChecker may not be the right name for what this gem does, DotenvValidator is more accurate

I will abide by the code of conduct

Release new version?

Hi, I see there have been many changes on main since the last version of dotenv_validator was released in Sept 2021, like support for boolean and uuid. Could you release a new version to rubygems? πŸ™

Remove Rails dependency?

Currently it requires Rails to get the path of the .env.sample file, check if we can make it more generic

[REQUEST] Support Ruby types

Branch/Commit:

Main branch

Describe the feature:

It would be useful to support Ruby types along with the more generic type, like int, integer and also Integer, similar for strings, regexp, etc.

Problem:

A user may be more familiar with the Ruby types

I will abide by the code of conduct

Add tests

Add some tests for the different combinations of config (required and formats)

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.