GithubHelp home page GithubHelp logo

disable_dm-verity_forceencrypt's Introduction

Deprecated

I don't have any devices with functional TWRP and haven't for well over a year. Don't see it happening in the near future either so I won't be able to update this anymore. Feel free to fork and change however you like

Disables Verity, Forceencrypt, and/or Disc Quota

Heavily based on previous work by topjohnwu and jcadduono

Support

XDA


AnyKernel3 - Flashable Zip Template for Kernel Releases with Ramdisk Modifications

by osm0sis @ xda-developers

"AnyKernel is a template for an update.zip that can apply any kernel to any ROM, regardless of ramdisk." - Koush

AnyKernel2 pushed the format further by allowing kernel developers to modify the underlying ramdisk for kernel feature support easily using a number of included command methods along with properties and variables to customize the installation experience to their kernel. AnyKernel3 adds the power of topjohnwu's magiskboot for wider format support by default, and to automatically detect and retain Magisk root by patching the new Image.*-dtb as Magisk would.

A script based on Galaxy Nexus (tuna) is included for reference. Everything to edit is self-contained in anykernel.sh.

// Properties / Variables

kernel.string=KernelName by YourName @ xda-developers
do.devicecheck=1
do.modules=1
do.systemless=1
do.cleanup=1
do.cleanuponabort=0
device.name1=maguro
device.name2=toro
device.name3=toroplus
device.name4=tuna
supported.versions=6.0 - 7.1.2
supported.patchlevels=2019-07 -

block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;
is_slot_device=0;
ramdisk_compression=auto;

do.devicecheck=1 specified requires at least device.name1 to be present. This should match ro.product.device, ro.build.product, ro.product.vendor.device or ro.vendor.product.device from the build.prop files for your device. There is support for as many device.name# properties as needed. You may remove any empty ones that aren't being used.

do.modules=1 will push the .ko contents of the modules directory to the same location relative to root (/) and apply correct permissions. On A/B devices this can only be done to the active slot.

do.systemless=1 (with do.modules=1) will instead push the full contents of the modules directory to create a simple "ak3-helper" Magisk module, allowing developers to effectively replace system files, including .ko files. If the current kernel is changed then the kernel helper module automatically removes itself to prevent conflicts.

do.cleanup=0 will keep the zip from removing its working directory in /tmp/anykernel (by default) - this can be useful if trying to debug in adb shell whether the patches worked correctly.

do.cleanuponabort=0 will keep the zip from removing its working directory in /tmp/anykernel (by default) in case of installation abort.

supported.versions= will match against ro.build.version.release from the current ROM's build.prop. It can be set to a list or range. As a list of one or more entries, e.g. 7.1.2 or 8.1.0, 9 it will look for exact matches, as a range, e.g. 7.1.2 - 9 it will check to make sure the current version falls within those limits. Whitespace optional, and supplied version values should be in the same number format they are in the build.prop value for that Android version.

supported.patchlevels= will match against ro.build.version.security_patch from the current ROM's build.prop. It can be set as a closed or open-ended range of dates in the format YYYY-MM, whitespace optional, e.g. 2019-04 - 2019-06, 2019-04 - or - 2019-06 where the last two examples show setting a minimum and maximum, respectively.

block=auto instead of a direct block filepath enables detection of the device boot partition for use with broad, device non-specific zips. Also accepts specifically boot or recovery.

is_slot_device=1 enables detection of the suffix for the active boot partition on slot-based devices and will add this to the end of the supplied block= path. Also accepts auto for use with broad, device non-specific zips.

ramdisk_compression=auto allows automatically repacking the ramdisk with the format detected during unpack. Changing auto to gz, lzo, lzma, xz, bz2, lz4, or lz4-l (for lz4 legacy) instead forces the repack as that format, and using cpio or none will (attempt to) force the repack as uncompressed.

customdd="<arguments>" may be added to allow specifying additional dd parameters for devices that need to hack their kernel directly into a large partition like mmcblk0, or force use of dd for flashing.

slot_select=active|inactive may be added to allow specifying the target slot. If omitted the default remains active.

// Command Methods

ui_print "<text>" [...]
abort ["<text>" [...]]
contains <string> <substring>
file_getprop <file> <property>

set_perm <owner> <group> <mode> <file> [<file2> ...]
set_perm_recursive <owner> <group> <dir_mode> <file_mode> <dir> [<dir2> ...]

dump_boot
split_boot
unpack_ramdisk

backup_file <file>
restore_file <file>
replace_string <file> <if search string> <original string> <replacement string> <scope>
replace_section <file> <begin search string> <end search string> <replacement string>
remove_section <file> <begin search string> <end search string>
insert_line <file> <if search string> <before|after> <line match string> <inserted line>
replace_line <file> <line replace string> <replacement line>
remove_line <file> <line match string>
prepend_file <file> <if search string> <patch file>
insert_file <file> <if search string> <before|after> <line match string> <patch file>
append_file <file> <if search string> <patch file>
replace_file <file> <permissions> <patch file>
patch_fstab <fstab file> <mount match name> <fs match type> block|mount|fstype|options|flags <original string> <replacement string>
patch_cmdline <cmdline entry name> <replacement string>
patch_prop <prop file> <prop name> <new prop value>
patch_ueventd <ueventd file> <device node> <permissions> <chown> <chgrp>

repack_ramdisk
flash_boot
flash_dtbo
write_boot

reset_ak [keep]
setup_ak

"if search string" is the string it looks for to decide whether it needs to add the tweak or not, so generally something to indicate the tweak already exists. "cmdline entry name" behaves somewhat like this as a match check for the name of the cmdline entry to be changed/added by the patch_cmdline function, followed by the full entry to replace it. "prop name" also serves as a match check in patch_prop for a property in the given prop file, but is only the prop name as the prop value is specified separately.

Similarly, "line match string" and "line replace string" are the search strings that locate where the modification needs to be made for those commands, "begin search string" and "end search string" are both required to select the first and last lines of the script block to be replaced for replace_section, and "mount match name" and "fs match type" are both required to narrow the patch_fstab command down to the correct entry.

"scope" may be specified as "global" to force all instances of the string targeted by replace_string to be replaced. Omitted or set to anything else and it will perform the default first-match replacement.

"before|after" requires you simply specify "before" or "after" for the placement of the inserted line, in relation to "line match string".

"block|mount|fstype|options|flags" requires you specify which part (listed in order) of the fstab entry you want to check and alter.

dump_boot and write_boot are the default method of unpacking/repacking, but for more granular control, or omitting ramdisk changes entirely ("OG AK" mode), these can be separated into split_boot; unpack_ramdisk and repack_ramdisk; flash_boot respectively. flash_dtbo can be used to flash a dtbo image. It is automatically included in write_boot but can be called separately if using "OG AK" mode or creating a dtbo only zip.

Multi-partition zips can be created by removing the ramdisk and patch folders from the zip and including instead "-files" folders named for the partition (without slot suffix), e.g. boot-files + recovery-files, or kernel-files + ramdisk-files (on some Treble devices). These then contain Image.gz, and ramdisk, patch, etc. subfolders for each partition. To setup for the next partition, simply set block= (without slot suffix) and ramdisk_compression= for the new target partition and use the reset_ak command.

Similarly, multi-slot zips can be created with the normal zip layout for the active (current) slot, then resetting for the inactive slot by setting block= (without slot suffix) again, slot_select=inactive and ramdisk_compression= for the target slot and using the reset_ak keep command, which will retain the patch and any added ramdisk files for the next slot.

backup_file may be used for testing to ensure ramdisk changes are made correctly, transparency for the end-user, or in a ramdisk-only "mod" zip. In the latter case restore_file could also be used to create a "restore" zip to undo the changes, but should be used with caution since the underlying patched files could be changed with ROM/kernel updates.

You may also use ui_print "<text>" to write messages back to the recovery during the modification process, abort "<text>" to abort with optional message, and file_getprop "<file>" "<property>" and contains "<string>" "<substring>" to simplify string testing logic you might want in your script.

// Binary Inclusion

The AK3 repo includes current ARM builds of magiskboot, magiskpolicy and busybox by default to keep the basic package small. Builds for other architectures and optional binaries (see below) are available from the latest Magisk zip, or my latest AIK-mobile and FlashIt packages, respectively, here:

https://forum.xda-developers.com/showthread.php?t=2073775 (Android Image Kitchen thread)
https://forum.xda-developers.com/showthread.php?t=2239421 (Odds and Ends thread)

Optional supported binaries which may be placed in /tools to enable built-in expanded functionality are as follows:

  • mkbootfs - for broken recoveries, or, booted flash support for a script/app via bind mount to /tmp (deprecated/use with caution)
  • flash_erase, nanddump, nandwrite - MTD block device support for devices where the dd command is not sufficient
  • dumpimage, mkimage - DENX U-Boot uImage format support
  • mboot - Intel OSIP Android image format support
  • unpackelf, mkbootimg - Sony ELF kernel.elf format support, repacking as AOSP standard boot.img for unlocked bootloaders
  • elftool (with unpackelf) - Sony ELF kernel.elf format support, repacking as ELF for older Sony devices
  • mkmtkhdr (with unpackelf) - MTK device boot image section headers support for Sony devices
  • futility + chromeos test keys directory - Google ChromeOS signature support
  • BootSignature_Android.jar + avb keys directory - Google Android Verified Boot (AVB) signature support
  • rkcrc - Rockchip KRNL ramdisk image support

Optionally moving ARM builds to tools/arm and putting x86 builds in tools/x86 will enable architecture detection for use with broad, device non-specific zips.

// Instructions

  1. Place final kernel build product, e.g. Image.gz-dtb or zImage to name a couple, in the zip root (any separate dt, dtb or recovery_dtbo, and/or dtbo should also go here for devices that require custom ones, each will fallback to the original if not included)

  2. Place any required ramdisk files in /ramdisk and module files in /modules (with the full path like /modules/system/lib/modules)

  3. Place any required patch files (generally partial files which go with AK3 file editing commands) in /patch

  4. Modify the anykernel.sh to add your kernel's name, boot partition location, permissions for any added ramdisk files, and use methods for any required ramdisk modifications (optionally, also place banner and/or version files in the root to have these displayed during flash)

  5. zip -r9 UPDATE-AnyKernel3.zip * -x .git README.md *placeholder

The LICENSE file must remain in the final zip to comply with licenses for binary redistribution and the license of the AK3 scripts.

If supporting a recovery that forces zip signature verification (like Cyanogen Recovery) then you will need to also sign your zip using the method I describe here:

http://forum.xda-developers.com/android/software-hacking/dev-complete-shell-script-flashable-zip-t2934449

Not required, but any tweaks you can't hardcode into the source (best practice) should be added with an additional init.tweaks.rc or bootscript.sh to minimize the necessary ramdisk changes. On newer devices Magisk allows these within /overlay.d - see examples.

It is also extremely important to note that for the broadest AK3 compatibility it is always better to modify a ramdisk file rather than replace it.

If running into trouble when flashing an AK3 zip, the suffix -debugging may be added to the zip's filename to enable creation of a debug .tgz of /tmp for later examination while booted or on desktop.

// Staying Up-To-Date

Now that you've got a ready zip for your device, you might be wondering how to keep it up-to-date with the latest AnyKernel commits. AnyKernel2 and AnyKernel3 have been painstakingly developed to allow you to just drop in the latest update-binary and tools directory and have everything "just work" for beginners not overly git or script savvy, but the best practice way is as follows:

  1. Fork my AnyKernel3 repo on GitHub

  2. git clone https://github.com/<yourname>/AnyKernel3

  3. git remote add upstream https://github.com/osm0sis/AnyKernel3

  4. git checkout -b <devicename>

  5. Set it up like your zip (i.e. remove any folders you don't use like ramdisk or patch, delete README.md, and add your anykernel.sh and optionally your Image.*-dtb if you want it up there) then commit all those changes

  6. git push --set-upstream origin <devicename>

  7. git checkout master then repeat steps 4-6 for any other devices you support

Then you should be able to git pull upstream master from your master branch and either merge or cherry-pick the new AK3 commits into your device branches as needed.

For further support and usage examples please see the AnyKernel3 XDA thread: https://forum.xda-developers.com/showthread.php?t=2670512

Have fun!

disable_dm-verity_forceencrypt's People

Contributors

zackptg5 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

disable_dm-verity_forceencrypt's Issues

can not boot

use the newest package, magisk 18.0,xiaomi mix2s can not boot, only miloop

grep not matching fstab

Hi,

I tried using this to patch my Samsung SM-A320 (A3 2017). This is running TWRP 3.2.3-0 (a3y17lte).

This version of TWRP isn't able to mount /data when it has quota enabled. I added "quota" into the zip file name, but it still doesn't remove the quota entry from fstab. On my device the relevant fstab file is fstab.samsungexynos7870 in the root of the ramdisk.

I have isolated the problem to the line 174 in boot_patch.sh:

for i in $(cpio -t -F ramdisk.cpio | grep "fstab.\|.fstab"); do

This grep command is not matching any of the three fstab.x files in the boot image (fstab.samsungexynos7870 / fstab.ranchu / fstab.goldfish).

If I change this to either of the following then everything works fine and the fstab is patched correctly

for i in $(cpio -t -F ramdisk.cpio | grep -E "fstab.|.fstab"); do
or
for i in $(cpio -t -F ramdisk.cpio | grep -e "fstab." -e ".fstab"); do

Is there any preference to which syntax to use, and could this cause any problems on other devices?

Thanks

Jack

Does not work with adb sideload

adb sideload renames the sideloaded zip to package.zip. As the script depends on the zip filename to enable/disable things, it does nothing.

Device stucks after installing it

I installed "Disable_Dm-Verity_ForceEncrypt_03.04.2020.zip" using TWRP, after boot the phone stuck abnormally,
Screenshot_20200517-092833
And if I don't sign in to google just yet it'll stuck at with a blurred out empty screen later on and only the back button (in this point nothing works, so no screenshot), I force restarted (as only pressing shutdown button didn't work) to recovery and installed everything except for "Disable_Dm-Verity_ForceEncrypt_03.04.2020.zip" and everything worked fine except the device is encrypted now. That's how I narrowed the issue down to it.
Recovery log:
recovery.log
dmesg.log
Final SS in recovery:
Screenshot_2020-05-16-22-20-31

Device Name: Doogee N100
Stock Rom: https://cloud.mail.ru/public/46WH/m65NPMvAR/

Use hex patch for dtb patching

Use hex patch for dtb rather than relying on magisk's bugged method:
Replace ',verify' with nothing:
,verify = 2c 76 65 72 69 66 79
verify, = 76 65 72 69 66 79 2c
verify = 76 65 72 69 66 79

Perhaps a simple sed patch would do the trick?
sed -i -e 's/\x2c\x76\x65\x72\x69\x66\x79/\x00\x00\x00\x00\x00\x00\x00/g' -e 's/\x76\x65\x72\x69\x66\x79\x2c/\x00\x00\x00\x00\x00\x00\x00/g' -e 's/\x76\x65\x72\x69\x66\x79/\x00\x00\x00\x00\x00\x00/g' $overlay/dtb
(Assuming it's unpacked properly and stuff)

With my OP5T. This is what is extracted:

/tmp/anykernel/ramdisk:
acct
bt_firmware
bugreports
cache
charger
charger_log
config
d
data
default.prop
dev
dsp
etc
firmware
ftm_power_config.sh
init
init.blu_spark.rc
init.environ.rc
init.oem.debug.rc
init.oem.early_boot.sh
init.oem.engineermode.sh
init.oem.rc
init.oem_ftm.rc
init.rc
init.recovery.qcom.rc
init.usb.configfs.rc
init.usb.rc
init.zygote32.rc
init.zygote64_32.rc
kmemleak.sh
mnt
nonplat_file_contexts
nonplat_hwservice_contexts
nonplat_property_contexts
nonplat_seapp_contexts
nonplat_service_contexts
oem
persist
plat_file_contexts
plat_hwservice_contexts
plat_property_contexts
plat_seapp_contexts
plat_service_contexts
proc
res
sbin
sdcard
sepolicy
sepolicy_debug
storage
sys
system
ueventd.rc
vendor
vndservice_contexts

/tmp/anykernel/ramdisk/acct:

/tmp/anykernel/ramdisk/bt_firmware:

/tmp/anykernel/ramdisk/cache:

/tmp/anykernel/ramdisk/config:

/tmp/anykernel/ramdisk/data:

/tmp/anykernel/ramdisk/dev:

/tmp/anykernel/ramdisk/dsp:

/tmp/anykernel/ramdisk/firmware:

/tmp/anykernel/ramdisk/mnt:

/tmp/anykernel/ramdisk/oem:

/tmp/anykernel/ramdisk/persist:

/tmp/anykernel/ramdisk/proc:

/tmp/anykernel/ramdisk/res:
images

/tmp/anykernel/ramdisk/res/images:
charger

/tmp/anykernel/ramdisk/res/images/charger:
battery_fail.png
battery_scale.png

/tmp/anykernel/ramdisk/sbin:
OPNetlinkService
charger
charger_log
dashd
self-init
ueventd
watchdogd

/tmp/anykernel/ramdisk/storage:

/tmp/anykernel/ramdisk/sys:

/tmp/anykernel/ramdisk/system:

/tmp/anykernel/split_img: boot.img-base boot.img-board boot.img-cmdline boot.img-hash boot.img-kerneloff boot.img-oslevel boot.img-osversion boot.img-pagesize boot.img-ramdisk.cpio.gz boot.img-ramdiskoff boot.img-secondoff boot.img-tagsoff boot.img-zImage

I'm assuming zImage in split_img is where dtb lies?

For my reference: https://source.android.com/devices/architecture/dto/implement

dtb is typically found in zImage in split_disk, dtbo is a separate partition/img. Both are imgs and are patched the same way

Help me to understand please

So i have this j4+ samsung device, i've flashed twrp and worked well. Then i've flased patched boot.img which has been patched by magisk 18 earlier and phone runs wihout magisk. Now my question is can i flash universal no verity then i use stock boot.img to boot the phone without looping? Or should i flash kernel sepolicy? So the main idea is i only want to boot the phone with twrp installed. Thanks, and sorry for my bad english.

Not working on pixel 3 with android 9.

This produces a zip file. When I flash a pixel phone with factory images and then use twrp to flash this zip file, the device complains about data is corrupt and refuses to boot. The zip works as expected on pixel 1 and pixel2, but on pixel 3, its not working. FWIW, the magisk installer works fine on this phone, even back to version 17.3.

Am I missing a step?

$ git clone [email protected]:Zackptg5/Disable_Dm-Verity_ForceEncrypt.git fec
$ cd fec
$ zip -r ../disable_verity_fec.zip . -x *.git*
+ adb shell twrp install /tmp/disable_verity_fec.zip
Installing zip file '/tmp/disable_verity_fec.zip'
Checking for Digest file...
Skipping Digest check: no Digest file found
*************************************************
* DmVerity,ForceEncrypt, and DiscQuota Disabler *
*                 By: Zackptg5                  *
*         Heavily based on the work of:         *
*            TopJohnWu and Jcadduono            *
*************************************************
- Current boot slot: _a
- Mounting /system, /vendor
- Device is system-as-root
- Target image: /dev/block/sda11
- Creating/modifying .magisk and .supersu files...
- Unpacking boot image
- Disabling selections in vendor fstabs...
  Patching: /system/vendor/etc/fstab.persist
  Patching: /system/vendor/etc/fstab.sdm845
- Patching ramdisk
- Removing dm(avb)-verity in dtb
- Repacking boot image
- Flashing new boot image
- DTBO image: /dev/block/sde11
- Unmounting partitions
- Done
Done processing script file

Modify the script to preserve selinux context

Hi Zackptg5,
It was causing no network issue, as the selinux context in nvdata fstab was changed to u:object_r:unlabeled:s0 , I had to change it back to u:object_r:nvdata_file:s0 to make everything work.

By God's grace , I have little knowledge of linux, so I was able to figure it out, but other guys who had this device (realme 3) had to go to service center and they were told the phone has to be replaced (ofcourse for free as it's still under warranty)

Disable Force Encrypt Not Working On Xiaomi Redmi 6 (cereus) with MIUI 8.11.8

I Want To Install Magisk...Here Is My Steps :

  1. Format The Phone With fastboot format userdata
  2. Still on the Fastboot mode, flash twrp (i use twrp v3.2.3-1)
  3. Go To TWRP and flash the MIUI Rom (I use MIUI cereus 8.11.8 Global)
  4. Still on the TWRP, flash Magisk 21.0
  5. Still on the TWRP again, flash The Disable DM-Verity And Force Encryption (I download it from here)
  6. And The last thing....reboot to system

And yeah it boots successfuly...and also the DM-Verity was disabled (How do you know you ask?Cause the TWRP was not resetted to Mi-Recovery after booting into system and the Magisk installed successfuly)
However if i go to the TWRP after booting into system,the TWRP still ask for password and my internal storage show 0mb
(It shows that the encryption is still there, right?)
What do i do wrong ?
pls help @Zackptg5 :)
Any answer is appreciated :D
Note : sorry for my bad English :)

Unable to flash on Poco F3 due to inability to mount '/mnt/vendor/spunvm/'

Poco F3, Unlocked Bootloader, Android 11, MIUI 12.5 Stock ROM.

This is likely a problem with my phone, somehow. Or the version of TWRP for my particular device. However I'd still like to kindly ask for help, as I've no idea where else to ask.
I've asked on Reddit and on the Xiaomi.eu Forums, but those haven't received much traction.

Basically, I can't mount '/mnt/vendor/spunvm/' in TWRP, and neither can Disable_Dm-Verity_ForceEncrypt, or any other Force-Encrypt.zip. All Force-Encrypt ZIPs fail.

I also can't manually edit /vendor/etc/fstab.qcom, as the filesystem /vendor/ is read-only, and in both ADB Shell and TWRP Terminal I'm unable to set it read-write (Invalid Argument). However, mounting /vendor read-only works.

I'm also not sure if '/mnt/vendor/spunvm/' and '/vendor' are related.

I've asked in the Subreddits r/AndroidQuestions, r/LinuxQuestions and the Xiaomi.eu Forum:
https://www.reddit.com/r/AndroidQuestions/comments/o2b6lc/problems_trying_to_disable_android_11s/
https://www.reddit.com/r/linuxquestions/comments/o29q3v/devblockdm3_is_readonly_when_trying_to_remount/
https://xiaomi.eu/community/threads/how-to-disable-force-encryption-on-poco-f3.61635/

TWRP Recovery.log (with noticable mount problem) recovery (1).txt
TWRP Screenshot: https://i.imgur.com/KQkPqNp.png

I would appreciate any tip/solution/follow-up question/reply regarding my problem. This isn't really considered an issue, because I just want to have Encryption disabled, but I've been trying to do this for more than a week, it's been a bit frustrating and I really don't want to give this up.

Things I've tried:
Using Xiaomi.eu Custom ROM, Flashing Force-Encrypt.zip before/after Magisk, Not using Magisk at all, Re-flashing Stock ROM and flashing Force-Encrypt and/or Magisk directly after Flash (before the first Android Boot), manually editing fstab.qcom (Can't paste modified fstab), Setting /vendor as read-write (doesn't work, Invalid Argument)

Edit: Have put Screenshot on Imgur instead, as Screenshot was taking up the whole page.

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.