Giter Club home page Giter Club logo

atmosphere-libs's Introduction

Banner

License Chat on Discord

Atmosphère is a work-in-progress customized firmware for the Nintendo Switch.

Components

Atmosphère consists of multiple components, each of which replaces/modifies a different component of the system:

  • Fusée: First-stage Loader, responsible for loading and validating stage 2 (custom TrustZone) plus package2 (Kernel/FIRM sysmodules), and patching them as needed. This replaces all functionality normally in Package1loader/NX Bootloader.
    • Sept: Payload used to enable support for runtime key derivation on 7.0.0.
  • Exosphère: Customized TrustZone, to run a customized Secure Monitor
  • Thermosphère: EL2 EmuNAND support, i.e. backing up and using virtualized/redirected NAND images
  • Stratosphère: Custom Sysmodule(s), both Rosalina style to extend the kernel/provide new features, and of the loader reimplementation style to hook important system actions
  • Troposphère: Application-level Horizon OS patches, used to implement desirable CFW features

Licensing

This software is licensed under the terms of the GPLv2, with exemptions for specific projects noted below.

You can find a copy of the license in the LICENSE file.

Exemptions:

  • Nintendo is exempt from GPLv2 licensing and may (at its option) instead license any source code authored for the Atmosphère project under the Zero-Clause BSD license.

Credits

Atmosphère is currently being developed and maintained by SciresM, TuxSH, hexkyz, and fincs.
In no particular order, we credit the following for their invaluable contributions:

  • switchbrew for the libnx project and the extensive documentation, research and tool development pertaining to the Nintendo Switch.
  • devkitPro for the devkitA64 toolchain and libnx support.
  • ReSwitched Team for additional documentation, research and tool development pertaining to the Nintendo Switch.
  • ChaN for the FatFs module.
  • Marcus Geelnard for the bcl-1.2.0 library.
  • naehrwert and st4rk for the original hekate project and its hwinit code base.
  • CTCaer for the continued hekate project's fork and the minerva_tc project.
  • m4xw for development of the emuMMC project.
  • Riley for suggesting "Atmosphere" as a Horizon OS reimplementation+customization project name.
  • hedgeberg for research and hardware testing.
  • lioncash for code cleanup and general improvements.
  • jaames for designing and providing Atmosphère's graphical resources.
  • Everyone who submitted entries for Atmosphère's splash design contest.
  • All those who actively contribute to the Atmosphère repository.

atmosphere-libs's People

Contributors

adubbz avatar ameerj avatar averne avatar bunnei avatar fincs avatar hexkyz avatar hookedbehemoth avatar jamepeng avatar leoetlino avatar liamwhite avatar lioncash avatar merryhime avatar misson20000 avatar ndeadly avatar neobrain avatar sciresm avatar tuxsh avatar volcaem avatar werwolv 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

atmosphere-libs's Issues

IPC server doesn't accept "single" C descriptor in request

The GetFirmwareVersion command (set:sys#3) is reimplemented in ams_mitm. It has a single buffer, with Out | HipcPointer | FixedSize flags. If a client calls this command and passes a "single" C descriptor (flags = 2) in the request, the server will close the session. Nintendo servers will accept this usage and correctly write the data back to the single pointer buffer.

Unknown whether the issue generalizes to buffers with other flags and comes from the fact that the "single" C descriptor exists at all in the request or whether it does not and the issue is that this specific buffer type will not write back to "single" C descriptor.

Example command buffer:

04 00 00 00 08 08 00 00  00 00 00 00 00 00 00 00  |  ................
53 46 43 49 00 00 00 00  03 00 00 00 00 00 00 00  |  SFCI............
00 00 00 00 00 00 00 00  60 6c 66 4c 07 00 00 01  |  ........`lfL....
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |  ................
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |  ................

Compilation atmosphere-libs pm library

Hi
When I try to compile the stratosphere lib I get a compilation error ::PmResourceLimitValues has not been declared (file pm_info_api.cpp:32:67).

I have also noticed in the code that the function pminfoGetAppletCurrentResourceLimitValues doesn't exist but is used in the pm_info_api.cpp file. Do I have to install a particular library?

Sorry if this isn't the place where to post these kind of issues.

Best regards

Build error error: '::svcQueryIoMapping' has not been declared; did you mean 'QueryIoMapping'?

Hello there, I am trying to build libstratosphere on MSYS MINGW and the next errors arise:

Am I missing something?

C:/msys64/home/Impeeza/Atmosphere-libs/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp:335:32: error: '::svcQueryIoMapping' has not been declared; did you mean 'QueryIoMapping'?
  335 |                     R_RETURN(::svcQueryIoMapping(reinterpret_cast<u64 *>(out_address), reinterpret_cast<u64 *>(out_size), physical_address, size));
      |                                ^~~~~~~~~~~~~~~~~
C:/msys64/home/Impeeza/Atmosphere-libs/libvapours/include/vapours/results/results_common.hpp:436:48
 note: in definition of macro 'R_RETURN'
  436 |         const ::ams::Result _tmp_r_throw_rc = (res_expr);
                                                   \
      |                                                ^~~~~~~~
C:/msys64/home/Impeeza/Atmosphere-libs/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp: In function 'ams::Result ams::svc::aarch64::lp64::MapInsecureMemory(ams::svc::Address, ams::svc::Size)':
C:/msys64/home/Impeeza/Atmosphere-libs/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp:507:32: error: '::svcMapInsecureMemory' has not been declared; did you mean 'MapInsecureMemory'?
  507 |                     R_RETURN(::svcMapInsecureMemory(reinterpret_cast<void *>(static_cast<uintptr_t>(address)), size));
      |                                ^~~~~~~~~~~~~~~~~~~~
C:/msys64/home/Impeeza/Atmosphere-libs/libvapours/include/vapours/results/results_common.hpp:436:48
 note: in definition of macro 'R_RETURN'
  436 |         const ::ams::Result _tmp_r_throw_rc = (res_expr);
                                                   \
      |                                                ^~~~~~~~
C:/msys64/home/Impeeza/Atmosphere-libs/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp: In function 'ams::Result ams::svc::aarch64::lp64::UnmapInsecureMemory(ams::svc::Address, ams::svc::Size)':
C:/msys64/home/Impeeza/Atmosphere-libs/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp:511:32: error: '::svcUnmapInsecureMemory' has not been declared; did you mean 'UnmapInsecureMemory'?
  511 |                     R_RETURN(::svcUnmapInsecureMemory(reinterpret_cast<void *>(static_cast<uintptr_t>(address)), size));
      |                                ^~~~~~~~~~~~~~~~~~~~~~
C:/msys64/home/Impeeza/Atmosphere-libs/libvapours/include/vapours/results/results_common.hpp:436:48
 note: in definition of macro 'R_RETURN'
  436 |         const ::ams::Result _tmp_r_throw_rc = (res_expr);
                                                   \
      |                                                ^~~~~~~~
make[2]: *** [/home/Impeeza/Atmosphere-libs/libstratosphere/../config/common.mk:305: /home/Impeeza/Atmosphere-libs/libstratosphere/include/stratosphere.hpp.gch/nintendo_nx_arm64_armv8a_release] Error 1
make[1]: *** [/home/Impeeza/Atmosphere-libs/libstratosphere/libstratosphere.mk:111: all] Error 2
make[1]: Leaving directory '/home/Impeeza/Atmosphere-libs/libstratosphere'
make: *** [Makefile:38: nx_release] Error 2```

![image](https://github.com/Atmosphere-NX/Atmosphere-libs/assets/41979604/503c07fd-f8bb-4455-bdf0-e5c2f0b31eab)

Build issue

I'm getting an error while trying to build this piece:

src/Atmosphere/stratosphere/libstratosphere/source/updater/updater_files.cpp: In function 'Result sts::updater::ReadFile(size_t*, void*, size_t, const char*)':
src/Atmosphere/stratosphere/libstratosphere/source/updater/updater_files.cpp:34:20: error: 'fsdevGetLastResult' was not declared in this scope
             return fsdevGetLastResult();
                    ^~~~~~~~~~~~~~~~~~
src/Atmosphere/stratosphere/libstratosphere/source/updater/updater_files.cpp:34:20: note: suggested alternative: 'socketGetLastBsdResult'
             return fsdevGetLastResult();
                    ^~~~~~~~~~~~~~~~~~
                    socketGetLastBsdResult
src/Atmosphere/stratosphere/libstratosphere/source/updater/updater_files.cpp: In function 'Result sts::updater::GetFileHash(size_t*, void*, const char*, void*, size_t)':
src/Atmosphere/stratosphere/libstratosphere/source/updater/updater_files.cpp:54:24: error: 'fsdevGetLastResult' was not declared in this scope
                 return fsdevGetLastResult();
                        ^~~~~~~~~~~~~~~~~~
src/Atmosphere/stratosphere/libstratosphere/source/updater/updater_files.cpp:54:24: note: suggested alternative: 'socketGetLastBsdResult'
                 return fsdevGetLastResult();
                        ^~~~~~~~~~~~~~~~~~
                        socketGetLastBsdResult
make[3]: *** [/opt/devkitpro/devkitA64/base_rules:14: updater_files.o] Error 1
make[2]: *** [Makefile:102: lib/libstratosphere.a] Error 2
make[2]: Leaving directory 'src/Atmosphere/stratosphere/libstratosphere'
make[1]: *** [Makefile:10: libstratosphere] Error 2
make[1]: Leaving directory 'src/Atmosphere/stratosphere'
make: *** [Makefile:21: stratosphere] Error 2

A quick search shows the method is defined in fs_dev, but the only reference to that I can find is over in the fusee folder. C++ is not my forte, so not sure if I am missing something obvious.

Building issue, file missing

Hi! Building everything else works fine but when I try to build stratosphere, I get this error:

In file included from C:/Users/Giuseppe/Desktop/Atmosphere-libs-master/Atmosphere-libs-master/libstratosphere/source/capsrv/server/jpeg/decodersrv_software_jpeg_decoder.cpp:18:
C:/Users/Giuseppe/Desktop/Atmosphere-libs-master/Atmosphere-libs-master/libstratosphere/source/capsrv/server/jpeg/capsrv_server_jpeg_library_types.hpp:19:10: fatal error: jpeglib.h: No such file or directory
19 | #include <jpeglib.h>

Is there a way to fix this?

[Suggestion] Add BoostApplicationMemoryResourceLimit to pm

What feature are you suggesting?

Add BoostApplicationMemoryResourceLimit, based on Result BoostSystemMemoryResourceLimit(u64 boost_size) from pm_resource_manager in Atmosphere repo and option to bring back default memory values for Applet and Application

Overview:

  • Function that can give additional memory resource for Application at the cost of Applet memory

Smaller Details:

  • There is an option already available in Atmosphere code, but for System that takes its part from Application resource. New function will need to rewrite OG function to take Applet memory and give it to Application.

Nature of Request:

What component do you feel this would best fit within?

  • libstratosphere/PM

Why would this feature be useful?

Some games are very fragile if they can't take all memory they want, so in some cases code injection results in crashes or glitches. This will help by temporarily rising available resources, so it won't get in the way of games.

I took template from Atmosphere repo to better categorize my thoughts.
Sorry this isn't Pull Request, but I failed at making anything that can compile.

Add documentation

Would it be possible to add documentation on how to use this/or make a kip/sysmodule?

libstratosphere undeclared ::svcMapInsecureMemory and ::svcUnmapInsecureMemory

Atmosphere/libraries/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp:507:32: error: '::svcMapInsecureMemory' has not been declared; did you mean 'MapInsecureMemory'?
507 | R_RETURN(::svcMapInsecureMemory(reinterpret_cast<void *>(static_cast<uintptr_t>(address)), size));
| ^~~~~~~~~~~~~~~~~~~~
/Atmosphere/libraries/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/Atmosphere/libraries/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp: In function 'ams::Result ams::svc::aarch64::lp64::UnmapInsecureMemory(ams::svc::Address, ams::svc::Size)':
/Atmosphere/libraries/libstratosphere/include/stratosphere/svc/svc_stratosphere_shims.hpp:511:32: error: '::svcUnmapInsecureMemory' has not been declared; did you mean 'UnmapInsecureMemory'?
511 | R_RETURN(::svcUnmapInsecureMemory(reinterpret_cast<void *>(static_cast<uintptr_t>(address)), size));
| ^~~~~~~~~~~~~~~~~~~~~~

dkp is up to date, and I built libnx from current source for good measure.

Build errors

Hi,

The latest Atmosphere-libs build will fail with below:
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp: In function 'ams::Result ams::pm::info::GetAppletCurrentResourceLimitValues(ams::pm::ResourceLimitValues*)':
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:32:67: error: '::PmResourceLimitValues' has not been declared; did you mean 'ResourceLimitValues'?
32 | static_assert(sizeof(pm::ResourceLimitValues) == sizeof(::PmResourceLimitValues));
| ^~~~~~~~~~~~~~~~~~~~~
| ResourceLimitValues
In file included from /repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results.hpp:23,
from /repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours.hpp:28,
from /repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/include/stratosphere.hpp:25:
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:33:77: error: 'PmResourceLimitValues' does not name a type; did you mean 'ResourceLimitValues'?
33 | R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues >(out)));
| ^~~~~~~~~~~~~~~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:33:99: error: expected '>' before '
' token
33 | R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues >(out)));
| ^
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:33:99: error: expected '(' before '
' token
33 | R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
| ^
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:33:100: error: expected primary-expression before '>' token
33 | R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
| ^
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:33:18: error: 'pminfoGetAppletCurrentResourceLimitValues' was not declared in this scope; did you mean 'GetAppletCurrentResourceLimitValues'?
33 | R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:57: error: expected ')' before ';' token
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ~ ^
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:33:9: note: in expansion of macro 'R_RETURN'
33 | R_RETURN(pminfoGetAppletCurrentResourceLimitValues(reinterpret_cast<PmResourceLimitValues >(out)));
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp: In function 'ams::Result ams::pm::info::GetAppletPeakResourceLimitValues(ams::pm::ResourceLimitValues
)':
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:37:67: error: '::PmResourceLimitValues' has not been declared; did you mean 'ResourceLimitValues'?
37 | static_assert(sizeof(pm::ResourceLimitValues) == sizeof(::PmResourceLimitValues));
| ^~~~~~~~~~~~~~~~~~~~~
| ResourceLimitValues
In file included from /repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results.hpp:23,
from /repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours.hpp:28,
from /repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/include/stratosphere.hpp:25:
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:38:74: error: 'PmResourceLimitValues' does not name a type; did you mean 'ResourceLimitValues'?
38 | R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues >(out)));
| ^~~~~~~~~~~~~~~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:38:96: error: expected '>' before '
' token
38 | R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues >(out)));
| ^
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:38:96: error: expected '(' before '
' token
38 | R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
| ^
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:38:97: error: expected primary-expression before '>' token
38 | R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
| ^
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:38:18: error: 'pminfoGetAppletPeakResourceLimitValues' was not declared in this scope; did you mean 'GetAppletPeakResourceLimitValues'?
38 | R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:48: note: in definition of macro 'R_RETURN'
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ^~~~~~~~
/repo/NS/ldn_mitm/Atmosphere-libs/config//../libvapours/include/vapours/results/results_common.hpp:436:57: error: expected ')' before ';' token
436 | const ::ams::Result _tmp_r_throw_rc = (res_expr);
| ~ ^
/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/source/pm/pm_info_api.cpp:38:9: note: in expansion of macro 'R_RETURN'
38 | R_RETURN(pminfoGetAppletPeakResourceLimitValues(reinterpret_cast<PmResourceLimitValues *>(out)));
| ^~~~~~~~
make[3]: *** [/opt/devkitpro//devkitA64/base_rules:14: pm_info_api.o] Error 1
make[2]: *** [/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere/libstratosphere.mk:111: all] Error 2
make[2]: Leaving directory '/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere'
make[1]: *** [Makefile:38: nx_release] Error 2
make[1]: Leaving directory '/repo/NS/ldn_mitm/Atmosphere-libs/libstratosphere'
make: *** [Makefile:17: Atmosphere-libs/libstratosphere] Error 2

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.