GithubHelp home page GithubHelp logo

ox-it / munki-rebrand Goto Github PK

View Code? Open in Web Editor NEW
88.0 17.0 24.0 947 KB

Script to rebrand Munki's Managed Software Center

License: BSD 3-Clause "New" or "Revised" License

Python 100.00%
macadmin munki

munki-rebrand's Introduction

munki_rebrand

munki_rebrand is a script to rebrand the Managed Software Center app from Greg Neagle's Munki. It allows you to give the app a different name in Finder (in all localized languages if required), modify its icon, and add an optional postinstall script to the installer pkg.

This is version 4 of munki_rebrand. If you wish to use it to rebrand munki 3.6 or higher, you will need to have Xcode installed and have opened it and installed the extra components. The ability to provide your own .icns file has been removed and the icon will be generated from a 1024x1024px .png only.

It will either:

  • Download the latest release of munkitools from github, unpack it, rebrand it and repack it
  • Use or download a version of the munkitools pkg you specify with the -k or --pkg option. Therefore if you need a custom built pkg you can do this prior to running munki_rebrand, or you can download the automatic builds from https://munkibuilds.org

Pre-requisites

  • Apple Mac running OS X/macOS 10.15+
  • Xcode 12+ (opened once, components installed)
  • Python3

Usage

Please note: munki_rebrand must be run as root in order to successfully build the output pkg.

At its simplest you can use sudo ./munki_rebrand.py --appname "Amazing Software Center" to download the latest munkitools pkg from Github, and rename Managed Software Center to Amazing Software Center in the Finder in all localized versions of "Managed Software Center".

If you specify --pkg you can use either a pathname on disk to a prebuilt munkitools pkg or use an http/s URL to download one, which munki_rebrand will then attempt to rebrand.

The --icon-file option allows you to specify the path to an icon to replace the one in Managed Software Center. This must be a 1024x1024 .png file with alpha channel for transparency that will be converted on the fly. An example .png is included in the repo. The --postinstall option allows you to specify the path to an optional postinstall script that will be executed after munki installs. A postinstall script could be used, for instance, to set the client defaults outlined on the Munki wiki. In addition to the postinstall, you can include the --resource-addition option to include an additional file in the Scripts directory. A good example for this would be to include another package containing middleware. Please note, you may not be able to use --sign-binaries with this option unless the package being added is also previously notarized.

To specify the output filename of your custom pkg use --output-file. For example, if you set this to "Amazing_Software_Center" your output file will be renamed from something like munkitools-2.8.2553.pkg to Amazing_Software_Center-2.8.2553.pkg

The --sign-package option allows you to have a rebranded munki package that is also natively signed. To use this option, your Developer Installer Certificate must be installed into the keychain. When using this option, you must specify the entire Common Name of the certificate. Example: "Developer ID Installer: Munki (U8PN57A5N2)"

The --sign-binaries option allows you to recursively sign the app binaries for the rebranded Managed Software Center, allowing for notarization of the pkg. To use this option, your Developer Application Certificate must be installed into the keychain. When using this option, you must specify the entire Common Name of the certificate. Example: "Developer ID Applications: Munki (U8PN57A5N2)"

For usage help please see sudo ./munki_rebrand.py --help

Troubleshooting/Notes

  • If you receive the message
xcode-select: error: tool 'actool' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

then try the following:

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

You can run sudo xcode-select -s /Library/Developer/CommandLineTools to revert this afterwards if you so wish.

  • The Assets.xcassets folder must be located in the same folder that munki_rebrand.py is run from
  • The app will still appear as Managed Software Center.app in the filesystem e.g. when viewed in Terminal. This is by design, in case the app is called or searched for by name by any other process. The changed name will only appear in Finder, the Dock, and the app's menu bar.
  • The pkg ids of com.google.munki.* are also left unchanged for similar reasons.

To-do

  • Enable the splitting of the distribution pkg into its component pkgs so that the user can decide which to upgrade (perhaps they do not want to upgrade the launchd package if not necessary and can therefore avoid a reboot).
  • munkiimport the resulting pkg(s)?

munki-rebrand's People

Contributors

bochoven avatar erikng avatar fuzzylogiq avatar jc0b avatar liamn avatar mjung avatar n8felton avatar patgmac avatar sphen13 avatar stevekueng 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

Watchers

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

munki-rebrand's Issues

Recommend updating the tag

Tag version 2.2.4 is super old, your code references it here. Greg made a change with munki/munki@6ad9066 that is in tags v2.5.0 and greater that removes the macosx10.8 sdk requirement.

At minimum I'd recommend bumping the tag version to 2.5.0, however in reality it might just be easier to set the current release of v2.8.2.

This will solve the:

error: There is no SDK with the name or path '/Users/username/Source/munki_rebrand/munki/code/apps/Managed Software Center/macosx10.8'

error that @ jimmynyc had in the MacAdmin's Slack group. reference link https://macadmins.slack.com/archives/munki/p1477491267006752

This will means new users can download Xcode, accept the license agreement, download the munki-rebrand script and just go.

Adding support for notarization

Hey are you planning to add support for notarization like the original Munki did a few weeks ago :)?

Here is what they added to the code to make it possible.
munki/munki#939

Thank you so much for you great work 👍

-appname doesnt work

When I try to make an munki rebrand pkg, the name of the app doenst change.

sudo ./munki_rebrand.py -a "Custom AppStore"
Cloning git repo...
Using latest Github code...
Replacing Managed Software Center with Custom AppStore in apps...
Building customized Munki...
Customized package built at /Users/foo/git/munki-rebrand/munkitools-3.1.0.3437.pkg.
Cleaning up...
Done.

If i install the new package, the name is "Geführte Softwareaktuallisierung" die German version of Managed Software Center.

The possibility to change the icon works great, only the name doenst change.

Any ideas?

Notifications not clickable

When getting a branded MSC notification, clicking on it does not open MSC. Presumably because of the name change. Is this something that could possibly be resolved?

Special characters

Hi fuzzylogiq, nice to see an updated version. But munki-rebrand 3.0 does not work with special characters like 'ü'.
Example:

sudo ./munki_rebrand.py --appname "Name"
Downloading munkitools from https://github.com/munki/munki/releases/download/v3.6.0/munkitools-3.6.0.3733.pkg...
Replacing app name with Name...
Building output pkg at /Users/name/Documents/munki-rebrand-3.0/munkitools-3.6.0.3721.pkg...
Cleaning up...
Done.

sudo ./munki_rebrand.py --appname "Nüme"
Downloading munkitools from https://github.com/munki/munki/releases/download/v3.6.0/munkitools-3.6.0.3733.pkg...
Replacing app name with Nüme...
Traceback (most recent call last):
File "./munki_rebrand.py", line 518, in
main()
File "./munki_rebrand.py", line 456, in main
replace_strings(lfile, code, args.appname)
File "./munki_rebrand.py", line 239, in replace_strings
fw.write(line)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 23: ordinal not in range(128)
Cleaning up...
Done.

Branding of the FileVault auth-restart dialog

I was testing munki_rebrand.py with Munki 3.0.0.3316. When Munki starts the macOS install process, it appears that the FileVault auth-restart dialog is not rebranded. It still tells "Managed Software Center wants to unlock the startup disk..." when I would expect it to tell "$my-rebranded-software-centre wants to unlock the startup disk..."

screen shot 2017-05-17 at 10 57 59

Feature Request: Ability to point to a local git copy

(I may write this myself but putting it here so I don't forget or someone else can write it first)

Instead of pulling munki down from git, it would be ideal if munki-rebrand could point to local code. This is useful if you have a fork/branch of munki.

[Q] LaunchDaemons ?

Hi all,

I have the same issue on the original installer, so I wrote a script to download a choices.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>attributeSetting</key>
<integer>1</integer>
<key>choiceAttribute</key>
<string>selected</string>
<key>choiceIdentifier</key>
<string>core</string>
</dict>
<dict>
<key>attributeSetting</key>
<integer>0</integer>
<key>choiceAttribute</key>
<string>selected</string>
<key>choiceIdentifier</key>
<string>admin</string>
</dict>
<dict>
<key>attributeSetting</key>
<integer>1</integer>
<key>choiceAttribute</key>
<string>selected</string>
<key>choiceIdentifier</key>
<string>app</string>
</dict>
<dict>
<key>attributeSetting</key>
<integer>1</integer>
<key>choiceAttribute</key>
<string>selected</string>
<key>choiceIdentifier</key>
<string>launchd</string>
</dict>
</array>
</plist>

And then call the installer command with these choices.

Is there any way I can do this from the postinstall script and call the launchctl for the daemons ?

Special characters

Happy new year fuzzylogiq.
Glad to see that Xcode is no longer required.
Unfortunately 2.0 does not work with (german) special characters like 'ü'.
Example:

munki-rebrand-2.0 $ sudo ./munki_rebrand.py --appname "Name"
Downloading munkitools from https://github.com/munki/munki/releases/download/v3.1.1/munkitools-3.1.1.3447.pkg...
Building output pkg at /Users/user/Documents/munki-rebrand-2.0/munkitools-3.1.1.3447.pkg...
Cleaning up...
Done.

munki-rebrand-2.0 $ sudo ./munki_rebrand.py --appname "Nüme"
Downloading munkitools from https://github.com/munki/munki/releases/download/v3.1.1/munkitools-3.1.1.3447.pkg...
Traceback (most recent call last):
File "./munki_rebrand.py", line 427, in
main()
File "./munki_rebrand.py", line 380, in main
replace_strings(lfile, code, args.appname)
File "./munki_rebrand.py", line 213, in replace_strings
right = right.replace(localized, appname)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
Cleaning up...
Done.

Is this still working for v3.1?

I don't get any errors and it rebuilds the .pkg, but it's not renaming it or adding in the correct icon. Just curious if v3.1 is supported before I try to problem solve more. Thanks!

Version number doesn't match original package

The current Munki release version is 3.6.0.3734. The subpackages are:

munkitools_core-3.6.0.3721.pkg
munkitools_app_usage-3.6.0.3721.pkg
munkitools_admin-3.6.0.3721.pkg
munkitools_app-5.1.0.3734.pkg
munkitools_launchd-3.0.3265.pkg

When you use munki-rebrand, it names the package munkitools-3.6.0.3721.pkg. The official build takes the highest last number out of all the subpackages, so munki-rebrand should be using 3734 as the last part of the version number.

Custom Image not working

When providing the argument --icon-file „Example.png“, the script will return the following error (full output shown):

Downloading munkitools from https://github.com/munki/munki/releases/download/v6.3.1/munkitools-6.3.1.4580.pkg...
Replacing app name with FooBar...
Traceback (most recent call last):
  File "/Users/user/Downloads/munki-rebrand-5.2/munki_rebrand.py", line 632, in <module>
    main()
  File "/Users/user/Downloads/munki-rebrand-5.2/munki_rebrand.py", line 512, in main
    if icns:
UnboundLocalError: local variable 'icns' referenced before assignment
Cleaning up...
Done.

This happens irrespective of the image file provided, or the location the script is being run from. Running the script without the image argument works just fine.

macOS 12.6.6

Munki 3.1 does not work

Munki-Rebrand does not work with Munki 3.1 (no problems with Munki 3.0.3):

Building customized Munki...
** BUILD FAILED **

The following build commands failed:
PhaseScriptExecution Localize build/Managed\ Software\ Center.build/Release/Managed\ Software\ Center.build/Script-C09CE1D918BEA41000B9724A.sh
(1 failure)

Cleaning up...

munkitools_app pkg lacking proper version info

the pkg-info tag of the generated munkitools_app pkg is not complete. The other pieces of the package are fine presumably as they are not being modified. see the resulting PackageInfo i just generated. Let me know if there is more data I can help give! thanks.

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<pkg-info overwrite-permissions="true" relocatable="false" identifier="com.googlecode.munki.app" postinstall-action="none" version="0" format-version="2" generator-version="InstallCmds-554 (15F34)" auth="root">
    <payload numberOfFiles="278" installKBytes="5151"/>
    <bundle path="./Applications/Managed Software Center.app/Contents/Resources/MunkiStatus.app" id="com.googlecode.munki.MunkiStatus" CFBundleShortVersionString="4.0.3438" CFBundleVersion="3438"/>
    <bundle path="./Applications/Managed Software Center.app/Contents/Resources/munki-notifier.app" id="com.googlecode.munki.munki-notifier" CFBundleShortVersionString="1.0.3445" CFBundleVersion="3445"/>
    <bundle path="./Applications/Managed Software Center.app/Contents/PlugIns/MSCDockTilePlugin.docktileplugin" id="com.googlecode.munki.MSCDockTilePlugin" CFBundleShortVersionString="1.0" CFBundleVersion="1"/>
    <bundle path="./Applications/Managed Software Center.app" id="com.googlecode.munki.ManagedSoftwareCenter" CFBundleShortVersionString="4.7.3442" CFBundleVersion="3442"/>
    <bundle-version>
        <bundle id="com.googlecode.munki.ManagedSoftwareCenter"/>
    </bundle-version>
    <upgrade-bundle>
        <bundle id="com.googlecode.munki.ManagedSoftwareCenter"/>
    </upgrade-bundle>
    <update-bundle/>
    <atomic-update-bundle/>
    <strict-identifier>
        <bundle id="com.googlecode.munki.MunkiStatus"/>
        <bundle id="com.googlecode.munki.munki-notifier"/>
        <bundle id="com.googlecode.munki.ManagedSoftwareCenter"/>
    </strict-identifier>
    <relocate/>
    <scripts>
        <preinstall file="./preinstall"/>
    </scripts>
</pkg-info>

Notarization issues

This script is very helpful in the process of distribute Munki. I have however never been able to successfully notarize the pkg even with --sign-binaries and --sign-package

Log shows ex:
{
"severity": "error",
"code": null,
"path": "Munki-employees-city-v1_2-4.1.4.3949.pkg/munkitools_python-3.7.4.pkg Contents/Payload/usr/local/munki/Python.framework/Versions/3.7/Python",
"message": "The binary is not signed.",
"docUrl": null,
"architecture": "x86_64"
},
{
"severity": "error",
"code": null,
"path": "Munki-employees-city-v1_2-4.1.4.3949.pkg/munkitools_python-3.7.4.pkg Contents/Payload/usr/local/munki/Python.framework/Versions/3.7/Python",
"message": "The signature does not include a secure timestamp.",
"docUrl": null,
"architecture": "x86_64"
},
{
"severity": "error",
"code": null,
"path": "Munki-employees-city-v1_2-4.1.4.3949.pkg/munkitools_python-3.7.4.pkg Contents/Payload/usr/local/munki/Python.framework/Versions/3.7/bin/python3.7m",
"message": "The binary is not signed.",
"docUrl": null,
"architecture": "x86_64"
},

This one does successfully notarize: https://github.com/lifeunexpected/Scripts/blob/master/MunkiPythonNotarizeAndSign.zsh

Any tips on how to get the Munki-rebrand to successfully notarize with all binaries signed correctly?

Run command: sudo python ./munki_rebrand.py --appname Programvaresenter --sign-package Developer ID Installer: Firstname LastName (Developerid) --sign-binaries Developer ID Application: Firstname Lastname (Developerid) -p munki-city-employees.sh --output-file ./versjon_1_2/Munki-employees-city-v1_2

payload-script:
#!/bin/sh
sudo defaults write /Library/Preferences/ManagedInstalls SoftwareRepoURL "http://munki.organization.no/munki_repo"
sudo defaults write /Library/Preferences/ManagedInstalls ClientIdentifier City-Employees

Sidebar icons missing

When running Munki Rebrand without passing a PKG will download the latest release .pkg file and rebrand successfully but after doing so the sidebar icons are gone.

Screen Shot 2021-01-26 at 2 17 27 PM

Posted details in Munki-Rebrand Mac Admins slack area.

Notarization fails

Seems #60 caused a regression in behavior. When i try to use munki-rebrand, signing as usual and then submitting for notarization it fails with a laundry list of issues. reverting to the previous commit fixes the behavior. This is with the latest 6.5.1 munki.

Managed Software Center 10_6.icns

There appears to be a 10_6 version of the icns file within "Managed Software Center". I know I don't really care about it nor should any good macadmin be using 10.6 still - but thought I would share and document. :)

screen shot 2018-01-18 at 11 38 06 am

'actool' requires Xcode while Converting .png file to .icns error

Hi,

when i ran:

sudo python munki_rebrand.py --appname $appname --icon-file $icon --output-file $appname --pkg $pkg_path

i had this issue

Converting .png file to .icns...
xcode-select: error: tool 'actool' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

and i did a quick google search and found the solution [here|https://stackoverflow.com/questions/17980759/xcode-select-active-developer-directory-error/17980786#17980786]

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

I hope it helps :).

Error when replacing icon

When attempting to replace the app icon for the Managed Software Center, munki_rebrand throws this error:

Replacing icons in /tmp/tmpTuOMUq/payload/Applications/Managed Software Center.app/Contents/Resources/AppIcon.icns with /Users/Shared/munki_installer/ISU_Seal.icns...
Traceback (most recent call last):
  File "./munki_rebrand.py", line 518, in <module>
    main()
  File "./munki_rebrand.py", line 471, in main
    if car:
UnboundLocalError: local variable 'car' referenced before assignment

Works fine as long as I'm not attempting to change the icon.

Pre-requisites version mismatch

Under Munki-rebrands Pre-requisites, the following is stated:

  • Apple Mac running OS X/macOS 10.12+
  • Xcode 10+ (opened once, components installed)

But as far as I can tell Xcode 10+ will only run on macOS 10.13.6 or later, according to this release note from Apple:
https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes

Shouldn't the Pre-requisites then list macOS 10.13.6 as the minimum?
Is it possible to run the latest Munki-Rebrand on macOS 10.12?
Is Xcode 10 required?

MunkiStatus not rebranding in US English (was macOS 10.14.6 & munkitools 3.6.2 not showing icon in GUI or MunkiStatus)

Using the most recently version of the script, ran the following from the command line:

sudo ~/Documents/GitHub/munki-rebrand/munki_rebrand.py --appname "MYORG Auto-Update" --pkg /Users/MYUSER/Downloads/munkitools-3.6.2.3776.pkg --icon-file "/Users/MYUSER/Downloads/OURORGICON.png" --sign-package "Developer ID Installer: OURORG (OURTEAMID)"

When installed on a machine running 10.14.6, I can see that Managed Software Center is correctly named with the specified --appname. However, despite using our custom icon the app icon is still the standard MSC icon. I can see our icon in ./Contents/Resources/AppIcon.icns and using Suspicious Package confirm it's what it should be. Likewise, I see this icon in MunkiStatus as well, but the icon is also still the standard MSC icon.

Screen Shot 2019-07-30 at 4 37 29 PM
Screen Shot 2019-07-30 at 4 37 54 PM
Screen Shot 2019-07-30 at 4 38 10 PM

More problematic is that at the loginwindow when MunkiStatus it runs, it shows the MSC icon and is titled "Managed Software Update" instead of our specified --appname.

LWScreenShot 2019-07-30 at 4 39 20 PM

The Mac I used to build this is still on 10.12.6 (am going to try another machine on a more recent OS) and Xcode 9.2, and am not sure if this is contributing to the issues here. Wanted to report before I did additional testing.

postinstall.sh is not integrated

Hi,

I've tried to integrate a postinstall.sh via the p parameter. But after creating the new package with munki_rebrand.py and executing the new package or after extracting the newly created package via pkgutil --expand there is no postinstall in the package inside.

sudo ./munki_rebrand.py -a 'Software Center' -k munkitools-4.0.0.3881.pkg -o youknow -p 'postinstall.sh'

content of postinstall.sh

#!/bin/bash
SETPREF="defaults write /Library/Preferences/ManagedInstalls"
$SETPREF SoftwareRepoURL https://munki.mydomain.com
$SETPREF ClientIdentifier selfservice

Kind Regards

Special Characters

Hi, munki-rebrand 3.3 does not work with special characters like 'ü'.

Example:

sudo ./munki_rebrand.py --appname "Nüme"
Downloading munkitools from https://github.com/munki/munki/releases/download/v5.1.0/munkitools-5.1.0.4107.pkg...
Replacing app name with Nüme...
Traceback (most recent call last):
File "./munki_rebrand.py", line 622, in
main()
File "./munki_rebrand.py", line 544, in main
replace_strings(lfile, code, args.appname)
File "./munki_rebrand.py", line 251, in replace_strings
right = right.replace(localized, appname)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)
Cleaning up...
Done.

Xcode 13 generates non-editable compiled NIBs

The default build settings in Xcode 13 generates NIBArchives rather than binary Plists. This is touched on in the Xcode 13 Release Notes.

Storyboards and XIBs for macOS compile using UINibEncoder to reduce file sizes and improve runtime performance. When deploying an App before macOS 10.13, Xcode generates a backward compatible nib for the older OSes. You can opt out of this behavior by applying the IBC_COMPILER_USE_NIBKEYEDARCHIVER_FOR_MACOS=YES and IBSC_COMPILER_USE_NIBKEYEDARCHIVER_FOR_MACOS=YES user defined overrides in the project’s build setting. (31889616)

This means versions of Munki compiled with Xcode 13 or later cannot be rebranded.

The script fails on line 168 because the file type of the NIB is no longer a binary Plist and so cannot be converted to XML by plutil.

cmd = [PLUTIL, "-convert", "xml1", plist]

Opting out of this behaviour by setting the two build settings referenced by Apple in the release notes above does fix the problem and generates NIB files that can be edited by munki-rebrand.

MSC App name on Munkitools 5.2

Hello,

the recently released munkitools 5.2 have probably made some changes that prevent renaming the Managed Software Center.app and the app name remains original. Inside the app strings are correctly replaced:
Screenshot 2020-11-25 at 11 27 24

Give me a shout If I can provide other info or debug...

code signing as root fails

While I happily codesign using my user, I’m not able to sucessfully codesign as root. As I need to run munki-rebrand with sudo, codesigning fails. How do I fix this?

Only partial rebranding with Sierra (beta 7)

Hello! I'm testing munki_rebrand.py on macOS Sierra beta 7.

Issue: after installing the rebranded munkitools.pkg and running MSC, the title and menu bars of MSC still read the standard “Managed Software Center” rather than “Our Rebranded Software Centre”.

The app icon and the name of the app do show our rebranding as expected, but the title and menu bars do not.

I installed the same pkg on a few machines running El Capitan 10.11.6, and the title and menu bars get the rebranding as expected, so I see this behaviour only with Sierra (beta 7).

Same behaviour with munkitools 2.7.x and 2.8.x.

switch off reboot process, because DEP

after an Installation over imagr (f.e.) the mac reboots. my custom munki with munki-reband is the reason. in your old Version, it was possible to deactivated. the argument -d is missing now.

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.