ICEcoder is a browser based code editor, which provides a modern approach to building websites

Overview

ICEcoder

Code editor awesomeness ...in your browser

ICEcoder is a browser based code editor, which provides a modern approach to building websites. By allowing you to code directly within the web browser, online or offline, it means you only need one program (your browser) to develop sites, plus can test on actual web servers. After development, you can also maintain the website easily, all of which make for speedy and smart development.

ICEcoder code editor

Requirements

You can run ICEcoder either online or locally, on Linux, Windows or Mac based platforms. The only requirement is to have PHP 7 available (7.4 recommended). You can have this either as a vanilla installation or via a program such as WAMP or XAMPP (for Windows) or MAMP (for Mac).

Installation

Step 1: Get ICEcoder

Either download the zip or clone from Github into your wwwroot (document root) dir for your website (this is typically /var/www/html/) via:

$ git clone git@github.com:icecoder/icecoder /var/www/html/icecoder

Step 2: Set permissions on dirs & files

You'll need to ensure both the ICEcoder dir and the wwwroot dir have permissions to read, write and execute. This can be done by changing permissions (using chmod), but it it safer and so better, to use chown:

chown -R www-data.www-data /var/www/html

This will recursively set the www-data user as both the owner and group users for files on the /var/www/html dir (which ICEcoder dir is of course inside of, at say /var/www/html/ICEcoder).

Step 3: Start coding

Now you can visit yoursite.com/ICEcoder to view ICEcoder, sign in and start coding!

Tip: If using ICEcoder locally, you can use:

php -S localhost:8080

...to get PHP to start a simple web server. You can then visit localhost:8080/ICEcoder

Want to setup in other environments?

It's now possible to setup ICEcoder in a Docker container, via Composer, as an executable and more. Checkout https://icecoder.net/downloads for info on these setups!

It's free & open source for everyone!

Suitable for commercial & non-commercial projects, just let us know if it's useful to you and any cool customizations you make to it. We take no responsibility for anything, all usage is all down to you.

It's fully open source and MIT licensed. So we're happy for you to take it, make it your own and customize to your hearts content and/or contribute to this main repo! :)

Plenty of comments included in the code to assist with understanding, customizing etc.

Comments, improvements & feedback welcomed!

Comments
  • Multi-language version is being produced.

    Multi-language version is being produced.

    Plans to make the English language pack and Chinese language pack. It takes about a week. @mattpass Hoping to merge into the master project, so please do not release a new version.

    Feature 
    opened by lzh370 28
  • Edits appear in a different place when saved

    Edits appear in a different place when saved

    Very weird issue with 5.5 - when I delete a line, it shows as edited in Icecoder, but when saved and I view source, the line (or 2nd line) above is deleted. Same issue when adding code - it is actually saved in a slightly different location, maybe 1 or 2 lines above.

    Basically editing any text will then insert/delete the edit in a line above where meant effectively breaking my code. Any ideas?

    Bug 
    opened by dancramp 26
  • Version control

    Version control

    A couple of people have asked about version control of files and while we have the ZipIt! plugin, it backs up an entire dir on an interval and GitHub integration, it involves a few clicks of switching into that mode, committing, pushing etc. There's no simple, local version control.

    Adding a couple of lines to /processes/on-file-save.php will save the file with a timestamp in the /backups dir:

    $pathParts = pathinfo($fileName);
    copy($docRoot.$fileLoc."/".$fileName, "../backups/".$pathParts['filename']."-".time().".".$pathParts['extension']);
    

    However, this simple 2 line solution doesn't include a dir structure or any simple way to get back to an older version of a file, plus you need to know it's saved there.

    Would suggest expanding on this 2 line solution to include dir structure also within the backups dir. Then right clicking on a file, you could access a new option - 'Version Control' which would show a list of all saved backups (ordering by filename would put this into timestamp order and allow us to display as version 1, version 2 and so on).

    The user would need choices on what to do next from the Version Control screen:

    Version 1      Open in new tab      Open in diff mode      Restore as new version
    Version 2      Open in new tab      Open in diff mode      Restore as new version
    Version 3      Open in new tab      Open in diff mode      Restore as new version
    Version 4      Open in new tab      Open in diff mode      Restore as new version
    

    Open in new tab will open it in a new tab. Open in diff mode will open current version in left pane and that older version in the right pane. Restore as new version would move the current version to the /backups dir as Version 5 and copy the older version chosen over to the live dir as well as copying it as version 6 in the /backups dir so live and the latest backup are in sync.

    Feature 
    opened by mattpass 26
  • Internal Server Error

    Internal Server Error

    After installation, pointing at http://mydomain.com/_coder/ redirects to lib/settings.php throwing an Internal Server Error. The full error is: "The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, webmaster@mydomain.com and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."

    Could not find any server error logs. thanks,

    -Alex

    ps. tried it on a different server and installs flawlessly

    Bug 
    opened by AK-101111 26
  • Multiple projects

    Multiple projects "root" settings with one ICEcoder installation

    Maybe related to issues #216 y #162

    It would be nice having a sigle ICEcoder installation, but with different settings file, so each one can have a different "root".

    Maybe that could be achieved asking user and password, and using for each user a different settings file.

    What I'm thinking is an environment where we have like twenty students, each one with his/her own project home, but all of them access the same ICEcoder folder. Right now this can be achieved making a different copy of ICEcoder to each user folder.

    Also I'm think of a form for "initialisation of project", so first time user logs in, a folder is created using username, it is populated with the base project from the contents of a zip.

    In my opinion, not having to use a real BD is nicer: user information for 20 students is not that much data to have in an php array of meta-settings.

    It would be very useful for classes, coding dojos, etc. I think I'll ducktape something like this with ugly PHP, but here I put the idea so it can influence the main development of ICEcoder.

    Tweak 
    opened by vicenteherrera 25
  • Cannot access ICEcoder via domain name / IP address (localhost address only)

    Cannot access ICEcoder via domain name / IP address (localhost address only)

    After upgrading to 5.4 (although this happened during 5.2 -> 5.3 as well), accessing ICEcoder from outside of my local network results in the following:

    Not Found
    
    The requested URL /ICEcoder/settings.php was not found on this server.
    

    Strangely enough, the same error occurs if i visit <external ip address>/ICEcoder or <mydomain>/ICEcoder from the hosting computer. But visiting localhost/ICEcoder on that computer works perfectly fine, bringing up the application. My server is accessible from the internet, and static webpages are served just fine.

    This seemed like an Apache config issue to me, but I poked around in settings to find where the failure was occurring. See the following code from settings.php:

    // On mismatch of settings file to system, rename to .old and reload
    If ($ICEcoderUserSettings["versionNo"] != $ICEcoderSettings["versionNo"]) {
            //die("__FILE__ : ".__FILE__."<br>dirname: ".dirname(__FILE__)."<br>settingsFile: ".$settingsFile);
            rename(dirname(__FILE__)."/".$settingsFile,dirname(__FILE__)."/".str_replace(".php",".old",$settingsFile));
            //die("this is reached");
            header("Location: settings.php");
            //die("this is not reached");
            echo "<script>window.location='settings.php';</script>";
            die('Found old settings file, reloading...');
    }
    

    The top (commented) die prints:

    __FILE__ : /home/<username>/webroot/ICEcoder/lib/settings.php
    dirname: /home/<username>/webroot/ICEcoder/lib
    settingsFile: config-mydomain_com.php
    

    The second die is reached, but the third is not. So the header() function is somehow failing.

    After a bit more digging, the contents of $ICEcoderUserSettings, prior to the above code is:

    Array ( [previousFiles] => [configCreateDate] => 1459222891 )

    Thus it's missing any 'versionNo' field. So I commented out the entire settings mismatch block above, allowing the settings.php file to continue, and the next failure occurred at:

    // Determin our allowed IP addresses
    $allowedIP = false;
    for($i=0;$i<count($_SESSION['allowedIPs']);$i++) {
            if ($_SESSION['allowedIPs'][$i]==$_SERVER["REMOTE_ADDR"]||$_SESSION['allowedIPs'][$i]=="*") {
                    $allowedIP = true;
            }
    }
    

    ..With the error die('Sorry, access not permitted');. I believe this is because the $ICEcoder array does not contain any 'allowedIPs' --- even though the config___users-template.php file specifies an array with "*" as that field's value.

    Note: while poking around (having removed all the debugging die()s, it seems that while config-localhost.php is fully-formed file, any of the other files, such as config-127.0.0.1.php are all empty and read-only. Could that be relevant?

    Bug 
    opened by bfishman 24
  • Became unresponsive to Save and Open file.

    Became unresponsive to Save and Open file.

    Love the coder. Everything worked fine for a week, now after editing any file it doesn't save. Clicking save or CTRL+S just shows on bottom of navigator "saving" and hangs there. Trying to open any file after this and it just says "opening" but doesn't open. Tried clearing cookies, tried different browsers, different computers. Issue still persists. Deleted ICEcoder and re-installed but still issue persists. If it helps the error-log.txt is full of these errors

    [07-Feb-2014 18:01:55 America/Chicago] PHP Warning: strpos() [function.strpos]: Empty needle in /home/webny/public_html/ICEcoder-master/lib/get-branch.php on line 24

    Bug 
    opened by MrData1 24
  • FTP showing sorry, this file has changed outside ICEcoder

    FTP showing sorry, this file has changed outside ICEcoder

    When connecting to a localhost FTP server on a Raspberry Pi I get the error message saying the file changed outside of ICEcoder.

    New files are created and edited just fine.

    When I run a flask local web server (port 5000) the files then become non-editable for some reason.

    Bug 
    opened by hopgoodpaul 20
  • Can't open this CSS file....

    Can't open this CSS file....

    /ICEcoder/lib/file-control.php?act…8|css|style.css&csrf=860c4517c59848484031867971c2b568&lineNumber=undefined 500 (Internal Server Error)

    Getting this error.. I can open others fine it has about 8000 rows

    Bug 
    opened by edesent 18
  • ICEcoder v7.0 - Issue with newlines after creating/saving/changing a file

    ICEcoder v7.0 - Issue with newlines after creating/saving/changing a file

    ICEcoder 7.0 (latest pull from GIT). Chrome. Latest version; did not change in the last week or so. Verified behaviour in Edge and Mozilla.

    Reproduction:

    New File Add

    <?php
        echo "something\n";
    ?>
    

    Save Close Re-open, file is now:

    <?php\necho "something\n";\n?>\n
    

    If the same file is manually created on the command-line and edited in ICEcoder there are no issues opening, changing saving without a hitch.

    Something else I noted: each time you save the file, another \n is added, even if it's blank (zero content).

    I can't figure this one out --- curently bypassing by creating the initial file and a few lines with CLI and continue work with ICEcoder from there.

    Developer output: zero errors/blank. HTTP logs: zero errors.

    Any thoughts from the top of your mind that may cause this strange behaviour? No clue where to start to hunt this one down --- happy to pass any info you need to debug/understand.

    Anyone that can reproduce this as well?

    Bug 
    opened by moudsen 15
  • Unable to open css files > freeze

    Unable to open css files > freeze

    I can open php files but not css files. I have the small white popup on left bottom with "Opening xxxxxx.css" and then icecoder freezes.

    Then I have to reload the page and to login again.

    Any ideas? Thank you.

    Bug 
    opened by cedricgeffroy 14
  • Save issue

    Save issue

    Hello, I am using icecoder 8.1 on a debian 10, php 7.3. saving a first time is ok, after a few save action, the document is not saved anymore, but the GUI indicates it is saved. What should I check ? Thanks

    opened by jc999 0
  • "You don't appear to have a working PHP session."

    Describe the bug

    I get this:

    image

    To Reproduce

    1. Clone into /var/www/html/icecoder
    2. Run sudo chown -R www-data:www-data /var/www/html/icecoder
    3. Run sudo chmod -R 755 /var/www/html/icecoder
    4. PHP is working:

    (base) balter@spectre:/var/www/html$ php --version PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.2, Copyright (c) Zend Technologies with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

    5. Visit `localhost/icecoder`
    6. See PHP error
    7. 
    **Expected behavior**
    It to "work" :)
    
    **Browser & Server (please complete the following information):**
     - Browser: Firefox
     - Server: Apache
    
    Bug 
    opened by abalter 2
  • Often able to do only 1 action (open 1 folder or open 1 file) and then stuck on infinite loading.

    Often able to do only 1 action (open 1 folder or open 1 file) and then stuck on infinite loading.

    Hi,

    I love IceCoder and have been using it for years now. However, since I have ever used it I have always had this problem, and I have always accepted it and worked around it, but now I decided to report it.

    Whenever I open up Icecoder, 9 out of 10 times the first time I can't open the file tree (click on a folder). It will just keep loading and do nothing. Refreshing the page sometimes helps, and other times I even have to reload Icecoder a 2nd or 3rd time before it works.

    When this is going on, I can also not save files that are already open (because they open automatically when I had them open on last use). Usually on the 3rd or 4th load I can use Icecoder normally and have no Issues for the rest of the day, unless I have to refresh/reload Icecoder (in which case it can start all over again). On the other hand, sometimes (on a good day), it works immediately on the first load.

    I know this is a terrible bug report and it's very vague, but I haven't been able to gather any more data on why this happens one time and doesn't the other.

    I'm sort of hoping you magically have some idea as to why this happens and that I can fix it. Or maybe other people have the same issue?

    Thanks anyways, Icecoder is an amazing product!

    Kind regards,

    Laurens

    opened by Lxxrxns 0
  • Replace globals with getters/setters

    Replace globals with getters/setters

    There's a lot of use of global vars in the PHP, which are then used within functions via global, but this doesn't work in environments such as serverless Lambda functions.

    In order to get this working and also improve code quality, review code and change globals to use get/set functions within the existing classes (File, System etc).

    Tweak Version 8.2 
    opened by mattpass 0
  • Encode all querystring values

    Encode all querystring values

    Some URLs contain querystring params which include unencoded characters such as the pipe in ?location=|file|path|here.

    Review all URLs that contain querystrings and make sure they're encoded URI components. In doing this, characters such as the pipe, which were used in place of slashes, can be changed to slashes.

    Tweak Version 8.2 
    opened by mattpass 0
Releases(8.1)
  • 8.1(Jul 27, 2021)

    Lots of new features, tweaks and bug fixes, main highlights being:

    • Regex search added to find & replace
    • Regex validation on find input box
    • Double clicking file name collapses/expands file manager
    • Clickable warning label if not a valid root dir set
    • FTP removed (there's better ways to transfer files)
    • Login and demo mode isolated now, first user is admin
    • Better password rules enforcement
    • Active line number highlighted
    • Can now set scroll speed when going to line
    • Can now set whether typing in find input auto-scrolls to next result
    • Bug reporting now setup for ICEcoders own error.log by default
    • lots more tweaks and bug fixes, full list on website
    Source code(tar.gz)
    Source code(zip)
  • 8.0(Nov 22, 2020)

    Far too much to list, so short list of major items:

    • Updated design and more modern icons
    • Caps lock indicator
    • composer.json added now available via that
    • 38 new themes added
    • Auto indent lines on paste
    • Auto indent lines on move
    • Simplified and improved debugging system
    • Don't switch tab when closing another
    • Improved tutorial

    ...and much more. See website for full info.

    Source code(tar.gz)
    Source code(zip)
  • 8.0beta(Jul 22, 2020)

    Huge release, far too much to list here, so just the highlights:

    • Git diff highlighting in gutter
    • Use ICEcoder anywhere - wwwroot, iFrame or any sub/dir/path
    • Prettier code on save
    • Supercharged find and replace
    • Design improvements
    • Tabs more linked to files so they update intelligently
    • Welcome tour on arrival
    • Helpful requirements check on load in browser
    • Go to Line interaction is slick
    • Closes empty tabs more intelligently
    • Tool link alerting according to state
    • Old test system, doc explorer (minimap and function/class list removed), GitHub integration removed (git coming soon), FTP removed (it's old tech now) and UI removals
    • New nav menu stystem
    • Improved server info & username (if multi-user)
    • Overhauled tab & file highlighting

    ...and lots and lots of other UI, UX tweaks, minor features and bug fixes.

    Source code(tar.gz)
    Source code(zip)
  • 7.0(Sep 27, 2019)

    Huge update after almost 2 years since last release. Quick summary:

    CTRL+click to jump to a class or functions declaration CTRL+Backspace to jump back to previous selected tab Intelligently indexes classes & functions routinely every 3 secs Go to line number as you type in goto line input box, Enter to focus Code Zooming - hold F1 key to "zoom out" all non class or function lines, release to return to normal Improved terminal design & layout All process can now have your custom JS code ran as well as PHP, all have examples Output pane to display whatever you wish Database management now part of ICEcoder Single place to jump to tools (under File Manager options for Terminal, Output and Database), slides in/out of view Shows tooltip on hover mouse cursor over arguments on class/function calls Tests you have all requirements when using booting up and using ICEcoder Nicely designed error screen to detail any requirement problems or errors during usage (eg permissions not set on config file) Setup screen now has strong password rules (10 chars, uppercase, lowercase, number and special) Improved password security by using Bcrypt encryption Config data now stored in data dir (backups, error.log, system and user settings) Faster bootup time by 200ms New theme - 2019 Torres Digital Bug fixes, tweaks and minor improvements

    Source code(tar.gz)
    Source code(zip)
A code generator for EasySwoole

wise-generator-easyswoole 基于EasySwoole的code-generation改写,主要应用与内部系统。基本上所有类都有所调整,同时也完善了一些功能。 版本说明 版本说明 code-generation 使用命令行,一键生成业务通用代码,支持代码如下: 一键生成项目初始

Ryan 3 Jun 8, 2021
A PHP-based sandboxing library with a full suite of configuration and validation options.

A full-scale PHP 5.4+ sandbox class that utilizes PHP-Parser to prevent sandboxed code from running unsafe code. It also utilizes FunctionParser to di

Corveda 192 Dec 10, 2022
KodExplorer is a file manager for web. It is also a web code editor, which allows you to develop websites directly within the web browser.

KodExplorer is a file manager for web. It is also a web code editor, which allows you to develop websites directly within the web browser.

warlee 5.5k Feb 10, 2022
A web based file manager,web IDE / browser based code editor

KodExplorer Update to kodbox: https://github.com/kalcaddle/kodbox Download | Demo It is recommended to use a new design upgrade product:kodbox 该项目处于维护

warlee 5.8k Jan 3, 2023
File & Folders & Media Browser With Code Editor

Filament Browser File & Folders & Media Browser With Code Editor Features File Browser Code Editor with highlights Media Viewer .Env Editor Screenshot

Fady Mondy 23 Jan 5, 2023
A simple and modern approach to stream filtering in PHP

clue/stream-filter A simple and modern approach to stream filtering in PHP Table of contents Why? Support us Usage append() prepend() fun() remove() I

Christian Lück 1.5k Dec 29, 2022
Bolt CMS is an open source, adaptable platform for building and running modern websites.

Bolt CMS is an open source, adaptable platform for building and running modern websites. Built on PHP, Symfony and more. Read the site for more info.

Bolt 437 Jan 4, 2023
🚀Bolt CMS is an open source, adaptable platform for building and running modern websites

??Bolt CMS is an open source, adaptable platform for building and running modern websites

Bolt 32 Dec 3, 2022
Scaffold plugin for creating and managing Blocks, Block Patterns, Block Styles and Block Editor Sidebars in the WordPress Block Editor (aka Gutenberg).

WordPress Block Editor Scaffold This project is a template repo for developing WordPress Blocks, Block Patterns, Block Styles and Block Editor Sidebar

Rareview 6 Aug 2, 2022
Provides powerful menu editor to replace category based menus in Magento 2

Magento 2 Menu Provides powerful menu editor to replace category based menus in Magento 2. Setup Create new menu in the admin area Content > Elements

SNOW.DOG 230 Nov 17, 2022
STEAM education curriculum centered on building a new civilization entirely from trash, which provides all human needs for free directly to the local community

TRASH ACADEMY STEAM(Science Technology Engineering Art Math) education curriculum centered around building self-replicating technology from trash whic

Trash Robot 3 Nov 9, 2021
Drupal is an open source content management platform supporting a variety of websites ranging from personal weblogs to large community-driven websites.

Drupal is an open source content management platform supporting a variety of websites ranging from personal weblogs to large community-driven websites.

Drupal 3.8k Jan 4, 2023
Laravel Segment is an opinionated, approach to integrating Segment into your Laravel application.

Laravel Segment Laravel Segment is an opinionated, approach to integrating Segment into your Laravel application. Installation You can install the pac

Octohook 13 May 16, 2022
An opinioned approach to extend the laravel seed classes.

Laravel Seed Extender A highly opinioned way to work with the laravel seeder. Installation Require the package using composer: composer require touhid

Touhidur Rahman 9 Jan 20, 2022
Game of life developed in PHP with TDD approach

What is Game of Life: https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life Project structure: Engine is in App\Services\LifeEngine.php Tests are in T

Marcella Malune 4 Nov 8, 2021
Last Wishes is a PHP application written following Domain-Driven Design approach

Last Wishes is a PHP application written following Domain-Driven Design approach. It's one of the sample applications where you can check the concepts explained in the Domain-Driven Design in PHP book.

DDD Shelf 644 Dec 28, 2022
Statamic 3 is the flat-first, Laravel + Git powered CMS designed for building beautiful, easy to manage websites.

About Statamic 3 Statamic 3 is the flat-first, Laravel + Git powered CMS designed for building beautiful, easy to manage websites. Note: This reposito

Statamic 2.4k Jan 5, 2023
Statamic 3 - the flat-first, Laravel + Git powered CMS designed for building beautiful, easy to manage websites

Statamic 3 - the flat-first, Laravel + Git powered CMS designed for building beautiful, easy to manage websites

Statamic 600 Jan 4, 2023
Provides a twig editor field with Twig & Craft API autocomplete

Twigfield for Craft CMS 3.x & 4.x Provides a twig editor field with Twig & Craft API autocomplete Requirements Twigfield requires Craft CMS 3.0 or 4.0

nystudio107 13 Nov 1, 2022